{"thread":{"id":"58929","subject":"What's cooking in git.git (Dec 2022, #03; Sun, 11)","startedAt":"2022-12-11T05:19:53Z","lastAt":"2022-12-27T12:52:53Z","messageCount":11,"participants":["Junio C Hamano","Johannes Schindelin","Johannes Sixt","René Scharfe"],"isPatch":false,"patchVersion":null,"patchTotal":null},"messages":[{"id":"468864","messageId":"xmqqpmcqv7qh.fsf@gitster.g","threadId":"58929","inReplyTo":null,"subject":"What's cooking in git.git (Dec 2022, #03; Sun, 11)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2022-12-11T05:18:14Z","receivedAt":"2022-12-11T05:19:53Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Here are the topics that have been cooking in my tree.  Commits\nprefixed with '+' are in 'next' (being in 'next' is a sign that a\ntopic is stable enough to be used and are candidate to be in a future\nrelease).  Commits prefixed with '-' are only in 'seen', and aren't\nconsidered \"accepted\" at all.  A topic without enough support may be\ndiscarded after a long period of no activity.\n\nI wanted not to distract the developers with CI related changes\nduring the pre-release freeze, but ended up merging them to 'master'\nand also to 'maint', as deprecation and upgrade at GitHub does not\nwait for us at all.  It would be better to give us the same stable\nCI environment across four integration branches.  With l10n updates,\nwhat is at the tip of 'master' today would become the 2.39 final.\n\nCopies of the source code to Git live in many repositories, and the\nfollowing is a list of the ones I push into or their mirrors.  Some\nrepositories have only a subset of branches.\n\nWith maint, master, next, seen, todo:\n\n\tgit://git.kernel.org/pub/scm/git/git.git/\n\tgit://repo.or.cz/alt-git.git/\n\thttps://kernel.googlesource.com/pub/scm/git/git/\n\thttps://github.com/git/git/\n\thttps://gitlab.com/git-vcs/git/\n\nWith all the integration branches and topics broken out:\n\n\thttps://github.com/gitster/git/\n\nEven though the preformatted documentation in HTML and man format\nare not sources, they are published in these repositories for\nconvenience (replace \"htmldocs\" with \"manpages\" for the manual\npages):\n\n\tgit://git.kernel.org/pub/scm/git/git-htmldocs.git/\n\thttps://github.com/gitster/git-htmldocs.git/\n\nRelease tarballs are available at:\n\n\thttps://www.kernel.org/pub/software/scm/git/\n\n--------------------------------------------------\n[Graduated to 'master']\n\n* ab/ci-musl-bash-fix (2022-12-08) 1 commit\n  (merged to 'next' on 2022-12-08 at d8c01829b3)\n + CI: don't explicitly pick \"bash\" shell outside of Windows, fix regression\n\n CI fix.\n source: <patch-v2-1.1-c34fd06623a-20221207T120220Z-avarab@gmail.com>\n\n\n* ab/ci-retire-set-output (2022-12-08) 1 commit\n  (merged to 'next' on 2022-12-08 at 422475c2c6)\n + CI: migrate away from deprecated \"set-output\" syntax\n\n CI fix.\n source: <patch-v2-1.1-4e7db0db3be-20221207T014848Z-avarab@gmail.com>\n\n\n* ab/ci-use-macos-12 (2022-12-07) 1 commit\n  (merged to 'next' on 2022-12-08 at cdf78cca21)\n + CI: upgrade to macos-12, and pin OSX version\n\n CI fix.\n source: <patch-1.1-4c1dcc89e7a-20221206T195552Z-avarab@gmail.com>\n\n\n* js/ci-use-newer-up-down-artifact (2022-12-08) 1 commit\n  (merged to 'next' on 2022-12-08 at 27a4f05bc0)\n + ci: avoid using deprecated {up,down}load-artifacts Action\n\n CI fix.\n source: <c9e99b4f96fc4e513c62b1b028e45559f6410c57.1670423680.git.gitgitgadget@gmail.com>\n\n\n* od/ci-use-checkout-v3-when-applicable (2022-12-06) 1 commit\n  (merged to 'next' on 2022-12-05 at f8e139f01a)\n + ci(main): upgrade actions/checkout to v3\n\n Update GitHub CI to use actions/checkout@v3; use of the older\n checkout@v2 gets annoying deprecation notices.\n source: <pull.1354.v2.git.git.1670234474721.gitgitgadget@gmail.com>\n\n--------------------------------------------------\n[New Topics]\n\n* js/t0021-windows-pwd (2022-12-07) 1 commit\n  (merged to 'next' on 2022-12-08 at 63bc7701e8)\n + t0021: use Windows-friendly `pwd`\n\n Test fix.\n\n Will cook in 'next'.\n source: <b38b8fb5a85e10d6189d68b6633adf23fca7b65d.1670339267.git.gitgitgadget@gmail.com>\n\n\n* rs/t3920-crlf-eating-grep-fix (2022-12-07) 1 commit\n  (merged to 'next' on 2022-12-08 at 421b255ad1)\n + t3920: support CR-eating grep\n (this branch uses js/t3920-shell-and-or-fix.)\n\n Test fix.\n\n Will cook in 'next'.\n source: <cbe88abc-c1fb-cb50-6057-47ff27f7a12d@web.de>\n\n\n* es/t1509-root-fixes (2022-12-09) 3 commits\n - t1509: facilitate repeated script invocations\n - t1509: make \"setup\" test more robust\n - t1509: fix failing \"root work tree\" test due to owner-check\n\n source: <pull.1425.git.1668999621.gitgitgadget@gmail.com>\n\n--------------------------------------------------\n[Stalled]\n\n* pw/test-todo (2022-10-06) 3 commits\n . test_todo: allow [verbose] test as the command\n . test_todo: allow [!] grep as the command\n . tests: add test_todo() to mark known breakages\n\n RFC for test framework improvement.\n\n Needs review.\n source: <pull.1374.git.1665068476.gitgitgadget@gmail.com>\n\n\n* cw/submodule-status-in-parallel (2022-11-08) 6 commits\n - diff-lib: parallelize run_diff_files for submodules\n - diff-lib: refactor match_stat_with_submodule\n - submodule: move status parsing into function\n - submodule: strbuf variable rename\n - run-command: add duplicate_output_fn to run_processes_parallel_opts\n - Merge branch 'ab/run-hook-api-cleanup' into cw/submodule-status-in-parallel\n\n Allow the internal \"diff-files\" engine to run \"how has this\n submodule changed?\" in parallel to speed up \"git status\".\n\n Waiting for review.\n source: <20221020232532.1128326-1-calvinwan@google.com>\n\n\n* js/bisect-in-c (2022-08-30) 17 commits\n . bisect: no longer try to clean up left-over `.git/head-name` files\n . bisect: remove Cogito-related code\n . Turn `git bisect` into a full built-in\n . bisect: move even the command-line parsing to `bisect--helper`\n . bisect--helper: make `state` optional\n . bisect--helper: calling `bisect_state()` without an argument is a bug\n . bisect: avoid double-quoting when printing the failed command\n . bisect run: fix the error message\n . bisect: verify that a bogus option won't try to start a bisection\n . bisect--helper: migrate to OPT_SUBCOMMAND()\n . bisect--helper: make the order consistently `argc, argv`\n . bisect--helper: make `terms` an explicit singleton\n . bisect--helper: simplify exit code computation\n . bisect--helper: really retire `--bisect-autostart`\n . bisect--helper: really retire --bisect-next-check\n . bisect--helper: retire the --no-log option\n . Merge branch 'sg/parse-options-subcommand' into js/bisect-in-c\n\n Final bits of \"git bisect.sh\" have been rewritten in C.\n\n Temporarily ejected from 'seen'. Waiting for a response on how this\n topic interacts with 'dd/git-bisect-builtin'.\n cf. <xmqqv8pr8903.fsf@gitster.g>\n source: <pull.1132.v6.git.1661885419.gitgitgadget@gmail.com>\n\n\n* ed/fsmonitor-inotify (2022-11-25) 6 commits\n - fsmonitor: update doc for Linux\n - fsmonitor: test updates\n - fsmonitor: enable fsmonitor for Linux\n - fsmonitor: implement filesystem change listener for Linux\n - fsmonitor: determine if filesystem is local or remote\n - fsmonitor: prepare to share code between Mac OS and Linux\n\n Bundled fsmonitor for Linux using inotify API.\n\n Needs review on the updated round.\n source: <pull.1352.v4.git.git.1669230044.gitgitgadget@gmail.com>\n\n\n* ag/merge-strategies-in-c (2022-08-10) 14 commits\n . sequencer: use the \"octopus\" strategy without forking\n . sequencer: use the \"resolve\" strategy without forking\n . merge: use the \"octopus\" strategy without forking\n . merge: use the \"resolve\" strategy without forking\n . merge-octopus: rewrite in C\n . merge-recursive: move better_branch_name() to merge.c\n . merge-resolve: rewrite in C\n . merge-one-file: rewrite in C\n . update-index: move add_cacheinfo() to read-cache.c\n . merge-index: add a new way to invoke `git-merge-one-file'\n . merge-index: drop the index\n . merge-index: libify merge_one_path() and merge_all()\n . t6060: add tests for removed files\n . t6060: modify multiple files to expose a possible issue with merge-index\n\n An attempt to rewrite remaining merge strategies from shell to C.\n\n Needs more work.\n At the minimum, we should lose 11/14 and possibly 08/14.\n cf. <xmqq7d36vfur.fsf@gitster.g>\n source: <20220809185429.20098-1-alban.gruin@gmail.com>\n\n\n* es/doc-creation-factor-fix (2022-07-28) 2 commits\n . range-diff: clarify --creation-factor=<factor>\n . format-patch: clarify --creation-factor=<factor>\n\n Expecting a reroll by somebody more familiar with the logic\n cf. <xmqqo7wfix7p.fsf@gitster.g>\n source: <7229p500-p2r4-on87-6802-8o90s36rr3s4@tzk.qr>\n\n\n* cw/remote-object-info (2022-08-13) 7 commits\n . SQUASH???\n . cat-file: add remote-object-info to batch-command\n . transport: add client support for object-info\n . serve: advertise object-info feature\n . protocol-caps: initialization bug fix\n . fetch-pack: move fetch initialization\n . fetch-pack: refactor packet writing\n\n A client component to talk with the object-info endpoint.\n\n Expecting a reroll.\n Under SANITIZE=address, t1006-cat-file.sh finds a breakage.\n cf. <20220728230210.2952731-1-calvinwan@google.com>\n cf. <CAFySSZDvgwbbHCHfyuaqX3tKsr-GjJ9iihygg6rNNe46Ys7_EA@mail.gmail.com>\n source: <20220728230210.2952731-1-calvinwan@google.com>\n\n--------------------------------------------------\n[Cooking]\n\n* ab/t4023-avoid-losing-exit-status-of-diff (2022-12-05) 1 commit\n  (merged to 'next' on 2022-12-05 at 2f47548cad)\n + t4023: fix ignored exit codes of git\n\n Test fix.\n\n Will cook in 'next'.\n source: <patch-v2-3.8-c5feef1c808-20221202T000227Z-avarab@gmail.com>\n\n\n* jh/t7527-unflake-by-forcing-cookie (2022-12-02) 1 commit\n  (merged to 'next' on 2022-12-05 at da8e250c87)\n + fsmonitor: fix race seen in t7527\n\n Make fsmonitor more robust to avoid the flakiness seen in t7527.\n\n Will cook in 'next'.\n source: <pull.1437.git.1669937534944.gitgitgadget@gmail.com>\n\n\n* rs/plug-pattern-list-leak-in-lof (2022-12-02) 1 commit\n  (merged to 'next' on 2022-12-05 at e2c11342b1)\n + list-objects-filter: plug pattern_list leak\n\n Leak fix.\n\n Will cook in 'next'.\n source: <b4361c3e-852b-e30c-f240-86c34bc9c474@web.de>\n\n\n* rs/t4205-do-not-exit-in-test-script (2022-12-02) 1 commit\n  (merged to 'next' on 2022-12-05 at 9db30340b3)\n + t4205: don't exit test script on failure\n\n Test fix.\n\n Will cook in 'next'.\n source: <c5b4d091-23c1-5a75-a255-99ec83973d8d@web.de>\n\n\n* ab/t5314-avoid-losing-exit-status (2022-12-02) 1 commit\n  (merged to 'next' on 2022-12-05 at ff99a5672f)\n + t5314: check exit code of \"git\"\n\n Test fix.\n\n Will cook in 'next'.\n source: <patch-v2-1.1-ca77a7249e6-20221128T141818Z-avarab@gmail.com>\n\n\n* ab/t7600-avoid-losing-exit-status-of-git (2022-12-05) 1 commit\n  (merged to 'next' on 2022-12-05 at 7105bccb5e)\n + t7600: don't ignore \"rev-parse\" exit code in helper\n\n Test fix.\n\n Will cook in 'next'.\n source: <patch-v3-1.8-64dfec31fb3-20221202T114733Z-avarab@gmail.com>\n\n\n* jh/fsmonitor-darwin-modernize (2022-12-05) 1 commit\n  (merged to 'next' on 2022-12-05 at 335bcafa02)\n + fsmonitor: eliminate call to deprecated FSEventStream function\n\n Stop using deprecated macOS API in fsmonitor.\n\n Will cook in 'next'.\n source: <pull.1436.git.1669991072393.gitgitgadget@gmail.com>\n\n\n* js/t3920-shell-and-or-fix (2022-12-05) 1 commit\n  (merged to 'next' on 2022-12-05 at ea2b21208d)\n + t3920: don't ignore errors of more than one command with `|| true`\n (this branch is used by rs/t3920-crlf-eating-grep-fix.)\n\n Test fix.\n\n Will cook in 'next'.\n source: <febcfb0a-c410-fb71-cff9-92acfcb269e2@kdbg.org>\n\n\n* sx/pthread-error-check-fix (2022-12-05) 1 commit\n  (merged to 'next' on 2022-12-05 at 53ef195404)\n + maintenance: compare output of pthread functions for inequality with 0\n\n Correct pthread API usage.\n\n Will cook in 'next'.\n source: <pull.1389.git.git.1670000578395.gitgitgadget@gmail.com>\n\n\n* jk/avoid-redef-system-functions (2022-12-05) 3 commits\n  (merged to 'next' on 2022-12-05 at e6e44a4d66)\n + Merge branch 'jk/avoid-redef-system-functions-2.30' into jk/avoid-redef-system-functions\n  (merged to 'next' on 2022-12-01 at 7b6131f09f)\n + Merge branch 'jk/avoid-redef-system-functions-2.30'\n + Merge branch 'jk/avoid-redef-system-functions-2.30' into maint\n (this branch uses jk/avoid-redef-system-functions-2.30.)\n\n The jk/avoid-redef-system-functions-2.30 topic pre-merged for more\n recent codebase.\n\n Will cook in 'next'.\n\n\n* jk/avoid-redef-system-functions-2.30 (2022-12-05) 2 commits\n  (merged to 'next' on 2022-12-05 at 9a9b96be8d)\n + git-compat-util: undefine system names before redeclaring them\n  (merged to 'next' on 2022-12-01 at b52a884362)\n + git-compat-util: avoid redefining system function names\n (this branch is used by jk/avoid-redef-system-functions.)\n\n Redefining system functions for a few functions did not follow our\n usual \"implement git_foo() and #define foo(args) git_foo(args)\"\n pattern, which has broken build for some folks.\n\n Will cook in 'next'.\n source: <Y4fH4rhcSztHwKvK@coredump.intra.peff.net>\n\n\n* jt/avoid-lazy-fetch-commits (2022-12-10) 4 commits\n - commit: don't lazy-fetch commits\n - object-file: emit corruption errors when detected\n - object-file: refactor map_loose_object_1()\n - object-file: remove OBJECT_INFO_IGNORE_LOOSE\n\n Even in a repository with promissor remote, it is useless to\n attempt to lazily attempt fetching an object that is expected to be\n commit, because no \"filter\" mode omits commit objects.  Take\n advantage of this assumption to fail fast on errors.\n\n Will merge to 'next'?\n source: <cover.1670622176.git.jonathantanmy@google.com>\n\n\n* rs/diff-parseopts (2022-12-02) 3 commits\n  (merged to 'next' on 2022-12-05 at 7cf5090e50)\n + diff: remove parseopts member from struct diff_options\n + diff: use add_diff_options() in diff_opt_parse()\n + diff: factor out add_diff_options()\n\n The way the diff machinery prepares the options array for the\n parse_options API has been refactored to avoid resource leaks.\n\n Will cook in 'next'.\n source: <19325420-5630-87bb-0c2c-362151214b36@web.de>\n\n\n* sa/git-var-empty (2022-11-27) 2 commits\n  (merged to 'next' on 2022-12-01 at 3b81dcb382)\n + var: allow GIT_EDITOR to return null\n + var: do not print usage() with a correct invocation\n\n \"git var UNKNOWN_VARIABLE\" and \"git var VARIABLE\" with the variable\n given an empty value used to behave identically.  Now the latter\n just gives an empty output, while the former still gives an error\n message.\n\n Will cook in 'next'.\n source: <pull.1434.v3.git.1669472277.gitgitgadget@gmail.com>\n\n\n* jx/t1301-updates (2022-11-30) 3 commits\n - t1301: do not change $CWD in \"shared=all\" test case\n - t1301: use test_when_finished for cleanup\n - t1301: fix wrong template dir for git-init\n\n Test updates.\n source: <20221128130323.8914-1-worldhello.net@gmail.com>\n\n\n* km/send-email-with-v-reroll-count (2022-11-30) 2 commits\n - SQUASH???\n - send-email: relay '-v N' to format-patch\n\n \"git send-email -v 3\" used to be expanded to \"git send-email\n --validate 3\" when the user meant to pass them down to\n \"format-patch\", which has been corrected.\n\n Seems to break CI.\n source: <87edtp5uws.fsf@kyleam.com>\n\n\n* so/diff-merges-more (2022-11-30) 6 commits\n - SQUASH??? cocci fix\n - diff-merges: issue warning on lone '-m' option\n - diff-merges: support list of values for --diff-merges\n - diff-merges: implement log.diffMergesForce config\n - diff-merges: implement log.diffMerges-m-imply-p config\n - diff-merges: implement [no-]hide option and log.diffMergesHide config\n\n Assorted updates to \"--diff-merges=X\" option.\n\n Seems to break CI.\n Cocci complains about \"if (func_ptr != NULL)\"\n cf. https://github.com/git/git/actions/runs/3583592108/jobs/6029213624\n source: <20221127093721.31012-1-sorganov@gmail.com>\n\n\n* ab/config-multi-and-nonbool (2022-11-27) 9 commits\n - for-each-repo: with bad config, don't conflate <path> and <cmd>\n - config API: add \"string\" version of *_value_multi(), fix segfaults\n - config API users: test for *_get_value_multi() segfaults\n - for-each-repo: error on bad --config\n - config API: have *_multi() return an \"int\" and take a \"dest\"\n - versioncmp.c: refactor config reading next commit\n - config tests: add \"NULL\" tests for *_get_value_multi()\n - config tests: cover blind spots in git_die_config() tests\n - for-each-repo tests: test bad --config keys\n\n Assorted config API updates.\n\n Waiting for review.\n source: <cover-v3-0.9-00000000000-20221125T093158Z-avarab@gmail.com>\n\n\n* yn/git-jump-emacs (2022-11-27) 3 commits\n  (merged to 'next' on 2022-11-29 at d0960938a0)\n + git-jump: invoke emacs/emacsclient\n + git-jump: move valid-mode check earlier\n + git-jump: add an optional argument '--stdout'\n\n \"git jump\" (in contrib/) learned to present the \"quickfix list\" to\n its standard output (instead of letting it consumed by the editor\n it invokes), and learned to also drive emacs/emacsclient.\n\n Will cook in 'next'.\n source: <pull.1423.v8.git.1669511933.gitgitgadget@gmail.com>\n\n\n* sa/cat-file-mailmap--batch-check (2022-12-02) 2 commits\n - cat-file: add mailmap support to --batch-check option\n - cat-file: add mailmap support to -s option\n\n 'cat-file' gains mailmap support for its '--batch-check' and '-s'\n options.\n source: <20221201155504.320461-1-siddharthasthana31@gmail.com>\n\n\n* ab/tag-object-type-errors (2022-11-22) 5 commits\n - tag: don't emit potentially incorrect \"object is a X, not a Y\"\n - tag: don't misreport type of tagged objects in errors\n - object tests: add test for unexpected objects in tags\n - object-file.c: free the \"t.tag\" in check_tag()\n - Merge branch 'jk/parse-object-type-mismatch' into ab/tag-object-type-errors\n\n Hardening checks around mismatched object types when one of those\n objects is a tag.\n\n Needs review.\n source: <cover-0.4-00000000000-20221118T113442Z-avarab@gmail.com>\n\n\n* js/range-diff-mbox (2022-11-23) 1 commit\n - range-diff: support reading mbox files\n\n 'git range-diff' gained support for reading either side from an .mbox\n file instead of a revision range.\n\n Expecting review responses.\n source: <pull.1420.v3.git.1669108102092.gitgitgadget@gmail.com>\n\n\n* rj/branch-copy-and-rename (2022-11-17) 1 commit\n  (merged to 'next' on 2022-12-05 at 730340640b)\n + branch: force-copy a branch to itself via @{-1} is a no-op\n\n Fix a pair of bugs in 'git branch'.\n\n Will cook in 'next'.\n source: <f0b2d46c-2e9c-2630-2870-8ed550dd1606@gmail.com>\n\n\n* tl/ls-tree--pattern (2022-11-17) 6 commits\n - ls-tree: introduce '--pattern' option\n - ls-tree: introduce 'match_pattern()' function\n - ls-tree: improving cohension in the print code\n - ls-tree: optimize params of 'show_tree_common_default_long()'\n - t3104: remove shift code in 'test_ls_tree_format'\n - ls-tree: cleanup the redundant SPACE\n\n A synonym for \"ls-tree | grep <pattern>\", \"ls-tree\n --pattern=<pattern>\" was introduced.\n\n Waiting for review response, but leaning negative.\n Seems to break CI.\n test broken with SHA256 due to hardcoded hexadecimal constants\n cf. https://github.com/git/git/actions/runs/3581947576/jobs/6025603775#step:4:1846\n source: <20221117113023.65865-1-tenglong.tl@alibaba-inc.com>\n\n\n* tr/am--no-verify (2022-12-01) 2 commits\n - SQUASH???\n - am: allow passing --no-verify flag\n\n Conditionally skip the pre-applypatch and applypatch-msg hooks when\n applying patches with 'git am'.\n\n Expecting a (hopefully final) reroll.\n source: <20221130172833.2662751-1-thierry.reding@gmail.com>\n\n\n* ew/format-patch-mboxrd (2022-11-14) 1 commit\n - format-patch: add --mboxrd alias for --pretty=mboxrd\n\n Teach `format-patch` a convenient alias for `--pretty=mboxrd`.\n\n Waiting for discussion to settle.\n source: <20221114094114.18986-1-e@80x24.org>\n\n\n* js/drop-mingw-test-cmp (2022-11-14) 2 commits\n - tests(mingw): avoid very slow `mingw_test_cmp`\n - t0021: use Windows-friendly `pwd`\n\n Use `git diff --no-index` as a test_cmp on Windows.\n\n Waiting for review response.\n source: <pull.1309.v4.git.1668434812.gitgitgadget@gmail.com>\n\n\n* mc/switch-advice (2022-11-09) 1 commit\n - po: use `switch` over `checkout` in error message\n\n Use 'switch' instead of 'checkout' in an error message.\n\n Waiting for review response.\n source: <pull.1308.git.git.1668018620148.gitgitgadget@gmail.com>\n\n\n* rs/multi-filter-args (2022-11-30) 5 commits\n  (merged to 'next' on 2022-12-01 at 5848d16bb6)\n + list-objects-filter: remove OPT_PARSE_LIST_OBJECTS_FILTER_INIT()\n + pack-objects: simplify --filter handling\n + pack-objects: fix handling of multiple --filter options\n + t5317: demonstrate failure to handle multiple --filter options\n + t5317: stop losing return codes of git ls-files\n\n Fix a bug where `pack-objects` would not respect multiple `--filter`\n arguments when invoked directly.\n\n Will cook in 'next'.\n source: <c2d3e7a3-599f-dae5-8dde-dc969df39f02@web.de>\n\n\n* ab/various-leak-fixes (2022-11-21) 16 commits\n  (merged to 'next' on 2022-11-21 at eff484a27c)\n + built-ins: use free() not UNLEAK() if trivial, rm dead code\n + revert: fix parse_options_concat() leak\n + cherry-pick: free \"struct replay_opts\" members\n + rebase: don't leak on \"--abort\"\n + connected.c: free the \"struct packed_git\"\n + sequencer.c: fix \"opts->strategy\" leak in read_strategy_opts()\n + ls-files: fix a --with-tree memory leak\n + revision API: call graph_clear() in release_revisions()\n + unpack-file: fix ancient leak in create_temp_file()\n + built-ins & libs & helpers: add/move destructors, fix leaks\n + dir.c: free \"ident\" and \"exclude_per_dir\" in \"struct untracked_cache\"\n + read-cache.c: clear and free \"sparse_checkout_patterns\"\n + commit: discard partial cache before (re-)reading it\n + {reset,merge}: call discard_index() before returning\n + tests: mark tests as passing with SANITIZE=leak\n + Merge branch 'pw/rebase-no-reflog-action' into ab/various-leak-fixes\n\n Various leak fixes.\n\n Will cook in 'next'.\n source: <cover-v2-00.15-00000000000-20221108T172650Z-avarab@gmail.com>\n\n\n* aw/complete-case-insensitive (2022-11-30) 2 commits\n  (merged to 'next' on 2022-12-05 at 791f41df7c)\n + completion: add case-insensitive match of pseudorefs\n + completion: add optional ignore-case when matching refs\n\n Introduce a case insensitive mode to the Bash completion helpers.\n\n Will cook in 'next'.\n source: <pull.1374.v2.git.git.1668990419.gitgitgadget@gmail.com>\n\n\n* dd/git-bisect-builtin (2022-11-15) 13 commits\n  (merged to 'next' on 2022-11-15 at e16e754058)\n + bisect; remove unused \"git-bisect.sh\" and \".gitignore\" entry\n  (merged to 'next' on 2022-11-14 at fc304fb52f)\n + Turn `git bisect` into a full built-in\n + bisect--helper: log: allow arbitrary number of arguments\n + bisect--helper: handle states directly\n + bisect--helper: emit usage for \"git bisect\"\n + bisect test: test exit codes on bad usage\n + bisect--helper: identify as bisect when report error\n + bisect-run: verify_good: account for non-negative exit status\n + bisect run: keep some of the post-v2.30.0 output\n + bisect: fix output regressions in v2.30.0\n + bisect: refactor bisect_run() to match CodingGuidelines\n + bisect tests: test for v2.30.0 \"bisect run\" regressions\n + Merge branch 'dd/bisect-helper-subcommand' into dd/git-bisect-builtin\n\n `git bisect` becomes a builtin.\n\n Will cook in 'next'.\n source: <cover.1668097962.git.congdanhqx@gmail.com>\n\n\n* ds/packed-refs-v2 (2022-11-07) 30 commits\n - refs: skip hashing when writing packed-refs v2\n - p1401: create performance test for ref operations\n - ci: run GIT_TEST_PACKED_REFS_VERSION=2 in some builds\n - t*: skip packed-refs v2 over http tests\n - t3210: require packed-refs v1 for some tests\n - t5502: add PACKED_REFS_V1 prerequisite\n - t5312: allow packed-refs v2 format\n - t1409: test with packed-refs v2\n - packed-backend: create GIT_TEST_PACKED_REFS_VERSION\n - packed-refs: write prefix chunks\n - packed-refs: read optional prefix chunks\n - packed-refs: read file format v2\n - packed-refs: write file format version 2\n - packed-backend: create shell of v2 writes\n - config: add config values for packed-refs v2\n - packed-backend: create abstraction for writing refs\n - packed-backend: extract iterator/updates merge\n - packed-backend: extract add_write_error()\n - refs: extract packfile format to new file\n - chunk-format: parse trailing table of contents\n - chunk-format: allow trailing table of contents\n - chunk-format: store chunk offset during write\n - chunk-format: document trailing table of contents\n - chunk-format: number of chunks is optional\n - refs: allow loose files without packed-refs\n - repository: wire ref extensions to ref backends\n - config: fix multi-level bulleted list\n - extensions: add refFormat extension\n - read-cache: add index.computeHash config option\n - hashfile: allow skipping the hash function\n\n Waiting for review.\n Seems to break CI.\n linux-TEST-vars\n cf. https://github.com/git/git/actions/runs/3598165328\n source: <pull.1408.git.1667846164.gitgitgadget@gmail.com>\n\n\n* ja/worktree-orphan (2022-11-10) 2 commits\n - worktree add: add --orphan flag\n - worktree add: Include -B in usage docs\n\n 'git worktree add' learned how to create a worktree based on an\n orphaned branch with `--orphan`.\n\n Expecting another round?\n source: <20221110233137.10414-1-jacobabel@nullpo.dev>\n\n\n* tb/ci-concurrency (2022-11-08) 1 commit\n - ci: avoid unnecessary builds\n\n Avoid unnecessary builds in CI, with settings configured in\n ci-config.\n\n Waiting for review.\n source: <ff172f1de982f6f79b598e4ac6d5b2964ca4a098.1667931937.git.me@ttaylorr.com>\n\n\n* tl/notes--blankline (2022-11-09) 5 commits\n - notes.c: introduce \"--no-blank-line\" option\n - notes.c: provide tips when target and append note are both empty\n - notes.c: drop unreachable code in 'append_edit()'\n - notes.c: cleanup for \"designated init\" and \"char ptr init\"\n - notes.c: cleanup 'strbuf_grow' call in 'append_edit'\n\n 'git notes append' was taught '--[no-]blank-line' to conditionally\n add a LF between a new and existing note.\n\n Waiting for review.\n source: <cover.1667980450.git.dyroneteng@gmail.com>\n\n\n* ds/bundle-uri-4 (2022-12-06) 11 commits\n  (merged to 'next' on 2022-12-05 at 2fa7bc1763)\n + clone: unbundle the advertised bundles\n + bundle-uri: download bundles from an advertised list\n + bundle-uri: allow relative URLs in bundle lists\n + strbuf: introduce strbuf_strip_file_from_path()\n + bundle-uri: serve bundle.* keys from config\n + bundle-uri client: add helper for testing server\n + transport: rename got_remote_heads\n + bundle-uri client: add boolean transfer.bundleURI setting\n + clone: request the 'bundle-uri' command when available\n + t: create test harness for 'bundle-uri' command\n + protocol v2: add server-side \"bundle-uri\" skeleton\n\n Bundle URIs part 4.\n\n Will cook in 'next'.\n source: <pull.1400.v3.git.1670262639.gitgitgadget@gmail.com>\n\n\n* tl/pack-bitmap-absolute-paths (2022-11-29) 4 commits\n  (merged to 'next' on 2022-11-30 at cb5d17ee40)\n + pack-bitmap.c: trace bitmap ignore logs when midx-bitmap is found\n + pack-bitmap.c: break out of the bitmap loop early if not tracing\n  (merged to 'next' on 2022-11-14 at 34eb0ea05a)\n + pack-bitmap.c: avoid exposing absolute paths\n + pack-bitmap.c: remove unnecessary \"open_pack_index()\" calls\n\n The pack-bitmap machinery is taught to log the paths of redundant\n bitmap(s) to trace2 instead of stderr.\n\n Will cook in 'next'.\n source: <cover.1669644101.git.dyroneteng@gmail.com>\n\n\n* ab/make-bin-wrappers (2022-10-31) 4 commits\n . Makefile: simplify $(test_bindir_programs) rule by splitting it up\n . Makefile: rename \"test_bindir_programs\" variable, pre-declare\n . Makefile: define \"TEST_{PROGRAM,OBJS}\" variables earlier\n . Makefile: factor sed-powered '#!/bin/sh' munging into a variable\n\n Resolve issues with the bin-wrappers/% rules where \"make\n bin-wrappers/git\" would generate the script but not \"git\" itself.\n\n Waiting for review discussion to settle, but leaning negative.\n source: <cover-v3-0.4-00000000000-20221031T222249Z-avarab@gmail.com>\n\n\n* kz/merge-tree-merge-base (2022-11-25) 3 commits\n  (merged to 'next' on 2022-11-25 at 298ca8e2e8)\n + docs: fix description of the `--merge-base` option\n  (merged to 'next' on 2022-11-14 at 76d48ae21f)\n + merge-tree.c: allow specifying the merge-base when --stdin is passed\n + merge-tree.c: add --merge-base=<commit> option\n\n \"merge-tree\" learns a new `--merge-base` option.\n\n Will cook in 'next'.\n source: <pull.1397.v7.git.1668210314.gitgitgadget@gmail.com>\n source: <c21466d1db0e7f7fcd7308b61aa1e3cd4e3d67c4.1669261026.git.gitgitgadget@gmail.com>\n\n\n* po/pretty-hard-trunc (2022-11-13) 1 commit\n - pretty-formats: add hard truncation, without ellipsis, options\n\n Add a new pretty format which truncates without ellipsis.\n\n Waiting for review.\n source: <20221112143616.1429-1-philipoakley@iee.email>\n\n\n* rr/status-untracked-advice (2022-12-01) 1 commit\n  (merged to 'next' on 2022-12-05 at 68527013ef)\n + status: modernize git-status \"slow untracked files\" advice\n\n The advice message given by \"git status\" when it takes long time to\n enumerate untracked paths has been updated.\n\n Will cook in 'next'.\n source: <pull.1384.v9.git.1669769536707.gitgitgadget@gmail.com>\n\n\n* cc/filtered-repack (2022-11-23) 2 commits\n - repack: add --filter=<filter-spec> option\n - pack-objects: allow --filter without --stdout\n\n \"git repack\" learns to discard objects that ought to be retrievable\n again from the promissor remote.\n\n Needs review.\n Seems to break CI.\n cf. https://github.com/git/git/actions/runs/3560918726\n source: <20221122175150.366828-1-christian.couder@gmail.com>\n\n\n* mc/credential-helper-auth-headers (2022-11-02) 11 commits\n - t5556: add HTTP authentication tests\n - test-http-server: add simple authentication\n - test-http-server: pass Git requests to http-backend\n - test-http-server: add HTTP request parsing\n - test-http-server: add HTTP error response function\n - test-http-server: add stub HTTP server test helper\n - http: set specific auth scheme depending on credential\n - http: move proactive auth to first slot creation\n - http: store all request headers on active_request_slot\n - credential: add WWW-Authenticate header to cred requests\n - http: read HTTP WWW-Authenticate response headers\n\n Extending credential helper protocol.\n\n Needs review.\n Seems to break CI (cmake-ctest).\n cf. https://github.com/git/git/actions/runs/3598431374\n source: <pull.1352.v3.git.1667426969.gitgitgadget@gmail.com>\n\n--------------------------------------------------\n[Discarded]\n\n* gc/submodule-clone-update-with-branches (2022-10-30) 8 commits\n . clone, submodule update: create and check out branches\n . submodule--helper: remove update_data.suboid\n . submodule update: refactor update targets\n . submodule: return target of submodule symref\n . t5617: drop references to remote-tracking branches\n . submodule--helper clone: create named branch\n . repo-settings: add submodule_propagate_branches\n . clone: teach --detach option\n\n \"git clone --recurse-submodules\" and \"git submodule update\" learns\n to honor the \"propagete branches\" option.\n\n Will discard for now.\n cf. <xmqqedtl14xr.fsf@gitster.g>\n source: <pull.1321.v3.git.git.1666988096.gitgitgadget@gmail.com>\n\n\n* ab/remove--super-prefix (2022-11-21) 12 commits\n . fetch: rename \"--submodule-prefix\" to \"--super-prefix\"\n . read-tree: add \"--super-prefix\" option, eliminate global\n . submodule--helper: convert \"{update,clone}\" to their own \"--super-prefix\"\n . submodule--helper: convert \"status\" to its own \"--super-prefix\"\n . submodule--helper: convert \"sync\" to its own \"--super-prefix\"\n . submodule--helper: convert \"foreach\" to its own \"--super-prefix\"\n . submodule--helper: don't use global --super-prefix in \"absorbgitdirs\"\n . submodule.c & submodule--helper: pass along \"super_prefix\" param\n . read-tree + fetch tests: test failing \"--super-prefix\" interaction\n . Merge branch 'ab/submodule-no-abspath' into ab/remove--super-prefix\n  (merged to 'next' on 2022-11-18 at 34d0accc7b)\n + submodule--helper absorbgitdirs: no abspaths in \"Migrating git...\"\n . Merge branch 'ab/submodule-helper-prep-only' into ab/remove--super-prefix\n\n Remove the top-level `--super-prefix` option.\n Will discard.\n cf. the thread leading to <xmqqmt86stm3.fsf@gitster.g>\n source: <cover-v3-0.9-00000000000-20221119T122853Z-avarab@gmail.com>\n\n\n* ab/submodule-no-abspath (2022-11-23) 2 commits\n  (merged to 'next' on 2022-11-23 at 97b6096e7c)\n + submodule absorbgitdirs: use relative <from> and <to> paths\n  (merged to 'next' on 2022-11-18 at 34d0accc7b)\n + submodule--helper absorbgitdirs: no abspaths in \"Migrating git...\"\n\n Remove an absolute path in the \"Migrating git directory\" message.\n\n Revert out of 'next'.\n cf. the thread leading to <xmqqmt86stm3.fsf@gitster.g>\n source: <patch-1.1-34b54fdd9bb-20221109T020347Z-avarab@gmail.com>\n source: <patch-1.1-065be1da895-20221122T224306Z-avarab@gmail.com>\n\n\n* ab/cmake-nix-and-ci (2022-11-04) 14 commits\n  (merged to 'next' on 2022-11-08 at 6ef4e93b36)\n + CI: add a \"linux-cmake-test\" to run cmake & ctest on linux\n + cmake: copy over git-p4.py for t983[56] perforce test\n + cmake: only look for \"sh\" in \"C:/Program Files\" on Windows\n + cmake: increase test timeout on Windows only\n + cmake: support GIT_TEST_OPTS, abstract away WIN32 defaults\n + Makefile + cmake: use environment, not GIT-BUILD-DIR\n + test-lib.sh: support a \"GIT_TEST_BUILD_DIR\"\n + cmake: set \"USE_LIBPCRE2\" in \"GIT-BUILD-OPTIONS\" for test-lib.sh\n + cmake & test-lib.sh: add a $GIT_SOURCE_DIR variable\n + cmake: chmod +x the bin-wrappers/* & SCRIPT_{SH,PERL} & git-p4\n + cmake: don't copy chainlint.pl to build directory\n + cmake: update instructions for portable CMakeLists.txt\n + cmake: use \"-S\" and \"-B\" to specify source and build directories\n + cmake: don't invoke msgfmt with --statistics\n\n Fix assorted issues with CTest on *nix machines.\n\n Revert out of 'next'.\n cf. <xmqq5yeuspam.fsf@gitster.g>\n source: <cover-v4-00.14-00000000000-20221103T160255Z-avarab@gmail.com>\n\n\n* ms/sendemail-validate-headers (2022-11-11) 1 commit\n . Expose header information to git-send-email's sendemail-validate hook\n\n Expecting a reroll.\n Appears to break t9001 completely?\n source: <20221111194223.644845-2-michael.strawbridge@amd.com>\n\n\n* hl/archive-recursive (2022-10-19) 10 commits\n . fixup! archive: add tests for git archive --recurse-submodules\n . archive: add tests for git archive --recurse-submodules\n . archive: add --recurse-submodules to git-archive command\n . archive: remove global repository from archive_args\n . archive: pass repo objects to write_archive handlers\n . tree: add repository parameter to read_tree_fn_t\n . tree: handle submodule case for read_tree_at properly\n . tree: increase test coverage for tree.c\n . tree: update cases to use repo_ tree methods\n . tree: do not use the_repository for tree traversal methods.\n\n \"git archive\" has been taught \"--recurse-submodules\" option to\n create a tarball that includes contents from submodules.\n\n Expecting a reroll.\n Seems to break win+VS test(8).\n cf. https://github.com/git/git/actions/runs/3293333066 whose only\n difference from https://github.com/git/git/actions/runs/3293553109\n is the inclusion of this topic.\n source: <pull.1359.v3.git.git.1665973401.gitgitgadget@gmail.com>\n"},{"id":"468877","messageId":"o428pr88-sn2p-o715-52ns-1r6750762572@tzk.qr","threadId":"58929","inReplyTo":"xmqqpmcqv7qh.fsf@gitster.g","subject":"js/drop-mingw-test-cmp, was Re: What's cooking in git.git (Dec 2022, #03; Sun, 11)","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2022-12-12T07:50:02Z","receivedAt":"2022-12-12T07:50:15Z","isPatch":false,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi Junio,\n\nOn Sun, 11 Dec 2022, Junio C Hamano wrote:\n\n> * js/drop-mingw-test-cmp (2022-11-14) 2 commits\n>  - tests(mingw): avoid very slow `mingw_test_cmp`\n>  - t0021: use Windows-friendly `pwd`\n>\n>  Use `git diff --no-index` as a test_cmp on Windows.\n>\n>  Waiting for review response.\n>  source: <pull.1309.v4.git.1668434812.gitgitgadget@gmail.com>\n\nThere is a new iteration available here:\nhttps://lore.kernel.org/git/pull.1309.v5.git.1670339267.gitgitgadget@gmail.com/\n\nCiao,\nJohannes\n"},{"id":"468941","messageId":"xmqqa63ss3fl.fsf@gitster.g","threadId":"58929","inReplyTo":"o428pr88-sn2p-o715-52ns-1r6750762572@tzk.qr","subject":"Re: js/drop-mingw-test-cmp, was Re: What's cooking in git.git (Dec 2022, #03; Sun, 11)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2022-12-12T21:43:58Z","receivedAt":"2022-12-12T21:44:08Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:\n\n> There is a new iteration available here:\n> https://lore.kernel.org/git/pull.1309.v5.git.1670339267.gitgitgadget@gmail.com/\n\nThanks.\n\nIIRC the review comments hinted that MinGW specific test_cmp that\nequates CRLF and LF are no longer needed, so unlike the previous\n\"let's do 'git diff --no-index --ignore-cr-at-eol'\", the final\nversion can just use \"diff -u\" like everybody else, hopefully?  That\nwould be an ideal endgame.\n"},{"id":"469404","messageId":"c57ecd23-7ca7-2501-983f-6661c7872a01@gmx.de","threadId":"58929","inReplyTo":"xmqqa63ss3fl.fsf@gitster.g","subject":"Re: js/drop-mingw-test-cmp, was Re: What's cooking in git.git (Dec 2022, #03; Sun, 11)","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2022-12-20T22:59:32Z","receivedAt":"2022-12-20T22:59:45Z","isPatch":false,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi Junio,\n\nOn Tue, 13 Dec 2022, Junio C Hamano wrote:\n\n> Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:\n>\n> > There is a new iteration available here:\n> > https://lore.kernel.org/git/pull.1309.v5.git.1670339267.gitgitgadget@gmail.com/\n>\n> Thanks.\n>\n> IIRC the review comments hinted that MinGW specific test_cmp that\n> equates CRLF and LF are no longer needed,\n\nThat does not match my understanding. The MSYS2 tools we use in Git for\nWindows' SDK (and therefore, in the `win` jobs of our CI runs) are outside\nof our control, and have been known to change behavior with regards to\nline endings.\n\nIf we want to have a robust experience, we will need to continue that\n`test_cmp` practice that ignores line endings-only differences.\n\nCiao,\nJohannes\n"},{"id":"469435","messageId":"xmqq7cyksy88.fsf@gitster.g","threadId":"58929","inReplyTo":"c57ecd23-7ca7-2501-983f-6661c7872a01@gmx.de","subject":"Re: js/drop-mingw-test-cmp, was Re: What's cooking in git.git (Dec 2022, #03; Sun, 11)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2022-12-21T13:05:59Z","receivedAt":"2022-12-21T13:06:04Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:\n\n>> IIRC the review comments hinted that MinGW specific test_cmp that\n>> equates CRLF and LF are no longer needed,\n>\n> That does not match my understanding. The MSYS2 tools we use in Git for\n> Windows' SDK (and therefore, in the `win` jobs of our CI runs) are outside\n> of our control, and have been known to change behavior with regards to\n> line endings.\n\nWe may have been following two different threads, I suspect?\n\nThe behaviour of the platform tools may unexpectedly change without\nany good reason, and you may not be able to file a bug report when\nthat happens.  One way to allow our tests pass in such an\nenvironment is to make them sloppy to accomodate the potential\nvariation in their behaviour.  That is what the \"ignore line ending\"\ncomparison gives us.\n\nBut it means tests in MinGW environment would not notice if the\noutput _we_ produce from Git has unintentional changes, no?\nImagine we break the checkout codepath to write LF working tree\nfiles when we should write CRLF, or vice versa.  A lenient test_cmp\nunder discussion (whether the one in the current codebase, or the\none that the patch wants to update) would not care.\n\nI know we have been operating under such a test environment, but\nafter seeing the exchange between Réne and J6t, I was hoping that we\ndo not have to keep being sloppy.  After all, noticing unintended\nbehaviour changes in our code is the whole point of running tests.\n\nGetting rid of the \"ignore line ending\" comparison would mean that,\nwhile we would be able to catch _our_ bugs, we would also notice and\nhave to deal with unintended behaviour changes in MSYS2 tools.  But\nhow bad would it be?  I doubt that it would be like you update from\nupstream every other week, and every other such update flips the\nline endings---that would make you scramble, filing bug reports to\nMSYS2 and temporarily patching our tests to be sloppier, once every\nmonth, that may be a bit too often.\n"},{"id":"469507","messageId":"3c55ac67-5090-b7af-a212-2996bad66fb2@kdbg.org","threadId":"58929","inReplyTo":"xmqq7cyksy88.fsf@gitster.g","subject":"Re: js/drop-mingw-test-cmp, was Re: What's cooking in git.git (Dec 2022, #03; Sun, 11)","fromName":"Johannes Sixt","fromEmail":"j6t@kdbg.org","sentAt":"2022-12-24T08:10:08Z","receivedAt":"2022-12-24T08:10:18Z","isPatch":false,"sender":{"key":"j6t@kdbg.org","avatar":"https://avatars.githubusercontent.com/u/14810926?v=4"},"body":"Am 21.12.22 um 14:05 schrieb Junio C Hamano:\n> I know we have been operating under such a test environment, but\n> after seeing the exchange between Réne and J6t, I was hoping that we\n> do not have to keep being sloppy.\n\nThings did not turn out to be as simple. After ripping out all\nspecial-casing of GIT_TEST_CMP from a MinGW build, I notice at least one\ncase that needs special treatment (it's `tar tf` that writes CRLF\noutput). On top of that, there are prerequisites SED_STRIPS_CR,\nGREP_STRIPS_CR and perhaps NATIVE_CRLF that should be reconsidered.\n\nFor the time being, I suggest to take Dscho's patch.\n\n-- Hannes\n\n"},{"id":"469508","messageId":"2090204b-52e9-a22f-f0c9-f812d1231863@web.de","threadId":"58929","inReplyTo":"3c55ac67-5090-b7af-a212-2996bad66fb2@kdbg.org","subject":"Re: js/drop-mingw-test-cmp, was Re: What's cooking in git.git (Dec 2022, #03; Sun, 11)","fromName":"René Scharfe","fromEmail":"l.s.r@web.de","sentAt":"2022-12-24T13:31:55Z","receivedAt":"2022-12-24T13:32:11Z","isPatch":false,"sender":{"key":"l.s.r@web.de","avatar":"https://avatars.githubusercontent.com/u/26122331?v=4"},"body":"Am 24.12.22 um 09:10 schrieb Johannes Sixt:\n> Am 21.12.22 um 14:05 schrieb Junio C Hamano:\n>> I know we have been operating under such a test environment, but\n>> after seeing the exchange between Réne and J6t, I was hoping that we\n>> do not have to keep being sloppy.\n>\n> Things did not turn out to be as simple. After ripping out all\n> special-casing of GIT_TEST_CMP from a MinGW build, I notice at least one\n> case that needs special treatment (it's `tar tf` that writes CRLF\n> output).\n\nThat would affect t6132 and perhaps t9502, right?\n\nHow can I reproduce it?  I get only LF:\n\n   $ uname -rs\n   MINGW64_NT-10.0-22621 3.3.6-341.x86_64\n\n   $ git archive HEAD Makefile | tar tf - | hexdump.exe -C\n   00000000  4d 61 6b 65 66 69 6c 65  0a                       |Makefile.|\n   00000009\n\nIs there some configuration option that I need to set?\n\n> On top of that, there are prerequisites SED_STRIPS_CR,\n> GREP_STRIPS_CR and perhaps NATIVE_CRLF that should be reconsidered.\n\nAh, they are currently set based on the output of \"uname -s\".  Setting\nthem based on the actual behavior of the commands would allow the test\nsuite to automatically adapt to them being replaced by CR-preserving\nvariants.  With the current Git for Windows SDK the two prerequisites\nwould still be set, though, so tests would behave the same, right?\n\nNATIVE_CRLF seems intended to track the macro of the same name, so it\nprobably makes sense to mirror config.mak.uname, but a test helper (or\n\"git version --build-options\" line) that returns the actual value would\nprobably be more robust.\n\n> For the time being, I suggest to take Dscho's patch.\n\nThe patch is intended to make comparisons faster.  That works for big\nfiles, but the test suite compares small ones.   The total duration of\na test suite run is about one minute longer with the patch than without\nit for me [1].  I retried with 7c2ef319c5 (The first batch for 2.40,\n2022-12-19), and that's still the case.  Do you get different numbers?\n\nRené\n\n\n[1] https://lore.kernel.org/git/31d3bf6c-c0a2-d2d5-c6e2-b185fde99170@web.de/\n\n"},{"id":"469525","messageId":"xmqq3593o82g.fsf@gitster.g","threadId":"58929","inReplyTo":"2090204b-52e9-a22f-f0c9-f812d1231863@web.de","subject":"Re: js/drop-mingw-test-cmp, was Re: What's cooking in git.git (Dec 2022, #03; Sun, 11)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2022-12-25T14:45:59Z","receivedAt":"2022-12-25T14:46:06Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"René Scharfe <l.s.r@web.de> writes:\n\n>> Things did not turn out to be as simple. After ripping out all\n>> special-casing of GIT_TEST_CMP from a MinGW build, I notice at least one\n>> case that needs special treatment (it's `tar tf` that writes CRLF\n>> output).\n>\n> That would affect t6132 and perhaps t9502, right?\n>\n> How can I reproduce it?  I get only LF:\n> ...\n> NATIVE_CRLF seems intended to track the macro of the same name, so it\n> probably makes sense to mirror config.mak.uname, but a test helper (or\n> \"git version --build-options\" line) that returns the actual value would\n> probably be more robust.\n\nI take the above as an indication that it is not yet clear if we can\nuse the same GIT_TEST_CMP as others on MinGW.  And ...\n\n>> For the time being, I suggest to take Dscho's patch.\n>\n> The patch is intended to make comparisons faster.  That works for big\n> files, but the test suite compares small ones.   The total duration of\n> a test suite run is about one minute longer with the patch than without\n> it for me [1].  I retried with 7c2ef319c5 (The first batch for 2.40,\n> 2022-12-19), and that's still the case.  Do you get different numbers?\n\n... this indeed is a valid concern.  With or without the patch,\nplatform tools on MinGW that are muddy about CRLF vs LF are taken\ncare of with the special cased GIT_TEST_CMP either way.\n\n\n"},{"id":"469526","messageId":"ef79236a-1c47-8775-3acb-aa23b7a300f9@kdbg.org","threadId":"58929","inReplyTo":"2090204b-52e9-a22f-f0c9-f812d1231863@web.de","subject":"Re: js/drop-mingw-test-cmp, was Re: What's cooking in git.git (Dec 2022, #03; Sun, 11)","fromName":"Johannes Sixt","fromEmail":"j6t@kdbg.org","sentAt":"2022-12-25T15:44:12Z","receivedAt":"2022-12-25T15:44:21Z","isPatch":false,"sender":{"key":"j6t@kdbg.org","avatar":"https://avatars.githubusercontent.com/u/14810926?v=4"},"body":"Am 24.12.22 um 14:31 schrieb René Scharfe:\n> Am 24.12.22 um 09:10 schrieb Johannes Sixt:\n>> Am 21.12.22 um 14:05 schrieb Junio C Hamano:\n>>> I know we have been operating under such a test environment, but\n>>> after seeing the exchange between Réne and J6t, I was hoping that we\n>>> do not have to keep being sloppy.\n>>\n>> Things did not turn out to be as simple. After ripping out all\n>> special-casing of GIT_TEST_CMP from a MinGW build, I notice at least one\n>> case that needs special treatment (it's `tar tf` that writes CRLF\n>> output).\n> \n> That would affect t6132 and perhaps t9502, right?\n> \n> How can I reproduce it?  I get only LF:\n> \n>    $ uname -rs\n>    MINGW64_NT-10.0-22621 3.3.6-341.x86_64\n> \n>    $ git archive HEAD Makefile | tar tf - | hexdump.exe -C\n>    00000000  4d 61 6b 65 66 69 6c 65  0a                       |Makefile.|\n>    00000009\n> \n> Is there some configuration option that I need to set?\n\nGood catch! Looks like I am wrong. In my environment I give the Windows\ntools precedence over the MinGW tools. There is a tar.exe in\nC:\\Windows\\System32 that writes CRLF (instead of just LF) that I was\nusing in my test runs.\n\n> NATIVE_CRLF seems intended to track the macro of the same name, so it\n> probably makes sense to mirror config.mak.uname, but a test helper (or\n> \"git version --build-options\" line) that returns the actual value would\n> probably be more robust.\n\nYes, indeed, NATIVE_CRLF has nothing to do with the CRLF vs LF behavior\nof the toolset. We can ignore it in this discussion. Sorry for bringing\nit to the table.\n\n>> For the time being, I suggest to take Dscho's patch.\n> \n> The patch is intended to make comparisons faster.  That works for big\n> files, but the test suite compares small ones.   The total duration of\n> a test suite run is about one minute longer with the patch than without\n> it for me [1].  I retried with 7c2ef319c5 (The first batch for 2.40,\n> 2022-12-19), and that's still the case.  Do you get different numbers?\n\nI'm not going to measure it (one full run takes ~2 hours). I trusted\nDscho's argument that this patch brings a much better improvement based\non the one case that is cited in the commit message, but if that was\njust an extraordinary outlier, I am not sure anymore...\n\n-- Hannes\n\n"},{"id":"469541","messageId":"2a5433ae-ec48-0c24-c18e-9a415d29e590@web.de","threadId":"58929","inReplyTo":"ef79236a-1c47-8775-3acb-aa23b7a300f9@kdbg.org","subject":"Re: js/drop-mingw-test-cmp, was Re: What's cooking in git.git (Dec 2022, #03; Sun, 11)","fromName":"René Scharfe","fromEmail":"l.s.r@web.de","sentAt":"2022-12-26T19:53:10Z","receivedAt":"2022-12-26T19:53:22Z","isPatch":false,"sender":{"key":"l.s.r@web.de","avatar":"https://avatars.githubusercontent.com/u/26122331?v=4"},"body":"Am 25.12.2022 um 16:44 schrieb Johannes Sixt:\n> Am 24.12.22 um 14:31 schrieb René Scharfe:\n>> Am 24.12.22 um 09:10 schrieb Johannes Sixt:\n>>> Am 21.12.22 um 14:05 schrieb Junio C Hamano:\n>>>> I know we have been operating under such a test environment, but\n>>>> after seeing the exchange between Réne and J6t, I was hoping that we\n>>>> do not have to keep being sloppy.\n>>>\n>>> Things did not turn out to be as simple. After ripping out all\n>>> special-casing of GIT_TEST_CMP from a MinGW build, I notice at least one\n>>> case that needs special treatment (it's `tar tf` that writes CRLF\n>>> output).\n>>\n>> That would affect t6132 and perhaps t9502, right?\n>>\n>> How can I reproduce it?  I get only LF:\n>>\n>>    $ uname -rs\n>>    MINGW64_NT-10.0-22621 3.3.6-341.x86_64\n>>\n>>    $ git archive HEAD Makefile | tar tf - | hexdump.exe -C\n>>    00000000  4d 61 6b 65 66 69 6c 65  0a                       |Makefile.|\n>>    00000009\n>>\n>> Is there some configuration option that I need to set?\n>\n> Good catch! Looks like I am wrong. In my environment I give the Windows\n> tools precedence over the MinGW tools. There is a tar.exe in\n> C:\\Windows\\System32 that writes CRLF (instead of just LF) that I was\n> using in my test runs.\n\nInteresting, I have that program as well:\n\n   $ git archive HEAD Makefile | /c/Windows/System32/tar.exe tf - | hexdump.exe -C\n   00000000  4d 61 6b 65 66 69 6c 65  0d 0a                    |Makefile..|\n   0000000a\n\n   $ /c/Windows/System32/tar.exe --version\n   bsdtar 3.5.2 - libarchive 3.5.2 zlib/1.2.5.f-ipp bz2lib/1.0.6\n\nAnd indeed on my system the SDK's variant is used:\n\n   $ which tar\n   /usr/bin/tar\n\nThere are a few more commands in System32 that could shadow the ones\nin the SDK:\n\n   $ for f in /c/Windows/system32/*.exe; do p=${f%.exe}; w=\"$(which ${p##*/} 2>/dev/null)\" && test \"$p\" != \"$w\" && echo \"$w\"; done\n   /usr/bin/bash\n   /usr/bin/cmd\n   /mingw64/bin/curl\n   /usr/bin/expand\n   /usr/bin/find\n   /usr/bin/klist\n   /usr/bin/notepad\n   /usr/bin/sort\n   /usr/bin/tar\n   /usr/bin/timeout\n   /usr/bin/whoami\n\nWindows' find and sort are quite different from GNU's.  That's handled\nin t/test-lib.sh by forcing the use of the variants from /usr/bin.\nShould we do the same for tar?\n\nNot sure about curl; /mingw64/bin/curl writes CRLFs as well.\n\nexpand.exe is very different from GNU's, but we only use it in\nt/t4135/make-patches, which is not executed during a test suite run.\n\n>>> For the time being, I suggest to take Dscho's patch.\n>>\n>> The patch is intended to make comparisons faster.  That works for big\n>> files, but the test suite compares small ones.   The total duration of\n>> a test suite run is about one minute longer with the patch than without\n>> it for me [1].  I retried with 7c2ef319c5 (The first batch for 2.40,\n>> 2022-12-19), and that's still the case.  Do you get different numbers?\n>\n> I'm not going to measure it (one full run takes ~2 hours). I trusted\n> Dscho's argument that this patch brings a much better improvement based\n> on the one case that is cited in the commit message, but if that was\n> just an extraordinary outlier, I am not sure anymore...\n\nPainful, I know.\n\nLogged the sizes of files handed to test_cmp (on macOS).  19170 calls,\nmedian size 42 bytes, average size 617 bytes.  2307 calls with empty\nfiles, 1093 of which in t1092 alone.  The two biggest files in t1050,\n2000000 and 2500000 bytes.  t9300 in third place with 180333, one\nmagnitude smaller.\n\nt1050 at 8a4e8f6a67 (The second batch, 2022-12-26) on Windows:\n\nBenchmark 1: sh.exe t1050-large.sh\n  Time (mean ± σ):     18.312 s ±  0.069 s    [User: 0.000 s, System: 0.003 s]\n  Range (min … max):   18.218 s … 18.422 s    10 runs\n\n... and with the patch:\n\nBenchmark 1: sh.exe t1050-large.sh\n  Time (mean ± σ):      5.709 s ±  0.046 s    [User: 0.000 s, System: 0.003 s]\n  Range (min … max):    5.647 s …  5.787 s    10 runs\n\nSo it works as advertised for big files, but calling an external\nprogram 19000 times takes time as well, which explain the longer\noverall test suite duration.\n\nIf we use test_cmp_bin for the two biggest comparisons we get the\nsame speedup:\n\nBenchmark 1: sh.exe t1050-large.sh\n  Time (mean ± σ):      5.719 s ±  0.089 s    [User: 0.000 s, System: 0.006 s]\n  Range (min … max):    5.659 s …  5.960 s    10 runs\n\nIs this safe?  The files consist of X's and Y's at the point of\ncomparison, so they aren't typical binary files, but they don't\nhave line endings at all or any user-readable content, so I think\ntreating them as blobs is appropriate.\n\n---\n t/t1050-large.sh | 4 ++--\n 1 file changed, 2 insertions(+), 2 deletions(-)\n\ndiff --git a/t/t1050-large.sh b/t/t1050-large.sh\nindex c71932b024..c184540855 100755\n--- a/t/t1050-large.sh\n+++ b/t/t1050-large.sh\n@@ -90,7 +90,7 @@ test_expect_success 'checkout a large file' '\n \tlarge1=$(git rev-parse :large1) &&\n \tgit update-index --add --cacheinfo 100644 $large1 another &&\n \tgit checkout another &&\n-\ttest_cmp large1 another\n+\ttest_cmp_bin large1 another\n '\n\n test_expect_success 'packsize limit' '\n@@ -192,7 +192,7 @@ test_expect_success 'pack-objects with large loose object' '\n \ttest_create_repo packed &&\n \tmv pack-* packed/.git/objects/pack &&\n \tGIT_DIR=packed/.git git cat-file blob $SHA1 >actual &&\n-\ttest_cmp huge actual\n+\ttest_cmp_bin huge actual\n '\n\n test_expect_success 'tar archiving' '\n--\n2.38.1.windows.1\n"},{"id":"469547","messageId":"xmqqilhxt3dt.fsf@gitster.g","threadId":"58929","inReplyTo":"2a5433ae-ec48-0c24-c18e-9a415d29e590@web.de","subject":"Re: js/drop-mingw-test-cmp, was Re: What's cooking in git.git (Dec 2022, #03; Sun, 11)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2022-12-27T12:52:46Z","receivedAt":"2022-12-27T12:52:53Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"René Scharfe <l.s.r@web.de> writes:\n\n> Logged the sizes of files handed to test_cmp (on macOS).  19170 calls,\n> median size 42 bytes, average size 617 bytes.  2307 calls with empty\n> files, 1093 of which in t1092 alone.  The two biggest files in t1050,\n> 2000000 and 2500000 bytes.  t9300 in third place with 180333, one\n> magnitude smaller.\n>\n> t1050 at 8a4e8f6a67 (The second batch, 2022-12-26) on Windows:\n>\n> Benchmark 1: sh.exe t1050-large.sh\n>   Time (mean ± σ):     18.312 s ±  0.069 s    [User: 0.000 s, System: 0.003 s]\n>   Range (min … max):   18.218 s … 18.422 s    10 runs\n>\n> ... and with the patch:\n>\n> Benchmark 1: sh.exe t1050-large.sh\n>   Time (mean ± σ):      5.709 s ±  0.046 s    [User: 0.000 s, System: 0.003 s]\n>   Range (min … max):    5.647 s …  5.787 s    10 runs\n>\n> So it works as advertised for big files, but calling an external\n> program 19000 times takes time as well, which explain the longer\n> overall test suite duration.\n>\n> If we use test_cmp_bin for the two biggest comparisons we get the\n> same speedup:\n>\n> Benchmark 1: sh.exe t1050-large.sh\n>   Time (mean ± σ):      5.719 s ±  0.089 s    [User: 0.000 s, System: 0.006 s]\n>   Range (min … max):    5.659 s …  5.960 s    10 runs\n>\n> Is this safe?  The files consist of X's and Y's at the point of\n> comparison, so they aren't typical binary files, but they don't\n> have line endings at all or any user-readable content, so I think\n> treating them as blobs is appropriate.\n\nNice analysis.\n\nIf we can use the platform \"diff -u\" (i.e. we somehow find that it\nis possible to stop ignoring crlf vs lf difference), then it should\ngive us similarly good performance for large files (but the cost to\nspawn the tool 19000 times would also be comparable), but we are not\nthere yet, I presume.\n"}]}