contrib/subtree: Add -S/-gpg-sign
cover contrib/subtree: Add -S/-gpg-sign
This patch adds support for the -S/--gpg-sign option to the git subtree command.
Currently, git subtree creates squash and merge commits without applying GPG signatures, even when commit signing is configured via commit.gpgSign. This causes issues in repositories that require signed commits for policy reasons.
The implementation ensures that -S/--gpg-sign behaves consistently with other Git commands, passing the flag through to git commit-tree and git merge where appropriate.
This change improves compatibility with workflows and repositories that enforce signed commits.
Changes have been made to this patch according to a discussion with Junio C Hamano [email protected] on my previous patch attempt.
Patrik Weiskircher (2):
contrib/subtree: parse using --stuck-long
contrib/subtree: add -S/--gpg-sign
contrib/subtree/git-subtree.adoc | 19 +++-- contrib/subtree/git-subtree.sh | 66 ++++++++--------- contrib/subtree/t/t7900-subtree.sh | 113 +++++++++++++++++++++++++++++ 3 files changed, 158 insertions(+), 40 deletions(-)
base-commit: 7014b55638da979331baf8dc31c4e1d697cf2d67
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1928%2Fpweiskircher%2Fsubtree-sign-the-second-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1928/pweiskircher/subtree-sign-the-second-v1
Pull-Request: https://github.com/gitgitgadget/git/pull/1928
Signature · 1 line
gitgitgadget
PATCH 1/2 contrib/subtree: parse using --stuck-long
From: Patrik Weiskircher <[email protected]>
-S/--gpg-sign requires an optional parameter. Optional parameter handling only works unambiguous with git rev-parse --parseopt when using the --stuck-long option.
--- contrib/subtree/git-subtree.sh | 34 +++++++++++++--------------------- 1 file changed, 13 insertions(+), 21 deletions(-)
contrib/subtree/git-subtree.sh +13 -21
@@ -115,7 +115,7 @@ main () { then set -- -h fi - set_args="$(echo "$OPTS_SPEC" | git rev-parse --parseopt -- "$@" || echo exit $?)" + set_args="$(echo "$OPTS_SPEC" | git rev-parse --parseopt --stuck-long -- "$@" || echo exit $?)" eval "$set_args" . git-sh-setup require_work_tree
@@ -131,9 +131,6 @@ main () { opt="$1" shift case "$opt" in - --annotate|-b|-P|-m|--onto) - shift - ;; --rejoin) arg_split_rejoin=1 ;;
@@ -177,42 +174,37 @@ main () { shift case "$opt" in - -q) + --quiet) arg_quiet=1 ;; - -d) + --debug) arg_debug=1 ;; - --annotate) + --annotate=*) test -n "$allow_split" || die_incompatible_opt "$opt" "$arg_command" - arg_split_annotate="$1" - shift + arg_split_annotate="${opt#*=}" ;; --no-annotate) test -n "$allow_split" || die_incompatible_opt "$opt" "$arg_command" arg_split_annotate= ;; - -b) + --branch=*) test -n "$allow_split" || die_incompatible_opt "$opt" "$arg_command" - arg_split_branch="$1" - shift + arg_split_branch="${opt#*=}" ;; - -P) - arg_prefix="${1%/}" - shift + --prefix=*) + arg_prefix="${opt#*=}" ;; - -m) + --message=*) test -n "$allow_addmerge" || die_incompatible_opt "$opt" "$arg_command" - arg_addmerge_message="$1" - shift + arg_addmerge_message="${opt#*=}" ;; --no-prefix) arg_prefix= ;; - --onto) + --onto=*) test -n "$allow_split" || die_incompatible_opt "$opt" "$arg_command" - arg_split_onto="$1" - shift + arg_split_onto="${opt#*=}" ;; --no-onto) test -n "$allow_split" || die_incompatible_opt "$opt" "$arg_command"
Signature · 1 line
gitgitgadget
Re: [PATCH 1/2] contrib/subtree: parse using --stuck-long
Quoted 6 lines · Patrik Weiskircher via GitGitGadget
From: Patrik Weiskircher <[email protected]>
-S/--gpg-sign requires an optional parameter. Optional parameter handling only works unambiguous with git rev-parse --parseopt when using the --stuck-long option.
Here we mention "-S", but that flag isn't implemented yet, right?
Perhaps something like:
Optional parameter handling only works unambiguous with git rev-parse --parseopt when using the --stuck-long option. To prepare for future commits which add flags with optional parameters, parse with --stuck-long.
Quoted 88 lines
Signed-off-by Patrik Weiskircher <[email protected]>--- contrib/subtree/git-subtree.sh | 34 +++++++++++++--------------------- 1 file changed, 13 insertions(+), 21 deletions(-)contrib/subtree/git-subtree.sh +13
-22@@ -115,7 +115,7 @@ main () { then set -- -h fi - set_args="$(echo "$OPTS_SPEC" | git rev-parse --parseopt -- "$@" || echo exit $?)" + set_args="$(echo "$OPTS_SPEC" | git rev-parse --parseopt --stuck-long -- "$@" || echo exit $?)" eval "$set_args" . git-sh-setup require_work_tree@@ -131,9 +131,6 @@ main () { opt="$1" shift case "$opt" in - --annotate|-b|-P|-m|--onto) - shift - ;; --rejoin) arg_split_rejoin=1 ;;@@ -177,42 +174,37 @@ main () { shift case "$opt" in - -q) + --quiet) arg_quiet=1 ;; - -d) + --debug) arg_debug=1 ;; - --annotate) + --annotate=*) test -n "$allow_split" || die_incompatible_opt "$opt" "$arg_command" - arg_split_annotate="$1" - shift + arg_split_annotate="${opt#*=}" ;; --no-annotate) test -n "$allow_split" || die_incompatible_opt "$opt" "$arg_command" arg_split_annotate= ;; - -b) + --branch=*) test -n "$allow_split" || die_incompatible_opt "$opt" "$arg_command" - arg_split_branch="$1" - shift + arg_split_branch="${opt#*=}" ;; - -P) - arg_prefix="${1%/}" - shift + --prefix=*) + arg_prefix="${opt#*=}" ;; - -m) + --message=*) test -n "$allow_addmerge" || die_incompatible_opt "$opt" "$arg_command" - arg_addmerge_message="$1" - shift + arg_addmerge_message="${opt#*=}" ;; --no-prefix) arg_prefix= ;; - --onto) + --onto=*) test -n "$allow_split" || die_incompatible_opt "$opt" "$arg_command" - arg_split_onto="$1" - shift + arg_split_onto="${opt#*=}" ;; --no-onto) test -n "$allow_split" || die_incompatible_opt "$opt" "$arg_command" --gitgitgadget
Signature · 1 line
D. Ben Knoble
Re: [PATCH 1/2] contrib/subtree: parse using --stuck-long
Quoted 10 lines · D. Ben Knoble
Quoted 6 lines · Patrik Weiskircher via GitGitGadget
From: Patrik Weiskircher <[email protected]>
-S/--gpg-sign requires an optional parameter. Optional parameter handling only works unambiguous with git rev-parse --parseopt when using the --stuck-long option.
Quoted 8 lines
Here we mention "-S", but that flag isn't implemented yet, right?
Perhaps something like:
Optional parameter handling only works unambiguous with git rev-parse --parseopt when using the --stuck-long option. To prepare for future commits which add flags with optional parameters, parse with --stuck-long.
Makes sense! Changing that. What is a good policy to resubmit something? Should I wait longer? Sorry, very new here!
Re: [PATCH 1/2] contrib/subtree: parse using --stuck-long
Quoted 5 lines · Patrik Weiskircher
Quoted 5 lines
Here we mention "-S", but that flag isn't implemented yet, right?
Perhaps something like:
Quoted 7 lines
Quoted 4 lines
Optional parameter handling only works unambiguous with git rev-parse --parseopt when using the --stuck-long option. To prepare for future commits which add flags with optional parameters, parse with --stuck-long.
Makes sense! Changing that. What is a good policy to resubmit something? Should I wait longer? Sorry, very new here!
• Force-push your branch to gitgitgadget
• Edit the PR description with something like “Changes since v1:” to summarize the changes
• (/preview comment)
• To send the next version: /submit comment again
I think that’s it. :)
I don’t think there’s a need to wait if you don’t want to.
Signature · 1 line
Kristoffer Haugsbakk
Re: [PATCH 1/2] contrib/subtree: parse using --stuck-long
Quoted 20 lines · Kristoffer Haugsbakk
Quoted 5 lines · Patrik Weiskircher
Quoted 5 lines
Here we mention "-S", but that flag isn't implemented yet, right?
Perhaps something like:
Quoted 7 lines
Quoted 4 lines
Optional parameter handling only works unambiguous with git rev-parse --parseopt when using the --stuck-long option. To prepare for future commits which add flags with optional parameters, parse with --stuck-long.
Makes sense! Changing that. What is a good policy to resubmit something? Should I wait longer? Sorry, very new here!
• Force-push your branch to gitgitgadget
• Edit the PR description with something like “Changes since v1:” to summarize the changes
• (/previewcomment)
• To send the next version:/submitcomment again
Quoted 3 lines
I think that’s it. :)
I don’t think there’s a need to wait if you don’t want to.
It would be nice for potential reviewers to give at least 24 hours to ensure people anywhere on the globe have a chance to comment, and a chance for you to respond to them, before sending your next iteration.
Also, for future reference, when responding to a review comment that causes you to drastically change the course of the series, you can respond whenever you want to, but it is nice to other potential reviewers to give at least 24 hours to voice their opinions, before sending an updated series based on that comment, since suggested changes in such a comment may be controversial and after seeing you spend some time already to adjust to it, others may feel discouraged to make you redo your series again even whey they think the suggested changes are not taking us in the right direction.
Re: [PATCH 1/2] contrib/subtree: parse using --stuck-long
Quoted 32 lines · Junio C Hamano
Quoted 20 lines · Kristoffer Haugsbakk
Quoted 5 lines · Patrik Weiskircher
Quoted 5 lines
Here we mention "-S", but that flag isn't implemented yet, right?
Perhaps something like:
Quoted 7 lines
Quoted 4 lines
Optional parameter handling only works unambiguous with git rev-parse --parseopt when using the --stuck-long option. To prepare for future commits which add flags with optional parameters, parse with --stuck-long.
Makes sense! Changing that. What is a good policy to resubmit something? Should I wait longer? Sorry, very new here!
• Force-push your branch to gitgitgadget
• Edit the PR description with something like “Changes since v1:” to summarize the changes
• (/previewcomment)
• To send the next version:/submitcomment againQuoted 3 lines
I think that’s it. :)
I don’t think there’s a need to wait if you don’t want to.
It would be nice for potential reviewers to give at least 24 hours to ensure people anywhere on the globe have a chance to comment, and a chance for you to respond to them, before sending your next iteration.
Quoted 9 lines
Also, for future reference, when responding to a review comment that causes you to drastically change the course of the series, you can respond whenever you want to, but it is nice to other potential reviewers to give at least 24 hours to voice their opinions, before sending an updated series based on that comment, since suggested changes in such a comment may be controversial and after seeing you spend some time already to adjust to it, others may feel discouraged to make you redo your series again even whey they think the suggested changes are not taking us in the right direction.
Makes sense! I'll keep that in mind for the future!
PATCH 2/2 contrib/subtree: add -S/--gpg-sign
In reply to Patrik Weiskircher via GitGitGadgetFrom: Patrik Weiskircher <[email protected]>
Allows optionally signing the commits that git subtree creates. This can be necessary when working in a repository that requires gpg signed commits.
--- contrib/subtree/git-subtree.adoc | 19 +++-- contrib/subtree/git-subtree.sh | 32 ++++---- contrib/subtree/t/t7900-subtree.sh | 113 +++++++++++++++++++++++++++++ 3 files changed, 145 insertions(+), 19 deletions(-)
contrib/subtree/git-subtree.adoc +13 -6
@@ -9,14 +9,14 @@ git-subtree - Merge subtrees together and split repository into subtrees SYNOPSIS -------- [verse] -'git subtree' [<options>] -P <prefix> add <local-commit> -'git subtree' [<options>] -P <prefix> add <repository> <remote-ref> -'git subtree' [<options>] -P <prefix> merge <local-commit> [<repository>] -'git subtree' [<options>] -P <prefix> split [<local-commit>] +'git subtree' [<options>] -P <prefix> [-S[<keyid>]] add <local-commit> +'git subtree' [<options>] -P <prefix> [-S[<keyid>]] add <repository> <remote-ref> +'git subtree' [<options>] -P <prefix> [-S[<keyid>]] merge <local-commit> [<repository>] +'git subtree' [<options>] -P <prefix> [-S[<keyid>]] split [<local-commit>] [verse] -'git subtree' [<options>] -P <prefix> pull <repository> <remote-ref> -'git subtree' [<options>] -P <prefix> push <repository> <refspec> +'git subtree' [<options>] -P <prefix> [-S[<keyid>]] pull <repository> <remote-ref> +'git subtree' [<options>] -P <prefix> [-S[<keyid>]] push <repository> <refspec> DESCRIPTION -----------
@@ -149,6 +149,13 @@ OPTIONS FOR ALL COMMANDS want to manipulate. This option is mandatory for all commands. +-S[<keyid>]:: +--gpg-sign[=<keyid>]:: +--no-gpg-sign:: + GPG-sign commits. The `keyid` argument is optional and + defaults to the committer identity; `--no-gpg-sign` is useful to + countermand a `--gpg-sign` option given earlier on the command line. + OPTIONS FOR 'add' AND 'merge' (ALSO: 'pull', 'split --rejoin', AND 'push --rejoin') ----------------------------------------------------------------------------------- These options for 'add' and 'merge' may also be given to 'pull' (which
contrib/subtree/git-subtree.sh +19 -13
@@ -26,12 +26,12 @@ then fi OPTS_SPEC="\ -git subtree add --prefix=<prefix> <commit> -git subtree add --prefix=<prefix> <repository> <ref> -git subtree merge --prefix=<prefix> <commit> -git subtree split --prefix=<prefix> [<commit>] -git subtree pull --prefix=<prefix> <repository> <ref> -git subtree push --prefix=<prefix> <repository> <refspec> +git subtree add --prefix=<prefix> [-S[=<key-id>]] <commit> +git subtree add --prefix=<prefix> [-S[=<key-id>]] <repository> <ref> +git subtree merge --prefix=<prefix> [-S[=<key-id>]] <commit> +git subtree split --prefix=<prefix> [-S[=<key-id>]] [<commit>] +git subtree pull --prefix=<prefix> [-S[=<key-id>]] <repository> <ref> +git subtree push --prefix=<prefix> [-S[=<key-id>]] <repository> <refspec> -- h,help! show the help q,quiet! quiet
@@ -46,6 +46,7 @@ rejoin merge the new branch back into HEAD options for 'add' and 'merge' (also: 'pull', 'split --rejoin', and 'push --rejoin') squash merge subtree changes as a single commit m,message!= use the given message as the commit message for the merge commit +S,gpg-sign?key-id GPG-sign commits. The keyid argument is optional and defaults to the committer identity " indent=0
@@ -168,6 +169,7 @@ main () { arg_split_annotate= arg_addmerge_squash= arg_addmerge_message= + arg_gpg_sign= while test $# -gt 0 do opt="$1"
@@ -232,6 +234,9 @@ main () { test -n "$allow_addmerge" || die_incompatible_opt "$opt" "$arg_command" arg_addmerge_squash= ;; + --gpg-sign=* | --gpg-sign | --no-gpg-sign) + arg_gpg_sign="$opt" + ;; --) break ;;
@@ -264,6 +269,7 @@ main () { debug "quiet: {$arg_quiet}" debug "dir: {$dir}" debug "opts: {$*}" + debug "gpg-sign: {$arg_gpg_sign}" debug "cmd_$arg_command" "$@"
@@ -529,7 +535,7 @@ copy_commit () { printf "%s" "$arg_split_annotate" cat ) | - git commit-tree "$2" $3 # reads the rest of stdin + git commit-tree $arg_gpg_sign "$2" $3 # reads the rest of stdin ) || die "fatal: can't copy commit $1" }
@@ -675,10 +681,10 @@ new_squash_commit () { if test -n "$old" then squash_msg "$dir" "$oldsub" "$newsub" | - git commit-tree "$tree" -p "$old" || exit $? + git commit-tree $arg_gpg_sign "$tree" -p "$old" || exit $? else squash_msg "$dir" "" "$newsub" | - git commit-tree "$tree" || exit $? + git commit-tree $arg_gpg_sign "$tree" || exit $? fi }
@@ -917,11 +923,11 @@ cmd_add_commit () { then rev=$(new_squash_commit "" "" "$rev") || exit $? commit=$(add_squashed_msg "$rev" "$dir" | - git commit-tree "$tree" $headp -p "$rev") || exit $? + git commit-tree $arg_gpg_sign "$tree" $headp -p "$rev") || exit $? else revp=$(peel_committish "$rev") || exit $? commit=$(add_msg "$dir" $headrev "$rev" | - git commit-tree "$tree" $headp -p "$revp") || exit $? + git commit-tree $arg_gpg_sign "$tree" $headp -p "$revp") || exit $? fi git reset "$commit" || exit $?
@@ -1072,9 +1078,9 @@ cmd_merge () { if test -n "$arg_addmerge_message" then git merge --no-ff -Xsubtree="$arg_prefix" \ - --message="$arg_addmerge_message" "$rev" + --message="$arg_addmerge_message" $arg_gpg_sign "$rev" else - git merge --no-ff -Xsubtree="$arg_prefix" $rev + git merge --no-ff -Xsubtree="$arg_prefix" $arg_gpg_sign $rev fi }
contrib/subtree/t/t7900-subtree.sh +113 -0
123 lines not on this page · raw message
Signature · 1 line
gitgitgadget
v2 cover contrib/subtree: Add -S/-gpg-sign
In reply to Patrik Weiskircher via GitGitGadgetThis patch adds support for the -S/--gpg-sign option to the git subtree command.
Currently, git subtree creates squash and merge commits without applying GPG signatures, even when commit signing is configured via commit.gpgSign. This causes issues in repositories that require signed commits for policy reasons.
The implementation ensures that -S/--gpg-sign behaves consistently with other Git commands, passing the flag through to git commit-tree and git merge where appropriate.
This change improves compatibility with workflows and repositories that enforce signed commits.
Changes have been made to this patch according to a discussion with Junio C Hamano [email protected] on my previous patch attempt.
Changes since v1:
* Adjusted commit message to not mention the not implemented flag yet.
Patrik Weiskircher (2):
contrib/subtree: parse using --stuck-long
contrib/subtree: add -S/--gpg-sign
contrib/subtree/git-subtree.adoc | 19 +++-- contrib/subtree/git-subtree.sh | 66 ++++++++--------- contrib/subtree/t/t7900-subtree.sh | 113 +++++++++++++++++++++++++++++ 3 files changed, 158 insertions(+), 40 deletions(-)
base-commit: 0bd2d791cc9f745ebaedafc0e1cbebdebe41343e
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1928%2Fpweiskircher%2Fsubtree-sign-the-second-v2
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1928/pweiskircher/subtree-sign-the-second-v2
Pull-Request: https://github.com/gitgitgadget/git/pull/1928
Range-diff vs v1:
1: fe7e918ba18 ! 1: 5bbdbf01636 contrib/subtree: parse using --stuck-long
@@ Metadata
## Commit message ##
contrib/subtree: parse using --stuck-long
- -S/--gpg-sign requires an optional parameter. Optional parameter
- handling only works unambiguous with git rev-parse --parseopt when using
- the --stuck-long option.
+ Optional parameter handling only works unambiguous with git rev-parse
+ --parseopt when using the --stuck-long option. To prepare for future commits
+ which add flags with optional parameters, parse with --stuck-long.
2: 45ae2c31bc0 = 2: af5b4a65b63 contrib/subtree: add -S/--gpg-sign
Signature · 1 line
gitgitgadget
PATCH v2 1/2 contrib/subtree: parse using --stuck-long
From: Patrik Weiskircher <[email protected]>
Optional parameter handling only works unambiguous with git rev-parse --parseopt when using the --stuck-long option. To prepare for future commits which add flags with optional parameters, parse with --stuck-long.
--- contrib/subtree/git-subtree.sh | 34 +++++++++++++--------------------- 1 file changed, 13 insertions(+), 21 deletions(-)
contrib/subtree/git-subtree.sh +13 -21
@@ -115,7 +115,7 @@ main () { then set -- -h fi - set_args="$(echo "$OPTS_SPEC" | git rev-parse --parseopt -- "$@" || echo exit $?)" + set_args="$(echo "$OPTS_SPEC" | git rev-parse --parseopt --stuck-long -- "$@" || echo exit $?)" eval "$set_args" . git-sh-setup require_work_tree
@@ -131,9 +131,6 @@ main () { opt="$1" shift case "$opt" in - --annotate|-b|-P|-m|--onto) - shift - ;; --rejoin) arg_split_rejoin=1 ;;
@@ -177,42 +174,37 @@ main () { shift case "$opt" in - -q) + --quiet) arg_quiet=1 ;; - -d) + --debug) arg_debug=1 ;; - --annotate) + --annotate=*) test -n "$allow_split" || die_incompatible_opt "$opt" "$arg_command" - arg_split_annotate="$1" - shift + arg_split_annotate="${opt#*=}" ;; --no-annotate) test -n "$allow_split" || die_incompatible_opt "$opt" "$arg_command" arg_split_annotate= ;; - -b) + --branch=*) test -n "$allow_split" || die_incompatible_opt "$opt" "$arg_command" - arg_split_branch="$1" - shift + arg_split_branch="${opt#*=}" ;; - -P) - arg_prefix="${1%/}" - shift + --prefix=*) + arg_prefix="${opt#*=}" ;; - -m) + --message=*) test -n "$allow_addmerge" || die_incompatible_opt "$opt" "$arg_command" - arg_addmerge_message="$1" - shift + arg_addmerge_message="${opt#*=}" ;; --no-prefix) arg_prefix= ;; - --onto) + --onto=*) test -n "$allow_split" || die_incompatible_opt "$opt" "$arg_command" - arg_split_onto="$1" - shift + arg_split_onto="${opt#*=}" ;; --no-onto) test -n "$allow_split" || die_incompatible_opt "$opt" "$arg_command"
Signature · 1 line
gitgitgadget
PATCH v2 2/2 contrib/subtree: add -S/--gpg-sign
In reply to Patrik Weiskircher via GitGitGadgetFrom: Patrik Weiskircher <[email protected]>
Allows optionally signing the commits that git subtree creates. This can be necessary when working in a repository that requires gpg signed commits.
--- contrib/subtree/git-subtree.adoc | 19 +++-- contrib/subtree/git-subtree.sh | 32 ++++---- contrib/subtree/t/t7900-subtree.sh | 113 +++++++++++++++++++++++++++++ 3 files changed, 145 insertions(+), 19 deletions(-)
contrib/subtree/git-subtree.adoc +13 -6
@@ -9,14 +9,14 @@ git-subtree - Merge subtrees together and split repository into subtrees SYNOPSIS -------- [verse] -'git subtree' [<options>] -P <prefix> add <local-commit> -'git subtree' [<options>] -P <prefix> add <repository> <remote-ref> -'git subtree' [<options>] -P <prefix> merge <local-commit> [<repository>] -'git subtree' [<options>] -P <prefix> split [<local-commit>] +'git subtree' [<options>] -P <prefix> [-S[<keyid>]] add <local-commit> +'git subtree' [<options>] -P <prefix> [-S[<keyid>]] add <repository> <remote-ref> +'git subtree' [<options>] -P <prefix> [-S[<keyid>]] merge <local-commit> [<repository>] +'git subtree' [<options>] -P <prefix> [-S[<keyid>]] split [<local-commit>] [verse] -'git subtree' [<options>] -P <prefix> pull <repository> <remote-ref> -'git subtree' [<options>] -P <prefix> push <repository> <refspec> +'git subtree' [<options>] -P <prefix> [-S[<keyid>]] pull <repository> <remote-ref> +'git subtree' [<options>] -P <prefix> [-S[<keyid>]] push <repository> <refspec> DESCRIPTION -----------
@@ -149,6 +149,13 @@ OPTIONS FOR ALL COMMANDS want to manipulate. This option is mandatory for all commands. +-S[<keyid>]:: +--gpg-sign[=<keyid>]:: +--no-gpg-sign:: + GPG-sign commits. The `keyid` argument is optional and + defaults to the committer identity; `--no-gpg-sign` is useful to + countermand a `--gpg-sign` option given earlier on the command line. + OPTIONS FOR 'add' AND 'merge' (ALSO: 'pull', 'split --rejoin', AND 'push --rejoin') ----------------------------------------------------------------------------------- These options for 'add' and 'merge' may also be given to 'pull' (which
contrib/subtree/git-subtree.sh +19 -13
@@ -26,12 +26,12 @@ then fi OPTS_SPEC="\ -git subtree add --prefix=<prefix> <commit> -git subtree add --prefix=<prefix> <repository> <ref> -git subtree merge --prefix=<prefix> <commit> -git subtree split --prefix=<prefix> [<commit>] -git subtree pull --prefix=<prefix> <repository> <ref> -git subtree push --prefix=<prefix> <repository> <refspec> +git subtree add --prefix=<prefix> [-S[=<key-id>]] <commit> +git subtree add --prefix=<prefix> [-S[=<key-id>]] <repository> <ref> +git subtree merge --prefix=<prefix> [-S[=<key-id>]] <commit> +git subtree split --prefix=<prefix> [-S[=<key-id>]] [<commit>] +git subtree pull --prefix=<prefix> [-S[=<key-id>]] <repository> <ref> +git subtree push --prefix=<prefix> [-S[=<key-id>]] <repository> <refspec> -- h,help! show the help q,quiet! quiet
@@ -46,6 +46,7 @@ rejoin merge the new branch back into HEAD options for 'add' and 'merge' (also: 'pull', 'split --rejoin', and 'push --rejoin') squash merge subtree changes as a single commit m,message!= use the given message as the commit message for the merge commit +S,gpg-sign?key-id GPG-sign commits. The keyid argument is optional and defaults to the committer identity " indent=0
@@ -168,6 +169,7 @@ main () { arg_split_annotate= arg_addmerge_squash= arg_addmerge_message= + arg_gpg_sign= while test $# -gt 0 do opt="$1"
@@ -232,6 +234,9 @@ main () { test -n "$allow_addmerge" || die_incompatible_opt "$opt" "$arg_command" arg_addmerge_squash= ;; + --gpg-sign=* | --gpg-sign | --no-gpg-sign) + arg_gpg_sign="$opt" + ;; --) break ;;
@@ -264,6 +269,7 @@ main () { debug "quiet: {$arg_quiet}" debug "dir: {$dir}" debug "opts: {$*}" + debug "gpg-sign: {$arg_gpg_sign}" debug "cmd_$arg_command" "$@"
@@ -529,7 +535,7 @@ copy_commit () { printf "%s" "$arg_split_annotate" cat ) | - git commit-tree "$2" $3 # reads the rest of stdin + git commit-tree $arg_gpg_sign "$2" $3 # reads the rest of stdin ) || die "fatal: can't copy commit $1" }
@@ -675,10 +681,10 @@ new_squash_commit () { if test -n "$old" then squash_msg "$dir" "$oldsub" "$newsub" | - git commit-tree "$tree" -p "$old" || exit $? + git commit-tree $arg_gpg_sign "$tree" -p "$old" || exit $? else squash_msg "$dir" "" "$newsub" | - git commit-tree "$tree" || exit $? + git commit-tree $arg_gpg_sign "$tree" || exit $? fi }
@@ -917,11 +923,11 @@ cmd_add_commit () { then rev=$(new_squash_commit "" "" "$rev") || exit $? commit=$(add_squashed_msg "$rev" "$dir" | - git commit-tree "$tree" $headp -p "$rev") || exit $? + git commit-tree $arg_gpg_sign "$tree" $headp -p "$rev") || exit $? else revp=$(peel_committish "$rev") || exit $? commit=$(add_msg "$dir" $headrev "$rev" | - git commit-tree "$tree" $headp -p "$revp") || exit $? + git commit-tree $arg_gpg_sign "$tree" $headp -p "$revp") || exit $? fi git reset "$commit" || exit $?
@@ -1072,9 +1078,9 @@ cmd_merge () { if test -n "$arg_addmerge_message" then git merge --no-ff -Xsubtree="$arg_prefix" \ - --message="$arg_addmerge_message" "$rev" + --message="$arg_addmerge_message" $arg_gpg_sign "$rev" else - git merge --no-ff -Xsubtree="$arg_prefix" $rev + git merge --no-ff -Xsubtree="$arg_prefix" $arg_gpg_sign $rev fi }
contrib/subtree/t/t7900-subtree.sh +113 -0
123 lines not on this page · raw message
Signature · 1 line
gitgitgadget
"Patrik Weiskircher via GitGitGadget" <[email protected]>
Quoted 4 lines · writes:
Changes since v1:
* Adjusted commit message to not mention the not implemented flag yet.
Quoted 8 lines
Patrik Weiskircher (2):
contrib/subtree: parse using --stuck-long
contrib/subtree: add -S/--gpg-signcontrib/subtree/git-subtree.adoc | 19 +++-- contrib/subtree/git-subtree.sh | 66 ++++++++--------- contrib/subtree/t/t7900-subtree.sh | 113 +++++++++++++++++++++++++++++ 3 files changed, 158 insertions(+), 40 deletions(-)
Still looking good. Will queue. Thanks.