remove env variable for remote

This commit is contained in:
grimhilt 2023-06-25 21:27:31 +02:00
parent b74c5c176b
commit da3d605baa
7 changed files with 42 additions and 30 deletions

View File

@ -12,6 +12,7 @@ pub struct AddArgs<'a> {
// todo match deleted files // todo match deleted files
// todo match weird reg expression // todo match weird reg expression
// todo normalize path
pub fn add(args: AddArgs) { pub fn add(args: AddArgs) {
let mut index_file = store::index::open(); let mut index_file = store::index::open();
let mut added_files: Vec<String> = vec![]; let mut added_files: Vec<String> = vec![];

View File

@ -10,6 +10,7 @@ use crate::services::api::ApiError;
use crate::services::req_props::{ReqProps, ObjProps}; use crate::services::req_props::{ReqProps, ObjProps};
use crate::services::download_files::DownloadFiles; use crate::services::download_files::DownloadFiles;
use crate::store::object::{tree, blob}; use crate::store::object::{tree, blob};
use crate::commands::config;
use crate::commands::init; use crate::commands::init;
pub fn clone(remote: Values<'_>) { pub fn clone(remote: Values<'_>) {
@ -77,13 +78,21 @@ pub fn clone(remote: Values<'_>) {
Err(ApiError::Unexpected(_)) => todo!() Err(ApiError::Unexpected(_)) => todo!()
}; };
// create folder // create object
if first_iter { if first_iter {
// root folder, init and config
if DirBuilder::new().recursive(true).create(ref_path.clone()).is_err() { if DirBuilder::new().recursive(true).create(ref_path.clone()).is_err() {
eprintln!("fatal: unable to create the destination directory"); eprintln!("fatal: unable to create the destination directory");
std::process::exit(1); std::process::exit(1);
} else { } else {
init::init(); init::init();
let mut remote_config = api_props.username.clone();
remote_config.push_str("@");
remote_config.push_str(api_props.host.strip_prefix("https://").unwrap());
remote_config.push_str(&api_props.root);
if config::set("remote", &remote_config).is_err() {
eprintln!("err: not able to save remote");
}
} }
} else { } else {
// create folder // create folder
@ -147,7 +156,7 @@ fn download_files(ref_p: PathBuf, files: Vec<ObjProps>, api_props: &ApiProps) {
} }
} }
fn get_url_props(url: &str) -> (String, Option<&str>, &str) { pub fn get_url_props(url: &str) -> (String, Option<&str>, &str) {
let mut username = None; let mut username = None;
let mut domain = ""; let mut domain = "";
let mut path = ""; let mut path = "";

View File

@ -5,7 +5,8 @@ use std::collections::{HashSet, HashMap};
use crypto::digest::Digest; use crypto::digest::Digest;
use crypto::sha1::Sha1; use crypto::sha1::Sha1;
use colored::Colorize; use colored::Colorize;
use crate::utils; use crate::utils::path;
use crate::utils::read::{read_folder, read_lines};
use crate::store::object::tree; use crate::store::object::tree;
use crate::store::index; use crate::store::index;
@ -29,7 +30,6 @@ pub enum State {
// todo: not catch added empty folder // todo: not catch added empty folder
pub fn status() { pub fn status() {
let (mut new_objs, mut del_objs) = get_diff(); let (mut new_objs, mut del_objs) = get_diff();
dbg!(get_diff());
let mut renamed_objs = get_renamed(&mut new_objs, &mut del_objs); let mut renamed_objs = get_renamed(&mut new_objs, &mut del_objs);
// get copy, modified // get copy, modified
let mut objs = new_objs; let mut objs = new_objs;
@ -37,6 +37,7 @@ pub fn status() {
objs.append(&mut renamed_objs); objs.append(&mut renamed_objs);
let staged_objs = get_staged(&mut objs); let staged_objs = get_staged(&mut objs);
print_status(staged_objs, objs); print_status(staged_objs, objs);
dbg!(get_all_staged());
} }
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
@ -76,8 +77,14 @@ fn get_staged(objs: &mut Vec<LocalObj>) -> Vec<LocalObj> {
} }
} }
dbg!(objs.clone());
let mut tree_to_analyse: Vec<LocalObj> = vec![];
objs.retain(|obj| { objs.retain(|obj| {
if indexes.contains(obj.clone().path.to_str().unwrap()) { if indexes.contains(obj.clone().path.to_str().unwrap()) {
if obj.clone().otype == String::from("tree") {
tree_to_analyse.push(obj.clone());
}
staged_objs.push(obj.clone()); staged_objs.push(obj.clone());
false false
} else { } else {
@ -92,24 +99,21 @@ fn get_diff() -> (Vec<LocalObj>, Vec<LocalObj>) {
let mut hashes = HashMap::new(); let mut hashes = HashMap::new();
let mut objs: Vec<String> = vec![]; let mut objs: Vec<String> = vec![];
let root = utils::path::repo_root(); let root = path::repo_root();
let nextsync_path = path::nextsync();
dbg!(utils::path::current()); let current_p = path::current().unwrap();
let nextsync_path = utils::path::nextsync();
let current_p = utils::path::current().unwrap();
let dist_path = current_p.strip_prefix(root.clone()).unwrap().to_path_buf(); let dist_path = current_p.strip_prefix(root.clone()).unwrap().to_path_buf();
if let Ok(lines) = read_head(nextsync_path.clone()) { if let Ok(lines) = read_head(nextsync_path.clone()) {
add_to_hashmap(lines, &mut hashes, dist_path.clone()); add_to_hashmap(lines, &mut hashes, dist_path.clone());
} }
if let Ok(entries) = utils::read::read_folder(root.clone()) { if let Ok(entries) = read_folder(root.clone()) {
add_to_vec(entries, &mut objs, root.clone()); add_to_vec(entries, &mut objs, root.clone());
} }
let mut obj_to_analyse = remove_duplicate(&mut hashes, &mut objs, RemoveSide::Both); let mut obj_to_analyse = remove_duplicate(&mut hashes, &mut objs, RemoveSide::Both);
dbg!(obj_to_analyse.clone());
while obj_to_analyse.len() > 0 { while obj_to_analyse.len() > 0 {
let cur_obj = obj_to_analyse.pop().unwrap(); let cur_obj = obj_to_analyse.pop().unwrap();
@ -122,7 +126,7 @@ fn get_diff() -> (Vec<LocalObj>, Vec<LocalObj>) {
add_to_hashmap(lines, &mut hashes, cur_path.clone()); add_to_hashmap(lines, &mut hashes, cur_path.clone());
} }
if let Ok(entries) = utils::read::read_folder(obj_path.clone()) { if let Ok(entries) = read_folder(obj_path.clone()) {
add_to_vec(entries, &mut objs, root.clone()); add_to_vec(entries, &mut objs, root.clone());
} }
@ -193,8 +197,6 @@ fn add_to_vec(entries: Vec<PathBuf>, objects: &mut Vec<String>, root: PathBuf) {
} }
fn print_status(staged_objs: Vec<LocalObj>, objs: Vec<LocalObj>) { fn print_status(staged_objs: Vec<LocalObj>, objs: Vec<LocalObj>) {
dbg!(staged_objs.clone());
dbg!(objs.clone());
if staged_objs.len() == 0 && objs.len() == 0 { if staged_objs.len() == 0 && objs.len() == 0 {
println!("Nothing to push, working tree clean"); println!("Nothing to push, working tree clean");
return; return;
@ -279,7 +281,7 @@ fn is_nextsync_config(path: PathBuf) -> bool {
fn read_head(mut path: PathBuf) -> io::Result<io::Lines<io::BufReader<File>>> { fn read_head(mut path: PathBuf) -> io::Result<io::Lines<io::BufReader<File>>> {
path.push("HEAD"); path.push("HEAD");
utils::read::read_lines(path) read_lines(path)
} }
#[cfg(test)] #[cfg(test)]
@ -317,8 +319,7 @@ mod tests {
objects.push(String::from("file2")); objects.push(String::from("file2"));
objects.push(String::from("file3")); objects.push(String::from("file3"));
remove_duplicate(&mut hashes, &mut objects, RemoveSide::Both); remove_duplicate(&mut hashes, &mut objects, RemoveSide::Both);
dbg!(hashes.clone());
dbg!(objects.clone());
assert_eq!(hashes.contains_key(&hash4), true); assert_eq!(hashes.contains_key(&hash4), true);
assert_eq!(hashes.len(), 1); assert_eq!(hashes.len(), 1);
assert_eq!(objects, vec!["file3"]); assert_eq!(objects, vec!["file3"]);

View File

@ -4,6 +4,8 @@ use reqwest::Client;
use reqwest::RequestBuilder; use reqwest::RequestBuilder;
use reqwest::{Response, Error, Method}; use reqwest::{Response, Error, Method};
use crate::utils::api::ApiProps; use crate::utils::api::ApiProps;
use crate::commands::config;
use crate::commands::clone::get_url_props;
#[derive(Debug)] #[derive(Debug)]
pub enum ApiError { pub enum ApiError {
@ -27,19 +29,21 @@ impl ApiBuilder {
} }
pub fn build_request(&mut self, method: Method, path: &str) -> &mut ApiBuilder { pub fn build_request(&mut self, method: Method, path: &str) -> &mut ApiBuilder {
dotenv().ok(); let remote = match config::get("remote") {
// todo remove env Some(r) => r,
let host = env::var("HOST").unwrap(); None => {
let username = env::var("USERNAME").unwrap(); eprintln!("fatal: unable to find a remote");
let root = env::var("ROOT").unwrap(); std::process::exit(1);
}
};
let (host, username, root) = get_url_props(&remote);
let mut url = String::from(host); let mut url = String::from(host);
url.push_str("/remote.php/dav/files/"); url.push_str("/remote.php/dav/files/");
url.push_str(&username); url.push_str(username.unwrap());
url.push_str("/"); url.push_str("/");
url.push_str(&root); url.push_str(&root);
url.push_str("/"); url.push_str("/");
url.push_str(path); url.push_str(path);
dbg!(url.clone());
self.request = Some(self.client.request(method, url)); self.request = Some(self.client.request(method, url));
self self
} }

View File

@ -1,5 +1,4 @@
use std::path::PathBuf; use std::fs::OpenOptions;
use std::fs::{File, OpenOptions};
use std::io::{self, Write}; use std::io::{self, Write};
use crate::utils::{read, path}; use crate::utils::{read, path};

View File

@ -1,7 +1,6 @@
use std::io; use std::io;
use std::fs::File; use std::fs::File;
use std::fs::OpenOptions; use std::fs::OpenOptions;
use std::path::PathBuf;
use crate::utils::{read, path}; use crate::utils::{read, path};
pub fn open() -> File { pub fn open() -> File {

View File

@ -68,9 +68,8 @@ pub fn nextsyncignore() -> Option<PathBuf> {
let mut path = repo_root(); let mut path = repo_root();
path.push(".nextsyncignore"); path.push(".nextsyncignore");
if path.exists() { if path.exists() {
return Some(path); Some(path)
} else { } else {
return None; None
} }
None
} }