Skip to content

Commit 298d704

Browse files
committed
Merge branch 'sk/diff-files-show-i-t-a-as-new'
"git diff-files" has been taught to say paths that are marked as intent-to-add are new files, not modified from an empty blob. * sk/diff-files-show-i-t-a-as-new: diff-files: treat "i-t-a" files as "not-in-index"
2 parents fa2c57d + feea694 commit 298d704

File tree

2 files changed

+52
-8
lines changed

2 files changed

+52
-8
lines changed

builtin/diff-files.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,13 @@ int cmd_diff_files(int argc, const char **argv, const char *prefix)
2828
git_config(git_diff_basic_config, NULL); /* no "diff" UI options */
2929
repo_init_revisions(the_repository, &rev, prefix);
3030
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+
3138
precompose_argv(argc, argv);
3239

3340
argc = setup_revisions(argc, argv, &rev, NULL);

t/t2203-add-intent.sh

Lines changed: 45 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -232,17 +232,54 @@ test_expect_success 'double rename detection in status' '
232232
)
233233
'
234234

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"' '
236236
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+
239271
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 &&
245276
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+
'
246283

247284
test_expect_success '"diff HEAD" includes ita as new files' '
248285
git reset --hard &&

0 commit comments

Comments
 (0)