From: Jacob Keller <jacob.e.keller@intel.com>
To: Phil Hord <phil.hord@gmail.com>, Jeff King <peff@peff.net>
Cc: <git@vger.kernel.org>
Subject: Re: [RFC PATCH 0/2] fetch --prune performance problem
Date: Mon, 23 Jun 2025 16:32:35 -0700 [thread overview]
Message-ID: <f11bf463-0005-43d2-b642-ede130d1f44c@intel.com> (raw)
In-Reply-To: <CABURp0p4d0JPg=-cW1OZdFQJ+vNT_0PDd9Rv3oz6toFGqGv5=g@mail.gmail.com>
On 6/23/2025 4:11 PM, Phil Hord wrote:
> On Wed, Jun 18, 2025 at 8:37 PM Jeff King <peff@peff.net> wrote:
>> On Wed, Jun 18, 2025 at 04:15:03PM -0700, Jacob Keller wrote:
>>> On 6/18/2025 2:08 PM, Phil Hord wrote:
>>>> My patch fixes this for fetch, but it affects the command's output
> order.
>>>> Currently the results look like this:
>>>>
>>>> - [deleted] (none) -> origin/bar
>>>> (origin/bar has become dangling)
>>>> - [deleted] (none) -> origin/baz
>>>> - [deleted] (none) -> origin/foo
>>>> (origin/foo has become dangling)
>>>> - [deleted] (none) -> origin/frotz
>>>>
>>>> After my change, the order will change so the danglers are reported
> at the end.
>>>>
>>>> - [deleted] (none) -> origin/bar
>>>> - [deleted] (none) -> origin/baz
>>>> - [deleted] (none) -> origin/foo
>>>> - [deleted] (none) -> origin/frotz
>>>> (origin/bar has become dangling)
>>>> (origin/foo has become dangling)
>>>
>>> Personally, I like the later output. I have no idea why anyone would be
>>> specifically scripting something that depends on the ordering being such
>>> that dangling messages are printed immediately.
>>
>> I think the original ordering tells you which deletion caused the ref to
>> become dangling. Phil's example is a little confusing here:
>>
>> - [deleted] (none) -> origin/bar
>> (origin/bar has become dangling)
>>
>> because the name is the same in both cases. A more likely output is that
>> origin/HEAD becomes dangling (since it's the only symref Git ever
>> automatically points at a tracking ref). E.g., in this:
>>
>> git init repo
>> cd repo
>>
>> git commit --allow-empty -m foo
>> git branch some
>> git branch other
>> git branch branches
>>
>> git clone . child
>> cur=$(git symbolic-ref --short HEAD)
>> git checkout some
>> git branch -d other branches $cur
>>
>> cd child
>> git fetch --prune
>
> Thanks for the helpful demo and clarification of the real output.
>
>> The final fetch output looks like:
>>
>> - [deleted] (none) -> origin/branches
>> - [deleted] (none) -> origin/main
>> (refs/remotes/origin/HEAD has become dangling)
>> - [deleted] (none) -> origin/other
>>
>> and we can see that the deletion of "main" is what caused the dangling.
>>
>> That said, I'm not sure I care that much. I didn't even know we had this
>> dangling message, and it's been around for over 15 years!
>>
>> If we did want to preserve the ordering, it could be done by taking two
>> passes (the first to create a reverse map of deletions to danglers, and
>> then the second to print each ref).
>>
>> Alternatively, the dangling message could just mention where it the
>> now-dangling symref points at, something like:
>>
>> - [deleted] (none) -> origin/branches
>> - [deleted] (none) -> origin/main
>> - [deleted] (none) -> origin/other
>> (refs/remotes/origin/HEAD points to the now-deleted origin/main)
>
> I have a new patch that produces this:
>
> + git fetch --prune --dry-run
> From /tmp/repo/.
> - [deleted] (none) -> origin/branches
> - [deleted] (none) -> origin/master
> - [deleted] (none) -> origin/other
> origin/HEAD will become dangling after origin/master is deleted
>
It is a bit weird that this says "will become dangling after <ref> is
deleted" because the deletion already happened.
next prev parent reply other threads:[~2025-06-23 23:32 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-06-18 21:08 [RFC PATCH 0/2] fetch --prune performance problem Phil Hord
2025-06-18 21:08 ` [RFC PATCH 1/2] fetch-prune: optimize dangling-ref reporting Phil Hord
2025-06-18 21:50 ` Junio C Hamano
2025-06-18 23:18 ` Jacob Keller
2025-06-19 4:00 ` Jeff King
2025-06-19 11:01 ` Lidong Yan
2025-06-19 14:41 ` Lidong Yan
2025-06-18 21:08 ` [RFC PATCH 2/2] refs: remove old refs_warn_dangling_symref Phil Hord
2025-06-18 23:15 ` [RFC PATCH 0/2] fetch --prune performance problem Jacob Keller
2025-06-19 3:37 ` Jeff King
2025-06-19 17:18 ` Junio C Hamano
[not found] ` <CABURp0p4d0JPg=-cW1OZdFQJ+vNT_0PDd9Rv3oz6toFGqGv5=g@mail.gmail.com>
2025-06-23 23:32 ` Jacob Keller [this message]
2025-06-23 23:41 ` Junio C Hamano
[not found] ` <CABURp0q-1FGmD+PJeSQ=xvyDN6ZYn1O7Fh8i1OojfD2WQCqgcw@mail.gmail.com>
2025-06-23 23:46 ` Jacob Keller
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=f11bf463-0005-43d2-b642-ede130d1f44c@intel.com \
--to=jacob.e.keller@intel.com \
--cc=git@vger.kernel.org \
--cc=peff@peff.net \
--cc=phil.hord@gmail.com \
/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).