Show 62 quoted lines
> On Mar 19, 2025, at 6:40 PM, Justin Tobler <jltobler@gmail.com> wrote:
>
> On 25/03/19 07:45AM, Elijah Newren wrote:
>>> On Wed, Mar 19, 2025 at 2:59 AM <alan@norbauer.com> 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