From: Dave Olszewski Date: Sat, 13 Mar 2010 21:21:15 GMT Subject: Re: Re: [git] Re: "git stash list" shows HEAD reflog Message-ID: In-Reply-To: <4B9BF171.2000102@lsrfire.ath.cx> On Sat, 13 Mar 2010, Ren? Scharfe wrote: > Am 13.03.2010 18:41, schrieb Dave Olszewski: >> On Sat, 13 Mar 2010, Ren? Scharfe wrote: >> >>> Am 12.03.2010 15:52, schrieb Vladimir Panteleev: >> >>>> 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. >> >> Dave > > Perhaps 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. > --- > 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 > > >