Tom Saeger rightly pointed out [1] that the prefetch task ignores custom refspecs. This can lead to downloading more data than requested, and it doesn't even help the future foreground fetches that use that custom refspec. [1] https://lore.kernel.org/git/20210401184914.qmr7jhjbhp2mt3h6@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/ This series fixes this problem by carefully replacing the start of each refspec's destination with "refs/prefetch/". If the destination already starts with "refs/", then that is replaced. Otherwise "refs/prefetch/" is just prepended. In order to accomplish this safely, a new refspec_item_format() method is created and tested. Patch 1 is just a preparation patch that makes the code simpler (and in hindsight it should have been written this way from the start). Patch 2 is a simplification of test_subcommand that removes the need for escaping glob characters. Thanks, Eric Sunshine, for the tip of why my tests were failing on FreeBSD. Patches 3-4 add refspec_item_format(). Patch 5 finally modifies the logic in the prefetch task to translate these refspecs. Thanks, -Stolee Derrick Stolee (5): maintenance: simplify prefetch logic test-lib: use exact match for test_subcommand refspec: output a refspec item test-tool: test refspec input/output maintenance: allow custom refspecs during prefetch Documentation/git-maintenance.txt | 3 +- Makefile | 1 + builtin/gc.c | 63 +++++++++++++++++++------------ refspec.c | 25 ++++++++++++ refspec.h | 5 +++ t/helper/test-refspec.c | 39 +++++++++++++++++++ t/helper/test-tool.c | 1 + t/helper/test-tool.h | 1 + t/t5511-refspec.sh | 41 ++++++++++++++++++++ t/t7900-maintenance.sh | 43 ++++++++++++++++++--- t/test-lib-functions.sh | 4 +- 11 files changed, 192 insertions(+), 34 deletions(-) create mode 100644 t/helper/test-refspec.c base-commit: 2e36527f23b7f6ae15e6f21ac3b08bf3fed6ee48 Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-924%2Fderrickstolee%2Fmaintenance%2Frefspec-v1 Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-924/derrickstolee/maintenance/refspec-v1 Pull-Request: https://github.com/gitgitgadget/git/pull/924 -- gitgitgadget