From ea5bf6bbcead5a9ba24a38c4da62ee87059c5c9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn=20Nieto?= Date: Fri, 4 Mar 2016 12:34:38 +0100 Subject: [PATCH] treebuilder: don't try to verify submodules exist in the odb Submodules don't exist in the objectdb and the code is making us try to look for a blob with its commit id, which is obviously not going to work. Skip the test if the user wants to insert a submodule. --- src/tree.c | 3 ++- tests/object/tree/write.c | 12 ++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/tree.c b/src/tree.c index 2c3151546..48b9f121d 100644 --- a/src/tree.c +++ b/src/tree.c @@ -757,7 +757,8 @@ int git_treebuilder_insert( if (!valid_entry_name(bld->repo, filename)) return tree_error("Failed to insert entry. Invalid name for a tree entry", filename); - if (!git_object__is_valid(bld->repo, id, otype_from_mode(filemode))) + if (filemode != GIT_FILEMODE_COMMIT && + !git_object__is_valid(bld->repo, id, otype_from_mode(filemode))) return tree_error("Failed to insert entry; invalid object specified", filename); pos = git_strmap_lookup_index(bld->map, filename); diff --git a/tests/object/tree/write.c b/tests/object/tree/write.c index 341f5db72..a9decf9c1 100644 --- a/tests/object/tree/write.c +++ b/tests/object/tree/write.c @@ -490,13 +490,25 @@ static void test_invalid_objects(bool should_allow_invalid) git_treebuilder_free(builder); } +static void test_inserting_submodule(void) +{ + git_treebuilder *bld; + git_oid sm_id; + + cl_git_pass(git_treebuilder_new(&bld, g_repo, NULL)); + cl_git_pass(git_treebuilder_insert(NULL, bld, "sm", &sm_id, GIT_FILEMODE_COMMIT)); + git_treebuilder_free(bld); +} + void test_object_tree_write__object_validity(void) { /* Ensure that we cannot add invalid objects by default */ test_invalid_objects(false); + test_inserting_submodule(); /* Ensure that we can turn off validation */ cl_git_pass(git_libgit2_opts(GIT_OPT_ENABLE_STRICT_OBJECT_CREATION, 0)); test_invalid_objects(true); + test_inserting_submodule(); }