Re: [PATCH] Revert "reflog expire: don't use lookup_commit_reference_gently()"

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

 



On Tue, Jul 16, 2024 at 12:56:25PM -0700, Junio C Hamano wrote:

> During Git 2.35 timeframe, daf1d828 (reflog expire: don't use
> lookup_commit_reference_gently(), 2021-12-22) replaced a call to
> lookup_commit_reference_gently() with a call to lookup_commit().
> 
> What it failed to consider was that our refs do not necessarily
> point at commits (most notably, we have annotated and signed tags),
> and more importantly that lookup_commit() does not dereference a tag
> to return a commit; instead it returns NULL when a tag is given.
> 
> Since the commit returned is used as a starting point for the
> reachability check, this ejected the commits that are reachable only
> by an annotated tag out of the set of reachable commits, breaking
> the computation to correctly implement the "--expire-unreachable"
> option.  We also started giving an error message that the API
> function expected to be fed a commit object.

Yikes. I guess this is at least only for reflog pruning, so you couldn't
corrupt a repo this way, only lose reflog entries. But still, I think
your revert here is the right thing.

It does make me wonder if there other gaps for reflogs that point to
non-commits. E.g., if I have a tag pointing to a blob, would we save its
reflog entry if a reachable commit points to that blob?. I suspect not,
as the full reachability check is very expensive.

But certainly your patch is not making anything worse there.

-Peff




[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