summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEdward Thomson <ethomson@edwardthomson.com>2017-03-28 15:16:34 +0100
committerGitHub <noreply@github.com>2017-03-28 15:16:34 +0100
commitcaf7a7a6b14b3b2f200f88f2f8d7a18ca10fd3ac (patch)
treedb01d0586a75eaec8875c6a4e90db93cdc4d9f49
parenta25df009ef7f89fb8cbb26fb78e6c2e960a6c18b (diff)
parent06abbb7f07c64e877ffa87ae4614ae5f4e933435 (diff)
downloadlibgit2-caf7a7a6b14b3b2f200f88f2f8d7a18ca10fd3ac.tar.gz
Merge pull request #4182 from pks-t/pks/treebuilder
git_treebuilder_write_with_buffer refactorings
-rw-r--r--src/tree.c24
1 files changed, 13 insertions, 11 deletions
diff --git a/src/tree.c b/src/tree.c
index dba2060c3..6b1d1b238 100644
--- a/src/tree.c
+++ b/src/tree.c
@@ -818,7 +818,7 @@ int git_treebuilder_write_with_buffer(git_oid *oid, git_treebuilder *bld, git_bu
size_t i, entrycount;
git_odb *odb;
git_tree_entry *entry;
- git_vector entries;
+ git_vector entries = GIT_VECTOR_INIT;
assert(bld);
assert(tree);
@@ -826,35 +826,37 @@ int git_treebuilder_write_with_buffer(git_oid *oid, git_treebuilder *bld, git_bu
git_buf_clear(tree);
entrycount = git_strmap_num_entries(bld->map);
- if (git_vector_init(&entries, entrycount, entry_sort_cmp) < 0)
- return -1;
+ if ((error = git_vector_init(&entries, entrycount, entry_sort_cmp)) < 0)
+ goto out;
if (tree->asize == 0 &&
- (error = git_buf_grow(tree, entrycount * 72)) < 0)
- return error;
+ (error = git_buf_grow(tree, entrycount * 72)) < 0)
+ goto out;
git_strmap_foreach_value(bld->map, entry, {
- if (git_vector_insert(&entries, entry) < 0)
- return -1;
+ if ((error = git_vector_insert(&entries, entry)) < 0)
+ goto out;
});
git_vector_sort(&entries);
for (i = 0; i < entries.length && !error; ++i) {
- git_tree_entry *entry = git_vector_get(&entries, i);
+ entry = git_vector_get(&entries, i);
git_buf_printf(tree, "%o ", entry->attr);
git_buf_put(tree, entry->filename, entry->filename_len + 1);
git_buf_put(tree, (char *)entry->oid->id, GIT_OID_RAWSZ);
- if (git_buf_oom(tree))
+ if (git_buf_oom(tree)) {
error = -1;
+ goto out;
+ }
}
- if (!error &&
- !(error = git_repository_odb__weakptr(&odb, bld->repo)))
+ if ((error = git_repository_odb__weakptr(&odb, bld->repo)) == 0)
error = git_odb_write(oid, odb, tree->ptr, tree->size, GIT_OBJ_TREE);
+out:
git_vector_free(&entries);
return error;