From: Laurent Arnoud <laurent@spkdev.net>
To: Junio C Hamano <gitster@pobox.com>
Cc: Jeff King <peff@peff.net>, git@vger.kernel.org
Subject: [PATCH v4] Add the tag.gpgsign option to sign annotated tags
Date: Mon, 21 Mar 2016 21:50:15 +0100 [thread overview]
Message-ID: <20160321205015.GF20083@spk-laptop> (raw)
In-Reply-To: <xmqqvb4fliq6.fsf@gitster.mtv.corp.google.com>
The `tag.gpgsign` config option allows to sign annotated tags
automatically.
`--annotate` command line option disable configuration `tag.gpgsign`.
Signed-off-by: Laurent Arnoud <laurent@spkdev.net>
---
Documentation/config.txt | 5 +++++
builtin/tag.c | 20 +++++++++++++++-----
t/t7004-tag.sh | 33 +++++++++++++++++++++++++++++++++
3 files changed, 53 insertions(+), 5 deletions(-)
diff --git a/Documentation/config.txt b/Documentation/config.txt
index 2cd6bdd..62f7d2a 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -2729,6 +2729,11 @@ submodule.<name>.ignore::
"--ignore-submodules" option. The 'git submodule' commands are not
affected by this setting.
+tag.gpgSign::
+ A boolean to specify whether annotated tags created should be GPG signed.
+ If `--annotate` is specified on the command line, it takes
+ precedence over this option.
+
tag.sort::
This variable controls the sort ordering of tags when displayed by
linkgit:git-tag[1]. Without the "--sort=<value>" option provided, the
diff --git a/builtin/tag.c b/builtin/tag.c
index 1705c94..748aeac 100644
--- a/builtin/tag.c
+++ b/builtin/tag.c
@@ -29,6 +29,7 @@ static const char * const git_tag_usage[] = {
};
static unsigned int colopts;
+static unsigned int sign_tag_config;
static int list_tags(struct ref_filter *filter, struct ref_sorting *sorting, const char *format)
{
@@ -166,6 +167,11 @@ static int git_tag_config(const char *var, const char *value, void *cb)
status = git_gpg_config(var, value, cb);
if (status)
return status;
+ if (!strcmp(var, "tag.gpgsign")) {
+ sign_tag_config = git_config_bool(var, value);
+ return 0;
+ }
+
if (starts_with(var, "column."))
return git_column_config(var, value, "tag", &colopts);
return git_default_config(var, value, cb);
@@ -326,7 +332,7 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
struct create_tag_options opt;
char *cleanup_arg = NULL;
int create_reflog = 0;
- int annotate = 0, force = 0;
+ int annotate = -1, force = 0;
int cmdmode = 0;
const char *msgfile = NULL, *keyid = NULL;
struct msg_arg msg = { 0, STRBUF_INIT };
@@ -381,16 +387,20 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
argc = parse_options(argc, argv, prefix, options, git_tag_usage, 0);
+ if (argc == 0 && !cmdmode)
+ cmdmode = 'l';
+
+ if (!cmdmode && sign_tag_config && annotate < 1)
+ opt.sign = 1;
+
if (keyid) {
opt.sign = 1;
set_signing_key(keyid);
}
if (opt.sign)
annotate = 1;
- if (argc == 0 && !cmdmode)
- cmdmode = 'l';
- if ((annotate || msg.given || msgfile || force) && (cmdmode != 0))
+ if ((annotate > 0 || msg.given || msgfile || force) && (cmdmode != 0))
usage_with_options(git_tag_usage, options);
finalize_colopts(&colopts, -1);
@@ -474,7 +484,7 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
else
die(_("Invalid cleanup mode %s"), cleanup_arg);
- if (annotate)
+ if (annotate > 0)
create_tag(object, tag, &buf, &opt, prev, object);
transaction = ref_transaction_begin(&err);
diff --git a/t/t7004-tag.sh b/t/t7004-tag.sh
index cf3469b..7791d00 100755
--- a/t/t7004-tag.sh
+++ b/t/t7004-tag.sh
@@ -775,6 +775,39 @@ test_expect_success GPG '-s implies annotated tag' '
test_cmp expect actual
'
+get_tag_header config-implied-annotate $commit commit $time >expect
+./fakeeditor >>expect
+echo '-----BEGIN PGP SIGNATURE-----' >>expect
+test_expect_success GPG \
+ 'git tag -s implied if configured with tag.gpgsign' \
+ 'test_config tag.gpgsign true &&
+ GIT_EDITOR=./fakeeditor git tag config-implied-annotate &&
+ get_tag_msg config-implied-annotate >actual &&
+ test_cmp expect actual
+'
+
+get_tag_header config-implied-annotate-disabled $commit commit $time >expect
+echo "A message" >>expect
+test_expect_success GPG \
+ 'git tag -a disable configured tag.gpgsign' \
+ 'test_config tag.gpgsign true &&
+ git tag -a -m "A message" config-implied-annotate-disabled &&
+ get_tag_msg config-implied-annotate-disabled >actual &&
+ test_cmp expect actual &&
+ test_must_fail git tag -v config-implied-annotate-disabled
+'
+
+get_tag_header config-disabled-gpgsign $commit commit $time >expect
+echo "A message" >>expect
+echo '-----BEGIN PGP SIGNATURE-----' >>expect
+test_expect_success GPG \
+ 'git tag --sign enable GPG sign' \
+ 'test_config tag.gpgsign false &&
+ git tag --sign -m "A message" config-disabled-gpgsign &&
+ get_tag_msg config-disabled-gpgsign >actual &&
+ test_cmp expect actual
+'
+
test_expect_success GPG \
'trying to create a signed tag with non-existing -F file should fail' '
! test -f nonexistingfile &&
--
2.7.0
next prev parent reply other threads:[~2016-03-21 20:50 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-19 18:23 [PATCH] Add the tag.gpgsign option to sign all created tags Laurent Arnoud
2016-03-20 4:29 ` Jeff King
2016-03-20 12:20 ` Laurent Arnoud
2016-03-20 16:52 ` Jeff King
2016-03-20 17:44 ` Laurent Arnoud
2016-03-20 15:07 ` [PATCH v2] " Laurent Arnoud
2016-03-20 16:38 ` Ramsay Jones
2016-03-21 5:50 ` Junio C Hamano
2016-03-21 19:29 ` Laurent Arnoud
2016-03-21 19:43 ` Junio C Hamano
2016-03-21 20:01 ` Laurent Arnoud
2016-03-21 20:04 ` Jeff King
2016-03-21 20:50 ` Laurent Arnoud [this message]
2016-03-21 21:26 ` [PATCH v4] Add the tag.gpgsign option to sign annotated tags Junio C Hamano
2016-03-22 19:36 ` [PATCH v5] Add the option to force " Laurent Arnoud
2016-03-22 19:48 ` Junio C Hamano
2016-03-22 20:07 ` Laurent Arnoud
2016-03-22 20:41 ` [PATCH v6] " Laurent Arnoud
2016-03-21 22:06 ` [PATCH v2] Add the tag.gpgsign option to sign all created tags Junio C Hamano
2016-03-21 19:32 ` [PATCH v3] Add the tag.gpgsign option to sign annotated tags Laurent Arnoud
2016-03-21 19:42 ` Jeff King
2016-03-21 19:53 ` [PATCH v2] Add the tag.gpgsign option to sign all created tags Jeff King
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=20160321205015.GF20083@spk-laptop \
--to=laurent@spkdev.net \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=peff@peff.net \
/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.