diff options
author | Junio C Hamano <junkio@cox.net> | 2007-04-04 14:12:03 -0700 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2007-04-04 14:12:03 -0700 |
commit | 2b93edbf32700d91c500806e4502077829d66d21 (patch) | |
tree | a2e9a4709978fe8af2bf0ed9da371ec8c90db109 | |
parent | 364b8523529163ffeeb71521239a18ac1f550512 (diff) | |
download | git-2b93edbf32700d91c500806e4502077829d66d21.tar.gz |
rerere: make sorting really stable.
The earlier code does not swap hunks when the beginning of the
first side is identical to the whole of the second side. In
such a case, the first one should sort later.
Signed-off-by: Junio C Hamano <junkio@cox.net>
-rw-r--r-- | builtin-rerere.c | 7 | ||||
-rwxr-xr-x | t/t4200-rerere.sh | 9 |
2 files changed, 10 insertions, 6 deletions
diff --git a/builtin-rerere.c b/builtin-rerere.c index b463c07f04..8c2c8bdc18 100644 --- a/builtin-rerere.c +++ b/builtin-rerere.c @@ -117,10 +117,13 @@ static int handle_file(const char *path, else if (!prefixcmp(buf, "=======")) hunk = 2; else if (!prefixcmp(buf, ">>>>>>> ")) { + int one_is_longer = (one->nr > two->nr); + int common_len = one_is_longer ? two->nr : one->nr; + int cmp = memcmp(one->ptr, two->ptr, common_len); + hunk_no++; hunk = 0; - if (memcmp(one->ptr, two->ptr, one->nr < two->nr ? - one->nr : two->nr) > 0) { + if ((cmp > 0) || ((cmp == 0) && one_is_longer)) { struct buffer *swap = one; one = two; two = swap; diff --git a/t/t4200-rerere.sh b/t/t4200-rerere.sh index bc878d750d..6ba63d7173 100755 --- a/t/t4200-rerere.sh +++ b/t/t4200-rerere.sh @@ -35,7 +35,8 @@ git commit -q -a -m first git checkout -b second master git show first:a1 | -sed -e 's/To die, t/To die! T/' -e 's/life;$/life./' > a1 +sed -e 's/To die, t/To die! T/' > a1 +echo "* END *" >>a1 git commit -q -a -m second # activate rerere @@ -53,7 +54,7 @@ test_expect_success 'no postimage or thisimage yet' \ test_expect_success 'preimage has right number of lines' ' cnt=$(sed -ne "/^<<<<<<</,/^>>>>>>>/p" $rr/preimage | wc -l) && - test $cnt = 10 + test $cnt = 9 ' @@ -75,10 +76,10 @@ cat > expect << EOF For in that sleep of death what dreams may come When we have shuffled off this mortal coil, Must give us pause: there's the respect + That makes calamity of so long life; -<<<<<<< --That makes calamity of so long life. -======= - That makes calamity of so long life; +-* END * ->>>>>>> EOF git rerere diff > out |