summaryrefslogtreecommitdiff
path: root/src/tree.c
diff options
context:
space:
mode:
authorEdward Thomson <ethomson@edwardthomson.com>2018-08-26 11:33:42 +0100
committerGitHub <noreply@github.com>2018-08-26 11:33:42 +0100
commit85eb2cb67611483cc13c9d16589b88a6cb9dd19d (patch)
treea7dbfa46909a26e50783b9c915e901f1b6785e4d /src/tree.c
parent50186ce88bcca5d7a23d6365acb3e9a818474f6f (diff)
parentf00db9ed67423b04976f8d20b0de2ee1fb7c3993 (diff)
downloadlibgit2-85eb2cb67611483cc13c9d16589b88a6cb9dd19d.tar.gz
Merge pull request #4727 from libgit2/cmn/null-oid-existing-tree
tree: accept null ids in existing trees when updating
Diffstat (limited to 'src/tree.c')
-rw-r--r--src/tree.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/src/tree.c b/src/tree.c
index 823385722..e4a0547a3 100644
--- a/src/tree.c
+++ b/src/tree.c
@@ -460,15 +460,16 @@ static int append_entry(
git_treebuilder *bld,
const char *filename,
const git_oid *id,
- git_filemode_t filemode)
+ git_filemode_t filemode,
+ bool validate)
{
git_tree_entry *entry;
int error = 0;
- if (!valid_entry_name(bld->repo, filename))
+ if (validate && !valid_entry_name(bld->repo, filename))
return tree_error("failed to insert entry: invalid name for a tree entry", filename);
- if (git_oid_iszero(id))
+ if (validate && git_oid_iszero(id))
return tree_error("failed to insert entry: invalid null OID for a tree entry", filename);
entry = alloc_entry(filename, strlen(filename), id);
@@ -566,12 +567,12 @@ static int write_tree(
last_comp = subdir;
}
- error = append_entry(bld, last_comp, &sub_oid, S_IFDIR);
+ error = append_entry(bld, last_comp, &sub_oid, S_IFDIR, true);
git__free(subdir);
if (error < 0)
goto on_error;
} else {
- error = append_entry(bld, filename, &entry->id, entry->mode);
+ error = append_entry(bld, filename, &entry->id, entry->mode, true);
if (error < 0)
goto on_error;
}
@@ -669,7 +670,8 @@ int git_treebuilder_new(
if (append_entry(
bld, entry_src->filename,
entry_src->oid,
- entry_src->attr) < 0)
+ entry_src->attr,
+ false) < 0)
goto on_error;
}
}