All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Jacques Vidrine via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: Allen Reese <java.allen@apple.com>, Jacques Vidrine <t@fboundp.com>
Subject: [PATCH 1/2] subtree: support GPG commit signing
Date: Mon, 10 Apr 2023 17:01:46 +0000	[thread overview]
Message-ID: <ffbdcf9db686cdd786e21add6ca194c2dbdafa3b.1681146107.git.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.1490.git.git.1681146107.gitgitgadget@gmail.com>

From: Jacques Vidrine <t@fboundp.com>

Add support for -S/--gpg-sign/--no-gpg-sign command line options
and commit.gpgsign configuration. These are passed to invocations
of `git commit-tree`.

Signed-off-by: Allen Reese <java.allen@apple.com>
Signed-off-by: Jacques Vidrine <t@fboundp.com>
---
 contrib/subtree/git-subtree.sh  | 24 +++++++++++++++++++-----
 contrib/subtree/git-subtree.txt |  9 +++++++++
 2 files changed, 28 insertions(+), 5 deletions(-)

diff --git a/contrib/subtree/git-subtree.sh b/contrib/subtree/git-subtree.sh
index 10c9c87839a..553b4391deb 100755
--- a/contrib/subtree/git-subtree.sh
+++ b/contrib/subtree/git-subtree.sh
@@ -46,6 +46,8 @@ 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?   GPG-sign commits, optionally specifying keyid.
+no-gpg-sign   Disable GPG commit signing.
 "
 
 indent=0
@@ -165,6 +167,7 @@ main () {
 	arg_quiet=
 	arg_debug=
 	arg_prefix=
+	arg_gpgsign=
 	arg_split_branch=
 	arg_split_onto=
 	arg_split_ignore_joins=
@@ -240,6 +243,9 @@ main () {
 			test -n "$allow_addmerge" || die_incompatible_opt "$opt" "$arg_command"
 			arg_addmerge_squash=
 			;;
+		-S*|--gpg-sign=*|--no-gpg-sign)
+			arg_gpgsign="${opt}"
+			;;
 		--)
 			break
 			;;
@@ -268,6 +274,12 @@ main () {
 
 	dir="$(dirname "$arg_prefix/.")"
 
+	if test -z "$arg_gpgsign" &&
+		git config --bool commit.gpgsign >/dev/null
+	then
+		arg_gpgsign="-S"
+	fi
+
 	debug "command: {$arg_command}"
 	debug "quiet: {$arg_quiet}"
 	debug "dir: {$dir}"
@@ -534,7 +546,7 @@ copy_commit () {
 			printf "%s" "$arg_split_annotate"
 			cat
 		) |
-		git commit-tree "$2" $3  # reads the rest of stdin
+		git commit-tree $arg_gpgsign "$2" $3  # reads the rest of stdin
 	) || die "fatal: can't copy commit $1"
 }
 
@@ -674,10 +686,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_gpgsign "$tree" -p "$old" || exit $?
 	else
 		squash_msg "$dir" "" "$newsub" |
-		git commit-tree "$tree" || exit $?
+		git commit-tree $arg_gpgsign "$tree" || exit $?
 	fi
 }
 
@@ -900,11 +912,13 @@ 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_gpgsign "$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_gpgsign "$tree" \
+			$headp -p "$revp") || exit $?
 	fi
 	git reset "$commit" || exit $?
 
diff --git a/contrib/subtree/git-subtree.txt b/contrib/subtree/git-subtree.txt
index 004abf415b8..fa54541b288 100644
--- a/contrib/subtree/git-subtree.txt
+++ b/contrib/subtree/git-subtree.txt
@@ -185,6 +185,15 @@ subproject.
 --message=<message>::
 	Specify <message> as the commit message for the merge commit.
 
+-S[<keyid>]::
+--gpg-sign[=<keyid>]::
+--no-gpg-sign::
+	GPG-sign commits. The `keyid` argument is optional and
+	defaults to the committer identity; if specified, it must be
+	stuck to the option without a space. `--no-gpg-sign` is useful to
+	countermand both `commit.gpgSign` configuration variable, and
+	earlier `--gpg-sign`.
+
 OPTIONS FOR 'split' (ALSO: 'push')
 ----------------------------------
 These options for 'split' may also be given to 'push' (which wraps
-- 
gitgitgadget


  reply	other threads:[~2023-04-10 17:01 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-04-10 17:01 [PATCH 0/2] subtree: support GPG commit signing Allen Reese via GitGitGadget
2023-04-10 17:01 ` Jacques Vidrine via GitGitGadget [this message]
2023-04-10 17:59   ` [PATCH 1/2] " Allen Reese
2023-04-10 17:01 ` [PATCH 2/2] contrib/subtree: fix gpg_sign_arg not being passed to git merge Allen Reese via GitGitGadget

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ffbdcf9db686cdd786e21add6ca194c2dbdafa3b.1681146107.git.gitgitgadget@gmail.com \
    --to=gitgitgadget@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=java.allen@apple.com \
    --cc=t@fboundp.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.