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@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html