Re: bug: git shows hints that should be suppressed

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 25/03/19 07:45AM, Elijah Newren wrote:
> On Wed, Mar 19, 2025 at 2:59 AM <alan@xxxxxxxxxxxx> wrote:
> >
> > Thank you for filling out a Git bug report!
> > Please answer the following questions to help us understand your issue.
> >
> > What did you do before the bug happened? (Steps to reproduce your issue)
> > `GIT_CONFIG_GLOBAL=/dev/null GIT_CONFIG_SYSTEM=/dev/null GIT_CONFIG_NOSYSTEM=0 GIT_ADVICE=0 git clone --quiet /Volumes/sourcecode/npm-packages/packages/repository-tools/node_modules/.cache/@altano/repository-tools/2078b9db1d71a4f4a5422e25a7016c75/git.bundle .`
> >
> > What did you expect to happen? (Expected behavior)
> > I would expect the clone to happen without any hints because I provided both `GIT_ADVICE=0` _and_ `--quiet` to the command. Both should suppress the hint.
> >
> > What happened instead? (Actual behavior)
> > I received the "hint: Using 'master' as the name for the initial branch. This default branch name" on stderr, which caused my tests to fail (I am using git programmatically in a test).
> >
> > What's different between what you expected and what actually happened?
> > The hint on stderr was displayed.
> >
> > Anything else you want to add:
> > This behavior is NOT observed on git v2.44.0 and is observed on git v2.48.1. So the bug started occurring somewhere in between those versions. I can find the exact version the bug was introduced manually with some effort if that would be helpful.
> 
> Bisects to 199f44cb2ead (builtin/clone: allow remote helpers to detect
> repo, 2024-02-27); cc'ing its author.

It looks like prior to 199f44cb2ead (builtin/clone: allow remote helpers
to detect repo, 2024-02-27), the default branch name advice message
would never be printed when cloning from a bundle regardless of whether
`--quiet` option was set. This particual advice message also doesn't
respect `GIT_ADVICE` either. So something about the change has made the
message start printing when it previously did not.

Digging a bit further, this change started partially initializing the
refdb with a HEAD file which had a side-effect of changing the location
where the first `git_default_branch_name()` was invoked. This matters
because `git_default_branch_name()` only computes the default branch
name once and uses a cached value for subsequent invocations.

Previously, `create_reference_database()` was the first
`git_default_branch_name()` call site and was configured to always
suppress the advice message. Due to the refdb being partially
initialized with a HEAD file, `create_reference_database()` stopped
invoking `git_default_branch_name()` altogether and the default branch
name computation was defferred to a subsequent potential call site
`guess_remote_head()`. At this location, `git_default_branch_name()` is
configured to not suppress advice messages.

Also, `guess_remote_head()` only invokes `git_default_branch_name()` in
cases where the transport is unable to figure out the remote HEAD and
must guess. This explains why the advice message gets printed for bundle
clones, but not all clones.

One option to fix this would be to adapt `guess_remote_head()` to
support configuring the underlying `git_default_branch_name()`, which
has since been renamed to `repo_default_branch_name()`, to be quiet and
suppress the advice message. The call site in clone could then be
updated accordingly.

I'll submit a patch that does this.

-Justin




[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux