Re: Re: [git] Re: "git stash list" shows HEAD reflog
From: Dave Olszewski <hidden>
Date: 2016-06-15 22:48:25
On Sat, 13 Mar 2010, Ren? Scharfe wrote:
Am 13.03.2010 18:41, schrieb Dave Olszewski:quoted
On Sat, 13 Mar 2010, Ren? Scharfe wrote:quoted
Am 12.03.2010 15:52, schrieb Vladimir Panteleev:quoted
quoted
That doesn't explain why git displayed the HEAD reflog, though. That seems to happen thanks to the check (revs->def && !revs->pending.nr) in setup_revisions ("HEAD" is the default, as specified in the caller cmd_log_init). It looks like (ideally) git shouldn't rely on whether revs->pending is empty to decide whether to use the default, but rather if a ref was specified by the user or not.We could add some kind of check there, but with the patch applied I can't trigger this second issue any more. It would be nice to have a test script along with such a sanity check. Any idea how to cause this error, perhaps with another type of invalid reflog file?I actually noticed this last week. You can reproduce it by doing "git reflog" on a branch which has been idle for longer than the expiration. Any 0-byte files in logs/refs/heads would give me this same behavior. DavePerhaps something like this?
Maybe, although I'm not sure if dying here is the right behavior. Is an empty reflog really an error? I was testing a patch along the lines of what Vladimir proposed, which was simply to not set the default rev if a valid user-specified argument was found, whether or not it contains commits.
quoted hunk ↗ jump to hunk
--- revision.c | 4 ++++ t/t1411-reflog-show.sh | 13 +++++++++++++ 2 files changed, 17 insertions(+), 0 deletions(-)diff --git a/revision.c b/revision.c index 29721ec..6991475 100644 --- a/revision.c +++ b/revision.c@@ -896,6 +896,7 @@ int handle_revision_arg(const char *arg, struct rev_info *revs,struct object *object; unsigned char sha1[20]; int local_flags; + int empty_after, empty_before = !revs->pending.nr; dotdot = strstr(arg, ".."); if (dotdot) {@@ -971,6 +972,9 @@ int handle_revision_arg(const char *arg, struct rev_info *revs,verify_non_filename(revs->prefix, arg); object = get_reference(revs, arg, sha1, flags ^ local_flags); add_pending_object_with_mode(revs, object, arg, mode); + empty_after = !revs->pending.nr; + if (empty_before && empty_after) + die("bad revision '%s' (empty reflog?)", arg); return 0; }diff --git a/t/t1411-reflog-show.sh b/t/t1411-reflog-show.sh index c18ed8e..3f48c2d 100755 --- a/t/t1411-reflog-show.sh +++ b/t/t1411-reflog-show.sh@@ -64,4 +64,17 @@ test_expect_success 'using --date= shows reflog date (oneline)' 'test_cmp expect actual ' +: >expected.out +cat >expected.err <<'EOF' +fatal: bad revision 'empty' (empty reflog?) +EOF +test_expect_success 'empty reflog file' ' + git branch empty && + : >.git/logs/refs/heads/empty && + + test_must_fail git log -g empty >actual.out 2>actual.err && + test_cmp expected.out actual.out && + test_cmp expected.err actual.err +' + test_done -- 1.7.0.2 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html