mirror of
https://github.com/git/git
synced 2024-08-27 19:49:21 +00:00
Merge branch 'jn/fast-import-empty-tree-removal' into maint
* jn/fast-import-empty-tree-removal: fast-import: treat filemodify with empty tree as delete
This commit is contained in:
commit
5ce3258122
|
@ -2166,6 +2166,12 @@ static void file_change_m(struct branch *b)
|
|||
p = uq.buf;
|
||||
}
|
||||
|
||||
/* Git does not track empty, non-toplevel directories. */
|
||||
if (S_ISDIR(mode) && !memcmp(sha1, EMPTY_TREE_SHA1_BIN, 20) && *p) {
|
||||
tree_content_remove(&b->branch_tree, p, NULL);
|
||||
return;
|
||||
}
|
||||
|
||||
if (S_ISGITLINK(mode)) {
|
||||
if (inline_data)
|
||||
die("Git links cannot be specified 'inline': %s",
|
||||
|
|
|
@ -874,6 +874,48 @@ test_expect_success \
|
|||
git diff-tree -C --find-copies-harder -r N4^ N4 >actual &&
|
||||
compare_diff_raw expect actual'
|
||||
|
||||
test_expect_success \
|
||||
'N: delete directory by copying' \
|
||||
'cat >expect <<-\EOF &&
|
||||
OBJID
|
||||
:100644 000000 OBJID OBJID D foo/bar/qux
|
||||
OBJID
|
||||
:000000 100644 OBJID OBJID A foo/bar/baz
|
||||
:000000 100644 OBJID OBJID A foo/bar/qux
|
||||
EOF
|
||||
empty_tree=$(git mktree </dev/null) &&
|
||||
cat >input <<-INPUT_END &&
|
||||
commit refs/heads/N-delete
|
||||
committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
|
||||
data <<COMMIT
|
||||
collect data to be deleted
|
||||
COMMIT
|
||||
|
||||
deleteall
|
||||
M 100644 inline foo/bar/baz
|
||||
data <<DATA_END
|
||||
hello
|
||||
DATA_END
|
||||
C "foo/bar/baz" "foo/bar/qux"
|
||||
C "foo/bar/baz" "foo/bar/quux/1"
|
||||
C "foo/bar/baz" "foo/bar/quuux"
|
||||
M 040000 $empty_tree foo/bar/quux
|
||||
M 040000 $empty_tree foo/bar/quuux
|
||||
|
||||
commit refs/heads/N-delete
|
||||
committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
|
||||
data <<COMMIT
|
||||
delete subdirectory
|
||||
COMMIT
|
||||
|
||||
M 040000 $empty_tree foo/bar/qux
|
||||
INPUT_END
|
||||
git fast-import <input &&
|
||||
git rev-list N-delete |
|
||||
git diff-tree -r --stdin --root --always |
|
||||
sed -e "s/$_x40/OBJID/g" >actual &&
|
||||
test_cmp expect actual'
|
||||
|
||||
test_expect_success \
|
||||
'N: modify copied tree' \
|
||||
'cat >expect <<-\EOF &&
|
||||
|
|
Loading…
Reference in a new issue