Merge branch 'sb/more-repo-in-api'
The in-core repository instances are passed through more codepaths. * sb/more-repo-in-api: (23 commits) t/helper/test-repository: celebrate independence from the_repository path.h: make REPO_GIT_PATH_FUNC repository agnostic commit: prepare free_commit_buffer and release_commit_memory for any repo commit-graph: convert remaining functions to handle any repo submodule: don't add submodule as odb for push submodule: use submodule repos for object lookup pretty: prepare format_commit_message to handle arbitrary repositories commit: prepare logmsg_reencode to handle arbitrary repositories commit: prepare repo_unuse_commit_buffer to handle any repo commit: prepare get_commit_buffer to handle any repo commit-reach: prepare in_merge_bases[_many] to handle any repo commit-reach: prepare get_merge_bases to handle any repo commit-reach.c: allow get_merge_bases_many_0 to handle any repo commit-reach.c: allow remove_redundant to handle any repo commit-reach.c: allow merge_bases_many to handle any repo commit-reach.c: allow paint_down_to_common to handle any repo commit: allow parse_commit* to handle any repo object: parse_object to honor its repository argument object-store: prepare has_{sha1, object}_file to handle any repo object-store: prepare read_object_file to deal with any repo ...
This commit is contained in:
41
commit.c
41
commit.c
@ -299,13 +299,15 @@ const void *get_cached_commit_buffer(struct repository *r, const struct commit *
|
||||
return v->buffer;
|
||||
}
|
||||
|
||||
const void *get_commit_buffer(const struct commit *commit, unsigned long *sizep)
|
||||
const void *repo_get_commit_buffer(struct repository *r,
|
||||
const struct commit *commit,
|
||||
unsigned long *sizep)
|
||||
{
|
||||
const void *ret = get_cached_commit_buffer(the_repository, commit, sizep);
|
||||
const void *ret = get_cached_commit_buffer(r, commit, sizep);
|
||||
if (!ret) {
|
||||
enum object_type type;
|
||||
unsigned long size;
|
||||
ret = read_object_file(&commit->object.oid, &type, &size);
|
||||
ret = repo_read_object_file(r, &commit->object.oid, &type, &size);
|
||||
if (!ret)
|
||||
die("cannot read commit object %s",
|
||||
oid_to_hex(&commit->object.oid));
|
||||
@ -318,18 +320,20 @@ const void *get_commit_buffer(const struct commit *commit, unsigned long *sizep)
|
||||
return ret;
|
||||
}
|
||||
|
||||
void unuse_commit_buffer(const struct commit *commit, const void *buffer)
|
||||
void repo_unuse_commit_buffer(struct repository *r,
|
||||
const struct commit *commit,
|
||||
const void *buffer)
|
||||
{
|
||||
struct commit_buffer *v = buffer_slab_peek(
|
||||
the_repository->parsed_objects->buffer_slab, commit);
|
||||
r->parsed_objects->buffer_slab, commit);
|
||||
if (!(v && v->buffer == buffer))
|
||||
free((void *)buffer);
|
||||
}
|
||||
|
||||
void free_commit_buffer(struct commit *commit)
|
||||
void free_commit_buffer(struct parsed_object_pool *pool, struct commit *commit)
|
||||
{
|
||||
struct commit_buffer *v = buffer_slab_peek(
|
||||
the_repository->parsed_objects->buffer_slab, commit);
|
||||
pool->buffer_slab, commit);
|
||||
if (v) {
|
||||
FREE_AND_NULL(v->buffer);
|
||||
v->size = 0;
|
||||
@ -352,13 +356,12 @@ struct object_id *get_commit_tree_oid(const struct commit *commit)
|
||||
return &get_commit_tree(commit)->object.oid;
|
||||
}
|
||||
|
||||
void release_commit_memory(struct commit *c)
|
||||
void release_commit_memory(struct parsed_object_pool *pool, struct commit *c)
|
||||
{
|
||||
c->maybe_tree = NULL;
|
||||
c->index = 0;
|
||||
free_commit_buffer(c);
|
||||
free_commit_buffer(pool, c);
|
||||
free_commit_list(c->parents);
|
||||
/* TODO: what about commit->util? */
|
||||
|
||||
c->object.parsed = 0;
|
||||
}
|
||||
@ -445,7 +448,10 @@ int parse_commit_buffer(struct repository *r, struct commit *item, const void *b
|
||||
return 0;
|
||||
}
|
||||
|
||||
int parse_commit_internal(struct commit *item, int quiet_on_missing, int use_commit_graph)
|
||||
int repo_parse_commit_internal(struct repository *r,
|
||||
struct commit *item,
|
||||
int quiet_on_missing,
|
||||
int use_commit_graph)
|
||||
{
|
||||
enum object_type type;
|
||||
void *buffer;
|
||||
@ -456,9 +462,9 @@ int parse_commit_internal(struct commit *item, int quiet_on_missing, int use_com
|
||||
return -1;
|
||||
if (item->object.parsed)
|
||||
return 0;
|
||||
if (use_commit_graph && parse_commit_in_graph(the_repository, item))
|
||||
if (use_commit_graph && parse_commit_in_graph(r, item))
|
||||
return 0;
|
||||
buffer = read_object_file(&item->object.oid, &type, &size);
|
||||
buffer = repo_read_object_file(r, &item->object.oid, &type, &size);
|
||||
if (!buffer)
|
||||
return quiet_on_missing ? -1 :
|
||||
error("Could not read %s",
|
||||
@ -469,18 +475,19 @@ int parse_commit_internal(struct commit *item, int quiet_on_missing, int use_com
|
||||
oid_to_hex(&item->object.oid));
|
||||
}
|
||||
|
||||
ret = parse_commit_buffer(the_repository, item, buffer, size, 0);
|
||||
ret = parse_commit_buffer(r, item, buffer, size, 0);
|
||||
if (save_commit_buffer && !ret) {
|
||||
set_commit_buffer(the_repository, item, buffer, size);
|
||||
set_commit_buffer(r, item, buffer, size);
|
||||
return 0;
|
||||
}
|
||||
free(buffer);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int parse_commit_gently(struct commit *item, int quiet_on_missing)
|
||||
int repo_parse_commit_gently(struct repository *r,
|
||||
struct commit *item, int quiet_on_missing)
|
||||
{
|
||||
return parse_commit_internal(item, quiet_on_missing, 1);
|
||||
return repo_parse_commit_internal(r, item, quiet_on_missing, 1);
|
||||
}
|
||||
|
||||
void parse_commit_or_die(struct commit *item)
|
||||
|
Reference in New Issue
Block a user