All of lore.kernel.org
 help / color / mirror / Atom feed
From: Siddharth Asthana <siddharthasthana31@gmail.com>
To: Siddharth Shrimali <r.siddharth.shrimali@gmail.com>, git@vger.kernel.org
Cc: gitster@pobox.com, christian.couder@gmail.com, me@ttaylorr.com,
	ps@pks.im, johannes.schindelin@gmx.de, l.s.r@web.de
Subject: Re: [GSoC PATCH v2 0/7] repack: add --drop-filtered to reclaim space in partial clones
Date: Wed, 5 Aug 2026 02:42:03 +0530	[thread overview]
Message-ID: <81939944-9d8a-4bcd-a6ba-f3a7728b33bd@gmail.com> (raw)
In-Reply-To: <20260730174153.9949-1-r.siddharth.shrimali@gmail.com>



On 30/07/26 23:11, Siddharth Shrimali wrote:
> This is v2 of the series adding "git repack --drop-filtered" to reclaim
> disk space in partial clones by dropping large, locally-held promisor
> blobs that remain recoverable from the promisor remote. v1 was sent as
> an RFC [1].
> 
> Partial clones let you work with large repositories without downloading
> every blob up front. Mising blobs are lazily fetched from the promisor
> remote on demand. Over time these accumulate locally and there is
> currently no safe, built-in way to reclaim that space short of
> re-cloning. This series adds that reverse direction: enumerate promisor
> blobs over a size threshold, drop them locally, and rely on the existing
> lazy-fetch machinery to bring them back transparently when needed.
> 
> How it works:
>    * Enumerate promisor objects directly (ODB_FOR_EACH_OBJECT_PROMISOR_ONLY)
>      and select the blobs exceeding the filter threshold. Every enumerated
>      object is a promisor object by construction, so it is guaranteed
>      recoverable and locally-created objects are never candidates.



Thanks for v2. Guards, docs, and dropping the drop-log all match what we 
have talked about on the RFC.

On "guaranteed": I would soften that a bit in next round. It is 
recoverable in the same sense as the rest of partial clone, as long as 
the promisor remote still has it. Fine for now, just a bit strong
without a remote check.

For the promisor-only walk: that matches how we already treat those
objects, so using it here looks right to me.

On the guards you already covered Junio's point well. I still like the
index one so we do not drop something and fetch it straight back. Mid-op
is more UX. Docs/cover can just say that clearly.

Thanks.
Siddharth


>    * Rebuild the promisor pack without the selected blobs, reusing the
>      existing repack machinery, so the drop is crash-safe (write, fsync,
>      install, then delete the old pack).
>    * --dry-run lists the candidates and changes nothing.
> 
> Safety guards refuse to run while a merge, rebase, am, cherry-pick,
> revert, or bisect is in progress, and refuse to drop a blob referenced
> by the current index (it would only be lazily re-fetched by the next
> worktree command). Both are skipped for bare repositories.
> 
> Changes since v1:
>    * distinguish an explicit -b/--write-bitmap-index on the command line
>      (reported as a conflict) from a repack.writeBitmaps config value
>      (silently disabled for the command). This addresses Junio's review
>      that the previous check could not tell the two apart
>    * documented the choice to keep --dry-run as a separate option rather
>      than --drop-filtered=<mode>
>    * implemented the safety guards
>    * Added git-repack documentation for --drop-filtered and --dry-run
>    * Reorganised so enumerate_promisor_blobs() is introduced in its final
>      signature
>    * Distributed the tests into the commits that introduce each behavior,
>      instead of a single standalone test commit.
>    * Dropped the drop-log commit from this series
> 
> To do:
>    * Remote verification: verifying against the remote awaits the "remote-object-info"
>      cat-file protocol command.
>    * Drop log: introduce with the error-path change that reads it.
>    * --verbose: space-reclaimed reporting.
> 
> [1] https://lore.kernel.org/git/20260716132848.95982-1-r.siddharth.shrimali@gmail.com/
> 
> Siddharth Shrimali (7):
>    builtin/repack.c: add --drop-filtered and --dry-run options
>    list-objects-filter: add list_objects_filter__filter_oidset()
>    repack-promisor: allow excluding objects from the rebuilt promisor
>      pack
>    builtin/repack: enumerate promisor blobs for --drop-filtered
>    builtin/repack: actually drop filtered promisor blobs
>    builtin/repack: add safety guards for --drop-filtered
>    Documentation/git-repack: document --drop-filtered and --dry-run
> 
>   Documentation/git-repack.adoc   |  35 +++++++
>   builtin/repack.c                | 135 +++++++++++++++++++++++-
>   list-objects-filter.c           |  45 ++++++++
>   list-objects-filter.h           |  16 +++
>   repack-filtered.c               |  81 +++++++++++++++
>   repack-promisor.c               |  15 ++-
>   repack.h                        |   8 +-
>   t/meson.build                   |   1 +
>   t/t7706-repack-drop-filtered.sh | 179 ++++++++++++++++++++++++++++++++
>   9 files changed, 511 insertions(+), 4 deletions(-)
>   create mode 100755 t/t7706-repack-drop-filtered.sh
> 


  parent reply	other threads:[~2026-08-04 21:12 UTC|newest]

