Re: [PATCH 2/8] packfile: refactor `prepare_packed_git_one()` to work on sources
- From
Justin Tobler <jltobler@gmail.com>
- Date
- Jul 10, 2025, 21:07 UTC
- Message-ID
- <vr4sormcum4wso3tby4zuozjexms4skycfqio53rnud5jrrw7x@opk7ushh6jkt>
- In-Reply-To
- <20250709-b4-pks-midx-via-odb-alternate-v1-2-f31150d21331@pks.im>
On 25/07/09 09:54AM, Patrick Steinhardt wrote:
> In the preceding commit we have refactored how we load multi-pack > indices so that we take take the source as input for which we want to
s/take take/take/
Show 8 quoted lines
> load the MIDX. As part of this refactoring we started to store a pointer > to the MIDX in `struct odb_source` itself. > > Refactor loading of packfiles in the same way: instead of passing in the > object directory, we now pass in the source for which we want to load > packfiles. This allows us to simplify the code because we don't have to > search for a corresponding MIDX anymore, but we can instead directly use > the MIDX that we have already prepared beforehand.
The `odb_source` now contains readily contains MIDX, objdir, and repository which allows us to simplify. Nice
Show 31 quoted lines
>
> Signed-off-by: Patrick Steinhardt <ps@pks.im>
> ---
> packfile.c | 23 +++++++++--------------
> 1 file changed, 9 insertions(+), 14 deletions(-)
>
> diff --git a/packfile.c b/packfile.c
> index 16efc2fdca3..b43dd2fe6cb 100644
> --- a/packfile.c
> +++ b/packfile.c
> @@ -935,22 +935,17 @@ static void prepare_pack(const char *full_name, size_t full_name_len,
> report_garbage(PACKDIR_FILE_GARBAGE, full_name);
> }
>
> -static void prepare_packed_git_one(struct repository *r, char *objdir, int local)
> +static void prepare_packed_git_one(struct odb_source *source, int local)
> {
> - struct prepare_pack_data data;
> struct string_list garbage = STRING_LIST_INIT_DUP;
> + struct prepare_pack_data data = {
> + .m = source->multi_pack_index,
> + .r = source->odb->repo,
> + .garbage = &garbage,
> + .local = local,
> + };
>
> - data.m = r->objects->multi_pack_index;
> -
> - /* look for the multi-pack-index for this object directory */
> - while (data.m && strcmp(data.m->object_dir, objdir))
> - data.m = data.m->next;Much simpler now :)
Show 24 quoted lines
> -
> - data.r = r;
> - data.garbage = &garbage;
> - data.local = local;
> -
> - for_each_file_in_pack_dir(objdir, prepare_pack, &data);
> + for_each_file_in_pack_dir(source->path, prepare_pack, &data);
>
> report_pack_garbage(data.garbage);
> string_list_clear(data.garbage, 0);
> @@ -1040,7 +1035,7 @@ static void prepare_packed_git(struct repository *r)
> for (source = r->objects->sources; source; source = source->next) {
> int local = (source == r->objects->sources);
> prepare_multi_pack_index_one(source, local);
> - prepare_packed_git_one(r, source->path, local);
> + prepare_packed_git_one(source, local);
> }
> rearrange_packed_git(r);
>
>
> --
> 2.50.1.327.g047016eb4a.dirty
>
>