git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: Mathias Rav <m@git.strova.dk>
Cc: git@vger.kernel.org, peff@peff.net, pwagland@gmail.com
Subject: Re: [PATCH] revision: ignore non-existent objects in resolve-undo list
Date: Tue, 18 Oct 2022 09:32:35 -0700	[thread overview]
Message-ID: <xmqqfsflum70.fsf@gitster.g> (raw)
In-Reply-To: <20221018175530.086c8c74@apus> (Mathias Rav's message of "Tue, 18 Oct 2022 17:55:30 +0200")

Mathias Rav <m@git.strova.dk> writes:

> Garbage collection could inadvertently prune blobs mentioned only in the
> resolve-undo extension prior to the bugfix in 5a5ea141e7
> ("revision: mark blobs needed for resolve-undo as reachable", 2022-06-09).

Older versions of Git did not consider blobs referenced by the
resolve-undo as reachable, and allowed "git gc" to expire them out
of existence.  And "git fsck" in these versions did report that
these blobs are unreachable.

Newer versions of Git on the other hand do consider these blobs as
reachable, so "git gc" would not expire them.  And "git fsck" would
complain when they are missing, because by definition we should not
lose reachable objects.

The error discussed recently on the list was only because older
version was used to "git gc" away blobs that are still in use.

I think the right solution for such a transitory error is not to
hide the problem and pretend that such a blob reference does not
exist, which is what ...

> Fix the error by emitting a warning when the resolve-undo list mentions
> objects that do not exist and then ignoring the nonexistent object.

... this approach is about.  I think it is backwards to sweep the
problem under the rug without fixing the underlying problem.

We should instead be removing the reference that is no longer even
usable for the purpose of resolve-undo, e.g. when "rerere forget
<pathspec>" reads from the resolve-undo extension to recreate the
conflicts.

Perhaps "git reflog --state-fix" is a good model to follow.  Back
when the option was introduced, we found that there was a buggy
implementation of "git gc" that did not consider commits referenced
by reflog entries reachable and removed them, breaking "git reflog".
The solution was to remove these reflog entries that accidentally
lost commits that they reference because they no longer are usable.

The manual procedure Peff gave in the thread does work OK, but if it
makes it more friendly, a new option to "update-index" to fix the
index file by removing things that refer to missing objects would
not be a bad idea.

Thanks.

  reply	other threads:[~2022-10-18 16:32 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-10-18 15:55 [PATCH] revision: ignore non-existent objects in resolve-undo list Mathias Rav
2022-10-18 16:32 ` Junio C Hamano [this message]
2022-10-18 16:40   ` Junio C Hamano
2022-10-18 20:29     ` Jeff King

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=xmqqfsflum70.fsf@gitster.g \
    --to=gitster@pobox.com \
    --cc=git@vger.kernel.org \
    --cc=m@git.strova.dk \
    --cc=peff@peff.net \
    --cc=pwagland@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).