All of lore.kernel.org
 help / color / mirror / Atom feed
From: "SZEDER Gábor" <szeder.dev@gmail.com>
To: Bagas Sanjaya <bagasdotme@gmail.com>
Cc: Git Users <git@vger.kernel.org>, Jakub Wilk <jwilk@jwilk.net>,
	Jonathan Nieder <jrnieder@gmail.com>,
	Junio C Hamano <gitster@pobox.com>
Subject: Re: git tag -h fatal error with global tag.sort config
Date: Sun, 12 Sep 2021 15:27:57 +0200	[thread overview]
Message-ID: <20210912132757.GC76263@szeder.dev> (raw)
In-Reply-To: <0daf6907-b472-a756-1240-4c78f8f4d37e@gmail.com>

On Sun, Sep 12, 2021 at 06:28:54PM +0700, Bagas Sanjaya wrote:
> I stumbled on Debian bug report [1], and I can reproduce the bug.
> 
> In global config (~/.gitconfig), I set:
> 
> ```
> [tag]
> 	sort = creatordate
> ```
> 
> When I run `git tag -h` inside a Git repository (such as git.git), instead
> of usage summary, I got:
> 
> ```
> fatal: not a git repository, but the field 'creatordate' requires access to
> object data
> ```
> 
> But plain `git tag` works fine.
> 
> This bug occurs on v2.33.0 as well as version in the original bug report
> (v2.26.0-rc2) and v2.25.1.
> 
> [1]: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=954811

Interesting.  It bisects to 47bd3d0c14 (ref-filter: don't look for
objects when outside of a repository, 2018-11-14), which, based on the
error message, kind of makes sense, because 'git tag' uses the general
ref-filter sorting facility.  Now, even if 'git tag -h' is executed in
a repository, since 99caeed05d (Let 'git <command> -h' show usage
without a git dir, 2009-11-09) run_builtin() special-cases the '-h'
option and does not call setup_git_directory(), so cmd_tag() and
everything invoked from within will mistakenly think that there is no
repository.  And cmd_tag() parses the config before parsing the
options (of course, otherwise command line options couldn't override
the config), so it hits this die() before parse_options would get a
change to act on the '-h' option.

Now, 'git branch' uses the same ref-filter sorting, but the equivalent
'git -c branch.sort=creatordate branch -h' command does show the usage
as expected.  The relevant difference between cmd_branch() and
cmd_tag() is that the former special-cases the '-h' option as well
just before it would call git_config().  Doing the same in cmd_tag()
like in the patch below seems to fix this issue, but I'm not sure that
this is the right fix.


  ---  >8  ---

diff --git a/builtin/tag.c b/builtin/tag.c
index 065b6bf093..31b8cc4600 100644
--- a/builtin/tag.c
+++ b/builtin/tag.c
@@ -485,6 +485,9 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
 
 	setup_ref_filter_porcelain_msg();
 
+	if (argc == 2 && !strcmp(argv[1], "-h"))
+		usage_with_options(git_tag_usage, options);
+
 	git_config(git_tag_config, sorting_tail);
 
 	memset(&opt, 0, sizeof(opt));


  reply	other threads:[~2021-09-12 13:28 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-12 11:28 git tag -h fatal error with global tag.sort config Bagas Sanjaya
2021-09-12 13:27 ` SZEDER Gábor [this message]
2021-09-12 21:39   ` Jeff King
2021-09-13  4:37   ` Bagas Sanjaya
2021-10-18  5:24   ` Bagas Sanjaya

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=20210912132757.GC76263@szeder.dev \
    --to=szeder.dev@gmail.com \
    --cc=bagasdotme@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=jrnieder@gmail.com \
    --cc=jwilk@jwilk.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.