diff --git a/src/list.sh b/src/list.sh index 2381dd7..0bc33b8 100644 --- a/src/list.sh +++ b/src/list.sh @@ -29,6 +29,10 @@ local_full_list() { find . -mindepth 1 ! -regex "^./$syncdir\$" ! -regex "^./$syncdir/.*" | sed 's|^./||g' | grep -vE "$ignores" | sort } +local_file_list() { + find . -mindepth 1 ! -type d ! -regex "^./$syncdir\$" ! -regex "^./$syncdir/.*" | sed 's|^./||g' | grep -vE "$ignores" | sort +} + server_full_list() { ssh_exec '#LXSH_PARSE_MINIFY set -e @@ -37,6 +41,14 @@ server_full_list() { ' "$rdir" "$syncdir" "$ignores" | sort } +server_file_list() { + ssh_exec '#LXSH_PARSE_MINIFY + set -e + cd "$1" + find . -mindepth 1 ! -type d ! -regex "^./$2\$" ! -regex "^./$2/.*" | sed "s|^./||g" | grep -vE "$3" + ' "$rdir" "$syncdir" "$ignores" | sort +} + server_both_list() { ssh_exec '#LXSH_PARSE_MINIFY set -e diff --git a/src/main.sh b/src/main.sh index 7593f58..42ad689 100644 --- a/src/main.sh +++ b/src/main.sh @@ -2,6 +2,8 @@ set -e +[ "$DEBUG" = true ] && set -x + %include config.sh options.sh *.sh arg=$1 diff --git a/src/sync.sh b/src/sync.sh index 3a970fb..fe689c4 100644 --- a/src/sync.sh +++ b/src/sync.sh @@ -27,9 +27,11 @@ sync() local_full_list > "$tdir/local_full" local_hash_list > "$tdir/local_hash" - server_both_list | tee >( - head -z -n1 | tr -d '\0' | sort > "$tdir/server_full" - ) | tail -z -n1 | sort > "$tdir/server_hash" + server_hash_list > "$tdir/server_hash" + server_full_list > "$tdir/server_full" + #server_both_list | tee >( + # head -z -n1 | tr -d '\0' | sort > "$tdir/server_full" + #) | tail -z -n1 | sort > "$tdir/server_hash" # get changed on both sides local_newer=$( list_diff "$tdir/local_hash" "$@") || { rm -rf "$tdir" ; unlock_all ; return 1; } diff --git a/src/transaction.sh b/src/transaction.sh index a09888e..65e05ab 100644 --- a/src/transaction.sh +++ b/src/transaction.sh @@ -70,10 +70,11 @@ delete_local() { forcepull() { local ret=0 + get_ignores get_server || return $? init_local || return $? init_server || { unlock_local ; return $?; } - rsync $rsync_opts -r --delete -e ssh "$raddr:$rdir" "$(pwd)/." || ret=$? + server_file_list | rsync $rsync_opts --files-from=- --delete -e ssh "$raddr:$rdir" "$PWD/." || ret=$? unlock_all write_lists return $ret @@ -82,10 +83,11 @@ forcepull() forcepush() { local ret=0 + get_ignores get_server || return $? init_local || return $? init_server || { unlock_local ; return $?; } - rsync $rsync_opts -r --delete -e ssh "$(pwd)/." "$raddr:$rdir" || ret=$? + local_file_list | rsync $rsync_opts --files-from=- --delete -e ssh "$PWD/." "$raddr:$rdir" || ret=$? unlock_all write_lists return $ret