[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