git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: Re: [git] Re: "git stash list" shows HEAD reflog

From
Dave Olszewski <cxreg@pobox.com>
Date
Mar 13, 2010, 21:21 UTC
Message-ID
<alpine.DEB.2.00.1003131312540.796@narbuckle.genericorp.net>
In-Reply-To
<4B9BF171.2000102@lsrfire.ath.cx>
On Sat, 13 Mar 2010, Ren? Scharfe wrote:
Show 26 quoted lines
> 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.

Show 59 quoted lines
> ---
> 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
>
>
>
Previous: René ScharfeNext: René Scharfe
Message 5 of 11 in “"git stash list" shows HEAD reflog”
  1. Vladimir PanteleevMar 12, 2010
  2. René ScharfeMar 13, 2010
  3. Dave OlszewskiMar 13, 2010
  4. René ScharfeMar 13, 2010
  5. Dave OlszewskiMar 13, 2010
  6. René ScharfeMar 13, 2010
  7. don't use default revision if a rev was specifiedDave Olszewski, Mar 13, 2010
  8. René ScharfeMar 13, 2010
  9. Junio C HamanoMar 14, 2010
  10. Pete HarlanMar 13, 2010
  11. René ScharfeMar 13, 2010

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.