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 "^$OID_REGEX $(git rev-parse HEAD)$" output
31 #calculate patch id. Make sure output is not empty.
36 sed "s/ .*//" >patch-id_"$patch_name" &&
37 test_line_count -gt 0 patch-id_"$patch_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
146 test_expect_success 'patch-id respects config from subdir' '
147 test_config patchid.stable true &&
150 # copy these because test_patch_id() looks for them in
151 # the current directory
152 cp bar-then-foo foo-then-bar subdir &&
156 test_patch_id irrelevant patchid.stable=true
162 index e69de29..2e65efe 100644
167 \ No newline at end of file
169 index e69de29..6178079 100644
178 index e69de29..7898192 100644
184 index e69de29..6178079 100644
191 test_expect_success 'patch-id handles no-nl-at-eof markers' '
192 cat nonl | calc_patch_id nonl &&
193 cat withnl | calc_patch_id withnl &&
194 test_cmp patch-id_nonl patch-id_withnl