if (recurse_submodules)
repo_read_gitmodules(the_repository, 1);
- if (startup_info->have_repository) {
- struct odb_source *source;
-
- odb_prepare_alternates(the_repository->objects);
- for (source = the_repository->objects->sources; source; source = source->next)
- odb_source_prepare(source, 0);
- }
+ if (startup_info->have_repository)
+ odb_prepare(the_repository->objects, 0);
start_threads(&opt);
} else {
free(o);
}
-void odb_reprepare(struct object_database *o)
+void odb_prepare(struct object_database *o, enum odb_prepare_flags flags)
{
struct odb_source *source;
* the linked list, so existing odbs will continue to exist for
* the lifetime of the process.
*/
- o->loaded_alternates = 0;
- odb_prepare_alternates(o);
+ if (flags & ODB_PREPARE_FLUSH_CACHES) {
+ o->loaded_alternates = 0;
+ o->object_count_valid = 0;
+ }
+ odb_prepare_alternates(o);
for (source = o->sources; source; source = source->next)
- odb_source_prepare(source, ODB_PREPARE_FLUSH_CACHES);
-
- o->object_count_valid = 0;
+ odb_source_prepare(source, flags);
obj_read_unlock();
}
+
+void odb_reprepare(struct object_database *o)
+{
+ odb_prepare(o, ODB_PREPARE_FLUSH_CACHES);
+}
};
/*
- * Clear caches, reload alternates and then reload object sources so that new
- * objects may become accessible.
+ * Prepare the object database for use. Calling this function is generally not
+ * needed, but can be useful in case the caller wants to pre-open individual
+ * sources.
*/
+void odb_prepare(struct object_database *o, enum odb_prepare_flags flags);
+
+/* Equivalent to `odb_prepare(o, ODB_PREPARE_FLUSH_CACHES)`. */
void odb_reprepare(struct object_database *o);
/*