Merge branch 'jt/no-abuse-alternate-odb-for-submodules'
Follow through the work to use the repo interface to access
submodule objects in-process, instead of abusing the alternate
object database interface.
* jt/no-abuse-alternate-odb-for-submodules:
submodule: trace adding submodule ODB as alternate
submodule: pass repo to check_has_commit()
object-file: only register submodule ODB if needed
merge-{ort,recursive}: remove add_submodule_odb()
refs: peeling non-the_repository iterators is BUG
refs: teach arbitrary repo support to iterators
refs: plumb repo into ref stores
This commit is contained in:
@ -193,13 +193,15 @@ static int release_snapshot(struct snapshot *snapshot)
|
||||
}
|
||||
}
|
||||
|
||||
struct ref_store *packed_ref_store_create(const char *path,
|
||||
struct ref_store *packed_ref_store_create(struct repository *repo,
|
||||
const char *path,
|
||||
unsigned int store_flags)
|
||||
{
|
||||
struct packed_ref_store *refs = xcalloc(1, sizeof(*refs));
|
||||
struct ref_store *ref_store = (struct ref_store *)refs;
|
||||
|
||||
base_ref_store_init(ref_store, &refs_be_packed);
|
||||
ref_store->repo = repo;
|
||||
ref_store->gitdir = xstrdup(path);
|
||||
refs->store_flags = store_flags;
|
||||
|
||||
@ -776,6 +778,7 @@ struct packed_ref_iterator {
|
||||
struct object_id oid, peeled;
|
||||
struct strbuf refname_buf;
|
||||
|
||||
struct repository *repo;
|
||||
unsigned int flags;
|
||||
};
|
||||
|
||||
@ -864,8 +867,8 @@ static int packed_ref_iterator_advance(struct ref_iterator *ref_iterator)
|
||||
continue;
|
||||
|
||||
if (!(iter->flags & DO_FOR_EACH_INCLUDE_BROKEN) &&
|
||||
!ref_resolves_to_object(iter->base.refname, &iter->oid,
|
||||
iter->flags))
|
||||
!ref_resolves_to_object(iter->base.refname, iter->repo,
|
||||
&iter->oid, iter->flags))
|
||||
continue;
|
||||
|
||||
return ITER_OK;
|
||||
@ -883,6 +886,9 @@ static int packed_ref_iterator_peel(struct ref_iterator *ref_iterator,
|
||||
struct packed_ref_iterator *iter =
|
||||
(struct packed_ref_iterator *)ref_iterator;
|
||||
|
||||
if (iter->repo != the_repository)
|
||||
BUG("peeling for non-the_repository is not supported");
|
||||
|
||||
if ((iter->base.flags & REF_KNOWS_PEELED)) {
|
||||
oidcpy(peeled, &iter->peeled);
|
||||
return is_null_oid(&iter->peeled) ? -1 : 0;
|
||||
@ -954,6 +960,7 @@ static struct ref_iterator *packed_ref_iterator_begin(
|
||||
|
||||
iter->base.oid = &iter->oid;
|
||||
|
||||
iter->repo = ref_store->repo;
|
||||
iter->flags = flags;
|
||||
|
||||
if (prefix && *prefix)
|
||||
|
||||
Reference in New Issue
Block a user