summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--refs.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/refs.c b/refs.c
index eeb8fb1021..79d5a8b8d4 100644
--- a/refs.c
+++ b/refs.c
@@ -2564,8 +2564,13 @@ int refs_verify_refnames_available(struct ref_store *refs,
if (!initial_transaction) {
int ok;
- iter = refs_ref_iterator_begin(refs, dirname.buf, NULL, 0,
- DO_FOR_EACH_INCLUDE_BROKEN);
+ if (!iter) {
+ iter = refs_ref_iterator_begin(refs, dirname.buf, NULL, 0,
+ DO_FOR_EACH_INCLUDE_BROKEN);
+ } else if (ref_iterator_seek(iter, dirname.buf) < 0) {
+ goto cleanup;
+ }
+
while ((ok = ref_iterator_advance(iter)) == ITER_OK) {
if (skip &&
string_list_has_string(skip, iter->refname))
@@ -2578,9 +2583,6 @@ int refs_verify_refnames_available(struct ref_store *refs,
if (ok != ITER_DONE)
BUG("error while iterating over references");
-
- ref_iterator_free(iter);
- iter = NULL;
}
extra_refname = find_descendant_ref(dirname.buf, extras, skip);