replace-objects: evaluate replacement refs without using the object store

Pass DO_FOR_EACH_INCLUDE_BROKEN when iterating over replacement refs so that the iteration does not require opening the named objects from the object store. This avoids a dependency cycle between object access and replace ref iteration. Moreover the ref subsystem has not been migrated yet to access the object store via passed in repository objects. As a result, without this patch, iterating over replace refs in a repository other than the_repository it produces errors: error: refs/replace/3afabef75c627b894cccc3bcae86837abc7c32fe does not point to a valid object! Noticed while adapting the object store (and in particular its evaluation of replace refs) to handle arbitrary repositories. Signed-off-by: Stefan Beller <sbeller@google.com> Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Stefan Beller committed Sep 12, 2017 at 10:31 UTC 006f3f28af2afb8c567ef3ddf4f0a9110c6be437
1 file changed +1 -1
refs.c
+1 -1
@@ -1394,7 +1394,7 @@ int for_each_replace_ref(each_ref_fn fn, void *cb_data)
1394 return do_for_each_ref(get_main_ref_store(),
1395 git_replace_ref_base, fn,
1396 strlen(git_replace_ref_base),
1397 - 0, cb_data);
1397 + DO_FOR_EACH_INCLUDE_BROKEN, cb_data);
1398 }
1399
1400 int for_each_namespaced_ref(each_ref_fn fn, void *cb_data)