Commit caf7a7a6 by Edward Thomson Committed by GitHub

Merge pull request #4182 from pks-t/pks/treebuilder

git_treebuilder_write_with_buffer refactorings
parents a25df009 06abbb7f
...@@ -818,7 +818,7 @@ int git_treebuilder_write_with_buffer(git_oid *oid, git_treebuilder *bld, git_bu ...@@ -818,7 +818,7 @@ int git_treebuilder_write_with_buffer(git_oid *oid, git_treebuilder *bld, git_bu
size_t i, entrycount; size_t i, entrycount;
git_odb *odb; git_odb *odb;
git_tree_entry *entry; git_tree_entry *entry;
git_vector entries; git_vector entries = GIT_VECTOR_INIT;
assert(bld); assert(bld);
assert(tree); assert(tree);
...@@ -826,35 +826,37 @@ int git_treebuilder_write_with_buffer(git_oid *oid, git_treebuilder *bld, git_bu ...@@ -826,35 +826,37 @@ int git_treebuilder_write_with_buffer(git_oid *oid, git_treebuilder *bld, git_bu
git_buf_clear(tree); git_buf_clear(tree);
entrycount = git_strmap_num_entries(bld->map); entrycount = git_strmap_num_entries(bld->map);
if (git_vector_init(&entries, entrycount, entry_sort_cmp) < 0) if ((error = git_vector_init(&entries, entrycount, entry_sort_cmp)) < 0)
return -1; goto out;
if (tree->asize == 0 && if (tree->asize == 0 &&
(error = git_buf_grow(tree, entrycount * 72)) < 0) (error = git_buf_grow(tree, entrycount * 72)) < 0)
return error; goto out;
git_strmap_foreach_value(bld->map, entry, { git_strmap_foreach_value(bld->map, entry, {
if (git_vector_insert(&entries, entry) < 0) if ((error = git_vector_insert(&entries, entry)) < 0)
return -1; goto out;
}); });
git_vector_sort(&entries); git_vector_sort(&entries);
for (i = 0; i < entries.length && !error; ++i) { 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_printf(tree, "%o ", entry->attr);
git_buf_put(tree, entry->filename, entry->filename_len + 1); git_buf_put(tree, entry->filename, entry->filename_len + 1);
git_buf_put(tree, (char *)entry->oid->id, GIT_OID_RAWSZ); git_buf_put(tree, (char *)entry->oid->id, GIT_OID_RAWSZ);
if (git_buf_oom(tree)) if (git_buf_oom(tree)) {
error = -1; error = -1;
goto out;
}
} }
if (!error && if ((error = git_repository_odb__weakptr(&odb, bld->repo)) == 0)
!(error = git_repository_odb__weakptr(&odb, bld->repo)))
error = git_odb_write(oid, odb, tree->ptr, tree->size, GIT_OBJ_TREE); error = git_odb_write(oid, odb, tree->ptr, tree->size, GIT_OBJ_TREE);
out:
git_vector_free(&entries); git_vector_free(&entries);
return error; return error;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment