Re-re-re-fix common tail optimization
We need to be extra careful recovering the removed common section, so that we do not break context nor the changed incomplete line (i.e. the last line that does not end with LF). Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
127f72e689
commit
079fe1dae8
69
t/t4024-diff-optimize-common.sh
Executable file
69
t/t4024-diff-optimize-common.sh
Executable file
@ -0,0 +1,69 @@
|
||||
#!/bin/sh
|
||||
|
||||
test_description='common tail optimization'
|
||||
|
||||
. ./test-lib.sh
|
||||
|
||||
z=zzzzzzzz ;# 8
|
||||
z="$z$z$z$z$z$z$z$z" ;# 64
|
||||
z="$z$z$z$z$z$z$z$z" ;# 512
|
||||
z="$z$z$z$z" ;# 2048
|
||||
z2047=$(expr "$z" : '.\(.*\)') ; #2047
|
||||
|
||||
test_expect_success setup '
|
||||
|
||||
echo "a$z2047" >file-a &&
|
||||
echo "b" >file-b &&
|
||||
echo "$z2047" >>file-b &&
|
||||
echo "c$z2047" | tr -d "\012" >file-c &&
|
||||
echo "d" >file-d &&
|
||||
echo "$z2047" | tr -d "\012" >>file-d &&
|
||||
|
||||
git add file-a file-b file-c file-d &&
|
||||
|
||||
echo "A$z2047" >file-a &&
|
||||
echo "B" >file-b &&
|
||||
echo "$z2047" >>file-b &&
|
||||
echo "C$z2047" | tr -d "\012" >file-c &&
|
||||
echo "D" >file-d &&
|
||||
echo "$z2047" | tr -d "\012" >>file-d
|
||||
|
||||
'
|
||||
|
||||
cat >expect <<\EOF
|
||||
diff --git a/file-a b/file-a
|
||||
--- a/file-a
|
||||
+++ b/file-a
|
||||
@@ -1 +1 @@
|
||||
-aZ
|
||||
+AZ
|
||||
diff --git a/file-b b/file-b
|
||||
--- a/file-b
|
||||
+++ b/file-b
|
||||
@@ -1 +1 @@
|
||||
-b
|
||||
+B
|
||||
diff --git a/file-c b/file-c
|
||||
--- a/file-c
|
||||
+++ b/file-c
|
||||
@@ -1 +1 @@
|
||||
-cZ
|
||||
\ No newline at end of file
|
||||
+CZ
|
||||
\ No newline at end of file
|
||||
diff --git a/file-d b/file-d
|
||||
--- a/file-d
|
||||
+++ b/file-d
|
||||
@@ -1 +1 @@
|
||||
-d
|
||||
+D
|
||||
EOF
|
||||
|
||||
test_expect_success 'diff -U0' '
|
||||
|
||||
git diff -U0 | sed -e "/^index/d" -e "s/$z2047/Z/g" >actual &&
|
||||
diff -u expect actual
|
||||
|
||||
'
|
||||
|
||||
test_done
|
@ -121,7 +121,7 @@ static void trim_common_tail(mmfile_t *a, mmfile_t *b, long ctx)
|
||||
bp -= blk;
|
||||
}
|
||||
|
||||
while (recovered < trimmed && ctx)
|
||||
while (recovered < trimmed && 0 <= ctx)
|
||||
if (ap[recovered++] == '\n')
|
||||
ctx--;
|
||||
a->size -= (trimmed - recovered);
|
||||
|
Loading…
Reference in New Issue
Block a user