summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaxim Bublis <satori@yandex-team.ru>2014-08-29 15:53:37 +0400
committerJunio C Hamano <gitster@pobox.com>2014-08-29 10:31:14 -0700
commit2668d692eb1af63097628447f2e0c783b1a45e2e (patch)
tree941bfb5a89e5a0b21c797d560eb804272130434c
parent8d30d8a89aa9bf8dfb477cb127af58448bbe9b96 (diff)
downloadgit-2668d692eb1af63097628447f2e0c783b1a45e2e.tar.gz
fast-import: fix segfault in store_tree()mb/fast-import-delete-root
Branch tree is NULLified by filedelete command if we are trying to delete root tree. Add sanity check and use load_tree() in that case. Signed-off-by: Maxim Bublis <satori@yandex-team.ru> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--fast-import.c6
-rwxr-xr-xt/t9300-fast-import.sh4
2 files changed, 7 insertions, 3 deletions
diff --git a/fast-import.c b/fast-import.c
index d73f58cbe3..e380804831 100644
--- a/fast-import.c
+++ b/fast-import.c
@@ -1419,7 +1419,7 @@ static void mktree(struct tree_content *t, int v, struct strbuf *b)
static void store_tree(struct tree_entry *root)
{
- struct tree_content *t = root->tree;
+ struct tree_content *t;
unsigned int i, j, del;
struct last_object lo = { STRBUF_INIT, 0, 0, /* no_swap */ 1 };
struct object_entry *le = NULL;
@@ -1427,6 +1427,10 @@ static void store_tree(struct tree_entry *root)
if (!is_null_sha1(root->versions[1].sha1))
return;
+ if (!root->tree)
+ load_tree(root);
+ t = root->tree;
+
for (i = 0; i < t->entry_count; i++) {
if (t->entries[i]->tree)
store_tree(t->entries[i]);
diff --git a/t/t9300-fast-import.sh b/t/t9300-fast-import.sh
index 9cf5e45ae7..d400442a4a 100755
--- a/t/t9300-fast-import.sh
+++ b/t/t9300-fast-import.sh
@@ -3107,7 +3107,7 @@ D ""
INPUT_END
-test_expect_failure 'U: filedelete root succeeds' '
+test_expect_success 'U: filedelete root succeeds' '
git fast-import <input
'
@@ -3117,7 +3117,7 @@ EOF
git diff-tree -M -r U^1 U >actual
-test_expect_failure 'U: validate root delete result' '
+test_expect_success 'U: validate root delete result' '
compare_diff_raw expect actual
'