null_sha1 is used in fast-import to indicate "empty" branches and should never be actually written out as a commit parent. 'merge' command lacks is_null_sha1 checks and must be fixed. It looks like using null_sha1 or empty branches in 'from' command is legal and/or an intended option (it has been here from the very beginning and survived). So leave it allowed for 'merge' command too, and just like with 'from' command silently skip null_sha1 parents. Add a simple test for null_sha1 merge parents. Signed-off-by: Dmitry Ivankov <divanorama@xxxxxxxxx> --- fast-import.c | 3 ++- t/t9300-fast-import.sh | 21 +++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletions(-) diff --git a/fast-import.c b/fast-import.c index eed97c8..419e435 100644 --- a/fast-import.c +++ b/fast-import.c @@ -2734,7 +2734,8 @@ static void parse_new_commit(void) strbuf_addf(&new_data, "parent %s\n", sha1_to_hex(b->sha1)); while (merge_list) { struct hash_list *next = merge_list->next; - strbuf_addf(&new_data, "parent %s\n", sha1_to_hex(merge_list->sha1)); + if (!is_null_sha1(merge_list->sha1)) + strbuf_addf(&new_data, "parent %s\n", sha1_to_hex(merge_list->sha1)); free(merge_list); merge_list = next; } diff --git a/t/t9300-fast-import.sh b/t/t9300-fast-import.sh index c17f52e..5716420 100755 --- a/t/t9300-fast-import.sh +++ b/t/t9300-fast-import.sh @@ -850,6 +850,27 @@ INPUT_END test_expect_success \ 'J: tag must fail on empty branch' \ 'test_must_fail git fast-import <input' + +cat >input <<INPUT_END +reset refs/heads/J3 + +reset refs/heads/J4 +from 0000000000000000000000000000000000000000 + +commit refs/heads/J5 +committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE +data <<COMMIT +Merge J3, J4 into fresh J5. +COMMIT +merge refs/heads/J3 +merge refs/heads/J4 + +INPUT_END +test_expect_success \ + 'J: allow merge with empty branch' \ + 'git fast-import <input && + git rev-parse --verify J5 && + test_must_fail git rev-parse --verify J5^' ### ### series K ### -- 1.7.3.4 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html