object-file: get rid of the_repository in loose object iterators
The iterators for loose objects still rely on `the_repository`. Refactor
them:
- `for_each_loose_file_in_objdir()` is refactored so that the caller
is now expected to pass an `odb_source` as parameter instead of the
path to that source. Furthermore, it is renamed accordingly to
`for_each_loose_file_in_source()`.
- `for_each_loose_object()` is refactored to take in an object
database now and calls the above function in a loop.
This allows us to get rid of the global dependency.
Adjust callers accordingly.
Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
83439299f1
commit
d81712ce65
@@ -848,7 +848,7 @@ static void batch_each_object(struct batch_options *opt,
|
|||||||
};
|
};
|
||||||
struct bitmap_index *bitmap = prepare_bitmap_git(the_repository);
|
struct bitmap_index *bitmap = prepare_bitmap_git(the_repository);
|
||||||
|
|
||||||
for_each_loose_object(batch_one_object_loose, &payload, 0);
|
for_each_loose_object(the_repository->objects, batch_one_object_loose, &payload, 0);
|
||||||
|
|
||||||
if (bitmap && !for_each_bitmapped_object(bitmap, &opt->objects_filter,
|
if (bitmap && !for_each_bitmapped_object(bitmap, &opt->objects_filter,
|
||||||
batch_one_object_bitmapped, &payload)) {
|
batch_one_object_bitmapped, &payload)) {
|
||||||
|
|||||||
@@ -117,7 +117,7 @@ int cmd_count_objects(int argc,
|
|||||||
report_linked_checkout_garbage(the_repository);
|
report_linked_checkout_garbage(the_repository);
|
||||||
}
|
}
|
||||||
|
|
||||||
for_each_loose_file_in_objdir(repo_get_object_directory(the_repository),
|
for_each_loose_file_in_source(the_repository->objects->sources,
|
||||||
count_loose, count_cruft, NULL, NULL);
|
count_loose, count_cruft, NULL, NULL);
|
||||||
|
|
||||||
if (verbose) {
|
if (verbose) {
|
||||||
|
|||||||
@@ -393,7 +393,8 @@ static void check_connectivity(void)
|
|||||||
* and ignore any that weren't present in our earlier
|
* and ignore any that weren't present in our earlier
|
||||||
* traversal.
|
* traversal.
|
||||||
*/
|
*/
|
||||||
for_each_loose_object(mark_loose_unreachable_referents, NULL, 0);
|
for_each_loose_object(the_repository->objects,
|
||||||
|
mark_loose_unreachable_referents, NULL, 0);
|
||||||
for_each_packed_object(the_repository,
|
for_each_packed_object(the_repository,
|
||||||
mark_packed_unreachable_referents,
|
mark_packed_unreachable_referents,
|
||||||
NULL,
|
NULL,
|
||||||
@@ -687,7 +688,7 @@ static int fsck_subdir(unsigned int nr, const char *path UNUSED, void *data)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void fsck_object_dir(const char *path)
|
static void fsck_source(struct odb_source *source)
|
||||||
{
|
{
|
||||||
struct progress *progress = NULL;
|
struct progress *progress = NULL;
|
||||||
struct for_each_loose_cb cb_data = {
|
struct for_each_loose_cb cb_data = {
|
||||||
@@ -701,8 +702,8 @@ static void fsck_object_dir(const char *path)
|
|||||||
progress = start_progress(the_repository,
|
progress = start_progress(the_repository,
|
||||||
_("Checking object directories"), 256);
|
_("Checking object directories"), 256);
|
||||||
|
|
||||||
for_each_loose_file_in_objdir(path, fsck_loose, fsck_cruft, fsck_subdir,
|
for_each_loose_file_in_source(source, fsck_loose,
|
||||||
&cb_data);
|
fsck_cruft, fsck_subdir, &cb_data);
|
||||||
display_progress(progress, 256);
|
display_progress(progress, 256);
|
||||||
stop_progress(&progress);
|
stop_progress(&progress);
|
||||||
}
|
}
|
||||||
@@ -994,13 +995,14 @@ int cmd_fsck(int argc,
|
|||||||
fsck_refs(the_repository);
|
fsck_refs(the_repository);
|
||||||
|
|
||||||
if (connectivity_only) {
|
if (connectivity_only) {
|
||||||
for_each_loose_object(mark_loose_for_connectivity, NULL, 0);
|
for_each_loose_object(the_repository->objects,
|
||||||
|
mark_loose_for_connectivity, NULL, 0);
|
||||||
for_each_packed_object(the_repository,
|
for_each_packed_object(the_repository,
|
||||||
mark_packed_for_connectivity, NULL, 0);
|
mark_packed_for_connectivity, NULL, 0);
|
||||||
} else {
|
} else {
|
||||||
odb_prepare_alternates(the_repository->objects);
|
odb_prepare_alternates(the_repository->objects);
|
||||||
for (source = the_repository->objects->sources; source; source = source->next)
|
for (source = the_repository->objects->sources; source; source = source->next)
|
||||||
fsck_object_dir(source->path);
|
fsck_source(source);
|
||||||
|
|
||||||
if (check_full) {
|
if (check_full) {
|
||||||
struct packed_git *p;
|
struct packed_git *p;
|
||||||
|
|||||||
10
builtin/gc.c
10
builtin/gc.c
@@ -1301,7 +1301,7 @@ static int loose_object_auto_condition(struct gc_config *cfg UNUSED)
|
|||||||
if (loose_object_auto_limit < 0)
|
if (loose_object_auto_limit < 0)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
return for_each_loose_file_in_objdir(the_repository->objects->sources->path,
|
return for_each_loose_file_in_source(the_repository->objects->sources,
|
||||||
loose_object_count,
|
loose_object_count,
|
||||||
NULL, NULL, &count);
|
NULL, NULL, &count);
|
||||||
}
|
}
|
||||||
@@ -1336,7 +1336,7 @@ static int pack_loose(struct maintenance_run_opts *opts)
|
|||||||
* Do not start pack-objects process
|
* Do not start pack-objects process
|
||||||
* if there are no loose objects.
|
* if there are no loose objects.
|
||||||
*/
|
*/
|
||||||
if (!for_each_loose_file_in_objdir(r->objects->sources->path,
|
if (!for_each_loose_file_in_source(r->objects->sources,
|
||||||
bail_on_loose,
|
bail_on_loose,
|
||||||
NULL, NULL, NULL))
|
NULL, NULL, NULL))
|
||||||
return 0;
|
return 0;
|
||||||
@@ -1376,11 +1376,9 @@ static int pack_loose(struct maintenance_run_opts *opts)
|
|||||||
else if (data.batch_size > 0)
|
else if (data.batch_size > 0)
|
||||||
data.batch_size--; /* Decrease for equality on limit. */
|
data.batch_size--; /* Decrease for equality on limit. */
|
||||||
|
|
||||||
for_each_loose_file_in_objdir(r->objects->sources->path,
|
for_each_loose_file_in_source(r->objects->sources,
|
||||||
write_loose_object_to_stdin,
|
write_loose_object_to_stdin,
|
||||||
NULL,
|
NULL, NULL, &data);
|
||||||
NULL,
|
|
||||||
&data);
|
|
||||||
|
|
||||||
fclose(data.in);
|
fclose(data.in);
|
||||||
|
|
||||||
|
|||||||
@@ -4342,9 +4342,8 @@ static int add_loose_object(const struct object_id *oid, const char *path,
|
|||||||
*/
|
*/
|
||||||
static void add_unreachable_loose_objects(void)
|
static void add_unreachable_loose_objects(void)
|
||||||
{
|
{
|
||||||
for_each_loose_file_in_objdir(repo_get_object_directory(the_repository),
|
for_each_loose_file_in_source(the_repository->objects->sources,
|
||||||
add_loose_object,
|
add_loose_object, NULL, NULL, NULL);
|
||||||
NULL, NULL, NULL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int has_sha1_pack_kept_or_nonlocal(const struct object_id *oid)
|
static int has_sha1_pack_kept_or_nonlocal(const struct object_id *oid)
|
||||||
|
|||||||
@@ -200,7 +200,7 @@ int cmd_prune(int argc,
|
|||||||
revs.exclude_promisor_objects = 1;
|
revs.exclude_promisor_objects = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
for_each_loose_file_in_objdir(repo_get_object_directory(the_repository),
|
for_each_loose_file_in_source(the_repository->objects->sources,
|
||||||
prune_object, prune_cruft, prune_subdir, &revs);
|
prune_object, prune_cruft, prune_subdir, &revs);
|
||||||
|
|
||||||
prune_packed_objects(show_only ? PRUNE_PACKED_DRY_RUN : 0);
|
prune_packed_objects(show_only ? PRUNE_PACKED_DRY_RUN : 0);
|
||||||
|
|||||||
@@ -1388,7 +1388,7 @@ static int for_each_file_in_obj_subdir(unsigned int subdir_nr,
|
|||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
int for_each_loose_file_in_objdir(const char *path,
|
int for_each_loose_file_in_source(struct odb_source *source,
|
||||||
each_loose_object_fn obj_cb,
|
each_loose_object_fn obj_cb,
|
||||||
each_loose_cruft_fn cruft_cb,
|
each_loose_cruft_fn cruft_cb,
|
||||||
each_loose_subdir_fn subdir_cb,
|
each_loose_subdir_fn subdir_cb,
|
||||||
@@ -1397,11 +1397,10 @@ int for_each_loose_file_in_objdir(const char *path,
|
|||||||
struct strbuf buf = STRBUF_INIT;
|
struct strbuf buf = STRBUF_INIT;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
strbuf_addstr(&buf, path);
|
strbuf_addstr(&buf, source->path);
|
||||||
for (int i = 0; i < 256; i++) {
|
for (int i = 0; i < 256; i++) {
|
||||||
r = for_each_file_in_obj_subdir(i, &buf, the_repository->hash_algo,
|
r = for_each_file_in_obj_subdir(i, &buf, source->odb->repo->hash_algo,
|
||||||
obj_cb, cruft_cb,
|
obj_cb, cruft_cb, subdir_cb, data);
|
||||||
subdir_cb, data);
|
|
||||||
if (r)
|
if (r)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -1410,14 +1409,15 @@ int for_each_loose_file_in_objdir(const char *path,
|
|||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
int for_each_loose_object(each_loose_object_fn cb, void *data,
|
int for_each_loose_object(struct object_database *odb,
|
||||||
|
each_loose_object_fn cb, void *data,
|
||||||
enum for_each_object_flags flags)
|
enum for_each_object_flags flags)
|
||||||
{
|
{
|
||||||
struct odb_source *source;
|
struct odb_source *source;
|
||||||
|
|
||||||
odb_prepare_alternates(the_repository->objects);
|
odb_prepare_alternates(odb);
|
||||||
for (source = the_repository->objects->sources; source; source = source->next) {
|
for (source = odb->sources; source; source = source->next) {
|
||||||
int r = for_each_loose_file_in_objdir(source->path, cb, NULL,
|
int r = for_each_loose_file_in_source(source, cb, NULL,
|
||||||
NULL, data);
|
NULL, data);
|
||||||
if (r)
|
if (r)
|
||||||
return r;
|
return r;
|
||||||
|
|||||||
@@ -86,7 +86,7 @@ typedef int each_loose_cruft_fn(const char *basename,
|
|||||||
typedef int each_loose_subdir_fn(unsigned int nr,
|
typedef int each_loose_subdir_fn(unsigned int nr,
|
||||||
const char *path,
|
const char *path,
|
||||||
void *data);
|
void *data);
|
||||||
int for_each_loose_file_in_objdir(const char *path,
|
int for_each_loose_file_in_source(struct odb_source *source,
|
||||||
each_loose_object_fn obj_cb,
|
each_loose_object_fn obj_cb,
|
||||||
each_loose_cruft_fn cruft_cb,
|
each_loose_cruft_fn cruft_cb,
|
||||||
each_loose_subdir_fn subdir_cb,
|
each_loose_subdir_fn subdir_cb,
|
||||||
@@ -99,7 +99,8 @@ int for_each_loose_file_in_objdir(const char *path,
|
|||||||
*
|
*
|
||||||
* Any flags specific to packs are ignored.
|
* Any flags specific to packs are ignored.
|
||||||
*/
|
*/
|
||||||
int for_each_loose_object(each_loose_object_fn, void *,
|
int for_each_loose_object(struct object_database *odb,
|
||||||
|
each_loose_object_fn, void *,
|
||||||
enum for_each_object_flags flags);
|
enum for_each_object_flags flags);
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ void prune_packed_objects(int opts)
|
|||||||
progress = start_delayed_progress(the_repository,
|
progress = start_delayed_progress(the_repository,
|
||||||
_("Removing duplicate objects"), 256);
|
_("Removing duplicate objects"), 256);
|
||||||
|
|
||||||
for_each_loose_file_in_objdir(repo_get_object_directory(the_repository),
|
for_each_loose_file_in_source(the_repository->objects->sources,
|
||||||
prune_object, NULL, prune_subdir, &opts);
|
prune_object, NULL, prune_subdir, &opts);
|
||||||
|
|
||||||
/* Ensure we show 100% before finishing progress */
|
/* Ensure we show 100% before finishing progress */
|
||||||
|
|||||||
@@ -319,7 +319,7 @@ int add_unseen_recent_objects_to_traversal(struct rev_info *revs,
|
|||||||
oidset_init(&data.extra_recent_oids, 0);
|
oidset_init(&data.extra_recent_oids, 0);
|
||||||
data.extra_recent_oids_loaded = 0;
|
data.extra_recent_oids_loaded = 0;
|
||||||
|
|
||||||
r = for_each_loose_object(add_recent_loose, &data,
|
r = for_each_loose_object(the_repository->objects, add_recent_loose, &data,
|
||||||
FOR_EACH_OBJECT_LOCAL_ONLY);
|
FOR_EACH_OBJECT_LOCAL_ONLY);
|
||||||
if (r)
|
if (r)
|
||||||
goto done;
|
goto done;
|
||||||
|
|||||||
Reference in New Issue
Block a user