diff options
| author | Federico Angelilli <code@fedang.net> | 2023-12-22 11:25:05 +0100 |
|---|---|---|
| committer | Federico Angelilli <code@fedang.net> | 2023-12-22 11:25:05 +0100 |
| commit | f44fb78eb4f9ad6fe34a158c05fd34a21bd3af9e (patch) | |
| tree | 095939c4b25618e0cce5b847da9b7f56c1f3e32f | |
| parent | a093dffdc81d85e69f3e48385f0cea4d725e06d7 (diff) | |
Add copy and move commands
| -rwxr-xr-x | crypt.sh | 50 |
1 files changed, 50 insertions, 0 deletions
@@ -551,6 +551,54 @@ cmd_maybe_show() { fi } +cmd_copy_move() { + [[ $# -ne 2 ]] && die "Usage: $PROGRAM $COMMAND old-path new-path" + + sneaky_path "$1" "$2" + local old_path="$CRYPT_PATH/${1%/}" + old_path="${old_path%.gpg}" + local old_dir="$old_path" + local new_path="$CRYPT_PATH/$2" + + [[ "$new_path" == *.gpg ]] && error "Ambiguous extension for $2" + + if ! [[ -f $old_path.gpg && -d $old_path && $1 == */ || ! -f $old_path.gpg ]]; then + old_dir="${old_path%/*}" + old_path="${old_path}.gpg" + fi + [[ -e $old_path ]] || error "Error: $1 is not in the password store." + + mkdir -p -v "${new_path%/*}" + [[ -d $old_path || -d $new_path || $new_path == */ ]] || new_path="${new_path}.gpg" + + local interactive="-i" + [[ ! -t 0 ]] && interactive="-f" + + git_prep "$new_path" + if [[ $COMMAND == "move" ]]; then + mv $interactive -v "$old_path" "$new_path" || exit 1 + [[ -e "$new_path" ]] && reencrypt_path "$new_path" + + git_prep "$new_path" + if [[ -n $INNER_GIT_DIR && ! -e $old_path ]]; then + git -C "$INNER_GIT_DIR" rm -qr "$old_path" 2>/dev/null + git_prep "$new_path" + git_track "$new_path" "Move ${1} to ${2}." + fi + git_prep "$old_path" + if [[ -n $INNER_GIT_DIR && ! -e $old_path ]]; then + git -C "$INNER_GIT_DIR" rm -qr "$old_path" 2>/dev/null + git_prep "$old_path" + [[ -n $(git -C "$INNER_GIT_DIR" status --porcelain "$old_path") ]] && git_commit "Remove ${1}." + fi + rmdir -p "$old_dir" 2>/dev/null + else + cp $interactive -r -v "$old_path" "$new_path" || exit 1 + [[ -e "$new_path" ]] && reencrypt_path "$new_path" + git_track "$new_path" "Copy ${1} to ${2}." + fi +} + cmd_help() { cat <<-EOF Usage: @@ -609,6 +657,8 @@ case "$COMMAND" in insert) shift; cmd_insert "$@" ;; list) shift; cmd_list "$@" ;; show) shift; cmd_show "$@" ;; + move) shift; cmd_copy_move "$@" ;; + copy) shift; cmd_copy_move "$@" ;; *) cmd_maybe_show "$@" ;; esac exit 0 |