Thread overview: 46+ 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
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-25 19:30     ` Siddharth Shrimali
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-25 19:35     ` Siddharth Shrimali
2026-07-23 19:26 ` [RFC PATCH 0/7] repack: add --drop-filtered to reclaim space in partial clones Siddharth Asthana
2026-07-25 19:23   ` Siddharth Shrimali
2026-07-30 17:41 ` [GSoC PATCH v2 " Siddharth Shrimali
2026-07-30 17:41   ` [GSoC PATCH v2 1/7] builtin/repack.c: add --drop-filtered and --dry-run options Siddharth Shrimali
2026-08-04 21:13     ` Siddharth Asthana
2026-07-30 17:41   ` [GSoC PATCH v2 2/7] list-objects-filter: add list_objects_filter__filter_oidset() Siddharth Shrimali
2026-07-30 17:41   ` [GSoC PATCH v2 3/7] repack-promisor: allow excluding objects from the rebuilt promisor pack Siddharth Shrimali
2026-07-30 17:41   ` [GSoC PATCH v2 4/7] builtin/repack: enumerate promisor blobs for --drop-filtered Siddharth Shrimali
2026-07-30 17:41   ` [GSoC PATCH v2 5/7] builtin/repack: actually drop filtered promisor blobs Siddharth Shrimali
2026-07-30 17:41   ` [GSoC PATCH v2 6/7] builtin/repack: add safety guards for --drop-filtered Siddharth Shrimali
2026-08-04 21:13     ` Siddharth Asthana
2026-07-30 17:41   ` [GSoC PATCH v2 7/7] Documentation/git-repack: document --drop-filtered and --dry-run Siddharth Shrimali
2026-07-31 15:33   ` [GSoC PATCH v2 0/7] repack: add --drop-filtered to reclaim space in partial clones Junio C Hamano
2026-08-01 18:19     ` Siddharth Shrimali
2026-08-02  2:18       ` Junio C Hamano
2026-08-02 11:28         ` Siddharth Shrimali
2026-08-04 21:12   ` Siddharth Asthana [this message]
2026-08-06 11:21   ` [GSoC PATCH v3 " Siddharth Shrimali
2026-08-06 11:21     ` [GSoC PATCH v3 1/7] builtin/repack.c: add --drop-filtered and --dry-run options Siddharth Shrimali
2026-08-06 11:21     ` [GSoC PATCH v3 2/7] list-objects-filter: add list_objects_filter__filter_oidset() Siddharth Shrimali
2026-08-06 11:21     ` [GSoC PATCH v3 3/7] repack-promisor: allow excluding objects from the rebuilt promisor pack Siddharth Shrimali
2026-08-06 11:21     ` [GSoC PATCH v3 4/7] builtin/repack: enumerate promisor blobs for --drop-filtered Siddharth Shrimali
2026-08-06 11:22     ` [GSoC PATCH v3 5/7] builtin/repack: actually drop filtered promisor blobs Siddharth Shrimali
2026-08-06 11:22     ` [GSoC PATCH v3 6/7] builtin/repack: add guards for --drop-filtered Siddharth Shrimali
2026-08-06 11:22     ` [GSoC PATCH v3 7/7] Documentation/git-repack: document --drop-filtered and --dry-run Siddharth Shrimali
2026-08-06 21:34     ` [GSoC PATCH v3 0/7] repack: add --drop-filtered to reclaim space in partial clones Junio C Hamano
2026-08-06 22:19     ` Junio C Hamano
2026-08-07  9:06       ` Siddharth Shrimali
2026-08-07 20:52         ` Junio C Hamano

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=81939944-9d8a-4bcd-a6ba-f3a7728b33bd@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.