This commit allows to use -p/--path for `pass git` the same way as
`pass init` accepts it.
---
 man/pass.1            |  4 +++-
 src/password-store.sh | 13 +++++++++++++
 2 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/man/pass.1 b/man/pass.1
index a555dcb..09ada0c 100644
--- a/man/pass.1
+++ b/man/pass.1
@@ -164,7 +164,7 @@ silently overwrite \fInew-path\fP if it exists. If 
\fInew-path\fP ends in a
 trailing \fI/\fP, it is always treated as a directory. Passwords are 
selectively
 reencrypted to the corresponding keys of their new destination.
 .TP
-\fBgit\fP \fIgit-command-args\fP...
+\fBgit\fP [ \fI--path=sub-folder\fP, \fI-p sub-folder\fP ] 
\fIgit-command-args\fP...
 If the password store is a git repository, pass \fIgit-command-args\fP as 
arguments to
 .BR git (1)
 using the password store as the git repository. If \fIgit-command-args\fP is 
\fBinit\fP,
@@ -173,6 +173,8 @@ store to the repository in an initial commit. If the git 
config key \fIpass.sign
 is set to \fItrue\fP, then all commits will be signed using 
\fIuser.signingkey\fP or the
 default git signing key. This config key may be turned on using:
 .B `pass git config --bool --add pass.signcommits true`
+If \fI--path\fP or \fI-p\fP is specified, the git command is executed in that 
specific
+sub folder of the password store.
 .TP
 \fBhelp\fP
 Show usage message.
diff --git a/src/password-store.sh b/src/password-store.sh
index 22e818f..2acacef 100755
--- a/src/password-store.sh
+++ b/src/password-store.sh
@@ -650,6 +650,19 @@ cmd_copy_move() {
 }
 
 cmd_git() {
+       local opts id_path=""
+       opts="$($GETOPT -o p: -l path: -n "$PROGRAM git" -- "$@")"
+       local err=$?
+       eval set -- "$opts"
+       while true; do case $1 in
+               -p|--path) id_path="$2"; shift 2 ;;
+               --) shift; break ;;
+       esac done
+
+       [[ -n $id_path ]] && check_sneaky_paths "$id_path"
+       [[ -n $id_path && ! -d $PREFIX/$id_path && -e $PREFIX/$id_path ]] && 
die "Error: $PREFIX/$id_path exists but is not a directory."
+
+       local PREFIX="$PREFIX/$id_path"
        set_git "$PREFIX/"
        if [[ $1 == "init" ]]; then
                INNER_GIT_DIR="$PREFIX"
-- 
2.37.2

Reply via email to