All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] name-rev: test showing failure with non-monotonic commit dates
@ 2022-02-14 21:01 Jacob Keller
  2022-02-14 21:50 ` Junio C Hamano
  2022-02-15  7:15 ` Ævar Arnfjörð Bjarmason
  0 siblings, 2 replies; 10+ messages in thread
From: Jacob Keller @ 2022-02-14 21:01 UTC (permalink / raw)
  To: git; +Cc: Jacob Keller

From: Jacob Keller <jacob.keller@gmail.com>

If a commit in a sequence of linear history has a non-monotonically
increasing commit timestamp, git name-rev will not properly name the
commit.

However, if you use --annotate-stdin then the commit does actually get
picked up and named properly.

Analyzing the source, it appears to be caused by the cutoff logic which
is some sort of heuristic which relies on monotonically increasing
commit dates.

This seems like the cutoff using commit date is some sort of heuristic
which reduces the cost of describing something.. but --annotate-stdin
and --all don't use it.

In the example setup I could do:

echo "<commit id>" | git name-rev --annotate-stdin

and get the expected result without the cutoff logic, and it seems at
least on small repositories to be as fast as the normal attempt, except
it produces accurate results.

Signed-off-by: Jacob Keller <jacob.keller@gmail.com>
---
 t/t6120-describe.sh | 62 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 62 insertions(+)

diff --git a/t/t6120-describe.sh b/t/t6120-describe.sh
index 9781b92aeddf..e9f897e42591 100755
--- a/t/t6120-describe.sh
+++ b/t/t6120-describe.sh
@@ -488,6 +488,68 @@ test_expect_success 'name-rev covers all conditions while looking at parents' '
 	)
 '
 
+# A-B-C-D-E-main
+#
+# Where C has a non-monotonically increasing commit timestamp w.r.t. other
+# commits
+test_expect_success 'non-monotonic commit dates setup' '
+	git init non-monotonic &&
+	(
+		cd non-monotonic &&
+
+		echo A >file &&
+		git add file &&
+		GIT_COMMITTER_DATE="2020-01-01 18:00" git commit -m A &&
+
+		echo B >file &&
+		git add file &&
+		GIT_COMMITTER_DATE="2020-01-02 18:00" git commit -m B &&
+
+		echo C >file &&
+		git add file &&
+		GIT_COMMITTER_DATE="2005-01-01 18:00" git commit -m C &&
+
+		echo D >file &&
+		git add file &&
+		GIT_COMMITTER_DATE="2020-01-04 18:00" git commit -m D &&
+
+		echo E >file &&
+		git add file &&
+		GIT_COMMITTER_DATE="2020-01-05 18:00" git commit -m E
+	)
+'
+
+test_expect_failure 'name-rev commit timestamp prevents naming commits' '
+	(
+		cd non-monotonic &&
+
+		B=$(git rev-parse main~3) &&
+
+		echo "$B main~3" >expect &&
+		git name-rev $B >actual &&
+
+		test_cmp expect actual
+	)
+'
+
+test_expect_success 'name-rev --all works with non-monotonic' '
+	(
+		cd non-monotonic &&
+
+		cat >expect <<EOF &&
+main
+main~1
+main~2
+main~3
+main~4
+EOF
+
+		git log --pretty=%H | git name-rev --annotate-stdin --name-only >actual &&
+
+		test_cmp expect actual
+	)
+'
+
 #               B
 #               o
 #                \
-- 
2.35.1.129.gb80121027d12


^ permalink raw reply related	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2022-03-09 21:56 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-02-14 21:01 [PATCH] name-rev: test showing failure with non-monotonic commit dates Jacob Keller
2022-02-14 21:50 ` Junio C Hamano
2022-02-14 22:07   ` Jacob Keller
2022-02-15 14:48     ` Derrick Stolee
2022-02-15 23:38       ` Keller, Jacob E
2022-02-16  0:51       ` Junio C Hamano
2022-02-27 22:05         ` Jacob Keller
2022-03-09 21:56   ` Johannes Schindelin
2022-02-15  7:15 ` Ævar Arnfjörð Bjarmason
2022-02-16  1:16   ` Keller, Jacob E

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.