Subject: Re: [PATCH v2 00/27] Memory leak fixes (pt.10, final)

From: Rubén Justo <[email-masked]>
Date: Tue, 12 Nov 2024 00:33:16 +0100

On Mon, Nov 11, 2024 at 11:38:29AM +0100, Patrick Steinhardt wrote:
> Hi,
> 
> this is the last part of my series of memory leak fixes. This series
> goes a bit further than past series:
> 
>   - Patches 1 to 16 plug remaining memory leaks exposed by our test
>     suite.
> 
>   - Patches 17 to 22 remove the last remaining `UNLEAK()` annotations
>     and ultimately remove the macro itself.
> 
>   - Patch 23 works around a bug in the leak sanitizer itself.
> 
>   - Patches 24 and 25 drop annotations where leak-free tests pass with
>     the leak sanitizer.
> 
>   - Patches 26 and 27 unconditionally enable leak checking in all newly
>     added tests and then drop the `TEST_PASSES_SANITIZE_LEAK`
>     annotation.
> 
> So once this series lands, the expectation is that any newly added test
> needs to be leak free by default. We still have an escape hatch in the
> form of the SANITIZE_LEAK prerequisite, but patch authors are expected
> to provide good arguments why their test cannot be made leak free.
> 
> Changes in v2:
> 
>   - Some fixes to code formatting.
> 
>   - Simplify the memory leak fixes in "help.c".
> 
>   - Split out the removal of `UNLEAK()` into its own commit.
> 
> Link to v1: https://lore.kernel.org/r/[email-masked]
> 
> Thanks!
> 
> Patrick
> 
> To: [email-masked]
> Cc: Rubén Justo <[email-masked]>
> 
> Patrick Steinhardt (27):
>       builtin/blame: fix leaking blame entries with `--incremental`
>       bisect: fix leaking good/bad terms when reading multipe times
>       bisect: fix leaking string in `handle_bad_merge_base()`
>       bisect: fix leaking `current_bad_oid`
>       bisect: fix multiple leaks in `bisect_next_all()`
>       bisect: fix leaking commit list items in `check_merge_base()`
>       bisect: fix various cases where we leak commit list items
>       line-log: fix leak when rewriting commit parents
>       strvec: introduce new `strvec_splice()` function
>       git: refactor alias handling to use a `struct strvec`
>       git: refactor builtin handling to use a `struct strvec`
>       split-index: fix memory leak in `move_cache_to_base_index()`
>       builtin/sparse-checkout: fix leaking sanitized patterns
>       help: refactor to not use globals for reading config
>       help: fix leaking `struct cmdnames`
>       help: fix leaking return value from `help_unknown_cmd()`
>       builtin/help: fix leaks in `check_git_cmd()`
>       builtin/init-db: fix leaking directory paths
>       builtin/branch: fix leaking sorting options
>       t/helper: fix leaking commit graph in "read-graph" subcommand
>       global: drop `UNLEAK()` annotation
>       git-compat-util: drop now-unused `UNLEAK()` macro
>       t5601: work around leak sanitizer issue
>       t: mark some tests as leak free
>       t: remove unneeded !SANITIZE_LEAK prerequisites
>       test-lib: unconditionally enable leak checking
>       t: remove TEST_PASSES_SANITIZE_LEAK annotations
> 
>  bisect.c                                           |  61 +++++++---
>  bisect.h                                           |   2 +-
>  blame.c                                            |   1 +
>  blame.h                                            |   2 +-
>  builtin/blame.c                                    |  12 +-
>  builtin/branch.c                                   |  33 ++++--
>  builtin/clone.c                                    |   1 -
>  builtin/diff.c                                     |   1 -
>  builtin/help.c                                     |  13 ++-
>  builtin/init-db.c                                  |  34 +++---
>  builtin/sparse-checkout.c                          |  61 ++++++----
>  ci/lib.sh                                          |   1 -
>  git-compat-util.h                                  |  20 ----
>  git.c                                              | 124 +++++++++++----------
>  help.c                                             |  58 +++++-----
>  help.h                                             |   2 +-
>  line-log.c                                         |   1 +
>  revision.c                                         |   4 +-
>  split-index.c                                      |   6 +-
>  strvec.c                                           |  19 ++++
>  strvec.h                                           |   9 ++
>  t/README                                           |  21 ----
>  t/helper/test-read-graph.c                         |   3 +-
>  t/lib-git-svn.sh                                   |   4 -
>  t/t0001-init.sh                                    |   1 -
>  t/t0002-gitfile.sh                                 |   1 -
>  t/t0003-attributes.sh                              |   1 -
>  t/t0004-unwritable.sh                              |   1 -
>  t/t0005-signals.sh                                 |   1 -
>  t/t0006-date.sh                                    |   1 -
>  t/t0007-git-var.sh                                 |   1 -
>  t/t0008-ignores.sh                                 |   1 -
>  t/t0010-racy-git.sh                                |   1 -
>  t/t0012-help.sh                                    |   1 -
>  t/t0013-sha1dc.sh                                  |   1 -
>  t/t0017-env-helper.sh                              |   1 -
>  t/t0018-advice.sh                                  |   1 -
>  t/t0019-json-writer.sh                             |   1 -
>  t/t0020-crlf.sh                                    |   1 -
>  t/t0021-conversion.sh                              |   1 -
>  t/t0022-crlf-rename.sh                             |   1 -
>  t/t0023-crlf-am.sh                                 |   1 -
>  t/t0024-crlf-archive.sh                            |   1 -
>  t/t0025-crlf-renormalize.sh                        |   1 -
>  t/t0026-eol-config.sh                              |   1 -
>  t/t0027-auto-crlf.sh                               |   1 -
>  t/t0028-working-tree-encoding.sh                   |   1 -
>  t/t0029-core-unsetenvvars.sh                       |   1 -
>  t/t0030-stripspace.sh                              |   1 -
>  t/t0033-safe-directory.sh                          |   1 -
>  t/t0035-safe-bare-repository.sh                    |   1 -
>  t/t0040-parse-options.sh                           |   1 -
>  t/t0041-usage.sh                                   |   1 -
>  t/t0050-filesystem.sh                              |   1 -
>  t/t0052-simple-ipc.sh                              |   1 -
>  t/t0055-beyond-symlinks.sh                         |   1 -
>  t/t0056-git-C.sh                                   |   1 -
>  t/t0060-path-utils.sh                              |   1 -
>  t/t0061-run-command.sh                             |   1 -
>  t/t0062-revision-walking.sh                        |   1 -
>  t/t0063-string-list.sh                             |   1 -
>  t/t0066-dir-iterator.sh                            |   1 -
>  t/t0067-parse_pathspec_file.sh                     |   1 -
>  t/t0068-for-each-repo.sh                           |   1 -
>  t/t0070-fundamental.sh                             |   1 -
>  t/t0071-sort.sh                                    |   1 -
>  t/t0080-unit-test-output.sh                        |   1 -
>  t/t0081-find-pack.sh                               |   1 -
>  t/t0090-cache-tree.sh                              |   1 -
>  t/t0091-bugreport.sh                               |   1 -
>  t/t0092-diagnose.sh                                |   1 -
>  t/t0095-bloom.sh                                   |   3 +-
>  t/t0100-previous.sh                                |   1 -
>  t/t0101-at-syntax.sh                               |   1 -
>  t/t0200-gettext-basic.sh                           |   1 -
>  t/t0201-gettext-fallbacks.sh                       |   1 -
>  t/t0202-gettext-perl.sh                            |   1 -
>  t/t0203-gettext-setlocale-sanity.sh                |   1 -
>  t/t0204-gettext-reencode-sanity.sh                 |   1 -
>  t/t0210-trace2-normal.sh                           |   1 -
>  t/t0211-trace2-perf.sh                             |   1 -
>  t/t0212-trace2-event.sh                            |   1 -
>  t/t0300-credentials.sh                             |   1 -
>  t/t0301-credential-cache.sh                        |   1 -
>  t/t0302-credential-store.sh                        |   1 -
>  t/t0303-credential-external.sh                     |   1 -
>  t/t0410-partial-clone.sh                           |   1 -
>  t/t0411-clone-from-partial.sh                      |   1 -
>  t/t0450-txt-doc-vs-help.sh                         |   1 -
>  t/t0500-progress-display.sh                        |   1 -
>  t/t0600-reffiles-backend.sh                        |   1 -
>  t/t0601-reffiles-pack-refs.sh                      |   1 -
>  t/t0602-reffiles-fsck.sh                           |   1 -
>  t/t0610-reftable-basics.sh                         |   1 -
>  t/t0611-reftable-httpd.sh                          |   1 -
>  t/t0612-reftable-jgit-compatibility.sh             |   1 -
>  t/t0613-reftable-write-options.sh                  |   1 -
>  t/t1000-read-tree-m-3way.sh                        |   1 -
>  t/t1001-read-tree-m-2way.sh                        |   1 -
>  t/t1002-read-tree-m-u-2way.sh                      |   1 -
>  t/t1003-read-tree-prefix.sh                        |   1 -
>  t/t1004-read-tree-m-u-wf.sh                        |   1 -
>  t/t1005-read-tree-reset.sh                         |   1 -
>  t/t1006-cat-file.sh                                |   1 -
>  t/t1007-hash-object.sh                             |   1 -
>  t/t1008-read-tree-overlay.sh                       |   1 -
>  t/t1009-read-tree-new-index.sh                     |   1 -
>  t/t1010-mktree.sh                                  |   1 -
>  t/t1011-read-tree-sparse-checkout.sh               |   1 -
>  t/t1012-read-tree-df.sh                            |   1 -
>  t/t1013-read-tree-submodule.sh                     |   1 -
>  t/t1014-read-tree-confusing.sh                     |   1 -
>  t/t1015-read-index-unmerged.sh                     |   1 -
>  t/t1016-compatObjectFormat.sh                      |   1 -
>  t/t1020-subdirectory.sh                            |   1 -
>  t/t1021-rerere-in-workdir.sh                       |   1 -
>  t/t1022-read-tree-partial-clone.sh                 |   1 -
>  t/t1050-large.sh                                   |   1 -
>  t/t1051-large-conversion.sh                        |   1 -
>  t/t1060-object-corruption.sh                       |   1 -
>  t/t1090-sparse-checkout-scope.sh                   |   1 -
>  t/t1091-sparse-checkout-builtin.sh                 |   1 -
>  t/t1092-sparse-checkout-compatibility.sh           |   1 -
>  t/t1100-commit-tree-options.sh                     |   1 -
>  t/t1300-config.sh                                  |   1 -
>  t/t1301-shared-repo.sh                             |   1 -
>  t/t1302-repo-version.sh                            |   1 -
>  t/t1303-wacky-config.sh                            |   1 -
>  t/t1304-default-acl.sh                             |   1 -
>  t/t1305-config-include.sh                          |   1 -
>  t/t1306-xdg-files.sh                               |   1 -
>  t/t1307-config-blob.sh                             |   1 -
>  t/t1308-config-set.sh                              |   1 -
>  t/t1309-early-config.sh                            |   1 -
>  t/t1310-config-default.sh                          |   1 -
>  t/t1350-config-hooks-path.sh                       |   1 -
>  t/t1400-update-ref.sh                              |   1 -
>  t/t1401-symbolic-ref.sh                            |   1 -
>  t/t1402-check-ref-format.sh                        |   1 -
>  t/t1403-show-ref.sh                                |   1 -
>  t/t1404-update-ref-errors.sh                       |   1 -
>  t/t1405-main-ref-store.sh                          |   1 -
>  t/t1406-submodule-ref-store.sh                     |   1 -
>  t/t1407-worktree-ref-store.sh                      |   1 -
>  t/t1408-packed-refs.sh                             |   1 -
>  t/t1409-avoid-packing-refs.sh                      |   1 -
>  t/t1410-reflog.sh                                  |   1 -
>  t/t1411-reflog-show.sh                             |   1 -
>  t/t1412-reflog-loop.sh                             |   1 -
>  t/t1413-reflog-detach.sh                           |   1 -
>  t/t1414-reflog-walk.sh                             |   1 -
>  t/t1415-worktree-refs.sh                           |   1 -
>  t/t1416-ref-transaction-hooks.sh                   |   1 -
>  t/t1417-reflog-updateref.sh                        |   1 -
>  t/t1418-reflog-exists.sh                           |   1 -
>  t/t1419-exclude-refs.sh                            |   1 -
>  t/t1420-lost-found.sh                              |   1 -
>  t/t1430-bad-ref-name.sh                            |   1 -
>  t/t1450-fsck.sh                                    |   1 -
>  t/t1451-fsck-buffer.sh                             |   1 -
>  t/t1460-refs-migrate.sh                            |   1 -
>  t/t1500-rev-parse.sh                               |   1 -
>  t/t1501-work-tree.sh                               |   1 -
>  t/t1502-rev-parse-parseopt.sh                      |   1 -
>  t/t1503-rev-parse-verify.sh                        |   1 -
>  t/t1504-ceiling-dirs.sh                            |   1 -
>  t/t1505-rev-parse-last.sh                          |   1 -
>  t/t1506-rev-parse-diagnosis.sh                     |   1 -
>  t/t1507-rev-parse-upstream.sh                      |   1 -
>  t/t1508-at-combinations.sh                         |   1 -
>  t/t1510-repo-setup.sh                              |   1 -
>  t/t1511-rev-parse-caret.sh                         |   1 -
>  t/t1512-rev-parse-disambiguation.sh                |   1 -
>  t/t1513-rev-parse-prefix.sh                        |   1 -
>  t/t1514-rev-parse-push.sh                          |   1 -
>  t/t1515-rev-parse-outside-repo.sh                  |   1 -
>  t/t1517-outside-repo.sh                            |   1 -
>  t/t1600-index.sh                                   |   1 -
>  t/t1601-index-bogus.sh                             |   1 -
>  t/t1701-racy-split-index.sh                        |   1 -
>  t/t1800-hook.sh                                    |   1 -
>  t/t2000-conflict-when-checking-files-out.sh        |   1 -
>  t/t2002-checkout-cache-u.sh                        |   1 -
>  t/t2003-checkout-cache-mkdir.sh                    |   1 -
>  t/t2004-checkout-cache-temp.sh                     |   1 -
>  t/t2005-checkout-index-symlinks.sh                 |   1 -
>  t/t2006-checkout-index-basic.sh                    |   1 -
>  t/t2007-checkout-symlink.sh                        |   1 -
>  t/t2008-checkout-subdir.sh                         |   1 -
>  t/t2009-checkout-statinfo.sh                       |   1 -
>  t/t2010-checkout-ambiguous.sh                      |   1 -
>  t/t2011-checkout-invalid-head.sh                   |   1 -
>  t/t2012-checkout-last.sh                           |   1 -
>  t/t2013-checkout-submodule.sh                      |   1 -
>  t/t2014-checkout-switch.sh                         |   1 -
>  t/t2015-checkout-unborn.sh                         |   1 -
>  t/t2016-checkout-patch.sh                          |   1 -
>  t/t2017-checkout-orphan.sh                         |   1 -
>  t/t2018-checkout-branch.sh                         |   1 -
>  t/t2019-checkout-ambiguous-ref.sh                  |   1 -
>  t/t2020-checkout-detach.sh                         |   1 -
>  t/t2021-checkout-overwrite.sh                      |   1 -
>  t/t2022-checkout-paths.sh                          |   1 -
>  t/t2023-checkout-m.sh                              |   1 -
>  t/t2024-checkout-dwim.sh                           |   1 -
>  t/t2025-checkout-no-overlay.sh                     |   1 -
>  t/t2026-checkout-pathspec-file.sh                  |   1 -
>  t/t2027-checkout-track.sh                          |   1 -
>  t/t2030-unresolve-info.sh                          |   1 -
>  t/t2050-git-dir-relative.sh                        |   1 -
>  t/t2060-switch.sh                                  |   1 -
>  t/t2070-restore.sh                                 |   1 -
>  t/t2071-restore-patch.sh                           |   1 -
>  t/t2072-restore-pathspec-file.sh                   |   1 -
>  t/t2080-parallel-checkout-basics.sh                |   1 -
>  t/t2081-parallel-checkout-collisions.sh            |   1 -
>  t/t2082-parallel-checkout-attributes.sh            |   1 -
>  t/t2100-update-cache-badpath.sh                    |   1 -
>  t/t2101-update-index-reupdate.sh                   |   1 -
>  t/t2102-update-index-symlinks.sh                   |   1 -
>  t/t2103-update-index-ignore-missing.sh             |   1 -
>  t/t2104-update-index-skip-worktree.sh              |   1 -
>  t/t2105-update-index-gitfile.sh                    |   1 -
>  t/t2106-update-index-assume-unchanged.sh           |   1 -
>  t/t2107-update-index-basic.sh                      |   1 -
>  t/t2108-update-index-refresh-racy.sh               |   1 -
>  t/t2200-add-update.sh                              |   1 -
>  t/t2201-add-update-typechange.sh                   |   1 -
>  t/t2202-add-addremove.sh                           |   1 -
>  t/t2203-add-intent.sh                              |   1 -
>  t/t2204-add-ignored.sh                             |   1 -
>  t/t2205-add-worktree-config.sh                     |   1 -
>  t/t2300-cd-to-toplevel.sh                          |   1 -
>  t/t2400-worktree-add.sh                            |   1 -
>  t/t2401-worktree-prune.sh                          |   1 -
>  t/t2402-worktree-list.sh                           |   1 -
>  t/t2403-worktree-move.sh                           |   1 -
>  t/t2404-worktree-config.sh                         |   1 -
>  t/t2405-worktree-submodule.sh                      |   1 -
>  t/t2406-worktree-repair.sh                         |   1 -
>  t/t2407-worktree-heads.sh                          |  17 ++-
>  t/t2408-worktree-relative.sh                       |   1 -
>  t/t2500-untracked-overwriting.sh                   |   1 -
>  t/t2501-cwd-empty.sh                               |   1 -
>  t/t3000-ls-files-others.sh                         |   1 -
>  t/t3001-ls-files-others-exclude.sh                 |   1 -
>  t/t3002-ls-files-dashpath.sh                       |   1 -
>  t/t3003-ls-files-exclude.sh                        |   1 -
>  t/t3004-ls-files-basic.sh                          |   1 -
>  t/t3005-ls-files-relative.sh                       |   1 -
>  t/t3006-ls-files-long.sh                           |   1 -
>  t/t3007-ls-files-recurse-submodules.sh             |   1 -
>  t/t3008-ls-files-lazy-init-name-hash.sh            |   1 -
>  t/t3009-ls-files-others-nonsubmodule.sh            |   1 -
>  t/t3010-ls-files-killed-modified.sh                |   1 -
>  t/t3011-common-prefixes-and-directory-traversal.sh |   1 -
>  t/t3012-ls-files-dedup.sh                          |   1 -
>  t/t3013-ls-files-format.sh                         |   1 -
>  t/t3020-ls-files-error-unmatch.sh                  |   1 -
>  t/t3040-subprojects-basic.sh                       |   1 -
>  t/t3050-subprojects-fetch.sh                       |   1 -
>  t/t3060-ls-files-with-tree.sh                      |   1 -
>  t/t3070-wildmatch.sh                               |   1 -
>  t/t3100-ls-tree-restrict.sh                        |   1 -
>  t/t3101-ls-tree-dirname.sh                         |   1 -
>  t/t3102-ls-tree-wildcards.sh                       |   1 -
>  t/t3103-ls-tree-misc.sh                            |   1 -
>  t/t3104-ls-tree-format.sh                          |   1 -
>  t/t3105-ls-tree-output.sh                          |   1 -
>  t/t3200-branch.sh                                  |   1 -
>  t/t3201-branch-contains.sh                         |   1 -
>  t/t3202-show-branch.sh                             |   1 -
>  t/t3203-branch-output.sh                           |   1 -
>  t/t3204-branch-name-interpretation.sh              |   1 -
>  t/t3205-branch-color.sh                            |   1 -
>  t/t3206-range-diff.sh                              |   1 -
>  t/t3207-branch-submodule.sh                        |   1 -
>  t/t3211-peel-ref.sh                                |   1 -
>  t/t3300-funny-names.sh                             |   1 -
>  t/t3301-notes.sh                                   |   1 -
>  t/t3302-notes-index-expensive.sh                   |   1 -
>  t/t3303-notes-subtrees.sh                          |   1 -
>  t/t3304-notes-mixed.sh                             |   1 -
>  t/t3305-notes-fanout.sh                            |   1 -
>  t/t3306-notes-prune.sh                             |   1 -
>  t/t3307-notes-man.sh                               |   1 -
>  t/t3308-notes-merge.sh                             |   1 -
>  t/t3309-notes-merge-auto-resolve.sh                |   1 -
>  t/t3310-notes-merge-manual-resolve.sh              |   1 -
>  t/t3311-notes-merge-fanout.sh                      |   1 -
>  t/t3320-notes-merge-worktrees.sh                   |   1 -
>  t/t3321-notes-stripspace.sh                        |   1 -
>  t/t3400-rebase.sh                                  |   1 -
>  t/t3401-rebase-and-am-rename.sh                    |   1 -
>  t/t3402-rebase-merge.sh                            |   1 -
>  t/t3403-rebase-skip.sh                             |   1 -
>  t/t3404-rebase-interactive.sh                      |   1 -
>  t/t3405-rebase-malformed.sh                        |   1 -
>  t/t3406-rebase-message.sh                          |   1 -
>  t/t3407-rebase-abort.sh                            |   1 -
>  t/t3408-rebase-multi-line.sh                       |   1 -
>  t/t3409-rebase-environ.sh                          |   1 -
>  t/t3412-rebase-root.sh                             |   1 -
>  t/t3413-rebase-hook.sh                             |   1 -
>  t/t3415-rebase-autosquash.sh                       |   1 -
>  t/t3416-rebase-onto-threedots.sh                   |   1 -
>  t/t3417-rebase-whitespace-fix.sh                   |   1 -
>  t/t3418-rebase-continue.sh                         |   1 -
>  t/t3419-rebase-patch-id.sh                         |   1 -
>  t/t3420-rebase-autostash.sh                        |   1 -
>  t/t3421-rebase-topology-linear.sh                  |   1 -
>  t/t3422-rebase-incompatible-options.sh             |   1 -
>  t/t3423-rebase-reword.sh                           |   1 -
>  t/t3424-rebase-empty.sh                            |   1 -
>  t/t3425-rebase-topology-merges.sh                  |   1 -
>  t/t3426-rebase-submodule.sh                        |   1 -
>  t/t3427-rebase-subtree.sh                          |   1 -
>  t/t3428-rebase-signoff.sh                          |   1 -
>  t/t3429-rebase-edit-todo.sh                        |   1 -
>  t/t3430-rebase-merges.sh                           |   1 -
>  t/t3431-rebase-fork-point.sh                       |   1 -
>  t/t3432-rebase-fast-forward.sh                     |   1 -
>  t/t3433-rebase-across-mode-change.sh               |   1 -
>  t/t3434-rebase-i18n.sh                             |   1 -
>  t/t3435-rebase-gpg-sign.sh                         |   1 -
>  t/t3436-rebase-more-options.sh                     |   1 -
>  t/t3437-rebase-fixup-options.sh                    |   1 -
>  t/t3438-rebase-broken-files.sh                     |   1 -
>  t/t3500-cherry.sh                                  |   1 -
>  t/t3501-revert-cherry-pick.sh                      |   1 -
>  t/t3502-cherry-pick-merge.sh                       |   1 -
>  t/t3503-cherry-pick-root.sh                        |   1 -
>  t/t3504-cherry-pick-rerere.sh                      |   1 -
>  t/t3505-cherry-pick-empty.sh                       |   1 -
>  t/t3506-cherry-pick-ff.sh                          |   1 -
>  t/t3507-cherry-pick-conflict.sh                    |   1 -
>  t/t3508-cherry-pick-many-commits.sh                |   1 -
>  t/t3509-cherry-pick-merge-df.sh                    |   1 -
>  t/t3510-cherry-pick-sequence.sh                    |   1 -
>  t/t3511-cherry-pick-x.sh                           |   1 -
>  t/t3512-cherry-pick-submodule.sh                   |   1 -
>  t/t3513-revert-submodule.sh                        |   1 -
>  t/t3514-cherry-pick-revert-gpg.sh                  |   1 -
>  t/t3600-rm.sh                                      |   1 -
>  t/t3601-rm-pathspec-file.sh                        |   1 -
>  t/t3602-rm-sparse-checkout.sh                      |   1 -
>  t/t3650-replay-basics.sh                           |   1 -
>  t/t3700-add.sh                                     |   1 -
>  t/t3701-add-interactive.sh                         |   1 -
>  t/t3702-add-edit.sh                                |   1 -
>  t/t3703-add-magic-pathspec.sh                      |   1 -
>  t/t3704-add-pathspec-file.sh                       |   1 -
>  t/t3705-add-sparse-checkout.sh                     |   1 -
>  t/t3800-mktag.sh                                   |   1 -
>  t/t3900-i18n-commit.sh                             |   1 -
>  t/t3901-i18n-patch.sh                              |   1 -
>  t/t3902-quoted.sh                                  |   1 -
>  t/t3903-stash.sh                                   |   1 -
>  t/t3904-stash-patch.sh                             |   1 -
>  t/t3905-stash-include-untracked.sh                 |   1 -
>  t/t3906-stash-submodule.sh                         |   1 -
>  t/t3907-stash-show-config.sh                       |   1 -
>  t/t3908-stash-in-worktree.sh                       |   1 -
>  t/t3909-stash-pathspec-file.sh                     |   1 -
>  t/t3920-crlf-messages.sh                           |   1 -
>  t/t4000-diff-format.sh                             |   1 -
>  t/t4001-diff-rename.sh                             |   1 -
>  t/t4002-diff-basic.sh                              |   1 -
>  t/t4003-diff-rename-1.sh                           |   1 -
>  t/t4004-diff-rename-symlink.sh                     |   1 -
>  t/t4005-diff-rename-2.sh                           |   1 -
>  t/t4006-diff-mode.sh                               |   1 -
>  t/t4007-rename-3.sh                                |   1 -
>  t/t4008-diff-break-rewrite.sh                      |   1 -
>  t/t4009-diff-rename-4.sh                           |   1 -
>  t/t4010-diff-pathspec.sh                           |   1 -
>  t/t4011-diff-symlink.sh                            |   1 -
>  t/t4012-diff-binary.sh                             |   1 -
>  t/t4013-diff-various.sh                            |   1 -
>  t/t4014-format-patch.sh                            |   1 -
>  t/t4015-diff-whitespace.sh                         |   1 -
>  t/t4016-diff-quote.sh                              |   1 -
>  t/t4017-diff-retval.sh                             |   1 -
>  t/t4018-diff-funcname.sh                           |   1 -
>  t/t4019-diff-wserror.sh                            |   1 -
>  t/t4020-diff-external.sh                           |   5 +-
>  t/t4021-format-patch-numbered.sh                   |   1 -
>  t/t4022-diff-rewrite.sh                            |   1 -
>  t/t4023-diff-rename-typechange.sh                  |   1 -
>  t/t4024-diff-optimize-common.sh                    |   1 -
>  t/t4025-hunk-header.sh                             |   1 -
>  t/t4026-color.sh                                   |   1 -
>  t/t4027-diff-submodule.sh                          |   1 -
>  t/t4028-format-patch-mime-headers.sh               |   1 -
>  t/t4029-diff-trailing-space.sh                     |   1 -
>  t/t4030-diff-textconv.sh                           |   1 -
>  t/t4031-diff-rewrite-binary.sh                     |   1 -
>  t/t4032-diff-inter-hunk-context.sh                 |   1 -
>  t/t4033-diff-patience.sh                           |   1 -
>  t/t4034-diff-words.sh                              |   1 -
>  t/t4035-diff-quiet.sh                              |   1 -
>  t/t4036-format-patch-signer-mime.sh                |   1 -
>  t/t4037-diff-r-t-dirs.sh                           |   1 -
>  t/t4038-diff-combined.sh                           |   1 -
>  t/t4039-diff-assume-unchanged.sh                   |   1 -
>  t/t4040-whitespace-status.sh                       |   1 -
>  t/t4041-diff-submodule-option.sh                   |   1 -
>  t/t4042-diff-textconv-caching.sh                   |   1 -
>  t/t4043-diff-rename-binary.sh                      |   1 -
>  t/t4044-diff-index-unique-abbrev.sh                |   1 -
>  t/t4045-diff-relative.sh                           |   1 -
>  t/t4046-diff-unmerged.sh                           |   1 -
>  t/t4047-diff-dirstat.sh                            |   1 -
>  t/t4048-diff-combined-binary.sh                    |   1 -
>  t/t4049-diff-stat-count.sh                         |   1 -
>  t/t4050-diff-histogram.sh                          |   1 -
>  t/t4051-diff-function-context.sh                   |   1 -
>  t/t4052-stat-output.sh                             |   1 -
>  t/t4053-diff-no-index.sh                           |   1 -
>  t/t4054-diff-bogus-tree.sh                         |   1 -
>  t/t4055-diff-context.sh                            |   1 -
>  t/t4056-diff-order.sh                              |   1 -
>  t/t4057-diff-combined-paths.sh                     |   1 -
>  t/t4058-diff-duplicates.sh                         |   1 -
>  t/t4059-diff-submodule-not-initialized.sh          |   1 -
>  t/t4060-diff-submodule-option-diff-format.sh       |   1 -
>  t/t4061-diff-indent.sh                             |   1 -
>  t/t4062-diff-pickaxe.sh                            |   1 -
>  t/t4063-diff-blobs.sh                              |   1 -
>  t/t4064-diff-oidfind.sh                            |   1 -
>  t/t4065-diff-anchored.sh                           |   1 -
>  t/t4066-diff-emit-delay.sh                         |   1 -
>  t/t4067-diff-partial-clone.sh                      |   1 -
>  t/t4068-diff-symmetric-merge-base.sh               |   1 -
>  t/t4069-remerge-diff.sh                            |   1 -
>  t/t4100-apply-stat.sh                              |   1 -
>  t/t4101-apply-nonl.sh                              |   1 -
>  t/t4102-apply-rename.sh                            |   1 -
>  t/t4103-apply-binary.sh                            |   1 -
>  t/t4104-apply-boundary.sh                          |   1 -
>  t/t4105-apply-fuzz.sh                              |   1 -
>  t/t4106-apply-stdin.sh                             |   1 -
>  t/t4107-apply-ignore-whitespace.sh                 |   1 -
>  t/t4108-apply-threeway.sh                          |   1 -
>  t/t4109-apply-multifrag.sh                         |   1 -
>  t/t4110-apply-scan.sh                              |   1 -
>  t/t4111-apply-subdir.sh                            |   1 -
>  t/t4112-apply-renames.sh                           |   1 -
>  t/t4113-apply-ending.sh                            |   1 -
>  t/t4114-apply-typechange.sh                        |   1 -
>  t/t4115-apply-symlink.sh                           |   1 -
>  t/t4116-apply-reverse.sh                           |   1 -
>  t/t4117-apply-reject.sh                            |   1 -
>  t/t4118-apply-empty-context.sh                     |   1 -
>  t/t4119-apply-config.sh                            |   1 -
>  t/t4120-apply-popt.sh                              |   1 -
>  t/t4121-apply-diffs.sh                             |   1 -
>  t/t4122-apply-symlink-inside.sh                    |   1 -
>  t/t4123-apply-shrink.sh                            |   1 -
>  t/t4124-apply-ws-rule.sh                           |   1 -
>  t/t4125-apply-ws-fuzz.sh                           |   1 -
>  t/t4126-apply-empty.sh                             |   1 -
>  t/t4127-apply-same-fn.sh                           |   1 -
>  t/t4128-apply-root.sh                              |   1 -
>  t/t4129-apply-samemode.sh                          |   1 -
>  t/t4130-apply-criss-cross-rename.sh                |   1 -
>  t/t4131-apply-fake-ancestor.sh                     |   1 -
>  t/t4132-apply-removal.sh                           |   1 -
>  t/t4133-apply-filenames.sh                         |   1 -
>  t/t4134-apply-submodule.sh                         |   1 -
>  t/t4135-apply-weird-filenames.sh                   |   1 -
>  t/t4136-apply-check.sh                             |   1 -
>  t/t4137-apply-submodule.sh                         |   1 -
>  t/t4138-apply-ws-expansion.sh                      |   1 -
>  t/t4139-apply-escape.sh                            |   1 -
>  t/t4140-apply-ita.sh                               |   1 -
>  t/t4141-apply-too-large.sh                         |   1 -
>  t/t4150-am.sh                                      |   1 -
>  t/t4151-am-abort.sh                                |   1 -
>  t/t4152-am-subjects.sh                             |   1 -
>  t/t4153-am-resume-override-opts.sh                 |   1 -
>  t/t4200-rerere.sh                                  |   1 -
>  t/t4201-shortlog.sh                                |   1 -
>  t/t4202-log.sh                                     |   1 -
>  t/t4203-mailmap.sh                                 |   1 -
>  t/t4204-patch-id.sh                                |   1 -
>  t/t4205-log-pretty-formats.sh                      |   1 -
>  t/t4206-log-follow-harder-copies.sh                |   1 -
>  t/t4207-log-decoration-colors.sh                   |   1 -
>  t/t4208-log-magic-pathspec.sh                      |   1 -
>  t/t4209-log-pickaxe.sh                             |   1 -
>  t/t4210-log-i18n.sh                                |   1 -
>  t/t4212-log-corrupt.sh                             |   1 -
>  t/t4213-log-tabexpand.sh                           |   1 -
>  t/t4214-log-graph-octopus.sh                       |   1 -
>  t/t4215-log-skewed-merges.sh                       |   1 -
>  t/t4216-log-bloom.sh                               |   1 -
>  t/t4217-log-limit.sh                               |   1 -
>  t/t4252-am-options.sh                              |   1 -
>  t/t4253-am-keep-cr-dos.sh                          |   1 -
>  t/t4254-am-corrupt.sh                              |   1 -
>  t/t4255-am-submodule.sh                            |   1 -
>  t/t4256-am-format-flowed.sh                        |   1 -
>  t/t4257-am-interactive.sh                          |   1 -
>  t/t4258-am-quoted-cr.sh                            |   1 -
>  t/t4300-merge-tree.sh                              |   1 -
>  t/t4301-merge-tree-write-tree.sh                   |   1 -
>  t/t5000-tar-tree.sh                                |   1 -
>  t/t5001-archive-attr.sh                            |   1 -
>  t/t5002-archive-attr-pattern.sh                    |   1 -
>  t/t5003-archive-zip.sh                             |   1 -
>  t/t5004-archive-corner-cases.sh                    |   1 -
>  t/t5100-mailinfo.sh                                |   1 -
>  t/t5150-request-pull.sh                            |   1 -
>  t/t5200-update-server-info.sh                      |   1 -
>  t/t5300-pack-object.sh                             |   1 -
>  t/t5301-sliding-window.sh                          |   1 -
>  t/t5302-pack-index.sh                              |   1 -
>  t/t5303-pack-corruption-resilience.sh              |   1 -
>  t/t5304-prune.sh                                   |   1 -
>  t/t5305-include-tag.sh                             |   1 -
>  t/t5306-pack-nobase.sh                             |   1 -
>  t/t5307-pack-missing-commit.sh                     |   1 -
>  t/t5308-pack-detect-duplicates.sh                  |   1 -
>  t/t5309-pack-delta-cycles.sh                       |   1 -
>  t/t5310-pack-bitmaps.sh                            |   1 -
>  t/t5311-pack-bitmaps-shallow.sh                    |   1 -
>  t/t5312-prune-corruption.sh                        |   1 -
>  t/t5313-pack-bounds-checks.sh                      |   1 -
>  t/t5314-pack-cycle-detection.sh                    |   1 -
>  t/t5315-pack-objects-compression.sh                |   1 -
>  t/t5316-pack-delta-depth.sh                        |   1 -
>  t/t5317-pack-objects-filter-objects.sh             |   1 -
>  t/t5318-commit-graph.sh                            |   1 -
>  t/t5319-multi-pack-index.sh                        |   1 -
>  t/t5320-delta-islands.sh                           |   1 -
>  t/t5321-pack-large-objects.sh                      |   1 -
>  t/t5322-pack-objects-sparse.sh                     |   1 -
>  t/t5323-pack-redundant.sh                          |   1 -
>  t/t5324-split-commit-graph.sh                      |   1 -
>  t/t5325-reverse-index.sh                           |   1 -
>  t/t5326-multi-pack-bitmaps.sh                      |   1 -
>  t/t5327-multi-pack-bitmaps-rev.sh                  |   1 -
>  t/t5328-commit-graph-64bit-time.sh                 |   1 -
>  t/t5329-pack-objects-cruft.sh                      |   1 -
>  t/t5330-no-lazy-fetch-with-commit-graph.sh         |   1 -
>  t/t5331-pack-objects-stdin.sh                      |   1 -
>  t/t5332-multi-pack-reuse.sh                        |   1 -
>  t/t5333-pseudo-merge-bitmaps.sh                    |   1 -
>  t/t5334-incremental-multi-pack-index.sh            |   1 -
>  t/t5351-unpack-large-objects.sh                    |   1 -
>  t/t5400-send-pack.sh                               |   1 -
>  t/t5401-update-hooks.sh                            |   1 -
>  t/t5402-post-merge-hook.sh                         |   1 -
>  t/t5403-post-checkout-hook.sh                      |   1 -
>  t/t5404-tracking-branches.sh                       |   1 -
>  t/t5405-send-pack-rewind.sh                        |   1 -
>  t/t5406-remote-rejects.sh                          |   1 -
>  t/t5407-post-rewrite-hook.sh                       |   1 -
>  t/t5408-send-pack-stdin.sh                         |   1 -
>  t/t5409-colorize-remote-messages.sh                |   1 -
>  t/t5410-receive-pack-alternates.sh                 |   1 -
>  t/t5411-proc-receive-hook.sh                       |   1 -
>  t/t5500-fetch-pack.sh                              |   1 -
>  t/t5501-fetch-push-alternates.sh                   |   1 -
>  t/t5502-quickfetch.sh                              |   1 -
>  t/t5503-tagfollow.sh                               |   1 -
>  t/t5504-fetch-receive-strict.sh                    |   1 -
>  t/t5505-remote.sh                                  |   1 -
>  t/t5506-remote-groups.sh                           |   1 -
>  t/t5507-remote-environment.sh                      |   1 -
>  t/t5509-fetch-push-namespaces.sh                   |   1 -
>  t/t5510-fetch.sh                                   |   1 -
>  t/t5511-refspec.sh                                 |   1 -
>  t/t5512-ls-remote.sh                               |   1 -
>  t/t5513-fetch-track.sh                             |   1 -
>  t/t5514-fetch-multiple.sh                          |   1 -
>  t/t5515-fetch-merge-logic.sh                       |   1 -
>  t/t5516-fetch-push.sh                              |   1 -
>  t/t5517-push-mirror.sh                             |   1 -
>  t/t5518-fetch-exit-status.sh                       |   1 -
>  t/t5519-push-alternates.sh                         |   1 -
>  t/t5520-pull.sh                                    |   1 -
>  t/t5521-pull-options.sh                            |   1 -
>  t/t5522-pull-symlink.sh                            |   1 -
>  t/t5523-push-upstream.sh                           |   1 -
>  t/t5524-pull-msg.sh                                |   1 -
>  t/t5525-fetch-tagopt.sh                            |   1 -
>  t/t5526-fetch-submodules.sh                        |   1 -
>  t/t5527-fetch-odd-refs.sh                          |   1 -
>  t/t5528-push-default.sh                            |   1 -
>  t/t5529-push-errors.sh                             |   1 -
>  t/t5530-upload-pack-error.sh                       |   1 -
>  t/t5531-deep-submodule-push.sh                     |   1 -
>  t/t5532-fetch-proxy.sh                             |   1 -
>  t/t5533-push-cas.sh                                |   1 -
>  t/t5534-push-signed.sh                             |   1 -
>  t/t5535-fetch-push-symref.sh                       |   1 -
>  t/t5536-fetch-conflicts.sh                         |   1 -
>  t/t5537-fetch-shallow.sh                           |   1 -
>  t/t5538-push-shallow.sh                            |   1 -
>  t/t5539-fetch-http-shallow.sh                      |   1 -
>  t/t5540-http-push-webdav.sh                        |   1 -
>  t/t5541-http-push-smart.sh                         |   1 -
>  t/t5542-push-http-shallow.sh                       |   1 -
>  t/t5543-atomic-push.sh                             |   1 -
>  t/t5544-pack-objects-hook.sh                       |   1 -
>  t/t5545-push-options.sh                            |   1 -
>  t/t5546-receive-limits.sh                          |   1 -
>  t/t5547-push-quarantine.sh                         |   1 -
>  t/t5548-push-porcelain.sh                          |   1 -
>  t/t5549-fetch-push-http.sh                         |   1 -
>  t/t5550-http-fetch-dumb.sh                         |   1 -
>  t/t5551-http-fetch-smart.sh                        |   1 -
>  t/t5552-skipping-fetch-negotiator.sh               |   1 -
>  t/t5553-set-upstream.sh                            |   1 -
>  t/t5554-noop-fetch-negotiator.sh                   |   1 -
>  t/t5555-http-smart-common.sh                       |   1 -
>  t/t5557-http-get.sh                                |   1 -
>  t/t5560-http-backend-noserver.sh                   |   1 -
>  t/t5561-http-backend.sh                            |   1 -
>  t/t5562-http-backend-content-length.sh             |   1 -
>  t/t5563-simple-http-auth.sh                        |   1 -
>  t/t5564-http-proxy.sh                              |   1 -
>  t/t5570-git-daemon.sh                              |   1 -
>  t/t5571-pre-push-hook.sh                           |   1 -
>  t/t5572-pull-submodule.sh                          |   1 -
>  t/t5573-pull-verify-signatures.sh                  |   1 -
>  t/t5574-fetch-output.sh                            |   1 -
>  t/t5580-unc-paths.sh                               |   1 -
>  t/t5581-http-curl-verbose.sh                       |   1 -
>  t/t5582-fetch-negative-refspec.sh                  |   1 -
>  t/t5583-push-branches.sh                           |   1 -
>  t/t5600-clone-fail-cleanup.sh                      |   1 -
>  t/t5601-clone.sh                                   |  26 +++--
>  t/t5602-clone-remote-exec.sh                       |   1 -
>  t/t5603-clone-dirname.sh                           |   1 -
>  t/t5604-clone-reference.sh                         |   1 -
>  t/t5605-clone-local.sh                             |   1 -
>  t/t5606-clone-options.sh                           |   1 -
>  t/t5607-clone-bundle.sh                            |   1 -
>  t/t5609-clone-branch.sh                            |   1 -
>  t/t5610-clone-detached.sh                          |   1 -
>  t/t5611-clone-config.sh                            |   1 -
>  t/t5612-clone-refspec.sh                           |   1 -
>  t/t5613-info-alternate.sh                          |   1 -
>  t/t5614-clone-submodules-shallow.sh                |   1 -
>  t/t5615-alternate-env.sh                           |   1 -
>  t/t5616-partial-clone.sh                           |   1 -
>  t/t5617-clone-submodules-remote.sh                 |   1 -
>  t/t5618-alternate-refs.sh                          |   1 -
>  t/t5619-clone-local-ambiguous-transport.sh         |   1 -
>  t/t5700-protocol-v1.sh                             |   1 -
>  t/t5701-git-serve.sh                               |   1 -
>  t/t5702-protocol-v2.sh                             |   1 -
>  t/t5703-upload-pack-ref-in-want.sh                 |   1 -
>  t/t5704-protocol-violations.sh                     |   1 -
>  t/t5705-session-id-in-capabilities.sh              |   1 -
>  t/t5730-protocol-v2-bundle-uri-file.sh             |   1 -
>  t/t5731-protocol-v2-bundle-uri-git.sh              |   1 -
>  t/t5732-protocol-v2-bundle-uri-http.sh             |   1 -
>  t/t5750-bundle-uri-parse.sh                        |   1 -
>  t/t5801-remote-helpers.sh                          |   1 -
>  t/t5802-connect-helper.sh                          |   1 -
>  t/t5810-proto-disable-local.sh                     |   1 -
>  t/t5811-proto-disable-git.sh                       |   1 -
>  t/t5812-proto-disable-http.sh                      |   1 -
>  t/t5813-proto-disable-ssh.sh                       |   1 -
>  t/t5814-proto-disable-ext.sh                       |   1 -
>  t/t5815-submodule-protos.sh                        |   1 -
>  t/t5900-repo-selection.sh                          |   1 -
>  t/t6000-rev-list-misc.sh                           |   1 -
>  t/t6001-rev-list-graft.sh                          |   1 -
>  t/t6002-rev-list-bisect.sh                         |   1 -
>  t/t6003-rev-list-topo-order.sh                     |   1 -
>  t/t6004-rev-list-path-optim.sh                     |   1 -
>  t/t6005-rev-list-count.sh                          |   1 -
>  t/t6006-rev-list-format.sh                         |   1 -
>  t/t6007-rev-list-cherry-pick-file.sh               |   1 -
>  t/t6008-rev-list-submodule.sh                      |   1 -
>  t/t6009-rev-list-parent.sh                         |   1 -
>  t/t6010-merge-base.sh                              |   1 -
>  t/t6011-rev-list-with-bad-commit.sh                |   1 -
>  t/t6012-rev-list-simplify.sh                       |   1 -
>  t/t6013-rev-list-reverse-parents.sh                |   1 -
>  t/t6014-rev-list-all.sh                            |   1 -
>  t/t6016-rev-list-graph-simplify-history.sh         |   1 -
>  t/t6017-rev-list-stdin.sh                          |   1 -
>  t/t6018-rev-list-glob.sh                           |   1 -
>  t/t6019-rev-list-ancestry-path.sh                  |   1 -
>  t/t6020-bundle-misc.sh                             |   1 -
>  t/t6021-rev-list-exclude-hidden.sh                 |   1 -
>  t/t6022-rev-list-missing.sh                        |   1 -
>  t/t6040-tracking-info.sh                           |   1 -
>  t/t6041-bisect-submodule.sh                        |   1 -
>  t/t6050-replace.sh                                 |   1 -
>  t/t6060-merge-index.sh                             |   1 -
>  t/t6100-rev-list-in-order.sh                       |   1 -
>  t/t6101-rev-parse-parents.sh                       |   1 -
>  t/t6102-rev-list-unexpected-objects.sh             |   1 -
>  t/t6110-rev-list-sparse.sh                         |   1 -
>  t/t6111-rev-list-treesame.sh                       |   1 -
>  t/t6112-rev-list-filters-objects.sh                |   1 -
>  t/t6113-rev-list-bitmap-filters.sh                 |   1 -
>  t/t6114-keep-packs.sh                              |   1 -
>  t/t6115-rev-list-du.sh                             |   1 -
>  t/t6120-describe.sh                                |   1 -
>  t/t6130-pathspec-noglob.sh                         |   1 -
>  t/t6131-pathspec-icase.sh                          |   1 -
>  t/t6132-pathspec-exclude.sh                        |   1 -
>  t/t6133-pathspec-rev-dwim.sh                       |   1 -
>  t/t6134-pathspec-in-submodule.sh                   |   1 -
>  t/t6135-pathspec-with-attrs.sh                     |   1 -
>  t/t6136-pathspec-in-bare.sh                        |   1 -
>  t/t6200-fmt-merge-msg.sh                           |   1 -
>  t/t6300-for-each-ref.sh                            |   1 -
>  t/t6301-for-each-ref-errors.sh                     |   1 -
>  t/t6302-for-each-ref-filter.sh                     |   1 -
>  t/t6400-merge-df.sh                                |   1 -
>  t/t6401-merge-criss-cross.sh                       |   1 -
>  t/t6402-merge-rename.sh                            |   1 -
>  t/t6403-merge-file.sh                              |   1 -
>  t/t6404-recursive-merge.sh                         |   1 -
>  t/t6405-merge-symlinks.sh                          |   1 -
>  t/t6406-merge-attr.sh                              |   1 -
>  t/t6407-merge-binary.sh                            |   1 -
>  t/t6408-merge-up-to-date.sh                        |   1 -
>  t/t6409-merge-subtree.sh                           |   1 -
>  t/t6411-merge-filemode.sh                          |   1 -
>  t/t6412-merge-large-rename.sh                      |   1 -
>  t/t6413-merge-crlf.sh                              |   1 -
>  t/t6414-merge-rename-nocruft.sh                    |   1 -
>  t/t6415-merge-dir-to-symlink.sh                    |   1 -
>  t/t6416-recursive-corner-cases.sh                  |   1 -
>  t/t6417-merge-ours-theirs.sh                       |   1 -
>  t/t6418-merge-text-auto.sh                         |   1 -
>  t/t6421-merge-partial-clone.sh                     |   1 -
>  t/t6422-merge-rename-corner-cases.sh               |   1 -
>  t/t6423-merge-rename-directories.sh                |   1 -
>  t/t6424-merge-unrelated-index-changes.sh           |   1 -
>  t/t6425-merge-rename-delete.sh                     |   1 -
>  t/t6426-merge-skip-unneeded-updates.sh             |   1 -
>  t/t6427-diff3-conflict-markers.sh                  |   1 -
>  t/t6428-merge-conflicts-sparse.sh                  |   1 -
>  t/t6429-merge-sequence-rename-caching.sh           |   1 -
>  t/t6430-merge-recursive.sh                         |   1 -
>  t/t6431-merge-criscross.sh                         |   1 -
>  t/t6432-merge-recursive-space-options.sh           |   1 -
>  t/t6433-merge-toplevel.sh                          |   1 -
>  t/t6434-merge-recursive-rename-options.sh          |   1 -
>  t/t6435-merge-sparse.sh                            |   1 -
>  t/t6436-merge-overwrite.sh                         |   1 -
>  t/t6437-submodule-merge.sh                         |   1 -
>  t/t6438-submodule-directory-file-conflicts.sh      |   1 -
>  t/t6439-merge-co-error-msgs.sh                     |   1 -
>  t/t6500-gc.sh                                      |   1 -
>  t/t6501-freshen-objects.sh                         |   1 -
>  t/t6600-test-reach.sh                              |   1 -
>  t/t6700-tree-depth.sh                              |   1 -
>  t/t7001-mv.sh                                      |   1 -
>  t/t7002-mv-sparse-checkout.sh                      |   1 -
>  t/t7003-filter-branch.sh                           |   1 -
>  t/t7004-tag.sh                                     |   1 -
>  t/t7005-editor.sh                                  |   1 -
>  t/t7006-pager.sh                                   |   1 -
>  t/t7007-show.sh                                    |   1 -
>  t/t7008-filter-branch-null-sha1.sh                 |   1 -
>  t/t7010-setup.sh                                   |   1 -
>  t/t7011-skip-worktree-reading.sh                   |   1 -
>  t/t7012-skip-worktree-writing.sh                   |   1 -
>  t/t7030-verify-tag.sh                              |   1 -
>  t/t7031-verify-tag-signed-ssh.sh                   |   1 -
>  t/t7060-wtstatus.sh                                |   1 -
>  t/t7061-wtstatus-ignore.sh                         |   1 -
>  t/t7062-wtstatus-ignorecase.sh                     |   1 -
>  t/t7063-status-untracked-cache.sh                  |   1 -
>  t/t7064-wtstatus-pv2.sh                            |   1 -
>  t/t7101-reset-empty-subdirs.sh                     |   1 -
>  t/t7102-reset.sh                                   |   1 -
>  t/t7103-reset-bare.sh                              |   1 -
>  t/t7104-reset-hard.sh                              |   1 -
>  t/t7105-reset-patch.sh                             |   1 -
>  t/t7106-reset-unborn-branch.sh                     |   1 -
>  t/t7107-reset-pathspec-file.sh                     |   1 -
>  t/t7110-reset-merge.sh                             |   1 -
>  t/t7111-reset-table.sh                             |   1 -
>  t/t7112-reset-submodule.sh                         |   1 -
>  t/t7113-post-index-change-hook.sh                  |   1 -
>  t/t7201-co.sh                                      |   1 -
>  t/t7300-clean.sh                                   |   1 -
>  t/t7301-clean-interactive.sh                       |   1 -
>  t/t7400-submodule-basic.sh                         |   1 -
>  t/t7401-submodule-summary.sh                       |   1 -
>  t/t7402-submodule-rebase.sh                        |   1 -
>  t/t7403-submodule-sync.sh                          |   1 -
>  t/t7406-submodule-update.sh                        |   1 -
>  t/t7407-submodule-foreach.sh                       |   1 -
>  t/t7408-submodule-reference.sh                     |   1 -
>  t/t7409-submodule-detached-work-tree.sh            |   1 -
>  t/t7411-submodule-config.sh                        |   1 -
>  t/t7412-submodule-absorbgitdirs.sh                 |   1 -
>  t/t7413-submodule-is-active.sh                     |   1 -
>  t/t7414-submodule-mistakes.sh                      |   1 -
>  t/t7416-submodule-dash-url.sh                      |   1 -
>  t/t7417-submodule-path-url.sh                      |   1 -
>  t/t7418-submodule-sparse-gitmodules.sh             |   1 -
>  t/t7419-submodule-set-branch.sh                    |   1 -
>  t/t7420-submodule-set-url.sh                       |   1 -
>  t/t7421-submodule-summary-add.sh                   |   1 -
>  t/t7422-submodule-output.sh                        |   1 -
>  t/t7423-submodule-symlinks.sh                      |   1 -
>  t/t7424-submodule-mixed-ref-formats.sh             |   1 -
>  t/t7450-bad-git-dotfiles.sh                        |   1 -
>  t/t7500-commit-template-squash-signoff.sh          |   1 -
>  t/t7501-commit-basic-functionality.sh              |   1 -
>  t/t7502-commit-porcelain.sh                        |   1 -
>  t/t7503-pre-commit-and-pre-merge-commit-hooks.sh   |   1 -
>  t/t7504-commit-msg-hook.sh                         |   1 -
>  t/t7505-prepare-commit-msg-hook.sh                 |   1 -
>  t/t7506-status-submodule.sh                        |   1 -
>  t/t7507-commit-verbose.sh                          |   1 -
>  t/t7508-status.sh                                  |   1 -
>  t/t7509-commit-authorship.sh                       |   1 -
>  t/t7510-signed-commit.sh                           |   1 -
>  t/t7511-status-index.sh                            |   1 -
>  t/t7512-status-help.sh                             |   1 -
>  t/t7513-interpret-trailers.sh                      |   1 -
>  t/t7514-commit-patch.sh                            |   1 -
>  t/t7515-status-symlinks.sh                         |   1 -
>  t/t7516-commit-races.sh                            |   1 -
>  t/t7517-per-repo-email.sh                          |   1 -
>  t/t7518-ident-corner-cases.sh                      |   1 -
>  t/t7519-status-fsmonitor.sh                        |   1 -
>  t/t7520-ignored-hook-warning.sh                    |   1 -
>  t/t7521-ignored-mode.sh                            |   1 -
>  t/t7524-commit-summary.sh                          |   1 -
>  t/t7525-status-rename.sh                           |   1 -
>  t/t7526-commit-pathspec-file.sh                    |   1 -
>  t/t7528-signed-commit-ssh.sh                       |   1 -
>  t/t7600-merge.sh                                   |   1 -
>  t/t7601-merge-pull-config.sh                       |   1 -
>  t/t7602-merge-octopus-many.sh                      |   1 -
>  t/t7603-merge-reduce-heads.sh                      |   1 -
>  t/t7604-merge-custom-message.sh                    |   1 -
>  t/t7605-merge-resolve.sh                           |   1 -
>  t/t7606-merge-custom.sh                            |   1 -
>  t/t7607-merge-state.sh                             |   1 -
>  t/t7608-merge-messages.sh                          |   1 -
>  t/t7609-mergetool--lib.sh                          |   1 -
>  t/t7610-mergetool.sh                               |   1 -
>  t/t7611-merge-abort.sh                             |   1 -
>  t/t7612-merge-verify-signatures.sh                 |   1 -
>  t/t7614-merge-signoff.sh                           |   1 -
>  t/t7615-diff-algo-with-mergy-operations.sh         |   1 -
>  t/t7700-repack.sh                                  |   1 -
>  t/t7701-repack-unpack-unreachable.sh               |   1 -
>  t/t7702-repack-cyclic-alternate.sh                 |   1 -
>  t/t7703-repack-geometric.sh                        |   1 -
>  t/t7704-repack-cruft.sh                            |   1 -
>  t/t7800-difftool.sh                                |   1 -
>  t/t7810-grep.sh                                    |   1 -
>  t/t7811-grep-open.sh                               |   1 -
>  t/t7812-grep-icase-non-ascii.sh                    |   1 -
>  t/t7813-grep-icase-iso.sh                          |   1 -
>  t/t7814-grep-recurse-submodules.sh                 |   1 -
>  t/t7815-grep-binary.sh                             |   1 -
>  t/t7816-grep-binary-pattern.sh                     |   1 -
>  t/t7817-grep-sparse-checkout.sh                    |   1 -
>  t/t7900-maintenance.sh                             |   1 -
>  t/t8001-annotate.sh                                |   1 -
>  t/t8002-blame.sh                                   |   1 -
>  t/t8003-blame-corner-cases.sh                      |   1 -
>  t/t8004-blame-with-conflicts.sh                    |   1 -
>  t/t8005-blame-i18n.sh                              |   1 +
>  t/t8006-blame-textconv.sh                          |   1 -
>  t/t8007-cat-file-textconv.sh                       |   1 -
>  t/t8008-blame-formats.sh                           |   1 -
>  t/t8009-blame-vs-topicbranches.sh                  |   1 -
>  t/t8010-cat-file-filters.sh                        |   1 -
>  t/t8011-blame-split-file.sh                        |   1 -
>  t/t8012-blame-colors.sh                            |   1 -
>  t/t8013-blame-ignore-revs.sh                       |   1 -
>  t/t8014-blame-ignore-fuzzy.sh                      |   1 -
>  t/t9001-send-email.sh                              |   1 -
>  t/t9002-column.sh                                  |   1 -
>  t/t9003-help-autocorrect.sh                        |   1 -
>  t/t9200-git-cvsexportcommit.sh                     |   1 -
>  t/t9210-scalar.sh                                  |   1 -
>  t/t9211-scalar-clone.sh                            |   1 -
>  t/t9300-fast-import.sh                             |   1 -
>  t/t9301-fast-import-notes.sh                       |   1 -
>  t/t9302-fast-import-unpack-limit.sh                |   1 -
>  t/t9303-fast-import-compression.sh                 |   1 -
>  t/t9304-fast-import-marks.sh                       |   1 -
>  t/t9350-fast-export.sh                             |   1 -
>  t/t9351-fast-export-anonymize.sh                   |   1 -
>  t/t9400-git-cvsserver-server.sh                    |   1 -
>  t/t9401-git-cvsserver-crlf.sh                      |   1 -
>  t/t9402-git-cvsserver-refs.sh                      |   1 -
>  t/t9500-gitweb-standalone-no-errors.sh             |   1 -
>  t/t9501-gitweb-standalone-http-status.sh           |   1 -
>  t/t9502-gitweb-standalone-parse-output.sh          |   1 -
>  t/t9600-cvsimport.sh                               |   1 -
>  t/t9601-cvsimport-vendor-branch.sh                 |   1 -
>  t/t9602-cvsimport-branches-tags.sh                 |   1 -
>  t/t9603-cvsimport-patchsets.sh                     |   1 -
>  t/t9604-cvsimport-timestamps.sh                    |   1 -
>  t/t9700-perl-git.sh                                |   1 -
>  t/t9800-git-p4-basic.sh                            |   1 -
>  t/t9801-git-p4-branch.sh                           |   1 -
>  t/t9802-git-p4-filetype.sh                         |   1 -
>  t/t9803-git-p4-shell-metachars.sh                  |   1 -
>  t/t9804-git-p4-label.sh                            |   1 -
>  t/t9805-git-p4-skip-submit-edit.sh                 |   1 -
>  t/t9806-git-p4-options.sh                          |   1 -
>  t/t9808-git-p4-chdir.sh                            |   1 -
>  t/t9809-git-p4-client-view.sh                      |   1 -
>  t/t9810-git-p4-rcs.sh                              |   1 -
>  t/t9811-git-p4-label-import.sh                     |   1 -
>  t/t9812-git-p4-wildcards.sh                        |   1 -
>  t/t9813-git-p4-preserve-users.sh                   |   1 -
>  t/t9814-git-p4-rename.sh                           |   1 -
>  t/t9815-git-p4-submit-fail.sh                      |   1 -
>  t/t9816-git-p4-locked.sh                           |   1 -
>  t/t9817-git-p4-exclude.sh                          |   1 -
>  t/t9818-git-p4-block.sh                            |   1 -
>  t/t9819-git-p4-case-folding.sh                     |   1 -
>  t/t9820-git-p4-editor-handling.sh                  |   1 -
>  t/t9821-git-p4-path-variations.sh                  |   1 -
>  t/t9822-git-p4-path-encoding.sh                    |   1 -
>  t/t9823-git-p4-mock-lfs.sh                         |   1 -
>  t/t9825-git-p4-handle-utf16-without-bom.sh         |   1 -
>  t/t9826-git-p4-keep-empty-commits.sh               |   1 -
>  t/t9827-git-p4-change-filetype.sh                  |   1 -
>  t/t9828-git-p4-map-user.sh                         |   1 -
>  t/t9829-git-p4-jobs.sh                             |   1 -
>  t/t9830-git-p4-symlink-dir.sh                      |   1 -
>  t/t9831-git-p4-triggers.sh                         |   1 -
>  t/t9832-unshelve.sh                                |   1 -
>  t/t9833-errors.sh                                  |   1 -
>  t/t9834-git-p4-file-dir-bug.sh                     |   1 -
>  t/t9835-git-p4-metadata-encoding-python2.sh        |   1 -
>  t/t9836-git-p4-metadata-encoding-python3.sh        |   1 -
>  t/t9850-shell.sh                                   |   1 -
>  t/t9901-git-web--browse.sh                         |   1 -
>  t/t9902-completion.sh                              |   1 -
>  t/t9903-bash-prompt.sh                             |   1 -
>  t/test-lib.sh                                      |  72 +-----------
>  t/unit-tests/strvec.c                              |  65 +++++++++++
>  usage.c                                            |  15 ---
>  950 files changed, 366 insertions(+), 1249 deletions(-)
> 
> Range-diff versus v1:
> 
>  1:  09dbc39ffb =  1:  76daa9584b builtin/blame: fix leaking blame entries with `--incremental`
>  2:  15bbe539ea =  2:  6659f0d59b bisect: fix leaking good/bad terms when reading multipe times
>  3:  739e28c864 =  3:  5a9011e1ef bisect: fix leaking string in `handle_bad_merge_base()`
>  4:  fa91eb9dc6 =  4:  3afc0a7bfe bisect: fix leaking `current_bad_oid`
>  5:  4ca01afd9e =  5:  15577aaae6 bisect: fix multiple leaks in `bisect_next_all()`
>  6:  805b91ce20 =  6:  13ddfed4fc bisect: fix leaking commit list items in `check_merge_base()`
>  7:  0f183fb264 !  7:  0bc49ed3bb bisect: fix various cases where we leak commit list items
>     @@ bisect.c: static struct commit_list *skip_away(struct commit_list *list, int cou
>      +			else if (previous)
>      +				result = previous;
>      +			else
>     -+				result =  list;
>     ++				result = list;
>      +			break;
>       		}
>       		previous = cur;
>  8:  163c36c78e =  8:  addba1afce line-log: fix leak when rewriting commit parents
>  9:  c0bcfbd98b =  9:  6e501effad strvec: introduce new `strvec_splice()` function
> 10:  cf0ac084c5 = 10:  2271761621 git: refactor alias handling to use a `struct strvec`
> 11:  c4989aab86 = 11:  7bff5d167f git: refactor builtin handling to use a `struct strvec`
> 12:  483d2951cc = 12:  e93d461504 split-index: fix memory leak in `move_cache_to_base_index()`
> 13:  70b12d6347 = 13:  a0643da6f5 builtin/sparse-checkout: fix leaking sanitized patterns
> 14:  f57d967cd5 = 14:  881feffeb1 help: refactor to not use globals for reading config
> 15:  45aacddc8a <  -:  ---------- help: fix leaking `struct cmdnames`
>  -:  ---------- > 15:  f1bbb676f2 help: fix leaking `struct cmdnames`
> 16:  b61cc4da84 ! 16:  51c7ad993f help: fix leaking return value from `help_unknown_cmd()`
>     @@ help.c: static const char bad_interpreter_advice[] =
>       {
>       	struct help_unknown_cmd_config cfg = { 0 };
>       	int i, n, best_similarity = 0;
>     - 	struct cmdnames main_cmds = { 0 };
>     - 	struct cmdnames other_cmds = { 0 };
>     - 	struct cmdname_help *common_cmds;
>     --	const char *assumed = NULL;
>     -+	char *assumed = NULL;
>     - 
>     - 	read_early_config(the_repository, git_unknown_cmd_config, &cfg);
>     - 
>      @@ help.c: const char *help_unknown_cmd(const char *cmd)
>       			; /* still counting */
>       	}
>       	if (cfg.autocorrect && n == 1 && SIMILAR_ENOUGH(best_similarity)) {
>     --		assumed = main_cmds.names[0]->name;
>     +-		const char *assumed = main_cmds.names[0]->name;
>      -		main_cmds.names[0] = NULL;
>      -		cmdnames_release(&main_cmds);
>     -+		assumed = xstrdup(main_cmds.names[0]->name);
>     ++		char *assumed = xstrdup(main_cmds.names[0]->name);
>      +
>       		fprintf_ln(stderr,
>       			   _("WARNING: You called a Git command named '%s', "
>       			     "which does not exist."),
>     -@@ help.c: const char *help_unknown_cmd(const char *cmd)
>     - 			strbuf_release(&msg);
>     - 			if (!(starts_with(answer, "y") ||
>     - 			      starts_with(answer, "Y"))) {
>     --				assumed = NULL;
>     -+				FREE_AND_NULL(assumed);
>     - 				goto out;
>     - 			}
>     - 		} else {
>      
>       ## help.h ##
>      @@ help.h: void list_all_other_cmds(struct string_list *list);
> 17:  b38a39ef04 = 17:  38a25da315 builtin/help: fix leaks in `check_git_cmd()`
> 18:  cd5cde9acb ! 18:  462c9fc110 builtin/init-db: fix leaking directory paths
>     @@ builtin/init-db.c: int cmd_init_db(int argc,
>      -
>       	flags |= INIT_DB_EXIST_OK;
>      -	return init_db(git_dir, real_git_dir, template_dir, hash_algo,
>     -+	ret =  init_db(git_dir, real_git_dir, template_dir, hash_algo,
>     - 		       ref_storage_format, initial_branch,
>     - 		       init_shared_repository, flags);
>     +-		       ref_storage_format, initial_branch,
>     +-		       init_shared_repository, flags);
>     ++	ret = init_db(git_dir, real_git_dir, template_dir, hash_algo,
>     ++		      ref_storage_format, initial_branch,
>     ++		      init_shared_repository, flags);
>      +
>      +	free(template_dir_to_free);
>      +	free(real_git_dir_to_free);
> 19:  2c7b50461b = 19:  6eabeed343 builtin/branch: fix leaking sorting options
> 20:  6865dda344 = 20:  2a44bbfba3 t/helper: fix leaking commit graph in "read-graph" subcommand
>  -:  ---------- > 21:  fc8a96bac3 global: drop `UNLEAK()` annotation
> 21:  d7d8ece289 ! 22:  10e44976c2 git-compat-util: drop `UNLEAK()` annotation
>     @@ Metadata
>      Author: Patrick Steinhardt <[email-masked]>
>      
>       ## Commit message ##
>     -    git-compat-util: drop `UNLEAK()` annotation
>     +    git-compat-util: drop now-unused `UNLEAK()` macro
>      
>     -    There are two users of `UNLEAK()` left in our codebase:
>     -
>     -      - In "builtin/clone.c", annotating the `repo` variable. That leak has
>     -        already been fixed though as you can see in the context, where we do
>     -        know to free `repo_to_free`.
>     -
>     -      - In "builtin/diff.c", to unleak entries of the `blob[]` array. That
>     -        leak has also been fixed, because the entries we assign to that
>     -        array come from `rev.pending.objects`, and we do eventually release
>     -        `rev`.
>     -
>     -    This neatly demonstrates one of the issues with `UNLEAK()`: it is quite
>     -    easy for the annotation to become stale. A second issue is that its
>     -    whole intent is to paper over leaks. And while that has been a necessary
>     -    evil in the past, because Git was leaking left and right, it isn't
>     -    really much of an issue nowadays where our test suite has no known leaks
>     +    The `UNLEAK()` macro has been introduced with 0e5bba53af (add UNLEAK
>     +    annotation for reducing leak false positives, 2017-09-08) to help us
>     +    reduce the amount of reported memory leaks in cases we don't care about,
>     +    e.g. when exiting immediately afterwards. We have since removed all of
>     +    its users in favor of freeing the memory and thus don't need the macro
>          anymore.
>      
>     -    Remove the last two users and drop the now-unused `UNLEAK()` annotation.
>     +    Remove it.
>      
>          Signed-off-by: Patrick Steinhardt <[email-masked]>
>      
>     - ## builtin/clone.c ##
>     -@@ builtin/clone.c: int cmd_clone(int argc,
>     - 	free(dir);
>     - 	free(path);
>     - 	free(repo_to_free);
>     --	UNLEAK(repo);
>     - 	junk_mode = JUNK_LEAVE_ALL;
>     - 
>     - 	transport_ls_refs_options_release(&transport_ls_refs_options);
>     -
>     - ## builtin/diff.c ##
>     -@@ builtin/diff.c: int cmd_diff(int argc,
>     - 	release_revisions(&rev);
>     - 	object_array_clear(&ent);
>     - 	symdiff_release(&sdiff);
>     --	UNLEAK(blob);
>     - 	return result;
>     - }
>     -
>       ## git-compat-util.h ##
>      @@ git-compat-util.h: int cmd_main(int, const char **);
>       int common_exit(const char *file, int line, int code);
> 22:  d52ca35b05 = 23:  218132b7d5 t5601: work around leak sanitizer issue
> 23:  44b48929fb = 24:  832c87a045 t: mark some tests as leak free
> 24:  b1fdbe04be = 25:  5fc1319241 t: remove unneeded !SANITIZE_LEAK prerequisites
> 25:  2b752b71c6 = 26:  06a1e8b27c test-lib: unconditionally enable leak checking
> 26:  53bc5f7d75 = 27:  19428158c8 t: remove TEST_PASSES_SANITIZE_LEAK annotations

This iteration addresses all of my comments.

Thanks again for working on this.  And congratulations, it's not even
the end of the year and memory leak checks are opt-out.

> 
> ---
> base-commit: b0c643d6a710e2b092902a3941655176b358bfd0
> change-id: 20241111-b4-pks-leak-fixes-pt10-a6fa657f4fac
>