Junio C Hamano | 2b459b4 | 2008-03-02 00:07:59 -0800 | [diff] [blame] | 1 | #!/bin/sh |
| 2 | |
| 3 | test_description='difference in submodules' |
| 4 | |
| 5 | . ./test-lib.sh |
Junio C Hamano | bfdbee9 | 2008-08-08 02:26:28 -0700 | [diff] [blame] | 6 | . "$TEST_DIRECTORY"/diff-lib.sh |
Junio C Hamano | 2b459b4 | 2008-03-02 00:07:59 -0800 | [diff] [blame] | 7 | |
Junio C Hamano | 2b459b4 | 2008-03-02 00:07:59 -0800 | [diff] [blame] | 8 | test_expect_success setup ' |
brian m. carlson | 45e2ef2 | 2019-10-28 00:59:01 +0000 | [diff] [blame] | 9 | test_oid_init && |
Junio C Hamano | 2b459b4 | 2008-03-02 00:07:59 -0800 | [diff] [blame] | 10 | test_tick && |
| 11 | test_create_repo sub && |
| 12 | ( |
| 13 | cd sub && |
| 14 | echo hello >world && |
| 15 | git add world && |
| 16 | git commit -m submodule |
| 17 | ) && |
| 18 | |
| 19 | test_tick && |
| 20 | echo frotz >nitfol && |
| 21 | git add nitfol sub && |
| 22 | git commit -m superproject && |
| 23 | |
| 24 | ( |
| 25 | cd sub && |
| 26 | echo goodbye >world && |
| 27 | git add world && |
| 28 | git commit -m "submodule #2" |
| 29 | ) && |
| 30 | |
| 31 | set x $( |
| 32 | cd sub && |
| 33 | git rev-list HEAD |
| 34 | ) && |
brian m. carlson | 8125a58 | 2018-05-13 02:24:13 +0000 | [diff] [blame] | 35 | echo ":160000 160000 $3 $ZERO_OID M sub" >expect && |
Junio C Hamano | 8e08b41 | 2010-01-16 18:42:53 +0100 | [diff] [blame] | 36 | subtip=$3 subprev=$2 |
Junio C Hamano | 2b459b4 | 2008-03-02 00:07:59 -0800 | [diff] [blame] | 37 | ' |
| 38 | |
| 39 | test_expect_success 'git diff --raw HEAD' ' |
brian m. carlson | 45e2ef2 | 2019-10-28 00:59:01 +0000 | [diff] [blame] | 40 | hexsz=$(test_oid hexsz) && |
| 41 | git diff --raw --abbrev=$hexsz HEAD >actual && |
Jeff King | 82ebb0b | 2008-03-12 17:36:36 -0400 | [diff] [blame] | 42 | test_cmp expect actual |
Junio C Hamano | 2b459b4 | 2008-03-02 00:07:59 -0800 | [diff] [blame] | 43 | ' |
| 44 | |
| 45 | test_expect_success 'git diff-index --raw HEAD' ' |
| 46 | git diff-index --raw HEAD >actual.index && |
Jeff King | 82ebb0b | 2008-03-12 17:36:36 -0400 | [diff] [blame] | 47 | test_cmp expect actual.index |
Junio C Hamano | 2b459b4 | 2008-03-02 00:07:59 -0800 | [diff] [blame] | 48 | ' |
| 49 | |
| 50 | test_expect_success 'git diff-files --raw' ' |
| 51 | git diff-files --raw >actual.files && |
Jeff King | 82ebb0b | 2008-03-12 17:36:36 -0400 | [diff] [blame] | 52 | test_cmp expect actual.files |
Junio C Hamano | 2b459b4 | 2008-03-02 00:07:59 -0800 | [diff] [blame] | 53 | ' |
| 54 | |
Junio C Hamano | 8e08b41 | 2010-01-16 18:42:53 +0100 | [diff] [blame] | 55 | expect_from_to () { |
| 56 | printf "%sSubproject commit %s\n+Subproject commit %s\n" \ |
| 57 | "-" "$1" "$2" |
| 58 | } |
| 59 | |
| 60 | test_expect_success 'git diff HEAD' ' |
| 61 | git diff HEAD >actual && |
| 62 | sed -e "1,/^@@/d" actual >actual.body && |
| 63 | expect_from_to >expect.body $subtip $subprev && |
| 64 | test_cmp expect.body actual.body |
| 65 | ' |
| 66 | |
| 67 | test_expect_success 'git diff HEAD with dirty submodule (work tree)' ' |
| 68 | echo >>sub/world && |
| 69 | git diff HEAD >actual && |
| 70 | sed -e "1,/^@@/d" actual >actual.body && |
| 71 | expect_from_to >expect.body $subtip $subprev-dirty && |
| 72 | test_cmp expect.body actual.body |
| 73 | ' |
| 74 | |
| 75 | test_expect_success 'git diff HEAD with dirty submodule (index)' ' |
| 76 | ( |
| 77 | cd sub && |
| 78 | git reset --hard && |
| 79 | echo >>world && |
| 80 | git add world |
| 81 | ) && |
| 82 | git diff HEAD >actual && |
| 83 | sed -e "1,/^@@/d" actual >actual.body && |
| 84 | expect_from_to >expect.body $subtip $subprev-dirty && |
| 85 | test_cmp expect.body actual.body |
| 86 | ' |
| 87 | |
| 88 | test_expect_success 'git diff HEAD with dirty submodule (untracked)' ' |
| 89 | ( |
| 90 | cd sub && |
| 91 | git reset --hard && |
| 92 | git clean -qfdx && |
| 93 | >cruft |
| 94 | ) && |
| 95 | git diff HEAD >actual && |
| 96 | sed -e "1,/^@@/d" actual >actual.body && |
| 97 | expect_from_to >expect.body $subtip $subprev-dirty && |
| 98 | test_cmp expect.body actual.body |
| 99 | ' |
| 100 | |
| 101 | test_expect_success 'git diff HEAD with dirty submodule (work tree, refs match)' ' |
| 102 | git commit -m "x" sub && |
| 103 | echo >>sub/world && |
| 104 | git diff HEAD >actual && |
| 105 | sed -e "1,/^@@/d" actual >actual.body && |
| 106 | expect_from_to >expect.body $subprev $subprev-dirty && |
Jens Lehmann | dd44d41 | 2010-06-08 18:31:51 +0200 | [diff] [blame] | 107 | test_cmp expect.body actual.body && |
| 108 | git diff --ignore-submodules HEAD >actual2 && |
SZEDER Gábor | ec10b01 | 2018-08-19 23:57:22 +0200 | [diff] [blame] | 109 | test_must_be_empty actual2 && |
Jens Lehmann | dd44d41 | 2010-06-08 18:31:51 +0200 | [diff] [blame] | 110 | git diff --ignore-submodules=untracked HEAD >actual3 && |
| 111 | sed -e "1,/^@@/d" actual3 >actual3.body && |
| 112 | expect_from_to >expect.body $subprev $subprev-dirty && |
| 113 | test_cmp expect.body actual3.body && |
| 114 | git diff --ignore-submodules=dirty HEAD >actual4 && |
SZEDER Gábor | ec10b01 | 2018-08-19 23:57:22 +0200 | [diff] [blame] | 115 | test_must_be_empty actual4 |
Junio C Hamano | 8e08b41 | 2010-01-16 18:42:53 +0100 | [diff] [blame] | 116 | ' |
Brian Gernhardt | 6ed7dda | 2010-06-25 13:20:48 -0400 | [diff] [blame] | 117 | |
Jens Lehmann | 302ad7a | 2010-08-06 00:40:48 +0200 | [diff] [blame] | 118 | test_expect_success 'git diff HEAD with dirty submodule (work tree, refs match) [.gitmodules]' ' |
Jens Lehmann | 90e1452 | 2010-08-06 01:27:15 +0200 | [diff] [blame] | 119 | git config diff.ignoreSubmodules dirty && |
| 120 | git diff HEAD >actual && |
SZEDER Gábor | ec10b01 | 2018-08-19 23:57:22 +0200 | [diff] [blame] | 121 | test_must_be_empty actual && |
Jens Lehmann | 302ad7a | 2010-08-06 00:40:48 +0200 | [diff] [blame] | 122 | git config --add -f .gitmodules submodule.subname.ignore none && |
| 123 | git config --add -f .gitmodules submodule.subname.path sub && |
| 124 | git diff HEAD >actual && |
| 125 | sed -e "1,/^@@/d" actual >actual.body && |
| 126 | expect_from_to >expect.body $subprev $subprev-dirty && |
| 127 | test_cmp expect.body actual.body && |
| 128 | git config -f .gitmodules submodule.subname.ignore all && |
| 129 | git config -f .gitmodules submodule.subname.path sub && |
| 130 | git diff HEAD >actual2 && |
SZEDER Gábor | ec10b01 | 2018-08-19 23:57:22 +0200 | [diff] [blame] | 131 | test_must_be_empty actual2 && |
Jens Lehmann | 302ad7a | 2010-08-06 00:40:48 +0200 | [diff] [blame] | 132 | git config -f .gitmodules submodule.subname.ignore untracked && |
| 133 | git diff HEAD >actual3 && |
| 134 | sed -e "1,/^@@/d" actual3 >actual3.body && |
| 135 | expect_from_to >expect.body $subprev $subprev-dirty && |
| 136 | test_cmp expect.body actual3.body && |
| 137 | git config -f .gitmodules submodule.subname.ignore dirty && |
| 138 | git diff HEAD >actual4 && |
SZEDER Gábor | ec10b01 | 2018-08-19 23:57:22 +0200 | [diff] [blame] | 139 | test_must_be_empty actual4 && |
Jens Lehmann | 302ad7a | 2010-08-06 00:40:48 +0200 | [diff] [blame] | 140 | git config submodule.subname.ignore none && |
| 141 | git config submodule.subname.path sub && |
| 142 | git diff HEAD >actual && |
| 143 | sed -e "1,/^@@/d" actual >actual.body && |
| 144 | expect_from_to >expect.body $subprev $subprev-dirty && |
| 145 | test_cmp expect.body actual.body && |
| 146 | git config --remove-section submodule.subname && |
| 147 | git config --remove-section -f .gitmodules submodule.subname && |
Jens Lehmann | 90e1452 | 2010-08-06 01:27:15 +0200 | [diff] [blame] | 148 | git config --unset diff.ignoreSubmodules && |
Jens Lehmann | 302ad7a | 2010-08-06 00:40:48 +0200 | [diff] [blame] | 149 | rm .gitmodules |
| 150 | ' |
| 151 | |
Junio C Hamano | 8e08b41 | 2010-01-16 18:42:53 +0100 | [diff] [blame] | 152 | test_expect_success 'git diff HEAD with dirty submodule (index, refs match)' ' |
| 153 | ( |
| 154 | cd sub && |
| 155 | git reset --hard && |
| 156 | echo >>world && |
| 157 | git add world |
| 158 | ) && |
| 159 | git diff HEAD >actual && |
| 160 | sed -e "1,/^@@/d" actual >actual.body && |
| 161 | expect_from_to >expect.body $subprev $subprev-dirty && |
| 162 | test_cmp expect.body actual.body |
| 163 | ' |
| 164 | |
| 165 | test_expect_success 'git diff HEAD with dirty submodule (untracked, refs match)' ' |
| 166 | ( |
| 167 | cd sub && |
| 168 | git reset --hard && |
| 169 | git clean -qfdx && |
| 170 | >cruft |
| 171 | ) && |
| 172 | git diff HEAD >actual && |
| 173 | sed -e "1,/^@@/d" actual >actual.body && |
| 174 | expect_from_to >expect.body $subprev $subprev-dirty && |
Jens Lehmann | dd44d41 | 2010-06-08 18:31:51 +0200 | [diff] [blame] | 175 | test_cmp expect.body actual.body && |
| 176 | git diff --ignore-submodules=all HEAD >actual2 && |
SZEDER Gábor | ec10b01 | 2018-08-19 23:57:22 +0200 | [diff] [blame] | 177 | test_must_be_empty actual2 && |
Jens Lehmann | dd44d41 | 2010-06-08 18:31:51 +0200 | [diff] [blame] | 178 | git diff --ignore-submodules=untracked HEAD >actual3 && |
SZEDER Gábor | ec10b01 | 2018-08-19 23:57:22 +0200 | [diff] [blame] | 179 | test_must_be_empty actual3 && |
Jens Lehmann | dd44d41 | 2010-06-08 18:31:51 +0200 | [diff] [blame] | 180 | git diff --ignore-submodules=dirty HEAD >actual4 && |
SZEDER Gábor | ec10b01 | 2018-08-19 23:57:22 +0200 | [diff] [blame] | 181 | test_must_be_empty actual4 |
Junio C Hamano | 8e08b41 | 2010-01-16 18:42:53 +0100 | [diff] [blame] | 182 | ' |
| 183 | |
Jens Lehmann | 302ad7a | 2010-08-06 00:40:48 +0200 | [diff] [blame] | 184 | test_expect_success 'git diff HEAD with dirty submodule (untracked, refs match) [.gitmodules]' ' |
| 185 | git config --add -f .gitmodules submodule.subname.ignore all && |
| 186 | git config --add -f .gitmodules submodule.subname.path sub && |
| 187 | git diff HEAD >actual2 && |
SZEDER Gábor | ec10b01 | 2018-08-19 23:57:22 +0200 | [diff] [blame] | 188 | test_must_be_empty actual2 && |
Jens Lehmann | 302ad7a | 2010-08-06 00:40:48 +0200 | [diff] [blame] | 189 | git config -f .gitmodules submodule.subname.ignore untracked && |
| 190 | git diff HEAD >actual3 && |
SZEDER Gábor | ec10b01 | 2018-08-19 23:57:22 +0200 | [diff] [blame] | 191 | test_must_be_empty actual3 && |
Jens Lehmann | 302ad7a | 2010-08-06 00:40:48 +0200 | [diff] [blame] | 192 | git config -f .gitmodules submodule.subname.ignore dirty && |
| 193 | git diff HEAD >actual4 && |
SZEDER Gábor | ec10b01 | 2018-08-19 23:57:22 +0200 | [diff] [blame] | 194 | test_must_be_empty actual4 && |
Jens Lehmann | 302ad7a | 2010-08-06 00:40:48 +0200 | [diff] [blame] | 195 | git config submodule.subname.ignore none && |
| 196 | git config submodule.subname.path sub && |
| 197 | git diff HEAD >actual && |
| 198 | sed -e "1,/^@@/d" actual >actual.body && |
| 199 | expect_from_to >expect.body $subprev $subprev-dirty && |
| 200 | test_cmp expect.body actual.body && |
| 201 | git config --remove-section submodule.subname && |
| 202 | git config --remove-section -f .gitmodules submodule.subname && |
| 203 | rm .gitmodules |
| 204 | ' |
| 205 | |
Jens Lehmann | aee9c7d | 2010-08-06 00:39:25 +0200 | [diff] [blame] | 206 | test_expect_success 'git diff between submodule commits' ' |
| 207 | git diff HEAD^..HEAD >actual && |
| 208 | sed -e "1,/^@@/d" actual >actual.body && |
| 209 | expect_from_to >expect.body $subtip $subprev && |
| 210 | test_cmp expect.body actual.body && |
| 211 | git diff --ignore-submodules=dirty HEAD^..HEAD >actual && |
| 212 | sed -e "1,/^@@/d" actual >actual.body && |
| 213 | expect_from_to >expect.body $subtip $subprev && |
| 214 | test_cmp expect.body actual.body && |
| 215 | git diff --ignore-submodules HEAD^..HEAD >actual && |
SZEDER Gábor | ec10b01 | 2018-08-19 23:57:22 +0200 | [diff] [blame] | 216 | test_must_be_empty actual |
Jens Lehmann | aee9c7d | 2010-08-06 00:39:25 +0200 | [diff] [blame] | 217 | ' |
| 218 | |
Jens Lehmann | 302ad7a | 2010-08-06 00:40:48 +0200 | [diff] [blame] | 219 | test_expect_success 'git diff between submodule commits [.gitmodules]' ' |
| 220 | git diff HEAD^..HEAD >actual && |
| 221 | sed -e "1,/^@@/d" actual >actual.body && |
| 222 | expect_from_to >expect.body $subtip $subprev && |
| 223 | test_cmp expect.body actual.body && |
| 224 | git config --add -f .gitmodules submodule.subname.ignore dirty && |
| 225 | git config --add -f .gitmodules submodule.subname.path sub && |
| 226 | git diff HEAD^..HEAD >actual && |
| 227 | sed -e "1,/^@@/d" actual >actual.body && |
| 228 | expect_from_to >expect.body $subtip $subprev && |
| 229 | test_cmp expect.body actual.body && |
| 230 | git config -f .gitmodules submodule.subname.ignore all && |
| 231 | git diff HEAD^..HEAD >actual && |
SZEDER Gábor | ec10b01 | 2018-08-19 23:57:22 +0200 | [diff] [blame] | 232 | test_must_be_empty actual && |
Jens Lehmann | 302ad7a | 2010-08-06 00:40:48 +0200 | [diff] [blame] | 233 | git config submodule.subname.ignore dirty && |
| 234 | git config submodule.subname.path sub && |
| 235 | git diff HEAD^..HEAD >actual && |
| 236 | sed -e "1,/^@@/d" actual >actual.body && |
| 237 | expect_from_to >expect.body $subtip $subprev && |
| 238 | git config --remove-section submodule.subname && |
| 239 | git config --remove-section -f .gitmodules submodule.subname && |
| 240 | rm .gitmodules |
| 241 | ' |
| 242 | |
Junio C Hamano | 1392a37 | 2008-05-03 17:04:42 -0700 | [diff] [blame] | 243 | test_expect_success 'git diff (empty submodule dir)' ' |
Ping Yin | 7c08a2a | 2008-05-02 21:35:33 +0800 | [diff] [blame] | 244 | rm -rf sub/* sub/.git && |
| 245 | git diff > actual.empty && |
SZEDER Gábor | 1c5e94f | 2018-08-19 23:57:25 +0200 | [diff] [blame] | 246 | test_must_be_empty actual.empty |
Ping Yin | 7c08a2a | 2008-05-02 21:35:33 +0800 | [diff] [blame] | 247 | ' |
| 248 | |
Junio C Hamano | 7dae8b2 | 2009-04-29 12:49:52 -0700 | [diff] [blame] | 249 | test_expect_success 'conflicted submodule setup' ' |
brian m. carlson | 45e2ef2 | 2019-10-28 00:59:01 +0000 | [diff] [blame] | 250 | c=$(test_oid ff_1) && |
Junio C Hamano | 7dae8b2 | 2009-04-29 12:49:52 -0700 | [diff] [blame] | 251 | ( |
brian m. carlson | 8125a58 | 2018-05-13 02:24:13 +0000 | [diff] [blame] | 252 | echo "000000 $ZERO_OID 0 sub" && |
Jonathan Nieder | a48fcd8 | 2010-10-30 20:46:54 -0500 | [diff] [blame] | 253 | echo "160000 1$c 1 sub" && |
| 254 | echo "160000 2$c 2 sub" && |
Junio C Hamano | 7dae8b2 | 2009-04-29 12:49:52 -0700 | [diff] [blame] | 255 | echo "160000 3$c 3 sub" |
| 256 | ) | git update-index --index-info && |
brian m. carlson | 45e2ef2 | 2019-10-28 00:59:01 +0000 | [diff] [blame] | 257 | echo >expect.nosub "diff --cc sub |
Junio C Hamano | 7dae8b2 | 2009-04-29 12:49:52 -0700 | [diff] [blame] | 258 | index 2ffffff,3ffffff..0000000 |
| 259 | --- a/sub |
| 260 | +++ b/sub |
| 261 | @@@ -1,1 -1,1 +1,1 @@@ |
brian m. carlson | 45e2ef2 | 2019-10-28 00:59:01 +0000 | [diff] [blame] | 262 | - Subproject commit 2$c |
| 263 | -Subproject commit 3$c |
| 264 | ++Subproject commit $ZERO_OID" && |
Junio C Hamano | 7dae8b2 | 2009-04-29 12:49:52 -0700 | [diff] [blame] | 265 | |
| 266 | hh=$(git rev-parse HEAD) && |
brian m. carlson | 8125a58 | 2018-05-13 02:24:13 +0000 | [diff] [blame] | 267 | sed -e "s/$ZERO_OID/$hh/" expect.nosub >expect.withsub |
Junio C Hamano | 7dae8b2 | 2009-04-29 12:49:52 -0700 | [diff] [blame] | 268 | |
| 269 | ' |
| 270 | |
| 271 | test_expect_success 'combined (empty submodule)' ' |
| 272 | rm -fr sub && mkdir sub && |
| 273 | git diff >actual && |
| 274 | test_cmp expect.nosub actual |
| 275 | ' |
| 276 | |
| 277 | test_expect_success 'combined (with submodule)' ' |
| 278 | rm -fr sub && |
| 279 | git clone --no-checkout . sub && |
| 280 | git diff >actual && |
| 281 | test_cmp expect.withsub actual |
| 282 | ' |
| 283 | |
| 284 | |
| 285 | |
Junio C Hamano | 2b459b4 | 2008-03-02 00:07:59 -0800 | [diff] [blame] | 286 | test_done |