Skip to content

Commit 8788195

Browse files
jonathantanmygitster
authored andcommitted
refs: peeling non-the_repository iterators is BUG
There is currently no support for peeling the current ref of an iterator iterating over a non-the_repository ref store, and none is needed. Thus, for now, BUG() if that happens. Signed-off-by: Jonathan Tan <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 9bc45a2 commit 8788195

File tree

4 files changed

+17
-2
lines changed

4 files changed

+17
-2
lines changed

refs/files-backend.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -833,7 +833,7 @@ static struct ref_iterator *files_ref_iterator_begin(
833833
*/
834834

835835
loose_iter = cache_ref_iterator_begin(get_loose_ref_cache(refs),
836-
prefix, 1);
836+
prefix, ref_store->repo, 1);
837837

838838
/*
839839
* The packed-refs file might contain broken references, for
@@ -1165,7 +1165,8 @@ static int files_pack_refs(struct ref_store *ref_store, unsigned int flags)
11651165

11661166
packed_refs_lock(refs->packed_ref_store, LOCK_DIE_ON_ERROR, &err);
11671167

1168-
iter = cache_ref_iterator_begin(get_loose_ref_cache(refs), NULL, 0);
1168+
iter = cache_ref_iterator_begin(get_loose_ref_cache(refs), NULL,
1169+
the_repository, 0);
11691170
while ((ok = ref_iterator_advance(iter)) == ITER_OK) {
11701171
/*
11711172
* If the loose reference can be packed, add an entry

refs/packed-backend.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -886,6 +886,9 @@ static int packed_ref_iterator_peel(struct ref_iterator *ref_iterator,
886886
struct packed_ref_iterator *iter =
887887
(struct packed_ref_iterator *)ref_iterator;
888888

889+
if (iter->repo != the_repository)
890+
BUG("peeling for non-the_repository is not supported");
891+
889892
if ((iter->base.flags & REF_KNOWS_PEELED)) {
890893
oidcpy(peeled, &iter->peeled);
891894
return is_null_oid(&iter->peeled) ? -1 : 0;

refs/ref-cache.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -435,6 +435,8 @@ struct cache_ref_iterator {
435435
* on from there.)
436436
*/
437437
struct cache_ref_iterator_level *levels;
438+
439+
struct repository *repo;
438440
};
439441

440442
static int cache_ref_iterator_advance(struct ref_iterator *ref_iterator)
@@ -491,6 +493,11 @@ static int cache_ref_iterator_advance(struct ref_iterator *ref_iterator)
491493
static int cache_ref_iterator_peel(struct ref_iterator *ref_iterator,
492494
struct object_id *peeled)
493495
{
496+
struct cache_ref_iterator *iter =
497+
(struct cache_ref_iterator *)ref_iterator;
498+
499+
if (iter->repo != the_repository)
500+
BUG("peeling for non-the_repository is not supported");
494501
return peel_object(ref_iterator->oid, peeled) ? -1 : 0;
495502
}
496503

@@ -513,6 +520,7 @@ static struct ref_iterator_vtable cache_ref_iterator_vtable = {
513520

514521
struct ref_iterator *cache_ref_iterator_begin(struct ref_cache *cache,
515522
const char *prefix,
523+
struct repository *repo,
516524
int prime_dir)
517525
{
518526
struct ref_dir *dir;
@@ -547,5 +555,7 @@ struct ref_iterator *cache_ref_iterator_begin(struct ref_cache *cache,
547555
level->prefix_state = PREFIX_CONTAINS_DIR;
548556
}
549557

558+
iter->repo = repo;
559+
550560
return ref_iterator;
551561
}

refs/ref-cache.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,7 @@ struct ref_entry *find_ref_entry(struct ref_dir *dir, const char *refname);
238238
*/
239239
struct ref_iterator *cache_ref_iterator_begin(struct ref_cache *cache,
240240
const char *prefix,
241+
struct repository *repo,
241242
int prime_dir);
242243

243244
#endif /* REFS_REF_CACHE_H */

0 commit comments

Comments
 (0)