Skip to content

Commit

Permalink
rerere: make sorting really stable.
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Junio C Hamano committed Apr 4, 2007
1 parent 364b852 commit 2b93edb
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 6 deletions.
7 changes: 5 additions & 2 deletions builtin-rerere.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
9 changes: 5 additions & 4 deletions t/t4200-rerere.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
'

Expand All @@ -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
Expand Down

0 comments on commit 2b93edb

Please sign in to comment.