On Wed, Feb 06, 2019 at 01:26:12PM -0500, Jeff King wrote: > On Wed, Feb 06, 2019 at 10:28:34AM +0100, Ævar Arnfjörð Bjarmason wrote: > > > I did some further digging. One of the confusing things is that we've > > been carrying dead code since 2012 to set this > > author_ident_explicitly_given variable. We can just apply this on top of > > master: > > [...] > > @@ -434,6 +432,2 @@ const char *git_author_info(int flag) > > { > > - if (getenv("GIT_AUTHOR_NAME")) > > - author_ident_explicitly_given |= IDENT_NAME_GIVEN; > > - if (getenv("GIT_AUTHOR_EMAIL")) > > - author_ident_explicitly_given |= IDENT_MAIL_GIVEN; > > return fmt_ident(getenv("GIT_AUTHOR_NAME"), > > Yeah, that would be OK with me. It's conceivable somebody ask "was the author > ident sufficiently given", but given that 7 years have passed, it seems > unlikely (and it's easy to resurrect it in the worst case). > > But... > > > A more complete "fix" is to entirely revert Jeff's d6991ceedc ("ident: > > keep separate "explicit" flags for author and committer", > > 2012-11-14). As he noted in 2012 > > (https://public-inbox.org/git/20121128182534.GA21020@xxxxxxxxxxxxxxxxxxxxx/): > > > > I do not know if anybody will ever care about the corner cases it > > fixes, so it is really just being defensive for future code. > > I think that reintroduces some oddness. E.g., if I don't have any ident > information set in config or the environment, and I do: > > GIT_AUTHOR_NAME=me GIT_AUTHOR_EMAIL=me@xxxxxxxxxxx git commit ... > > that shouldn't count as "committer ident sufficiently given", and should > still give a warning. So we wouldn't want to conflate them in a single > flag (which is what d6991ceedc fixed). Curiously, though, I'm not sure > you can trigger the problem through git-commit. It does call > committer_ident_sufficiently_given(), but it never calls > git_author_info(), where we set the flags! > > Instead, it does its own parse via determine_author_info(), which does > not bother to set the "explicit" flag at all. I suspect this could be > refactored share more code with git_author_info() (which is what the > plumbing commit-tree uses). But that's all a side note here. > > There is one other call to check that the committer ident is > sufficiently given, and that's in sequencer.c, when it prints a picked > commit's info. That _might_ be triggerable (it doesn't call > git_author_info() in that code path, but do_merge() does, so if the two > happen in the same process, you'd not see the "Committer:" info line > when you should). > > So the bugs are minor and fairly unlikely. But I do think it's worth > keeping the flags separate (even if we don't bother carrying an "author" > one), just because it's an easy mistake to make. > > An alternative view is that anybody who calls git_author_info() to > create a commit _should_ be checking author_ident_sufficiently_given(), > and it's a bug that they're not. > > I.e., should we be doing something like this (and probably some other > spots, too): > > diff --git a/commit.c b/commit.c > index a5333c7ac6..c99b311a48 100644 > --- a/commit.c > +++ b/commit.c > @@ -1419,8 +1419,11 @@ int commit_tree_extended(const char *msg, size_t msg_len, > } > > /* Person/date information */ > - if (!author) > + if (!author) { > author = git_author_info(IDENT_STRICT); > + if (!author_ident_sufficiently_given()) > + warning("your author ident was auto-detected, etc..."); > + } > strbuf_addf(&buffer, "author %s\n", author); > strbuf_addf(&buffer, "committer %s\n", git_committer_info(IDENT_STRICT)); > if (!encoding_is_utf8) > > I dunno. It seems pretty low priority, and nobody has even noticed after > all these years. So I'm not sure if it's worth spending too much time on > it. Given this info (which came in while I was writing my last email), I would rather see my v5 patch get in then we fix everything else later. Junio, what do you think? Thanks, William