Revert "diff-lib.c: adjust position of i-t-a entries in diff"

This reverts commit d95d728aba06a34394d15466045cbdabdada58a2. It turns out that many other commands that need to interact with the result of running diff-files and diff-index, e.g. "git apply", "git rm", etc., need to be adjusted to the new world order it brings in. For example, it would break this sequence to correct a whitespace breakage in the parts you changed: git add -N file git diff --cached file | git apply --cached --whitespace=fix git checkout file In the old world order, "diff" showed a patch to modify an existing empty file by adding its full contents, and "apply" updated the index by modifying the existing empty blob (which is what an Intent-to-Add entry records in the index) with that patch. In the new world order, "diff" shows a patch to create a new file with its full contents, but because "apply" thinks that the i-t-a entry already exists in the index, it refused to accept a creation. Adjusting "apply" to this new world order is easy, but we need to assess the extent of the damage to the rest of the system the new world order brought in before going forward and adjust them all, after which we can resurrect the commit being reverted here. Signed-off-by: Junio C Hamano <gitster@pobox.com>

Junio C Hamano committed Jun 23, 2015 at 10:27 UTC 78cc1a540ba127b13f2f3fd531777b57f3a9cd46
4 files changed +8 -38
builtin/add.c
-1
@@ -63,7 +63,6 @@ static void update_callback(struct diff_queue_struct *q,
63 switch (fix_unmerged_status(p, data)) {
64 default:
65 die(_("unexpected diff status %c"), p->status);
66 - case DIFF_STATUS_ADDED:
66 case DIFF_STATUS_MODIFIED:
67 case DIFF_STATUS_TYPE_CHANGED:
68 if (add_file_to_index(&the_index, path, data->flags)) {
diff-lib.c
-12
@@ -212,11 +212,6 @@ int run_diff_files(struct rev_info *revs, unsigned int option)
212 ce->sha1, !is_null_sha1(ce->sha1),
213 ce->name, 0);
214 continue;
215 - } else if (ce->ce_flags & CE_INTENT_TO_ADD) {
216 - diff_addremove(&revs->diffopt, '+', ce->ce_mode,
217 - EMPTY_BLOB_SHA1_BIN, 0,
218 - ce->name, 0);
219 - continue;
215 }
216
217 changed = match_stat_with_submodule(&revs->diffopt, ce, &st,
@@ -381,13 +376,6 @@ static void do_oneway_diff(struct unpack_trees_options *o,
376 struct rev_info *revs = o->unpack_data;
377 int match_missing, cached;
378
384 - /* i-t-a entries do not actually exist in the index */
385 - if (idx && (idx->ce_flags & CE_INTENT_TO_ADD)) {
386 - idx = NULL;
387 - if (!tree)
388 - return; /* nothing to diff.. */
389 - }
390 -
379 /* if the entry is not checked out, don't examine work tree */
380 cached = o->index_only ||
381 (idx && ((idx->ce_flags & CE_VALID) || ce_skip_worktree(idx)));
t/t2203-add-intent.sh
+4 -19
@@ -5,24 +5,10 @@ test_description='Intent to add'
5 . ./test-lib.sh
6
7 test_expect_success 'intent to add' '
8 - test_commit 1 &&
9 - git rm 1.t &&
10 - echo hello >1.t &&
8 echo hello >file &&
9 echo hello >elif &&
10 git add -N file &&
14 - git add elif &&
15 - git add -N 1.t
16 -'
17 -
18 -test_expect_success 'git status' '
19 - git status --porcelain | grep -v actual >actual &&
20 - cat >expect <<-\EOF &&
21 - DA 1.t
22 - A elif
23 - A file
24 - EOF
25 - test_cmp expect actual
11 + git add elif
12 '
13
14 test_expect_success 'check result of "add -N"' '
@@ -57,8 +43,7 @@ test_expect_success 'i-t-a entry is simply ignored' '
43 git add -N nitfol &&
44 git commit -m second &&
45 test $(git ls-tree HEAD -- nitfol | wc -l) = 0 &&
60 - test $(git diff --name-only HEAD -- nitfol | wc -l) = 0 &&
61 - test $(git diff --name-only -- nitfol | wc -l) = 1
46 + test $(git diff --name-only HEAD -- nitfol | wc -l) = 1
47 '
48
49 test_expect_success 'can commit with an unrelated i-t-a entry in index' '
@@ -87,13 +72,13 @@ test_expect_success 'cache-tree invalidates i-t-a paths' '
72 : >dir/bar &&
73 git add -N dir/bar &&
74 git diff --cached --name-only >actual &&
90 - >expect &&
75 + echo dir/bar >expect &&
76 test_cmp expect actual &&
77
78 git write-tree >/dev/null &&
79
80 git diff --cached --name-only >actual &&
96 - >expect &&
81 + echo dir/bar >expect &&
82 test_cmp expect actual
83 '
84
t/t4011-diff-symlink.sh
+4 -6
@@ -139,13 +139,11 @@ test_expect_success SYMLINKS 'setup symlinks with attributes' '
139 test_expect_success SYMLINKS 'symlinks do not respect userdiff config by path' '
140 cat >expect <<-\EOF &&
141 diff --git a/file.bin b/file.bin
142 - new file mode 100644
143 - index 0000000..d95f3ad
144 - Binary files /dev/null and b/file.bin differ
142 + index e69de29..d95f3ad 100644
143 + Binary files a/file.bin and b/file.bin differ
144 diff --git a/link.bin b/link.bin
146 - new file mode 120000
147 - index 0000000..dce41ec
148 - --- /dev/null
145 + index e69de29..dce41ec 120000
146 + --- a/link.bin
147 +++ b/link.bin
148 @@ -0,0 +1 @@
149 +file.bin