From: Siddharth Asthana <siddharthasthana31@gmail.com>
To: Junio C Hamano <gitster@pobox.com>,
Siddharth Shrimali <r.siddharth.shrimali@gmail.com>
Cc: git@vger.kernel.org, christian.couder@gmail.com, me@ttaylorr.com,
ps@pks.im, johannes.schindelin@gmx.de, l.s.r@web.de
Subject: Re: [RFC PATCH 1/7] builtin/repack.c: add --drop-filtered and --dry-run options
Date: Fri, 24 Jul 2026 01:01:47 +0530 [thread overview]
Message-ID: <5bde84d0-d612-4dd6-b1f5-1b40f41c1d8d@gmail.com> (raw)
In-Reply-To: <xmqqh5lyej6f.fsf@gitster.g>
On 17/07/26 02:38, Junio C Hamano wrote:
> Siddharth Shrimali <r.siddharth.shrimali@gmail.com> writes:
>
>> --drop-filtered is incompatible with bitmap writing: filtering breaks
>> the "all objects in one pack" closure that bitmaps require. An explicit
>> -b is rejected with a clear error and a default-on bitmap configuration is
>> silently disabled for the duration of the command.
>
> That is very well intentioned.
>
>> @@ -231,6 +234,10 @@ int cmd_repack(int argc,
>> N_("pack prefix to store a pack containing pruned objects")),
>> OPT_STRING(0, "filter-to", &filter_to, N_("dir"),
>> N_("pack prefix to store a pack containing filtered out objects")),
>> + OPT_BOOL(0, "drop-filtered", &drop_filtered,
>> + N_("delete filtered out objects (requires --filter)")),
>> + OPT_BOOL(0, "dry-run", &dry_run,
>> + N_("only show which objects would be dropped")),
>> OPT_END()
>> };
>>
>> @@ -252,6 +259,43 @@ int cmd_repack(int argc,
>> po_args.depth = xstrdup_or_null(opt_depth);
>> po_args.threads = xstrdup_or_null(opt_threads);
>>
>> + die_for_incompatible_opt2(drop_filtered, "--drop-filtered",
>> + !!filter_to, "--filter-to");
>> +
>> + die_for_incompatible_opt2(drop_filtered, "--drop-filtered",
>> + write_bitmaps > 0, "--write-bitmap-index");
>
> Hmph. Since this step does not change the parsing or configuration
> for write_bitmaps, we cannot tell if (write_bitmaps == 1) at this
> point in the execution came from the command line (e.g., an earlier
> call to parse_options() around line 247 of builtin/repack.c) or from
> the configuration files (e.g., a call to repo_config() around
> line 245). In other words, wouldn't it be ...
>
>> + if (dry_run && !drop_filtered)
>> + die(_("--dry-run only takes effect with --drop-filtered"));
>> +
>> + if (drop_filtered) {
>> + if (!dry_run)
>> + die(_("--drop-filtered doesn't work without --dry-run yet"));
>> +
>> + if (!po_args.filter_options.choice)
>> + die(_("--drop-filtered requires --filter"));
>> +
>> + if (!(pack_everything & ALL_INTO_ONE))
>> + die(_("--drop-filtered requires -a"));
>> +
>> + /*
>> + * Only blob:limit=<n> is supported for now. Reject other
>> + * filter choices early, before walking the object database.
>> + */
>> + if (po_args.filter_options.choice != LOFC_BLOB_LIMIT)
>> + die(_("--drop-filtered only supports --filter=blob:limit=<n> for now"));
>> +
>> + /*
>> + * Without a promisor remote there is nowhere to re-fetch the
>> + * dropped objects from, so dropping them would be permanent
>> + * data loss.
>> + */
>> + if (!repo_has_promisor_remote(repo))
>> + die(_("--drop-filtered requires a promisor remote"));
>> +
>> + write_bitmaps = 0;
>
> ... way too late to drop the flag here?
Yes, I agree. At that point write_bitmaps > 0 can come from either
-b/--write-bitmap-index or repack.writeBitmaps, so we cannot both
error on an explicit -b and silently clear a config default with the
same check.
For v2 it would be nice to treat those two cases differently.
Thanks.
Siddharth
>
>> + }
>> +
>> if (delete_redundant && repo->repository_format_precious_objects)
>> die(_("cannot delete packs in a precious-objects repo"));
next prev parent reply other threads:[~2026-07-23 19:31 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-16 13:28 [RFC PATCH 0/7] repack: add --drop-filtered to reclaim space in partial clones Siddharth Shrimali
2026-07-16 13:28 ` [RFC PATCH 1/7] builtin/repack.c: add --drop-filtered and --dry-run options Siddharth Shrimali
2026-07-16 21:08 ` Junio C Hamano
2026-07-17 18:00 ` Siddharth Shrimali
2026-07-23 19:31 ` Siddharth Asthana [this message]
2026-07-18 12:30 ` Christian Couder
2026-07-20 10:19 ` Siddharth Shrimali
2026-07-16 13:28 ` [RFC PATCH 2/7] list-objects-filter: add list_objects_filter__filter_oidset() Siddharth Shrimali
2026-07-16 13:28 ` [RFC PATCH 3/7] repack-promisor: allow excluding objects from the rebuilt promisor pack Siddharth Shrimali
2026-07-16 13:28 ` [RFC PATCH 4/7] builtin/repack: enumerate promisor blobs for --drop-filtered Siddharth Shrimali
2026-07-16 13:28 ` [RFC PATCH 5/7] t7706: test --drop-filtered enumeration and validation Siddharth Shrimali
2026-07-16 13:28 ` [RFC PATCH 6/7] builtin/repack: actually drop filtered promisor blobs Siddharth Shrimali
2026-07-23 19:42 ` Siddharth Asthana
2026-07-16 13:28 ` [RFC PATCH 7/7] repack-promisor: record dropped objects in a drop log Siddharth Shrimali
2026-07-23 19:41 ` Siddharth Asthana
2026-07-23 19:26 ` [RFC PATCH 0/7] repack: add --drop-filtered to reclaim space in partial clones Siddharth Asthana
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5bde84d0-d612-4dd6-b1f5-1b40f41c1d8d@gmail.com \
--to=siddharthasthana31@gmail.com \
--cc=christian.couder@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=johannes.schindelin@gmx.de \
--cc=l.s.r@web.de \
--cc=me@ttaylorr.com \
--cc=ps@pks.im \
--cc=r.siddharth.shrimali@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox