fix add -A

This commit is contained in:
grimhilt 2023-10-28 22:12:27 +02:00
parent 81c24b5e3c
commit 53b103af9e
6 changed files with 54 additions and 45 deletions

View File

@ -5,7 +5,7 @@ use clap::Values;
use glob::glob; use glob::glob;
use crate::store::index; use crate::store::index;
use crate::store::{self, object::Object}; use crate::store::{self, object::Object};
use crate::utils; use crate::utils::{self, path};
use crate::utils::nextsyncignore::{self, ignore_file}; use crate::utils::nextsyncignore::{self, ignore_file};
use crate::utils::path::{normalize_relative, repo_root, path_buf_to_string}; use crate::utils::path::{normalize_relative, repo_root, path_buf_to_string};
@ -19,17 +19,21 @@ pub struct AddArgs<'a> {
// todo match deleted files // todo match deleted files
pub fn add(args: AddArgs) { pub fn add(args: AddArgs) {
// write all modification in the index
if args.all { let mut pattern: String;
write_all(); let file_vec: Vec<&str> = match args.all {
return; true => {
} pattern = path_buf_to_string(repo_root());
pattern.push_str("/*");
vec![&pattern]
},
false => args.files.unwrap().collect(),
};
let mut added_files: Vec<String> = vec![]; let mut added_files: Vec<String> = vec![];
let mut ignored_f = vec![]; let mut ignored_f = vec![];
let rules = nextsyncignore::get_rules(); let rules = nextsyncignore::get_rules();
let file_vec: Vec<&str> = args.files.unwrap().collect();
for file in file_vec { for file in file_vec {
let f = match normalize_relative(file) { let f = match normalize_relative(file) {
Ok(f) => f, Ok(f) => f,
@ -58,6 +62,9 @@ pub fn add(args: AddArgs) {
added_files.push(String::from(f)); added_files.push(String::from(f));
} else { } else {
for entry in try_globbing(path) { for entry in try_globbing(path) {
if path::is_nextsync_config(entry.clone()) {
continue;
}
if !args.force && ignore_file(&path_buf_to_string(entry.clone()), rules.clone(), &mut ignored_f) { if !args.force && ignore_file(&path_buf_to_string(entry.clone()), rules.clone(), &mut ignored_f) {
continue; continue;
} }
@ -125,22 +132,16 @@ fn add_folder_content(path: PathBuf, added_files: &mut Vec<String>) {
if let Ok(entries) = utils::read::read_folder(folder.clone()) { if let Ok(entries) = utils::read::read_folder(folder.clone()) {
for entry in entries { for entry in entries {
let path_entry = PathBuf::from(entry); let path_entry = PathBuf::from(entry);
if path_entry.is_dir() { if !path::is_nextsync_config(path_entry.clone())
folders.push(path_entry.clone()); {
if path_entry.is_dir() {
folders.push(path_entry.clone());
}
added_files.push(path_buf_to_string(path_entry.strip_prefix(repo_root()).unwrap().to_path_buf()));
} }
added_files.push(String::from(path_entry.to_str().unwrap()));
} }
} }
} }
} }
fn write_all() {
let objs = get_all_objs();
let mut index_file = OpenOptions::new()
.write(true)
.create(true)
.open(index::path()).expect("Cannot open index file");
for obj in objs {
let _ = writeln!(index_file, "{}", path_buf_to_string(obj.path.clone()));
}
}

View File

@ -95,7 +95,7 @@ fn should_retain(hasher: &mut Sha1, key: String, obj: LocalObj, move_copy_hashes
// todo deal with directories // todo deal with directories
if obj.path.is_dir() if obj.path.is_dir()
{ {
return false; return true;
} }
let mut blob = Blob::new(obj.path.clone()); let mut blob = Blob::new(obj.path.clone());
let mut flag = true; let mut flag = true;
@ -329,7 +329,7 @@ fn add_to_hashmap(lines: Lines<BufReader<File>>, hashes: &mut HashMap<String, Lo
fn add_to_vec(entries: Vec<PathBuf>, objects: &mut Vec<String>, root: PathBuf) { fn add_to_vec(entries: Vec<PathBuf>, objects: &mut Vec<String>, root: PathBuf) {
for entry in entries { for entry in entries {
if !is_nextsync_config(entry.clone()) { if !path::is_nextsync_config(entry.clone()) {
let object_path = entry.strip_prefix(root.clone()).unwrap(); let object_path = entry.strip_prefix(root.clone()).unwrap();
objects.push(String::from(object_path.to_str().unwrap())); objects.push(String::from(object_path.to_str().unwrap()));
} }
@ -441,10 +441,6 @@ fn remove_duplicate(hashes: &mut HashMap<String, LocalObj>, objects: &mut Vec<St
duplicate duplicate
} }
fn is_nextsync_config(path: PathBuf) -> bool {
path.ends_with(".nextsync")
}
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;

View File

@ -76,9 +76,4 @@ impl RequestManager {
self.token.clone().unwrap() self.token.clone().unwrap()
} }
pub fn create_request()
{
}
} }

View File

@ -104,6 +104,10 @@ pub fn repo_root() -> PathBuf {
} }
} }
pub fn is_nextsync_config(path: PathBuf) -> bool {
path.ends_with(".nextsync") || path.starts_with(".nextsync")
}
pub fn nextsync() -> PathBuf { pub fn nextsync() -> PathBuf {
let mut path = repo_root(); let mut path = repo_root();
path.push(".nextsync"); path.push(".nextsync");

View File

@ -1,5 +1,7 @@
#!/bin/sh #!/bin/sh
source ./utils.sh
nb_tests=0 nb_tests=0
TEST_SUITE_NAME="add/file/" TEST_SUITE_NAME="add/file/"
@ -13,7 +15,7 @@ get_exe() {
} }
setup_env() { setup_env() {
[ ! -v exe ] && get_exe [ ! -v exe ] && get_exe
path=$(mktemp -d) path=$(mktd)
cd $path cd $path
} }
@ -64,7 +66,7 @@ add_regex() {
add_test "regex" "titi riri" "./*" "new: riri\nnew: titi" add_test "regex" "titi riri" "./*" "new: riri\nnew: titi"
} }
add_subdir() { add_file_subdir() {
nb_tests=$((nb_tests + 1)) nb_tests=$((nb_tests + 1))
setup_env setup_env
$exe init $exe init
@ -72,7 +74,19 @@ add_subdir() {
touch dir/toto touch dir/toto
$exe add "./dir/toto" $exe add "./dir/toto"
res=$($exe status --nostyle) res=$($exe status --nostyle)
add_cmp "subdir" "new: dir/toto" add_cmp "file_subdir" "new: dir/toto"
}
add_whole_subdir() {
nb_tests=$((nb_tests + 1))
setup_env
$exe init
mkdir dir
touch dir/toto
touch dir/roro
$exe add "dir"
res=$($exe status --nostyle)
add_cmp "whole_subdir" "new: dir/roro\nnew: dir/toto\nnew: dir"
} }
add_subdir_regex() { add_subdir_regex() {
@ -106,8 +120,7 @@ add_all() {
touch dir/toto dir/roro lolo touch dir/toto dir/roro lolo
$exe add -A $exe add -A
res=$($exe status --nostyle) res=$($exe status --nostyle)
add/file/all: Output differ: add_cmp "all" "new: .nextsyncignore\nnew: dir/roro\nnew: dir/toto\nnew: dir\nnew: lolo"
add_cmp "all" "new: dir/roro\nnew: dir/toto\nnew: lolo\nnew: .nextsyncignore"
} }
#test nextsyncignore #test nextsyncignore
@ -119,7 +132,8 @@ add_basics
add_space add_space
add_multiple add_multiple
add_regex add_regex
add_subdir add_file_subdir
add_whole_subdir
add_subdir_regex add_subdir_regex
add_duplication add_duplication
add_duplication_subdir add_duplication_subdir

View File

@ -1,14 +1,11 @@
#!/bin/sh #!/bin/sh
source ./utils.sh
# Getting all tests # Getting all tests
TESTS=$(find -name "*.sh" -not -name "main.sh") TESTS=$(find -mindepth 2 -name "*.sh")
if [ $# -ne 0 ]; then if [ $# -ne 0 ]; then
TESTS=$(find -name "*$1*" -not -name "main.sh") TESTS=$(find -mindepth 2 -path "*$1*")
tests=""
for obj in $TESTS; do
[ -d $obj ] && tests+=$(find -path "$obj/*.sh" -not -name "main.sh")
done;
TESTS=$tests
fi fi
# Executing tests # Executing tests
@ -18,7 +15,7 @@ for test in $TESTS; do
#nb_tests=$((nb_tests + 1)) #nb_tests=$((nb_tests + 1))
# run file # run file
tmp_stderr=$(mktemp) tmp_stderr=$(mktf)
nb_tests_tmp=$($test 2>"$tmp_stderr") nb_tests_tmp=$($test 2>"$tmp_stderr")
exit_code=$? exit_code=$?
capture_stderr=$(<"$tmp_stderr") capture_stderr=$(<"$tmp_stderr")
@ -41,4 +38,6 @@ for test in $TESTS; do
fi fi
done; done;
#rm -rf /tmp/*_nextsync
echo -e "\nRan $nb_tests tests ($((nb_tests - nb_success)) Failed)" echo -e "\nRan $nb_tests tests ($((nb_tests - nb_success)) Failed)"