[packages/git-core] - fix rev-list for coqueal commits - rel. 2

draenog draenog at pld-linux.org
Tue Mar 26 00:47:30 CET 2013


commit 209f25ba446228a0079e97e29b32c119900f0f90
Author: Kacper Kornet <draenog at pld-linux.org>
Date:   Mon Mar 25 23:45:08 2013 +0000

    - fix rev-list for coqueal commits
    - rel. 2

 git-core-coequal.patch | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++
 git-core.spec          |  4 +++-
 2 files changed, 59 insertions(+), 1 deletion(-)
---
diff --git a/git-core.spec b/git-core.spec
index 6858aee..ee6e97a 100644
--- a/git-core.spec
+++ b/git-core.spec
@@ -11,7 +11,7 @@ Summary:	Distributed version control system focused on speed, effectivity and us
 Summary(pl.UTF-8):	Rozproszony system śledzenia treści skupiony na szybkości, wydajności i użyteczności
 Name:		git-core
 Version:	1.8.2
-Release:	1
+Release:	2
 License:	GPL v2
 Group:		Development/Tools
 Source0:	http://git-core.googlecode.com/files/git-%{version}.tar.gz
@@ -26,6 +26,7 @@ Patch0:		%{name}-tests.patch
 Patch1:		%{name}-key-bindings.patch
 Patch2:		%{name}-sysconfdir.patch
 Patch3:		cherry-picked-commitlog.patch
+Patch4:	        %{name}-coequal.patch
 URL:		http://git-scm.com/
 BuildRequires:	autoconf >= 2.59
 BuildRequires:	automake
@@ -383,6 +384,7 @@ Ta wtyczka dostarcza podświetlanie składni dla treści commitów gita.
 %patch1 -p0
 %patch2 -p1
 %patch3 -p1
+%patch4 -p1
 
 %build
 %{__aclocal}
diff --git a/git-core-coequal.patch b/git-core-coequal.patch
new file mode 100644
index 0000000..ca15404
--- /dev/null
+++ b/git-core-coequal.patch
@@ -0,0 +1,56 @@
+commit c19d1b4e840535c5fc27077194e8ac219c02644c
+Author: Kacper Kornet <draenog at pld-linux.org>
+Date:   Fri Mar 22 19:38:19 2013 +0100
+
+    Fix revision walk for commits with the same dates
+    
+    Logic in still_interesting function allows to stop the commits
+    traversing if the oldest processed commit is not older then the
+    youngest commit on the list to process and the list contains only
+    commits marked as not interesting ones. It can be premature when dealing
+    with a set of coequal commits. For example git rev-list A^! --not B
+    provides wrong answer if all commits in the range A..B had the same
+    commit time and there are more then 7 of them.
+    
+    To fix this problem the relevant part of the logic in still_interesting
+    is changed to: the walk can be stopped if the oldest processed commit is
+    younger then the youngest commit on the list to processed.
+    
+    Signed-off-by: Kacper Kornet <draenog at pld-linux.org>
+    Signed-off-by: Junio C Hamano <gitster at pobox.com>
+
+diff --git a/revision.c b/revision.c
+index 68545c8..6a9a8b3 100644
+--- a/revision.c
++++ b/revision.c
+@@ -708,7 +708,7 @@ static int still_interesting(struct commit_list *src, unsigned long date, int sl
+ 	 * Does the destination list contain entries with a date
+ 	 * before the source list? Definitely _not_ done.
+ 	 */
+-	if (date < src->item->date)
++	if (date <= src->item->date)
+ 		return SLOP;
+ 
+ 	/*
+diff --git a/t/t6009-rev-list-parent.sh b/t/t6009-rev-list-parent.sh
+index 3050740..66cda17 100755
+--- a/t/t6009-rev-list-parent.sh
++++ b/t/t6009-rev-list-parent.sh
+@@ -133,4 +133,17 @@ test_expect_success 'dodecapus' '
+ 	check_revlist "--min-parents=13" &&
+ 	check_revlist "--min-parents=4 --max-parents=11" tetrapus
+ '
++
++test_expect_success 'ancestors with the same commit time' '
++
++	test_tick_keep=$test_tick &&
++	for i in 1 2 3 4 5 6 7 8; do
++		test_tick=$test_tick_keep
++		test_commit t$i
++	done &&
++	git rev-list t1^! --not t$i >result &&
++	>expect &&
++	test_cmp expect result
++'
++
+ test_done
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/git-core.git/commitdiff/209f25ba446228a0079e97e29b32c119900f0f90



More information about the pld-cvs-commit mailing list