mirror of
https://github.com/git-for-windows/git.git
synced 2025-12-13 00:06:03 -06:00
You can ask the diff machinery to let the exit code indicate whether there are changes, e.g. with --quiet. It as two ways to calculate that bit: The quick one assumes blobs with different hashes have different content, and the more elaborate way actually compares the contents, possibly applying transformations like ignoring whitespace. The quick way considers an unmerged file to be a change and reports exit code 1, which makes sense. The slower path uses the struct diff_options member found_changes to indicate whether the blobs differ even with the transformations applied. It's not set for unmerged files, though, resulting in exit code 0. Set found_changes in run_diff_cmd() for unmerged files, for a consistent exit code of 1 if there's an unmerged file, regardless of whether whitespace is ignored. Signed-off-by: René Scharfe <l.s.r@web.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
108 lines
2.6 KiB
Bash
Executable File
108 lines
2.6 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
test_description='diff with unmerged index entries'
|
|
|
|
TEST_PASSES_SANITIZE_LEAK=true
|
|
. ./test-lib.sh
|
|
|
|
test_expect_success setup '
|
|
for i in 0 1 2 3
|
|
do
|
|
blob=$(echo $i | git hash-object --stdin) &&
|
|
eval "blob$i=$blob" &&
|
|
eval "m$i=\"100644 \$blob$i $i\"" || return 1
|
|
done &&
|
|
paths= &&
|
|
for b in o x
|
|
do
|
|
for o in o x
|
|
do
|
|
for t in o x
|
|
do
|
|
path="$b$o$t" &&
|
|
case "$path" in ooo) continue ;; esac &&
|
|
paths="$paths$path " &&
|
|
p=" $path" &&
|
|
case "$b" in x) echo "$m1$p" ;; esac &&
|
|
case "$o" in x) echo "$m2$p" ;; esac &&
|
|
case "$t" in x) echo "$m3$p" ;; esac ||
|
|
return 1
|
|
done
|
|
done
|
|
done >ls-files-s.expect &&
|
|
git update-index --index-info <ls-files-s.expect &&
|
|
git ls-files -s >ls-files-s.actual &&
|
|
test_cmp ls-files-s.expect ls-files-s.actual
|
|
'
|
|
|
|
test_expect_success 'diff-files -0' '
|
|
for path in $paths
|
|
do
|
|
>"$path" &&
|
|
echo ":000000 100644 $ZERO_OID $ZERO_OID U $path" || return 1
|
|
done >diff-files-0.expect &&
|
|
git diff-files -0 >diff-files-0.actual &&
|
|
test_cmp diff-files-0.expect diff-files-0.actual
|
|
'
|
|
|
|
test_expect_success 'diff-files -1' '
|
|
for path in $paths
|
|
do
|
|
>"$path" &&
|
|
echo ":000000 100644 $ZERO_OID $ZERO_OID U $path" &&
|
|
case "$path" in
|
|
x??) echo ":100644 100644 $blob1 $ZERO_OID M $path"
|
|
esac || return 1
|
|
done >diff-files-1.expect &&
|
|
git diff-files -1 >diff-files-1.actual &&
|
|
test_cmp diff-files-1.expect diff-files-1.actual
|
|
'
|
|
|
|
test_expect_success 'diff-files -2' '
|
|
for path in $paths
|
|
do
|
|
>"$path" &&
|
|
echo ":000000 100644 $ZERO_OID $ZERO_OID U $path" &&
|
|
case "$path" in
|
|
?x?) echo ":100644 100644 $blob2 $ZERO_OID M $path"
|
|
esac || return 1
|
|
done >diff-files-2.expect &&
|
|
git diff-files -2 >diff-files-2.actual &&
|
|
test_cmp diff-files-2.expect diff-files-2.actual &&
|
|
git diff-files >diff-files-default-2.actual &&
|
|
test_cmp diff-files-2.expect diff-files-default-2.actual
|
|
'
|
|
|
|
test_expect_success 'diff-files -3' '
|
|
for path in $paths
|
|
do
|
|
>"$path" &&
|
|
echo ":000000 100644 $ZERO_OID $ZERO_OID U $path" &&
|
|
case "$path" in
|
|
??x) echo ":100644 100644 $blob3 $ZERO_OID M $path"
|
|
esac || return 1
|
|
done >diff-files-3.expect &&
|
|
git diff-files -3 >diff-files-3.actual &&
|
|
test_cmp diff-files-3.expect diff-files-3.actual
|
|
'
|
|
|
|
test_expect_success 'diff --stat' '
|
|
for path in $paths
|
|
do
|
|
echo " $path | Unmerged" || return 1
|
|
done >diff-stat.expect &&
|
|
echo " 0 files changed" >>diff-stat.expect &&
|
|
git diff --cached --stat >diff-stat.actual &&
|
|
test_cmp diff-stat.expect diff-stat.actual
|
|
'
|
|
|
|
test_expect_success 'diff --quiet' '
|
|
test_expect_code 1 git diff --cached --quiet
|
|
'
|
|
|
|
test_expect_success 'diff --quiet --ignore-all-space' '
|
|
test_expect_code 1 git diff --cached --quiet --ignore-all-space
|
|
'
|
|
|
|
test_done
|