From 209f25ba446228a0079e97e29b32c119900f0f90 Mon Sep 17 00:00:00 2001 From: Kacper Kornet Date: Mon, 25 Mar 2013 23:45:08 +0000 Subject: [PATCH] - fix rev-list for coqueal commits - rel. 2 --- git-core-coequal.patch | 56 ++++++++++++++++++++++++++++++++++++++++++ git-core.spec | 4 ++- 2 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 git-core-coequal.patch 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 +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 + Signed-off-by: Junio C Hamano + +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 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} -- 2.44.0