aboutsummaryrefslogtreecommitdiff
path: root/fast-import.c
diff options
context:
space:
mode:
authorJonathan Nieder <jrnieder@gmail.com>2011-01-27 00:07:49 -0600
committerJunio C Hamano <gitster@pobox.com>2011-01-27 10:22:37 -0800
commit8fe533f686e20852fa9bd2df2755faed7c7bcdcc (patch)
tree7178c7f14de671bd9cdc8ee626962f96b74f5026 /fast-import.c
parent334fba656b50c92345586970bc6b100a449e1fc5 (diff)
downloadgit-8fe533f686e20852fa9bd2df2755faed7c7bcdcc.tar.gz
git-8fe533f686e20852fa9bd2df2755faed7c7bcdcc.tar.xz
fast-import: treat filemodify with empty tree as delete
Normal git processes do not allow one to build a tree with an empty subtree entry without trying hard at it. This is in keeping with the general UI philosophy: git tracks content, not empty directories. v1.7.3-rc0~75^2 (2010-06-30) changed that by making it easy to include an empty subtree in fast-import's active commit: M 040000 4b825dc642cb6eb9a060e54bf8d69288fbee4904 subdir One can trigger this by reading an empty tree (for example, the tree corresponding to an empty root commit) and trying to move it to a subtree. It is better and more closely analogous to 'git read-tree --prefix' to treat such commands as requests to remove the subtree. Noticed-by: David Barr <david.barr@cordelta.com> Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'fast-import.c')
-rw-r--r--fast-import.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/fast-import.c b/fast-import.c
index ad6843a8b..cd9310d1e 100644
--- a/fast-import.c
+++ b/fast-import.c
@@ -2163,6 +2163,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",