MCPcopy Index your code
hub / github.com/git/git / write_tree

Function write_tree

merge-ort.c:3829–3869  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3827}
3828
3829static int write_tree(struct repository *repo,
3830 struct object_id *result_oid,
3831 struct string_list *versions,
3832 unsigned int offset)
3833{
3834 size_t maxlen = 0, extra;
3835 unsigned int nr;
3836 struct strbuf buf = STRBUF_INIT;
3837 int i, ret = 0;
3838 size_t hash_size = repo->hash_algo->rawsz;
3839
3840 assert(offset <= versions->nr);
3841 nr = versions->nr - offset;
3842 if (versions->nr)
3843 /* No need for STABLE_QSORT -- filenames must be unique */
3844 QSORT(versions->items + offset, nr, tree_entry_order);
3845
3846 /* Pre-allocate some space in buf */
3847 extra = hash_size + 8; /* 8: 6 for mode, 1 for space, 1 for NUL char */
3848 for (i = 0; i < nr; i++) {
3849 maxlen += strlen(versions->items[offset+i].string) + extra;
3850 }
3851 strbuf_grow(&buf, maxlen);
3852
3853 /* Write each entry out to buf */
3854 for (i = 0; i < nr; i++) {
3855 struct merged_info *mi = versions->items[offset+i].util;
3856 struct version_info *ri = &mi->result;
3857 strbuf_addf(&buf, "%o %s%c",
3858 ri->mode,
3859 versions->items[offset+i].string, '\0');
3860 strbuf_add(&buf, ri->oid.hash, hash_size);
3861 }
3862
3863 /* Write this object file out, and record in result_oid */
3864 if (odb_write_object(repo->objects, buf.buf,
3865 buf.len, OBJ_TREE, result_oid))
3866 ret = -1;
3867 strbuf_release(&buf);
3868 return ret;
3869}
3870
3871static void record_entry_for_tree(struct directory_versions *dir_metadata,
3872 const char *path,

Callers 2

process_entriesFunction · 0.70

Calls 5

strbuf_growFunction · 0.85
strbuf_addfFunction · 0.85
strbuf_addFunction · 0.85
odb_write_objectFunction · 0.85
strbuf_releaseFunction · 0.85

Tested by

no test coverage detected