1#!/bin/sh
2
3test_description='test direct comparison of blobs via git-diff'
4. ./test-lib.sh
5
6run_diff () {
7 # use full-index to make it easy to match the index line
8 git diff --full-index "$@" >diff
9}
10
11check_index () {
12 grep "^index $1\\.\\.$2" diff
13}
14
15check_mode () {
16 grep "^old mode $1" diff &&
17 grep "^new mode $2" diff
18}
19
20check_paths () {
21 grep "^diff --git a/$1 b/$2" diff
22}
23
24test_expect_success 'create some blobs' '
25 echo one >one &&
26 echo two >two &&
27 chmod +x two &&
28 git add . &&
29
30 # cover systems where modes are ignored
31 git update-index --chmod=+x two &&
32
33 git commit -m base &&
34
35 sha1_one=$(git rev-parse HEAD:one) &&
36 sha1_two=$(git rev-parse HEAD:two)
37'
38
39test_expect_success 'diff by sha1' '
40 run_diff $sha1_one $sha1_two
41'
42test_expect_success 'index of sha1 diff' '
43 check_index $sha1_one $sha1_two
44'
45test_expect_success 'sha1 diff uses arguments as paths' '
46 check_paths $sha1_one $sha1_two
47'
48test_expect_success 'sha1 diff has no mode change' '
49 ! grep mode diff
50'
51
52test_expect_success 'diff by tree:path (run)' '
53 run_diff HEAD:one HEAD:two
54'
55test_expect_success 'index of tree:path diff' '
56 check_index $sha1_one $sha1_two
57'
58test_expect_success 'tree:path diff uses filenames as paths' '
59 check_paths one two
60'
61test_expect_success 'tree:path diff shows mode change' '
62 check_mode 100644 100755
63'
64
65test_expect_success 'diff by ranged tree:path' '
66 run_diff HEAD:one..HEAD:two
67'
68test_expect_success 'index of ranged tree:path diff' '
69 check_index $sha1_one $sha1_two
70'
71test_expect_success 'ranged tree:path diff uses filenames as paths' '
72 check_paths one two
73'
74test_expect_success 'ranged tree:path diff shows mode change' '
75 check_mode 100644 100755
76'
77
78test_expect_success 'diff blob against file' '
79 run_diff HEAD:one two
80'
81test_expect_success 'index of blob-file diff' '
82 check_index $sha1_one $sha1_two
83'
84test_expect_success 'blob-file diff uses filename as paths' '
85 check_paths one two
86'
87test_expect_success FILEMODE 'blob-file diff shows mode change' '
88 check_mode 100644 100755
89'
90
91test_expect_success 'blob-file diff prefers filename to sha1' '
92 run_diff $sha1_one two &&
93 check_paths two two
94'
95
96test_done