Merge branch 'jk/xstrfmt'
[git] / t / t4056-diff-order.sh
1 #!/bin/sh
2
3 test_description='diff order'
4
5 . ./test-lib.sh
6
7 create_files () {
8         echo "$1" >a.h &&
9         echo "$1" >b.c &&
10         echo "$1" >c/Makefile &&
11         echo "$1" >d.txt &&
12         git add a.h b.c c/Makefile d.txt &&
13         git commit -m"$1"
14 }
15
16 test_expect_success 'setup' '
17         mkdir c &&
18         create_files 1 &&
19         create_files 2 &&
20
21         cat >order_file_1 <<-\EOF &&
22         *Makefile
23         *.txt
24         *.h
25         EOF
26
27         cat >order_file_2 <<-\EOF &&
28         *Makefile
29         *.h
30         *.c
31         EOF
32
33         cat >expect_none <<-\EOF &&
34         a.h
35         b.c
36         c/Makefile
37         d.txt
38         EOF
39
40         cat >expect_1 <<-\EOF &&
41         c/Makefile
42         d.txt
43         a.h
44         b.c
45         EOF
46
47         cat >expect_2 <<-\EOF
48         c/Makefile
49         a.h
50         b.c
51         d.txt
52         EOF
53 '
54
55 test_expect_success "no order (=tree object order)" '
56         git diff --name-only HEAD^..HEAD >actual &&
57         test_cmp expect_none actual
58 '
59
60 test_expect_success 'missing orderfile' '
61         rm -f bogus_file &&
62         test_must_fail git diff -Obogus_file --name-only HEAD^..HEAD
63 '
64
65 test_expect_success POSIXPERM,SANITY 'unreadable orderfile' '
66         >unreadable_file &&
67         chmod -r unreadable_file &&
68         test_must_fail git diff -Ounreadable_file --name-only HEAD^..HEAD
69 '
70
71 for i in 1 2
72 do
73         test_expect_success "orderfile using option ($i)" '
74                 git diff -Oorder_file_$i --name-only HEAD^..HEAD >actual &&
75                 test_cmp expect_$i actual
76         '
77
78         test_expect_success PIPE "orderfile is fifo ($i)" '
79                 rm -f order_fifo &&
80                 mkfifo order_fifo &&
81                 {
82                         cat order_file_$i >order_fifo &
83                 } &&
84                 git diff -O order_fifo --name-only HEAD^..HEAD >actual &&
85                 wait &&
86                 test_cmp expect_$i actual
87         '
88
89         test_expect_success "orderfile using config ($i)" '
90                 git -c diff.orderfile=order_file_$i diff --name-only HEAD^..HEAD >actual &&
91                 test_cmp expect_$i actual
92         '
93
94         test_expect_success "cancelling configured orderfile ($i)" '
95                 git -c diff.orderfile=order_file_$i diff -O/dev/null --name-only HEAD^..HEAD >actual &&
96                 test_cmp expect_none actual
97         '
98 done
99
100 test_expect_success 'setup for testing combine-diff order' '
101         git checkout -b tmp HEAD~ &&
102         create_files 3 &&
103         git checkout master &&
104         git merge --no-commit -s ours tmp &&
105         create_files 5
106 '
107
108 test_expect_success "combine-diff: no order (=tree object order)" '
109         git diff --name-only HEAD HEAD^ HEAD^2 >actual &&
110         test_cmp expect_none actual
111 '
112
113 for i in 1 2
114 do
115         test_expect_success "combine-diff: orderfile using option ($i)" '
116                 git diff -Oorder_file_$i --name-only HEAD HEAD^ HEAD^2 >actual &&
117                 test_cmp expect_$i actual
118         '
119 done
120
121 test_done