@matheusbsbs / matheus-bagliano / commits / feea6946a5
Fork 0

diff-files: treat "i-t-a" files as "not-in-index"

The `diff-files' command and related commands which call the function `cmd_diff_files()', consider the "intent-to-add" files as a part of the index when comparing the work-tree against it. This was previously addressed in commits [1] and [2] by turning the option `--ita-invisible-in-index' (introduced in [3]) on by default. For `diff-files' (and `add -p' as a consequence) to show the i-t-a files as as new, `ita_invisible_in_index' will be enabled by default here as well. [1] 0231ae71d3 (diff: turn --ita-invisible-in-index on by default, 2018-05-26) [2] 425a28e0a4 (diff-lib: allow ita entries treated as "not yet exist in index", 2016-10-24) [3] b42b451919 (diff: add --ita-[in]visible-in-index, 2016-10-24) Signed-off-by: Srinidhi Kaushik <shrinidhi.kaushik@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Srinidhi Kaushik committed Jun 20, 2020 at 22:08 UTC feea6946a5b746ff4ebf8ccdf959e303203a6011
2 files changed +52 -8
builtin/diff-files.c
+7
@@ -28,6 +28,13 @@ int cmd_diff_files(int argc, const char **argv, const char *prefix)
28 git_config(git_diff_basic_config, NULL); /* no "diff" UI options */
29 repo_init_revisions(the_repository, &rev, prefix);
30 rev.abbrev = 0;
31 +
32 + /*
33 + * Consider "intent-to-add" files as new by default, unless
34 + * explicitly specified in the command line or anywhere else.
35 + */
36 + rev.diffopt.ita_invisible_in_index = 1;
37 +
38 precompose_argv(argc, argv);
39
40 argc = setup_revisions(argc, argv, &rev, NULL);
t/t2203-add-intent.sh
+45 -8
@@ -232,17 +232,54 @@ test_expect_success 'double rename detection in status' '
232 )
233 '
234
235 -test_expect_success 'diff-files/diff-cached shows ita as new/not-new files' '
235 +test_expect_success 'i-t-a files shown as new for "diff", "diff-files"; not-new for "diff --cached"' '
236 git reset --hard &&
237 - echo new >new-ita &&
238 - git add -N new-ita &&
237 + : >empty &&
238 + content="foo" &&
239 + echo "$content" >not-empty &&
240 +
241 + hash_e=$(git hash-object empty) &&
242 + hash_n=$(git hash-object not-empty) &&
243 + hash_t=$(git hash-object -t tree /dev/null) &&
244 +
245 + cat >expect.diff_p <<-EOF &&
246 + diff --git a/empty b/empty
247 + new file mode 100644
248 + index 0000000..$(git rev-parse --short $hash_e)
249 + diff --git a/not-empty b/not-empty
250 + new file mode 100644
251 + index 0000000..$(git rev-parse --short $hash_n)
252 + --- /dev/null
253 + +++ b/not-empty
254 + @@ -0,0 +1 @@
255 + +$content
256 + EOF
257 + cat >expect.diff_s <<-EOF &&
258 + create mode 100644 empty
259 + create mode 100644 not-empty
260 + EOF
261 + cat >expect.diff_a <<-EOF &&
262 + :000000 100644 0000000 $(git rev-parse --short $hash_t) A$(printf "\t")empty
263 + :000000 100644 0000000 $(git rev-parse --short $hash_t) A$(printf "\t")not-empty
264 + EOF
265 +
266 + git add -N empty not-empty &&
267 +
268 + git diff >actual &&
269 + test_cmp expect.diff_p actual &&
270 +
271 git diff --summary >actual &&
240 - echo " create mode 100644 new-ita" >expected &&
241 - test_cmp expected actual &&
242 - git diff --cached --summary >actual2 &&
243 - test_must_be_empty actual2
244 -'
272 + test_cmp expect.diff_s actual &&
273 +
274 + git diff-files -p >actual &&
275 + test_cmp expect.diff_p actual &&
276
277 + git diff-files --abbrev >actual &&
278 + test_cmp expect.diff_a actual &&
279 +
280 + git diff --cached >actual &&
281 + test_must_be_empty actual
282 +'
283
284 test_expect_success '"diff HEAD" includes ita as new files' '
285 git reset --hard &&