diff mbox

[00/26] Memory leak fixes (pt.10, final)

Message ID cover.1730901926.git.ps@pks.im (mailing list archive)
State New
Headers show

Commit Message

Patrick Steinhardt Nov. 6, 2024, 3:10 p.m. UTC
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 21 remove the last remaining `UNLEAK()` annotations
    and ultimately remove the macro itself.

  - Patch 22 works around a bug in the leak sanitizer itself.

  - Patches 23 and 24 drop annotations where leak-free tests pass with
    the leak sanitizer.

  - Patches 25 and 26 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.

This series is built on top of 8f8d6eee53 (The seventh batch,
2024-11-01) with ps/leakfixes-part-9 at c810549be1
(list-objects-filter-options: work around reported leak on error,
2024-11-05) merged into it.

The series has some trivial conflicts with the removed test annotations
when merging with `seen`. There are two topics in-flight that introduce
new memory leaks (ds/path-walk and cc/promisor-remote-capability), both
of which are fixed by the below patch. I've sent a message in response
to the individual commits that introduce the leaks.

Thanks!

Patrick


Patrick Steinhardt (26):
  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
  git-compat-util: drop `UNLEAK()` annotation
  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                             |  30 +++--
 builtin/sparse-checkout.c                     |  61 +++++----
 ci/lib.sh                                     |   1 -
 git-compat-util.h                             |  20 ---
 git.c                                         | 124 +++++++++---------
 help.c                                        |  76 ++++++-----
 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 -
 ...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 -
 ...3-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, 376 insertions(+), 1253 deletions(-)

Comments

Rubén Justo Nov. 10, 2024, 9:48 p.m. UTC | #1
On Wed, Nov 06, 2024 at 04:10:14PM +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 21 remove the last remaining `UNLEAK()` annotations
>     and ultimately remove the macro itself.
> 
>   - Patch 22 works around a bug in the leak sanitizer itself.
> 
>   - Patches 23 and 24 drop annotations where leak-free tests pass with
>     the leak sanitizer.
> 
>   - Patches 25 and 26 unconditionally enable leak checking in all newly
>     added tests and then drop the `TEST_PASSES_SANITIZE_LEAK`
>     annotation.

Hi Patrick.

Thanks for working on this.

It's been a while since 956d2e4639 (tests: add a test mode for SANITIZE=leak,
run it in CI, 2021-09-23).  This series marks certainly another milestone.

I have left a few comments, none of them important.  The series looks
good to me.  Just in case you re-roll, while reading the series I
spotted some nits:

diff --git a/bisect.c b/bisect.c
index 518be70aa3..0e804086cb 100644
--- a/bisect.c
+++ b/bisect.c
@@ -641,7 +641,7 @@ static struct commit_list *skip_away(struct commit_list *list, int count)
                        else if (previous)
                                result = previous;
                        else
-                               result =  list;
+                               result = list;
                        break;
                }
                previous = cur;
diff --git a/builtin/init-db.c b/builtin/init-db.c
index 9e069e2742..096f96b9c4 100644
--- a/builtin/init-db.c
+++ b/builtin/init-db.c
@@ -248,9 +248,9 @@ int cmd_init_db(int argc,
        }
 
        flags |= INIT_DB_EXIST_OK;
-       ret =  init_db(git_dir, real_git_dir, template_dir, hash_algo,
-                      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);


> 
> 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.
> 
> This series is built on top of 8f8d6eee53 (The seventh batch,
> 2024-11-01) with ps/leakfixes-part-9 at c810549be1
> (list-objects-filter-options: work around reported leak on error,
> 2024-11-05) merged into it.
> 
> The series has some trivial conflicts with the removed test annotations
> when merging with `seen`. There are two topics in-flight that introduce
> new memory leaks (ds/path-walk and cc/promisor-remote-capability), both
> of which are fixed by the below patch. I've sent a message in response
> to the individual commits that introduce the leaks.
> 
> Thanks!
> 
> Patrick
Patrick Steinhardt Nov. 11, 2024, 9:09 a.m. UTC | #2
On Sun, Nov 10, 2024 at 10:48:53PM +0100, Rubén Justo wrote:
> On Wed, Nov 06, 2024 at 04:10:14PM +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 21 remove the last remaining `UNLEAK()` annotations
> >     and ultimately remove the macro itself.
> > 
> >   - Patch 22 works around a bug in the leak sanitizer itself.
> > 
> >   - Patches 23 and 24 drop annotations where leak-free tests pass with
> >     the leak sanitizer.
> > 
> >   - Patches 25 and 26 unconditionally enable leak checking in all newly
> >     added tests and then drop the `TEST_PASSES_SANITIZE_LEAK`
> >     annotation.
> 
> Hi Patrick.
> 
> Thanks for working on this.
> 
> It's been a while since 956d2e4639 (tests: add a test mode for SANITIZE=leak,
> run it in CI, 2021-09-23).  This series marks certainly another milestone.
> 
> I have left a few comments, none of them important.  The series looks
> good to me.  Just in case you re-roll, while reading the series I
> spotted some nits:

Thanks for your review, I've addressed your comments and will send out
v2 soonish!

patrick
diff mbox

Patch

diff --git a/promisor-remote.c b/promisor-remote.c
index 06507b2ee1..0a4f7f1188 100644
--- a/promisor-remote.c
+++ b/promisor-remote.c
@@ -424,12 +424,12 @@  static void filter_promisor_remote(struct repository *repo,
 				   const char *info)
 {
 	struct strbuf **remotes;
-	char *accept_str;
+	const char *accept_str;
 	enum accept_promisor accept = ACCEPT_NONE;
 	struct strvec names = STRVEC_INIT;
 	struct strvec urls = STRVEC_INIT;
 
-	if (!git_config_get_string("promisor.acceptfromserver", &accept_str)) {
+	if (!git_config_get_string_tmp("promisor.acceptfromserver", &accept_str)) {
 		if (!accept_str || !*accept_str || !strcasecmp("None", accept_str))
 			accept = ACCEPT_NONE;
 		else if (!strcasecmp("KnownUrl", accept_str))
@@ -486,7 +486,6 @@  static void filter_promisor_remote(struct repository *repo,
 		free(decoded_url);
 	}
 
-	free(accept_str);
 	strvec_clear(&names);
 	strvec_clear(&urls);
 	strbuf_list_free(remotes);
diff --git a/t/helper/test-path-walk.c b/t/helper/test-path-walk.c
index 06b103d876..fa3bfe46b5 100644
--- a/t/helper/test-path-walk.c
+++ b/t/helper/test-path-walk.c
@@ -85,7 +85,6 @@  int cmd__path_walk(int argc, const char **argv)
 		OPT_END(),
 	};
 
-	initialize_repository(the_repository);
 	setup_git_directory();
 	revs.repo = the_repository;
 
@@ -110,5 +109,6 @@  int cmd__path_walk(int argc, const char **argv)
 	       "tags:%" PRIuMAX "\n",
 	       data.commit_nr, data.tree_nr, data.blob_nr, data.tag_nr);
 
+	release_revisions(&revs);
 	return res;
 }