Fix parsing of @{-1}@{1}
[gitweb.git] / t / t4024-diff-optimize-common.sh
index 20fe87b7dd4456895879ce3a7197864599666267..c4d733f5db6a4d390762505b770954cdbf6cc82f 100755 (executable)
@@ -10,59 +10,147 @@ 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 &&
+x=zzzzzzzzzz                   ;# 10
+y="$x$x$x$x$x$x$x$x$x$x"       ;# 100
+z="$y$y$y$y$y$y$y$y$y$y"       ;# 1000
+z1000=$z
+z100=$y
+z10=$x
 
-       git add file-a file-b file-c file-d &&
+zs() {
+       count="$1"
+       while test "$count" -ge 1000
+       do
+               count=$(($count - 1000))
+               printf "%s" $z1000
+       done
+       while test "$count" -ge 100
+       do
+               count=$(($count - 100))
+               printf "%s" $z100
+       done
+       while test "$count" -ge 10
+       do
+               count=$(($count - 10))
+               printf "%s" $z10
+       done
+       while test "$count" -ge 1
+       do
+               count=$(($count - 1))
+               printf "z"
+       done
+}
 
-       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
-
-'
+zc () {
+       sed -e "/^index/d" \
+               -e "s/$z1000/Q/g" \
+               -e "s/QQQQQQQQQ/Z9000/g" \
+               -e "s/QQQQQQQQ/Z8000/g" \
+               -e "s/QQQQQQQ/Z7000/g" \
+               -e "s/QQQQQQ/Z6000/g" \
+               -e "s/QQQQQ/Z5000/g" \
+               -e "s/QQQQ/Z4000/g" \
+               -e "s/QQQ/Z3000/g" \
+               -e "s/QQ/Z2000/g" \
+               -e "s/Q/Z1000/g" \
+               -e "s/$z100/Q/g" \
+               -e "s/QQQQQQQQQ/Z900/g" \
+               -e "s/QQQQQQQQ/Z800/g" \
+               -e "s/QQQQQQQ/Z700/g" \
+               -e "s/QQQQQQ/Z600/g" \
+               -e "s/QQQQQ/Z500/g" \
+               -e "s/QQQQ/Z400/g" \
+               -e "s/QQQ/Z300/g" \
+               -e "s/QQ/Z200/g" \
+               -e "s/Q/Z100/g" \
+               -e "s/000Z//g" \
+               -e "s/$z10/Q/g" \
+               -e "s/QQQQQQQQQ/Z90/g" \
+               -e "s/QQQQQQQQ/Z80/g" \
+               -e "s/QQQQQQQ/Z70/g" \
+               -e "s/QQQQQQ/Z60/g" \
+               -e "s/QQQQQ/Z50/g" \
+               -e "s/QQQQ/Z40/g" \
+               -e "s/QQQ/Z30/g" \
+               -e "s/QQ/Z20/g" \
+               -e "s/Q/Z10/g" \
+               -e "s/00Z//g" \
+               -e "s/z/Q/g" \
+               -e "s/QQQQQQQQQ/Z9/g" \
+               -e "s/QQQQQQQQ/Z8/g" \
+               -e "s/QQQQQQQ/Z7/g" \
+               -e "s/QQQQQQ/Z6/g" \
+               -e "s/QQQQQ/Z5/g" \
+               -e "s/QQQQ/Z4/g" \
+               -e "s/QQQ/Z3/g" \
+               -e "s/QQ/Z2/g" \
+               -e "s/Q/Z1/g" \
+               -e "s/0Z//g" \
+       ;
+}
 
-cat >expect <<\EOF
-diff --git a/file-a b/file-a
---- a/file-a
-+++ b/file-a
+expect_pattern () {
+       cnt="$1"
+       cat <<EOF
+diff --git a/file-a$cnt b/file-a$cnt
+--- a/file-a$cnt
++++ b/file-a$cnt
 @@ -1 +1 @@
--aZ
-+AZ
-diff --git a/file-b b/file-b
---- a/file-b
-+++ b/file-b
+-Z${cnt}a
++Z${cnt}A
+diff --git a/file-b$cnt b/file-b$cnt
+--- a/file-b$cnt
++++ b/file-b$cnt
 @@ -1 +1 @@
 -b
 +B
-diff --git a/file-c b/file-c
---- a/file-c
-+++ b/file-c
+diff --git a/file-c$cnt b/file-c$cnt
+--- a/file-c$cnt
++++ b/file-c$cnt
 @@ -1 +1 @@
--cZ
+-cZ$cnt
 \ No newline at end of file
-+CZ
++CZ$cnt
 \ No newline at end of file
-diff --git a/file-d b/file-d
---- a/file-d
-+++ b/file-d
+diff --git a/file-d$cnt b/file-d$cnt
+--- a/file-d$cnt
++++ b/file-d$cnt
 @@ -1 +1 @@
 -d
 +D
 EOF
+}
+
+sample='1023 1024 1025 2047 4095'
+
+test_expect_success setup '
+
+       for n in $sample
+       do
+               ( zs $n ; echo a ) >file-a$n &&
+               ( echo b; zs $n; echo ) >file-b$n &&
+               ( printf c; zs $n ) >file-c$n &&
+               ( echo d; zs $n ) >file-d$n &&
+
+               git add file-a$n file-b$n file-c$n file-d$n &&
+
+               ( zs $n ; echo A ) >file-a$n &&
+               ( echo B; zs $n; echo ) >file-b$n &&
+               ( printf C; zs $n ) >file-c$n &&
+               ( echo D; zs $n ) >file-d$n &&
+
+               expect_pattern $n || break
+
+       done >expect
+'
 
 test_expect_success 'diff -U0' '
 
-       git diff -U0 | sed -e "/^index/d" -e "s/$z2047/Z/g" >actual &&
-       diff -u expect actual
+       for n in $sample
+       do
+               git diff -U0 file-?$n
+       done | zc >actual &&
+       test_cmp expect actual
 
 '