Skip to content

Commit 78cc1a5

Browse files
committed
Revert "diff-lib.c: adjust position of i-t-a entries in diff"
This reverts commit d95d728. 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 <[email protected]>
1 parent d95d728 commit 78cc1a5

File tree

4 files changed

+8
-38
lines changed

4 files changed

+8
-38
lines changed

builtin/add.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,6 @@ static void update_callback(struct diff_queue_struct *q,
6363
switch (fix_unmerged_status(p, data)) {
6464
default:
6565
die(_("unexpected diff status %c"), p->status);
66-
case DIFF_STATUS_ADDED:
6766
case DIFF_STATUS_MODIFIED:
6867
case DIFF_STATUS_TYPE_CHANGED:
6968
if (add_file_to_index(&the_index, path, data->flags)) {

diff-lib.c

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -212,11 +212,6 @@ int run_diff_files(struct rev_info *revs, unsigned int option)
212212
ce->sha1, !is_null_sha1(ce->sha1),
213213
ce->name, 0);
214214
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;
220215
}
221216

222217
changed = match_stat_with_submodule(&revs->diffopt, ce, &st,
@@ -381,13 +376,6 @@ static void do_oneway_diff(struct unpack_trees_options *o,
381376
struct rev_info *revs = o->unpack_data;
382377
int match_missing, cached;
383378

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-
391379
/* if the entry is not checked out, don't examine work tree */
392380
cached = o->index_only ||
393381
(idx && ((idx->ce_flags & CE_VALID) || ce_skip_worktree(idx)));

t/t2203-add-intent.sh

Lines changed: 4 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,24 +5,10 @@ test_description='Intent to add'
55
. ./test-lib.sh
66

77
test_expect_success 'intent to add' '
8-
test_commit 1 &&
9-
git rm 1.t &&
10-
echo hello >1.t &&
118
echo hello >file &&
129
echo hello >elif &&
1310
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
2612
'
2713

2814
test_expect_success 'check result of "add -N"' '
@@ -57,8 +43,7 @@ test_expect_success 'i-t-a entry is simply ignored' '
5743
git add -N nitfol &&
5844
git commit -m second &&
5945
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
6247
'
6348

6449
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' '
8772
: >dir/bar &&
8873
git add -N dir/bar &&
8974
git diff --cached --name-only >actual &&
90-
>expect &&
75+
echo dir/bar >expect &&
9176
test_cmp expect actual &&
9277
9378
git write-tree >/dev/null &&
9479
9580
git diff --cached --name-only >actual &&
96-
>expect &&
81+
echo dir/bar >expect &&
9782
test_cmp expect actual
9883
'
9984

t/t4011-diff-symlink.sh

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -139,13 +139,11 @@ test_expect_success SYMLINKS 'setup symlinks with attributes' '
139139
test_expect_success SYMLINKS 'symlinks do not respect userdiff config by path' '
140140
cat >expect <<-\EOF &&
141141
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
145144
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
149147
+++ b/link.bin
150148
@@ -0,0 +1 @@
151149
+file.bin

0 commit comments

Comments
 (0)