refs: implement iteration over only per-worktree refs
Alternate refs backends might still use files to store per-worktree refs. So provide a way to iterate over only the per-worktree references in a ref_store. The other backend can set up a files ref_store and iterate using the new DO_FOR_EACH_PER_WORKTREE_ONLY flag when iterating. Signed-off-by: David Turner <dturner@twopensource.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
7d61826439
commit
0c09ec07d1
@ -1798,6 +1798,10 @@ static int files_ref_iterator_advance(struct ref_iterator *ref_iterator)
|
|||||||
int ok;
|
int ok;
|
||||||
|
|
||||||
while ((ok = ref_iterator_advance(iter->iter0)) == ITER_OK) {
|
while ((ok = ref_iterator_advance(iter->iter0)) == ITER_OK) {
|
||||||
|
if (iter->flags & DO_FOR_EACH_PER_WORKTREE_ONLY &&
|
||||||
|
ref_type(iter->iter0->refname) != REF_TYPE_PER_WORKTREE)
|
||||||
|
continue;
|
||||||
|
|
||||||
if (!(iter->flags & DO_FOR_EACH_INCLUDE_BROKEN) &&
|
if (!(iter->flags & DO_FOR_EACH_INCLUDE_BROKEN) &&
|
||||||
!ref_resolves_to_object(iter->iter0->refname,
|
!ref_resolves_to_object(iter->iter0->refname,
|
||||||
iter->iter0->oid,
|
iter->iter0->oid,
|
||||||
|
@ -467,10 +467,18 @@ extern struct ref_iterator *current_ref_iter;
|
|||||||
int do_for_each_ref_iterator(struct ref_iterator *iter,
|
int do_for_each_ref_iterator(struct ref_iterator *iter,
|
||||||
each_ref_fn fn, void *cb_data);
|
each_ref_fn fn, void *cb_data);
|
||||||
|
|
||||||
/* refs backends */
|
/*
|
||||||
|
* Only include per-worktree refs in a do_for_each_ref*() iteration.
|
||||||
|
* Normally this will be used with a files ref_store, since that's
|
||||||
|
* where all reference backends will presumably store their
|
||||||
|
* per-worktree refs.
|
||||||
|
*/
|
||||||
|
#define DO_FOR_EACH_PER_WORKTREE_ONLY 0x02
|
||||||
|
|
||||||
struct ref_store;
|
struct ref_store;
|
||||||
|
|
||||||
|
/* refs backends */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Initialize the ref_store for the specified submodule, or for the
|
* Initialize the ref_store for the specified submodule, or for the
|
||||||
* main repository if submodule == NULL. These functions should call
|
* main repository if submodule == NULL. These functions should call
|
||||||
|
Loading…
Reference in New Issue
Block a user