1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165
|
#!/bin/sh
test_description='diff --relative tests'
. ./test-lib.sh
test_expect_success 'setup' '
git commit --allow-empty -m empty &&
echo content >file1 &&
mkdir subdir &&
echo other content >subdir/file2 &&
blob_file1=$(git hash-object file1) &&
blob_file2=$(git hash-object subdir/file2) &&
git add . &&
git commit -m one
'
check_diff () {
dir=$1
shift
expect=$1
shift
short_blob=$(git rev-parse --short $blob_file2)
cat >expected <<-EOF
diff --git a/$expect b/$expect
new file mode 100644
index 0000000..$short_blob
--- /dev/null
+++ b/$expect
@@ -0,0 +1 @@
+other content
EOF
test_expect_success "-p $*" "
git -C '$dir' diff -p $* HEAD^ >actual &&
test_cmp expected actual
"
}
check_numstat () {
dir=$1
shift
expect=$1
shift
cat >expected <<-EOF
1 0 $expect
EOF
test_expect_success "--numstat $*" "
echo '1 0 $expect' >expected &&
git -C '$dir' diff --numstat $* HEAD^ >actual &&
test_cmp expected actual
"
}
check_stat () {
dir=$1
shift
expect=$1
shift
cat >expected <<-EOF
$expect | 1 +
1 file changed, 1 insertion(+)
EOF
test_expect_success "--stat $*" "
git -C '$dir' diff --stat $* HEAD^ >actual &&
test_i18ncmp expected actual
"
}
check_raw () {
dir=$1
shift
expect=$1
shift
cat >expected <<-EOF
:000000 100644 $ZERO_OID $blob_file2 A $expect
EOF
test_expect_success "--raw $*" "
git -C '$dir' diff --no-abbrev --raw $* HEAD^ >actual &&
test_cmp expected actual
"
}
for type in diff numstat stat raw
do
check_$type . file2 --relative=subdir/
check_$type . file2 --relative=subdir
check_$type subdir file2 --relative
check_$type . dir/file2 --relative=sub
done
check_diff_relative_option () {
dir=$1
shift
expect=$1
shift
relative_opt=$1
shift
test_expect_success "config diff.relative $relative_opt -p $*" "
short_blob=\$(git rev-parse --short $blob_file2) &&
cat >expected <<-EOF &&
diff --git a/$expect b/$expect
new file mode 100644
index 0000000..\$short_blob
--- /dev/null
+++ b/$expect
@@ -0,0 +1 @@
+other content
EOF
test_config -C $dir diff.relative $relative_opt &&
git -C '$dir' diff -p $* HEAD^ >actual &&
test_cmp expected actual
"
}
check_diff_no_relative_option () {
dir=$1
shift
expect=$1
shift
relative_opt=$1
shift
test_expect_success "config diff.relative $relative_opt -p $*" "
short_blob_file1=\$(git rev-parse --short $blob_file1) &&
short_blob_file2=\$(git rev-parse --short $blob_file2) &&
cat >expected <<-EOF &&
diff --git a/file1 b/file1
new file mode 100644
index 0000000..\$short_blob_file1
--- /dev/null
+++ b/file1
@@ -0,0 +1 @@
+content
diff --git a/$expect b/$expect
new file mode 100644
index 0000000..\$short_blob_file2
--- /dev/null
+++ b/$expect
@@ -0,0 +1 @@
+other content
EOF
test_config -C $dir diff.relative $relative_opt &&
git -C '$dir' diff -p $* HEAD^ >actual &&
test_cmp expected actual
"
}
check_diff_no_relative_option . subdir/file2 false
check_diff_no_relative_option . subdir/file2 true --no-relative
check_diff_no_relative_option . subdir/file2 false --no-relative
check_diff_no_relative_option subdir subdir/file2 false
check_diff_no_relative_option subdir subdir/file2 true --no-relative
check_diff_no_relative_option subdir subdir/file2 false --no-relative
check_diff_relative_option . file2 false --relative=subdir/
check_diff_relative_option . file2 false --relative=subdir
check_diff_relative_option . file2 true --relative=subdir/
check_diff_relative_option . file2 true --relative=subdir
check_diff_relative_option subdir file2 false --relative
check_diff_relative_option subdir file2 true --relative
check_diff_relative_option subdir file2 true
check_diff_relative_option subdir file2 false --no-relative --relative
check_diff_relative_option subdir file2 true --no-relative --relative
check_diff_relative_option . file2 false --no-relative --relative=subdir
check_diff_relative_option . file2 true --no-relative --relative=subdir
test_done
|