[PATCH 1/2] reflog test: add more tests for 'reflog delete'

Subsystems: the rest

DORMANTno replies

2 messages, 1 author, 2016-06-15 · open the first message on its own page

[PATCH 1/2] reflog test: add more tests for 'reflog delete'

From: Pieter de Bie <hidden>
Date: 2016-06-15 22:45:07

This adds more tests for 'reflog delete' and marks it as
broken, as currently a call to 'git reflog delete HEAD@{1}'
deletes entries in the currently checked out branch's log,
not the HEAD log.

Noticed by John Wiegley

Signed-off-by: Pieter de Bie <redacted>
---

	johnw on IRC noticed this. This adds a test that shows the
	problem. The next patch fixes the issue but I'm not sure of
	the implementation. Perhaps we just shouldn't resolve symbolic
	refs? I'm not really sure which functions to use then.

 t/t1410-reflog.sh |   22 ++++++++++++++++++----
 1 files changed, 18 insertions(+), 4 deletions(-)
diff --git a/t/t1410-reflog.sh b/t/t1410-reflog.sh
index 73f830d..3b9860e 100755
--- a/t/t1410-reflog.sh
+++ b/t/t1410-reflog.sh
@@ -175,7 +175,7 @@ test_expect_success 'recover and check' '
 
 '
 
-test_expect_success 'delete' '
+test_expect_failure 'delete' '
 	echo 1 > C &&
 	test_tick &&
 	git commit -m rat C &&
@@ -188,16 +188,30 @@ test_expect_success 'delete' '
 	test_tick &&
 	git commit -m tiger C &&
 
-	test 5 = $(git reflog | wc -l) &&
+	HEAD_entry_count=$(git reflog | wc -l)
+	master_entry_count=$(git reflog show master | wc -l)
+
+	test $HEAD_entry_count = 5 &&
+	test $master_entry_count = 5 &&
+
 
 	git reflog delete master@{1} &&
 	git reflog show master > output &&
-	test 4 = $(wc -l < output) &&
+	test $(($master_entry_count - 1)) = $(wc -l < output) &&
+	test $HEAD_entry_count = $(git reflog | wc -l) &&
 	! grep ox < output &&
 
+	master_entry_count=$(wc -l < output)
+
+	git reflog delete HEAD@{1} &&
+	test $(($HEAD_entry_count -1)) = $(git reflog | wc -l) &&
+	test $master_entry_count = $(git reflog show master | wc -l) &&
+
+	HEAD_entry_count=$(git reflog | wc -l)
+
 	git reflog delete master@{07.04.2005.15:15:00.-0700} &&
 	git reflog show master > output &&
-	test 3 = $(wc -l < output) &&
+	test $(($master_entry_count - 1)) = $(wc -l < output) &&
 	! grep dragon < output
 
 '
-- 
1.6.0.rc0.320.g49281

[PATCH 2/2] builtin-reflog: fix deletion of HEAD entries

From: Pieter de Bie <hidden>
Date: 2016-06-15 22:45:07

dwim_ref() used to resolve HEAD to its symlink (like refs/heads/master),
making a call to 'git reflog delete HEAD@{1}' to actually delete the second
entry in the master reflog.

This patch makes a special case for HEAD (as that's the only non-branch
reflog we keep), fixing the issue.

Signed-off-by: Pieter de Bie <redacted>
---
 builtin-reflog.c  |   15 ++++++++++++---
 t/t1410-reflog.sh |    2 +-
 2 files changed, 13 insertions(+), 4 deletions(-)
diff --git a/builtin-reflog.c b/builtin-reflog.c
index 0c34e37..5af3f28 100644
--- a/builtin-reflog.c
+++ b/builtin-reflog.c
@@ -604,9 +604,18 @@ static int cmd_reflog_delete(int argc, const char **argv, const char *prefix)
 			continue;
 		}
 
-		if (!dwim_ref(argv[i], spec - argv[i], sha1, &ref)) {
-			status |= error("%s points nowhere!", argv[i]);
-			continue;
+		if (!strncmp(argv[i], "HEAD", 4)) {
+			ref = xstrdup("HEAD");
+			if (!resolve_ref(ref, sha1, 1, NULL)) {
+				status |= error("%s points nowhere!", argv[i]);
+				continue;
+			}
+		}
+		else {
+			if (!dwim_ref(argv[i], spec - argv[i], sha1, &ref)) {
+				status |= error("%s points nowhere!", argv[i]);
+				continue;
+			}
 		}
 
 		recno = strtoul(spec + 2, &ep, 10);
diff --git a/t/t1410-reflog.sh b/t/t1410-reflog.sh
index 3b9860e..5b24f05 100755
--- a/t/t1410-reflog.sh
+++ b/t/t1410-reflog.sh
@@ -175,7 +175,7 @@ test_expect_success 'recover and check' '
 
 '
 
-test_expect_failure 'delete' '
+test_expect_success 'delete' '
 	echo 1 > C &&
 	test_tick &&
 	git commit -m rat C &&
-- 
1.6.0.rc0.320.g49281
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help