3 test_description
='git patch-id'
7 test_expect_success
'setup' '
8 as="a a a a a a a a" && # eight a
9 test_write_lines $as >foo &&
10 test_write_lines $as >bar &&
12 git commit -a -m initial &&
13 test_write_lines $as b >foo &&
14 test_write_lines $as b >bar &&
15 git commit -a -m first &&
16 git checkout -b same master &&
17 git commit --amend -m same-msg &&
18 git checkout -b notsame master &&
21 git commit --amend -a -m notsame-msg &&
22 test_write_lines bar foo >bar-then-foo &&
23 test_write_lines foo bar >foo-then-bar
26 test_expect_success
'patch-id output is well-formed' '
27 git log -p -1 | git patch-id >output &&
28 grep "^[a-f0-9]\{40\} $(git rev-parse HEAD)$" output
31 #calculate patch id. Make sure output is not empty.
36 sed "s/ .*//" >patch-id_
"$name" &&
37 test_line_count
-gt 0 patch-id_
"$name"
41 git log
-p -1 "$@" -O bar-then-foo
--
45 get_top_diff
"$1" | calc_patch_id
"$@"
48 test_expect_success
'patch-id detects equality' '
49 get_patch_id master &&
51 test_cmp patch-id_master patch-id_same
54 test_expect_success
'patch-id detects inequality' '
55 get_patch_id master &&
56 get_patch_id notsame &&
57 ! test_cmp patch-id_master patch-id_notsame
60 test_expect_success
'patch-id supports git-format-patch output' '
61 get_patch_id master &&
63 git format-patch -1 --stdout | calc_patch_id same &&
64 test_cmp patch-id_master patch-id_same &&
65 set $(git format-patch -1 --stdout | git patch-id) &&
66 test "$2" = $(git rev-parse HEAD)
69 test_expect_success
'whitespace is irrelevant in footer' '
70 get_patch_id master &&
72 git format-patch -1 --stdout | sed "s/ \$//" | calc_patch_id same &&
73 test_cmp patch-id_master patch-id_same
78 test "$1" = "relevant"
80 ! test_cmp patch-id_
"$2" patch-id_
"$3"
82 test_cmp patch-id_
"$2" patch-id_
"$3"
86 test_patch_id_file_order
() {
89 name
="order-${1}-$relevant"
91 get_top_diff
"master" | calc_patch_id
"$name" "$@" &&
93 git format-patch
-1 --stdout -O foo-then-bar |
94 calc_patch_id
"ordered-$name" "$@" &&
95 cmp_patch_id
$relevant "$name" "ordered-$name"
99 # combined test for options: add more tests here to make them
100 # run with all options
102 test_patch_id_file_order
"$@"
105 # small tests with detailed diagnostic for basic options.
106 test_expect_success
'file order is irrelevant with --stable' '
107 test_patch_id_file_order irrelevant --stable --stable
110 test_expect_success
'file order is relevant with --unstable' '
111 test_patch_id_file_order relevant --unstable --unstable
114 #Now test various option combinations.
115 test_expect_success
'default is unstable' '
116 test_patch_id relevant default
119 test_expect_success
'patchid.stable = true is stable' '
120 test_config patchid.stable true &&
121 test_patch_id irrelevant patchid.stable=true
124 test_expect_success
'patchid.stable = false is unstable' '
125 test_config patchid.stable false &&
126 test_patch_id relevant patchid.stable=false
129 test_expect_success
'--unstable overrides patchid.stable = true' '
130 test_config patchid.stable true &&
131 test_patch_id relevant patchid.stable=true--unstable --unstable
134 test_expect_success
'--stable overrides patchid.stable = false' '
135 test_config patchid.stable false &&
136 test_patch_id irrelevant patchid.stable=false--stable --stable
139 test_expect_success
'patch-id supports git-format-patch MIME output' '
140 get_patch_id master &&
142 git format-patch -1 --attach --stdout | calc_patch_id same &&
143 test_cmp patch-id_master patch-id_same
148 index e69de29.
.2e65efe
100644
153 \ No newline
at end of
file
155 index e69de29.
.6178079 100644
164 index e69de29.
.7898192 100644
170 index e69de29.
.6178079 100644
177 test_expect_success
'patch-id handles no-nl-at-eof markers' '
178 cat nonl | calc_patch_id nonl &&
179 cat withnl | calc_patch_id withnl &&
180 test_cmp patch-id_nonl patch-id_withnl