From: "Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
To: Johannes Schindelin via GitGitGadget <gitgitgadget@gmail.com>
Cc: git@vger.kernel.org, Jeff King <peff@peff.net>,
Junio C Hamano <gitster@pobox.com>,
Johannes Schindelin <johannes.schindelin@gmx.de>
Subject: Re: [PATCH 1/4] rebase -i: demonstrate obscure loose object cache bug
Date: Wed, 13 Mar 2019 17:11:44 +0100 [thread overview]
Message-ID: <87k1h2bvpb.fsf@evledraar.gmail.com> (raw)
In-Reply-To: <b3fcd377652103584b6f307c6ee209980b44529f.1552472189.git.gitgitgadget@gmail.com>
On Wed, Mar 13 2019, Johannes Schindelin via GitGitGadget wrote:
> From: Johannes Schindelin <johannes.schindelin@gmx.de>
>
> We specifically support `exec` commands in `git rebase -i`'s todo lists
> to rewrite the very same todo list. Of course, we need to validate that
> todo list when re-reading it.
>
> It is also totally legitimate to extend the todo list by `pick` lines
> using short names of commits that were created only after the rebase
> started.
>
> And this is where the loose object cache interferes with this feature:
> if *some* loose object was read whose hash shares the same first two
> digits with a commit that was not yet created when that loose object was
> created, then we fail to find that new commit by its short name in
> `get_oid()`, and the interactive rebase fails with an obscure error
> message like:
>
> error: invalid line 1: pick 6568fef
> error: please fix this using 'git rebase --edit-todo'.
As a further improvement, is there a good reason for why we wouldn't
pass something down to the oid machinery to say "we're only interested
in commits". I have a WIP series somewhere to generalize that more, but
e.g. here locally:
$ git rev-parse 80b06
error: short SHA1 80b06 is ambiguous
hint: The candidates are:
hint: 80b06b942e commit 2019-03-13 - Revert "this patch fail whales"
hint: 80b063bb9b blob
hint: 80b06f0714 blob
80b06
$ git rev-parse 80b06^{commit}
80b06b942ed33e597a0152b3e6ba45b7d8ead94b
I can't remember if there's some caveat with that particular peel syntax
I meant to fix, but I mean if we could pass something down to say "no
blobs or trees" shouldn't we?
Then stuff like this wouldn't die:
$ git rebase -i
hint: Waiting for your editor to close the file... Waiting for Emacs...
error: short SHA1 80b06 is ambiguous
hint: The candidates are:
hint: 80b06b942e commit 2019-03-13 - Revert "this patch fail whales"
hint: 80b063bb9b blob
hint: 80b06f0714 blob
error: invalid line 2: p 80b06 Revert "this patch fail whales"
You can fix this with 'git rebase --edit-todo' and then run 'git rebase --continue'.
> [...]
> +test_expect_failure SHA1 'loose object cache vs re-reading todo list' '
> + GIT_REBASE_TODO=.git/rebase-merge/git-rebase-todo &&
> + export GIT_REBASE_TODO &&
> + write_script append-todo.sh <<-\EOS &&
> + # For values 5 and 6, this yields SHA-1s with the same first two digits
> + echo "pick $(git rev-parse --short \
> + $(printf "%s\\n" \
> + "tree $EMPTY_TREE" \
> + "author A U Thor <author@example.org> $1 +0000" \
> + "committer A U Thor <author@example.org> $1 +0000" \
> + "" \
> + "$1" |
> + git hash-object -t commit -w --stdin))" >>$GIT_REBASE_TODO
> +
> + shift
> + test -z "$*" ||
> + echo "exec $0 $*" >>$GIT_REBASE_TODO
> + EOS
> +
> + git rebase HEAD -x "./append-todo.sh 5 6"
> +'
> +
> test_done
This is a test for rebase, but perhaps it would be best put in
t1512-rev-parse-disambiguation.sh. Then when we finally port that
somehow to SHA256 we'll have all this SHA-1 golfing in the same file &
can fix it at once. Just a thought...
next prev parent reply other threads:[~2019-03-13 16:11 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-03-13 10:16 [PATCH 0/4] get_oid: cope with a possibly stale loose object cache Johannes Schindelin via GitGitGadget
2019-03-13 10:16 ` [PATCH 1/4] rebase -i: demonstrate obscure loose object cache bug Johannes Schindelin via GitGitGadget
2019-03-13 16:11 ` Ævar Arnfjörð Bjarmason [this message]
2019-03-13 16:35 ` Jeff King
2019-03-13 16:53 ` Jeff King
2019-03-13 22:40 ` Johannes Schindelin
2019-03-14 0:07 ` Jeff King
2019-03-13 22:27 ` Johannes Schindelin
2019-03-14 0:05 ` Jeff King
2019-03-14 6:40 ` Johannes Sixt
2019-03-14 13:06 ` Johannes Schindelin
2019-03-14 1:12 ` Junio C Hamano
2019-03-14 12:44 ` Johannes Schindelin
2019-03-13 10:16 ` [PATCH 2/4] sequencer: improve error message when an OID could not be parsed Johannes Schindelin via GitGitGadget
2019-03-14 1:14 ` Junio C Hamano
2019-03-13 10:16 ` [PATCH 3/4] sequencer: move stale comment into correct location Johannes Schindelin via GitGitGadget
2019-03-13 10:16 ` [PATCH 4/4] get_oid(): when an object was not found, try harder Johannes Schindelin via GitGitGadget
2019-03-14 1:29 ` Junio C Hamano
2019-03-14 2:22 ` Jeff King
2019-03-14 2:40 ` Jeff King
2019-03-14 4:05 ` Junio C Hamano
2019-03-14 18:55 ` Jeff King
2019-03-14 3:49 ` Junio C Hamano
2019-03-14 13:17 ` Johannes Schindelin
2019-03-14 18:57 ` Jeff King
2019-03-14 19:55 ` Johannes Schindelin
2019-03-13 15:33 ` [PATCH 0/4] get_oid: cope with a possibly stale loose object cache Jeff King
2019-03-14 15:33 ` [PATCH v2 0/4] get_short_oid: " Johannes Schindelin via GitGitGadget
2019-03-14 15:33 ` [PATCH v2 1/4] rebase -i: demonstrate obscure loose object cache bug Johannes Schindelin via GitGitGadget
2019-03-14 15:33 ` [PATCH v2 2/4] sequencer: improve error message when an OID could not be parsed Johannes Schindelin via GitGitGadget
2019-03-14 15:33 ` [PATCH v2 3/4] sequencer: move stale comment into correct location Johannes Schindelin via GitGitGadget
2019-03-14 15:33 ` [PATCH v2 4/4] get_oid(): when an object was not found, try harder Johannes Schindelin via GitGitGadget
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=87k1h2bvpb.fsf@evledraar.gmail.com \
--to=avarab@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitgitgadget@gmail.com \
--cc=gitster@pobox.com \
--cc=johannes.schindelin@gmx.de \
--cc=peff@peff.net \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.