From: Junio C Hamano <gitster@pobox•com>
To: Laurent Arnoud <laurent@spkdev•net>
Cc: Jeff King <peff@peff•net>, git@vger•kernel.org
Subject: Re: [PATCH v4] Add the tag.gpgsign option to sign annotated tags
Date: Mon, 21 Mar 2016 14:26:23 -0700 [thread overview]
Message-ID: <xmqqa8lrldz4.fsf@gitster.mtv.corp.google.com> (raw)
In-Reply-To: <20160321205015.GF20083@spk-laptop> (Laurent Arnoud's message of "Mon, 21 Mar 2016 21:50:15 +0100")
Laurent Arnoud <laurent@spkdev•net> writes:
> @@ -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;
I really do not like this part of the change. The original code is
already bad in the sense that it uses "annotate" to mean "we need to
create a tag object, not just a lightweight tag" in some places
which already needs careful reading, but with this it no longer is
clear what this argument even means. It sometimes means "we are
creating a tag object" and some other times means "we did not see
'-a' on the command line" but only until the variable gets assigned
by existing "if opt.sign is there, set it to true" tweaking.
I wonder if an approach like the following would result in a cleaner
code that is easier to maintain:
- Leave this to be initialized to 0, allow it to be toggled upon
seeing "-a" via the parse_options() mechanism, but redefine its
meaning to be "-a option was passed". Make it never be touched
by anything else (e.g. "if (opt.sign) annotate = 1;" is wrong).
- Introduce a new "create_tag_object" variable, initialized to 0.
Existing code that sets "annotate = 1" (e.g. "-s" is passed,
"-m/-F" is passed, etc.) will instead set this variable. The
condition of if() statement to call create_tag() would also be
looking at this variable, not "annotate".
- Before calling create_tag(), look at the value of your new
configuration and "annotate", and set opt.sign as needed.
A patch to do so might look something like this (totally untested).
builtin/tag.c | 20 ++++++++++++++------
1 file changed, 14 insertions(+), 6 deletions(-)
diff --git a/builtin/tag.c b/builtin/tag.c
index 1705c94..d262f92 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 int force_sign_annotate;
static int list_tags(struct ref_filter *filter, struct ref_sorting *sorting, const char *format)
{
@@ -168,6 +169,10 @@ static int git_tag_config(const char *var, const char *value, void *cb)
return status;
if (starts_with(var, "column."))
return git_column_config(var, value, "tag", &colopts);
+ if (!strcmp(var, "tag.forcesignannotated")) {
+ force_sign_annotate = git_config_bool(var, value);
+ return 0;
+ }
return git_default_config(var, value, cb);
}
@@ -327,7 +332,7 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
char *cleanup_arg = NULL;
int create_reflog = 0;
int annotate = 0, force = 0;
- int cmdmode = 0;
+ int cmdmode = 0, create_tag_object = 0;
const char *msgfile = NULL, *keyid = NULL;
struct msg_arg msg = { 0, STRBUF_INIT };
struct ref_transaction *transaction;
@@ -385,12 +390,12 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
opt.sign = 1;
set_signing_key(keyid);
}
- if (opt.sign)
- annotate = 1;
+ if (opt.sign || annotate)
+ create_tag_object = 1;
if (argc == 0 && !cmdmode)
cmdmode = 'l';
- if ((annotate || msg.given || msgfile || force) && (cmdmode != 0))
+ if ((create_tag_object || msg.given || msgfile || force) && (cmdmode != 0))
usage_with_options(git_tag_usage, options);
finalize_colopts(&colopts, -1);
@@ -431,7 +436,7 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
if (msg.given || msgfile) {
if (msg.given && msgfile)
die(_("only one -F or -m option is allowed."));
- annotate = 1;
+ create_tag_object = 1;
if (msg.given)
strbuf_addbuf(&buf, &(msg.buf));
else {
@@ -474,8 +479,11 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
else
die(_("Invalid cleanup mode %s"), cleanup_arg);
- if (annotate)
+ if (create_tag_object) {
+ if (force_sign_annotate && !annotate)
+ opt.sign = 1;
create_tag(object, tag, &buf, &opt, prev, object);
+ }
transaction = ref_transaction_begin(&err);
if (!transaction ||
next prev parent reply other threads:[~2016-03-21 21:26 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 ` [PATCH v4] Add the tag.gpgsign option to sign annotated tags Laurent Arnoud
2016-03-21 21:26 ` Junio C Hamano [this message]
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=xmqqa8lrldz4.fsf@gitster.mtv.corp.google.com \
--to=gitster@pobox$(echo .)com \
--cc=git@vger$(echo .)kernel.org \
--cc=laurent@spkdev$(echo .)net \
--cc=peff@peff$(echo .)net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox