pr-1138/rcoup/rc-partial-clone-refilter-v2
tagged this
24 Feb 16:13
If a filter is changed on a partial clone repository, for example from blob:none to blob:limit=1m, there is currently no straightforward way to bulk-refetch the objects that match the new filter for existing local commits. This is because the client will report commits as "have" during fetch negotiation and any dependent objects won't be included in the transferred pack. Another use case is discussed at [1]. This patch series introduces a --repair option to fetch & fetch-pack to enable doing a full fetch without performing any commit negotiation with the remote, as for a fresh clone. It builds upon cbe566a071 ("negotiator/noop: add noop fetch negotiator", 2020-08-18). While a key use case is described above for partial clones, a user could also use --repair to fix a corrupted object database by performing a refetch of objects that should already be present, establishing a better workflow than deleting the local repository and re-cloning. * Using --repair will produce duplicated objects between the existing and newly fetched packs, but maintenance will clean them up when it runs automatically post-fetch (if enabled). * If a user fetches with --repair applying a more restrictive partial clone filter than previously (eg: blob:limit=1m then blob:limit=1k) the eventual state is a no-op, since any referenced object already in the local repository is never removed. More advanced repacking which could improve this scenario is currently proposed at [2]. [1] https://public-inbox.org/git/aa7b89ee-08aa-7943-6a00-28dcf344426e@syntevo.com/ [2] https://public-inbox.org/git/21ED346B-A906-4905-B061-EDE53691C586@gmail.com/ Changes since RFC (v1): * Changed the name from "refilter" to "repair" * Removed dependency between server-side support for filtering and repair * Added a test case for a shallow clone * Post-fetch auto maintenance now strongly encourages repacking/consolidation Robert Coup (8): fetch-negotiator: add specific noop initializor fetch-pack: add repairing builtin/fetch-pack: add --repair option fetch: add --repair option t5615-partial-clone: add test for fetch --repair maintenance: add ability to pass config options fetch: after repair, encourage auto gc repacking doc/partial-clone: mention --repair fetch option Documentation/fetch-options.txt | 10 +++++ Documentation/git-fetch-pack.txt | 4 ++ Documentation/technical/partial-clone.txt | 3 ++ builtin/am.c | 2 +- builtin/commit.c | 2 +- builtin/fetch-pack.c | 4 ++ builtin/fetch.c | 38 ++++++++++++++-- builtin/merge.c | 2 +- builtin/rebase.c | 2 +- fetch-negotiator.c | 5 +++ fetch-negotiator.h | 8 ++++ fetch-pack.c | 50 +++++++++++++-------- fetch-pack.h | 1 + remote-curl.c | 6 +++ run-command.c | 8 +++- run-command.h | 5 ++- t/t5616-partial-clone.sh | 54 ++++++++++++++++++++++- transport-helper.c | 3 ++ transport.c | 4 ++ transport.h | 4 ++ 20 files changed, 186 insertions(+), 29 deletions(-) base-commit: dab1b7905d0b295f1acef9785bb2b9cbb0fdec84 Submitted-As: https://lore.kernel.org/git/pull.1138.v2.git.1645719218.gitgitgadget@gmail.com In-Reply-To: https://lore.kernel.org/git/pull.1138.git.1643730593.gitgitgadget@gmail.com
Assets 2
-
2022-02-24T16:13:39Z -
2022-02-24T16:13:39Z -