From: Justin Tobler <jltobler@gmail.com>
To: git@vger.kernel.org
Cc: ps@pks.im, phillip.wood123@gmail.com, alan@norbauer.com,
Justin Tobler <jltobler@gmail.com>
Subject: [PATCH v3 0/3] clone: suppress unexpected advice message during clone
Date: Mon, 24 Mar 2025 19:51:45 -0500 [thread overview]
Message-ID: <20250325005148.1771502-1-jltobler@gmail.com> (raw)
In-Reply-To: <20250321231639.180762-1-jltobler@gmail.com>
It has been reported[1] that starting in Git v2.45.0, cloning from a bundle
results in the default branch name advice message always being displayed
when it was previously not. It can be reproduced by the following:
git init bundle-repo &&
git -C bundle-repo commit --allow-empty -m init &&
git -C bundle-repo bundle create ../repo.bundle --all &&
git clone repo.bundle bundle-clone
This issue bisects to 199f44cb2ead (builtin/clone: allow remote helpers
to detect repo, 2024-02-27) where the refdb is partially initialized
during clones before remote helpers are executed. This partial
initialization creates the HEAD file and "refs/" directory.
A side-effect of this change is that the location of the first
`git_default_branch_name()` gets deferred to a later point of execution.
This matters because `git_default_branch_name()` only computes the
default branch name once and returns a cached value for subsequent
invocations. After this change, the `git_default_branch_name()` call
site that actually computes the value becomes `guess_remote_head()` and
is configured to always show the advice message.
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.
This series addresses the issue by adapting `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.
Changes since V2:
- The default branch name advice message may also print with the
`--single-branch` option in certain scenarios. This instance
is also suppressed by setting the `REMOTE_GUESS_HEAD_QUIET`
flag for another `guess_remote_head()` call site invoked
during clones.
Changes since V1:
- Instead of adding an additional boolean to
`guess_remote_head()` to suppress the advice message, the
function is adapted to accepts flags that accoplish the same
thing.
- Added a test to validate that the advice message is not being
printed.
- While we are here, added another patch to allow the default
branch name advice message to be suppressrd by the
`--no-advice` option.
Thanks,
-Justin
[1]: <7EC98E2F-144D-4974-94F6-FC24B443651D@norbauer.com>
Justin Tobler (3):
remote: allow `guess_remote_head()` to suppress advice
builtin/clone: suppress unexpected default branch advice
advice: allow disabling default branch name advice
advice.c | 1 +
advice.h | 1 +
builtin/clone.c | 7 +++++--
builtin/fetch.c | 2 +-
builtin/remote.c | 2 +-
refs.c | 3 ++-
remote.c | 10 ++++++----
remote.h | 11 +++++++----
t/t0001-init.sh | 8 ++++++++
t/t5607-clone-bundle.sh | 12 ++++++++++++
10 files changed, 44 insertions(+), 13 deletions(-)
Range-diff against v2:
1: 4dae06d2dd = 1: 4dae06d2dd remote: allow `guess_remote_head()` to suppress advice
2: 1180caabf1 ! 2: 2a69b881c4 builtin/clone: suppress unexpected default branch advice
@@ Commit message
Signed-off-by: Justin Tobler <jltobler@gmail.com>
## builtin/clone.c ##
+@@ builtin/clone.c: static struct ref *wanted_peer_refs(struct clone_opts *opts,
+ if (head)
+ tail_link_ref(head, &tail);
+ if (option_single_branch)
+- refs = to_free = guess_remote_head(head, refs, 0);
++ refs = to_free =
++ guess_remote_head(head, refs,
++ REMOTE_GUESS_HEAD_QUIET);
+ } else if (option_single_branch) {
+ local_refs = NULL;
+ tail = &local_refs;
@@ builtin/clone.c: int cmd_clone(int argc,
}
@@ t/t5607-clone-bundle.sh: test_expect_success 'git bundle v3 rejects unknown capa
+ git -C bundle-repo commit --allow-empty -m init &&
+ git -C bundle-repo bundle create repo.bundle --all &&
+ GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME= \
-+ git clone bundle-repo/repo.bundle clone-repo 2>err &&
++ git clone --single-branch bundle-repo/repo.bundle clone-repo 2>err &&
+
+ test_grep ! "hint: " err
+'
3: 6fef1d070c = 3: 98b32cdc99 advice: allow disabling default branch name advice
base-commit: 683c54c999c301c2cd6f715c411407c413b1d84e
--
2.49.0
next prev parent reply other threads:[~2025-03-25 0:55 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-19 9:53 bug: git shows hints that should be suppressed alan
2025-03-19 9:58 ` alan
2025-03-19 14:45 ` Elijah Newren
2025-03-20 1:36 ` Justin Tobler
2025-03-20 1:46 ` [PATCH 0/2] clone: suppress unexpected advice message during clone Justin Tobler
2025-03-20 1:46 ` [PATCH 1/2] remote: allow `guess_remote_head()` to suppress advice Justin Tobler
2025-03-20 5:13 ` Patrick Steinhardt
2025-03-20 23:30 ` Justin Tobler
2025-03-21 8:52 ` Junio C Hamano
2025-03-20 1:46 ` [PATCH 2/2] clone: suppress unexpected default branch advice Justin Tobler
2025-03-20 5:13 ` Patrick Steinhardt
2025-03-20 23:36 ` Justin Tobler
2025-03-20 11:10 ` [PATCH 0/2] clone: suppress unexpected advice message during clone Phillip Wood
2025-03-20 23:48 ` Justin Tobler
2025-03-21 16:42 ` Phillip Wood
2025-03-21 23:16 ` [PATCH v2 0/3] " Justin Tobler
2025-03-21 23:16 ` [PATCH v2 1/3] remote: allow `guess_remote_head()` to suppress advice Justin Tobler
2025-03-24 9:31 ` Phillip Wood
2025-03-24 15:21 ` Justin Tobler
2025-03-24 19:29 ` phillip.wood123
2025-03-21 23:16 ` [PATCH v2 2/3] builtin/clone: suppress unexpected default branch advice Justin Tobler
2025-03-24 9:32 ` Phillip Wood
2025-03-24 15:35 ` Justin Tobler
2025-03-21 23:16 ` [PATCH v2 3/3] advice: allow disabling default branch name advice Justin Tobler
2025-03-24 9:32 ` Phillip Wood
2025-03-23 19:38 ` [PATCH v2 0/3] clone: suppress unexpected advice message during clone Junio C Hamano
2025-03-25 0:51 ` Justin Tobler [this message]
2025-03-25 0:51 ` [PATCH v3 1/3] remote: allow `guess_remote_head()` to suppress advice Justin Tobler
2025-03-25 0:51 ` [PATCH v3 2/3] builtin/clone: suppress unexpected default branch advice Justin Tobler
2025-03-25 0:51 ` [PATCH v3 3/3] advice: allow disabling default branch name advice Justin Tobler
2025-03-25 14:35 ` [PATCH v3 0/3] clone: suppress unexpected advice message during clone Phillip Wood
2025-03-20 4:05 ` bug: git shows hints that should be suppressed alan
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=20250325005148.1771502-1-jltobler@gmail.com \
--to=jltobler@gmail.com \
--cc=alan@norbauer.com \
--cc=git@vger.kernel.org \
--cc=phillip.wood123@gmail.com \
--cc=ps@pks.im \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).