Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rebase to v2.48.0 #5361

Draft
wants to merge 411 commits into
base: main
Choose a base branch
from
Draft

Rebase to v2.48.0 #5361

wants to merge 411 commits into from

Conversation

dscho
Copy link
Member

@dscho dscho commented Jan 11, 2025

Range-diff relative to -rc2
  • 1: 8c8a207 = 1: bbc14d7 t9350: point out that refs are not updated correctly

  • 2: 25fb032 = 2: b5fe0f6 transport-helper: add trailing --

  • 3: dca2663 = 3: c74f47b remote-helper: check helper status after import/export

  • 6: f6f9f1c = 4: 6166ef7 gitk(Windows): avoid inadvertently calling executables in the worktree

  • 7: 47dc063 = 5: dd17fae Always auto-gc after calling a fast-import transport

  • 10: c0d09b9 = 6: a1108cf mingw: include the Python parts in the build

  • 11: d55d5e5 = 7: a60cef9 win32/pthread: avoid name clashes with winpthread

  • 12: 72f78bd = 8: 3eaa1ce git-compat-util: avoid redeclaring _DEFAULT_SOURCE

  • 13: f7e4509 = 9: 461207c Import the source code of mimalloc v2.1.2

  • 14: 0c0209d = 10: dfda515 mimalloc: adjust for building inside Git

  • 15: a27ec22 = 11: 1499dbd mimalloc: offer a build-time option to enable it

  • 4: b536507 = 12: ec0016c mingw: demonstrate a problem with certain absolute paths

  • 5: 90288be = 13: c2b8b3d clean: do not traverse mount points

  • 16: 2524a04 = 14: 080c851 mimalloc: use "weak" random seed when statically linked

  • 8: 2dcf725 = 15: e75cb3b mingw: allow absolute paths without drive prefix

  • 9: 00dad35 = 16: 64e8496 clean: remove mount points when possible

  • 17: b866815 = 17: 11ebfb3 mingw: use mimalloc

  • 18: 5dcfd01 = 18: 6b608e8 transport: optionally disable side-band-64k

  • 23: 0dd5d94 = 19: 0cb219f mingw: ensure valid CTYPE

  • 24: bf75da6 = 20: 0bc4c90 mingw: demonstrate a git add issue with NTFS junctions

  • 26: 07676d9 = 21: 345d8dd mingw: allow git.exe to be used instead of the "Git wrapper"

  • 27: 6c91598 = 22: 13709f0 strbuf_realpath(): use platform-dependent API if available

  • 29: fe6fb0e = 23: 3db90c3 mingw: ignore HOMEDRIVE/HOMEPATH if it points to Windows' system directory

  • 30: 058aad7 = 24: acc5a14 http: use new "best effort" strategy for Secure Channel revoke checking

  • 20: 6d49ea6 = 25: d7476fc mingw: do resolve symlinks in getcwd()

  • 21: 09d7dec = 26: 2b6f291 mingw: fix fatal error working on mapped network drives on Windows

  • 31: 6c2313d = 27: d919252 clink.pl: fix MSVC compile script to handle libcurl-d.lib

  • 32: 7231ff0 = 28: 132f431 mingw: implement a platform-specific strbuf_realpath()

  • 22: d2efb3e = 29: ccdb636 vcxproj: unclash project directories with build outputs

  • 25: 6a67ad3 = 30: c532ef3 t5505/t5516: allow running without .git/branches/ in the templates

  • 28: f79ee51 = 31: adfc048 t5505/t5516: fix white-space around redirectors

  • 33: 432f101 = 32: ca53503 t3701: verify that we can add lots of files interactively

  • 34: ebd57fe = 33: c3d5ebc git add -i: handle CR/LF line endings in the interactive input

  • 45: a17f9f8 = 34: 201c0e8 commit: accept "scissors" with CR/LF line endings

  • 46: 9874912 = 35: ae133a0 t0014: fix indentation

  • 47: 4a85fd1 = 36: ac73ea4 git-gui: accommodate for intent-to-add files

  • 35: 5cc86b2 = 37: 77283d0 clink.pl: fix libexpatd.lib link error when using MSVC

  • 36: 1430754 = 38: 4bff95d Makefile: clean up .ilk files when MSVC=1

  • 37: 5c8e388 = 39: db01c40 vcbuild: add support for compiling Windows resource files

  • 38: e18b12c = 40: 8f5ad65 config.mak.uname: add git.rc to MSVC builds

  • 39: b442bcd = 41: 3e47c79 clink.pl: ignore no-stack-protector arg on MSVC=1 builds

  • 40: bfd7b0f = 42: b59e4b9 clink.pl: move default linker options for MSVC=1 builds

  • 41: fbce80f = 43: 49cf4b6 buildsystems: remove duplicate clause

  • 48: 6612874 = 44: 81ee80b vcpkg_install: detect lack of Git

  • 42: 03f535e = 45: adb7867 vcxproj: handle resource files, too

  • 49: 75993b4 = 46: e3729ad vcpkg_install: add comment regarding slow network connections

  • 43: 5016af7 = 47: 69d15a3 vcxproj: ignore -fno-stack-protector and -fno-common

  • 50: e96a349 = 48: 79bb88c vcxproj: support building Windows/ARM64 binaries

  • 44: 6f462b5 = 49: f1b2fd6 vcxproj: handle GUI programs, too

  • 51: 0559b8f = 50: ff822c6 vcbuild: install ARM64 dependencies when building ARM64 binaries

  • 57: 5663ad4 = 51: f45352c cmake: install headless-git.

  • 52: 358ba6b = 52: 6e69568 vcbuild: add an option to install individual 'features'

  • 53: 7b33166 = 53: b3ab8b7 cmake: allow building for Windows/ARM64

  • 54: 15e901f = 54: d765597 ci(vs-build) also build Windows/ARM64 artifacts

  • 55: 040847f = 55: f8c6875 Add schannel to curl installation

  • 56: 1cd5f8b = 56: c80d4f9 cmake(): allow setting HOST_CPU for cross-compilation

  • 64: 95727ac = 57: 3aeb23b CMake: default Visual Studio generator has changed

  • 68: beea9e1 = 58: c20c6ee subtree: update contrib/subtree test target

  • 66: 127faab = 59: 1033d6f .gitignore: add Visual Studio CMakeSetting.json file

  • 58: 6704142 = 60: 1e95a2f mingw: allow for longer paths in parse_interpreter()

  • 59: 296b420 = 61: 48c6336 compat/vcbuild: document preferred way to build in Visual Studio

  • 60: 8a42909 = 62: 921f35c http: optionally send SSL client certificate

  • 71: 3e7da28 = 63: 1fcbe5c ci: run contrib/subtree tests in CI builds

  • 61: 10a5c81 = 64: 6183d2d hash-object: demonstrate a >4GB/LLP64 problem

  • 62: 3bef351 = 65: 23fe600 write_object_file_literally(): use size_t

  • 63: 2c008c5 = 66: c22d98b object-file.c: use size_t for header lengths

  • 65: c35308a = 67: 4f197bd hash algorithms: use size_t for section lengths

  • 67: 3d25b0e = 68: c4551e7 hash-object --stdin: verify that it works with >4GB/LLP64

  • 69: fafa720 = 69: 40431da CMakeLists: add default "x64-windows" arch for Visual Studio

  • 70: 11b2ac6 = 70: ce0d0a9 hash-object: add another >4GB/LLP64 test case

  • 82: 4cd9933 = 71: b045dfa setup: properly use "%(prefix)/" when in WSL

  • 72: 1bb4d11 = 72: 86670c8 CMake: show Win32 and Generator_platform build-option values

  • 73: fff28fc = 73: d13b2b6 init: do parse all core.* settings early

  • 74: 1a67a18 = 74: 1961e70 hash-object: add a >4GB/LLP64 test case using filtered input

  • 85: bffde5d = 75: 307bb05 compat/mingw.c: do not warn when failing to get owner

  • 75: 820a555 = 76: 7324a35 vcxproj: allow building with NO_PERL again

  • 76: 66d8ef5 = 77: 348fae0 vcxproj: require C11

  • 77: 5c867e7 = 78: 102e426 vcxproj: ignore the -pedantic option

  • 78: 777ec58 = 79: 32973aa vcxproj: include reftable when committing .vcxproj files

  • 79: 0aa5472 = 80: 60299ef vcxproj: handle libreftable_test, too

  • 80: af26bf7 = 81: a69adf6 vcxproj: avoid escaping double quotes in the defines

  • 81: 9331662 = 82: 331afd2 ci: adjust Azure Pipeline for runs_on_pool

  • 84: eddaab6 = 83: d4d7862 ci: stop linking the prove cache

  • 83: 0ff2c12 = 84: cadcb6d Add config option windows.appendAtomically

  • 89: 814d99a = 85: b4b814e ci: reinstate Azure Pipelines support

  • 86: e8fdcc3 = 86: c71eeba mingw: $env:TERM="xterm-256color" for newer OSes

  • 87: beb405d = 87: 404e0aa winansi: check result and Buffer before using Name

  • 88: 02c0dca = 88: 3f98d13 mingw: change core.fsyncObjectFiles = 1 by default

  • 90: 876eee2 = 89: ebc3f7b azure-pipeline: drop the GETTEXT_POISON job

  • 91: 136ed6b = 90: 3ec9280 azure-pipeline: stop hard-coding apt-get calls

  • 92: 3d2e22c = 91: 209f633 azure-pipeline: drop the code to write to/read from a file share

  • 93: 12b65ef = 92: ac9ce7c azure-pipeline: use partial clone/parallel checkout to initialize minimal-sdk

  • 94: e08e05b = 93: a671d41 azure-pipeline: downcase the job name of the Linux32 job

  • 95: e3fa52e = 94: 231a570 bswap.h: add support for built-in bswap functions

  • 96: 01e8056 = 95: a4cc607 MinGW: link as terminal server aware

  • 97: 7acf493 = 96: 7e22815 azure-pipeline: run static-analysis on jammy

  • 98: 7423fab = 97: 4c4a0d5 Fix Windows version resources

  • 99: 3a39c43 = 98: e80721d config.mak.uname: add support for clangarm64

  • 100: bd79a1d = 99: 12dfa68 status: fix for old-style submodules with commondir

  • 101: 222abf9 = 100: d9aa4c7 windows: skip linking git-<command> for built-ins

  • 102: 2f6d027 = 101: 58f6351 http: optionally load libcurl lazily

  • 103: 1440baa = 102: 6f3580c http: support lazy-loading libcurl also on Windows

  • 104: 09a6270 = 103: 5c064c2 http: when loading libcurl lazily, allow for multiple SSL backends

  • 105: 8631bd2 = 104: f3cd3ed windows: fix Repository>Explore Working Copy

  • 106: f89dc53 = 105: a8bd077 mingw: do load libcurl dynamically by default

  • 107: 48cc7ed = 106: 0959164 Add a GitHub workflow to verify that Git/Scalar work in Nano Server

  • 108: 5079c01 = 107: 171878e mingw: suggest windows.appendAtomically in more cases

  • 109: 526958a = 108: a3742f4 win32: use native ANSI sequence processing, if possible

  • 110: 8d4b504 = 109: 5264077 git.rc: include winuser.h

  • 113: 659c640 = 110: 4d9ebe3 ci: work around a problem with HTTP/2 vs libcurl v8.10.0

  • 114: 1de9cad = 111: ef1206c pack-objects: add --full-name-hash option

  • 115: ed17b4f = 112: a79d35a repack: test --full-name-hash option

  • 116: 0990abf = 113: 8da7363 pack-objects: add GIT_TEST_FULL_NAME_HASH

  • 117: acfc334 = 114: 9b1f343 git-repack: update usage to match docs

  • 111: 5a7a5ba = 115: dbd4e4a common-main.c: fflush stdout buffer upon exit

  • 112: 7c23b9e = 116: 7b12c55 t5601/t7406(mingw): do run tests with symlink support

  • 121: d433451 = 117: 43ad970 win32: ensure that localtime_r() is declared even in i686 builds

  • 122: c12070c = 118: fd55ede Fallback to AppData if XDG_CONFIG_HOME is unset

  • 123: 5e1a683 = 119: f08d175 run-command: be helpful with Git LFS fails on Windows 7

  • 118: 33f3064 = 120: fe91a8a p5313: add size comparison test

  • 119: 9fb1426 = 121: 9e9b294 test-tool: add helper for name-hash values

  • 120: 131c260 = 122: 36064b6 repack/pack-objects: mark --full-name-hash as experimental

  • 124: 74ce00b = 123: 98030c3 path-walk: introduce an object walk by path

  • 125: a2cf338 = 124: 4534fc6 t6601: add helper for testing path-walk API

  • 126: e34dc72 = 125: 048428a path-walk: allow consumer to specify object types

  • 127: 0e42bfa = 126: a3d393b path-walk: allow visiting tags

  • 128: 63fa634 = 127: e35f96d revision: create mark_trees_uninteresting_dense()

  • 129: e545bee = 128: ee8deef path-walk: add prune_all_uninteresting option

  • 130: d90b21c = 129: f997fc8 pack-objects: extract should_attempt_deltas()

  • 131: 159547f = 130: 7075c09 pack-objects: add --path-walk option

  • 132: fc70c9f = 131: 2d88d3f pack-objects: introduce GIT_TEST_PACK_PATH_WALK

  • 133: 34e991a = 132: 1d621e1 repack: add --path-walk option

  • 134: 557e23b = 133: 91c1e93 pack-objects: enable --path-walk via config

  • 135: b1d9661 = 134: 14f998c scalar: enable path-walk during push via config

  • 136: 7b59e6c = 135: 4bad79d pack-objects: refactor path-walk delta phase

  • 137: a7681ff = 136: 0603e43 pack-objects: thread the path-based compression

  • 138: 9ed9a44 = 137: 23ae924 path-walk API: avoid adding a root tree more than once

  • 140: 5de5395 = 138: 58eb7f1 backfill: add builtin boilerplate

  • 141: ec146ba = 139: ebd1692 backfill: basic functionality and tests

  • 142: dc94934 = 140: 6bbc831 backfill: add --batch-size= option

  • 143: 35b7e38 = 141: 4f329aa backfill: add --sparse option

  • 144: 2264e15 = 142: 5126f20 backfill: assume --sparse when sparse-checkout is enabled

  • 145: a86d017 = 143: d0bd4c0 backfill: mark it as experimental

  • 146: c6b7ce0 = 144: 2787935 survey: stub in new experimental 'git-survey' command

  • 147: 7d894d8 = 145: 81a04f4 survey: add command line opts to select references

  • 148: 0d8393e = 146: 3ee79f0 survey: start pretty printing data in table form

  • 149: db19259 = 147: 2f3acdf survey: add object count summary

  • 150: 4019c90 = 148: ea53fbb survey: summarize total sizes by object type

  • 151: 1edff6d = 149: e073a42 survey: show progress during object walk

  • 152: e65957e = 150: 2c1b163 survey: add ability to track prioritized lists

  • 153: fc9fb68 = 151: 64b2ec2 survey: add report of "largest" paths

  • 154: 5c03374 = 152: 59481d1 survey: add --top= option and config

  • 155: c1267cc = 153: 31789fd survey: clearly note the experimental nature in the output

  • 156: 084fec0 = 154: c847baa path-walk: improve path-walk speed with many tags

  • 19: 22ca7af = 155: 5c96513 mingw: make sure errno is set correctly when socket operations fail

  • 139: 1350d79 (upstream: d02c37c) < -: ------------ t-reftable-basics: stop assuming that malloc is not a constant

  • 271: af9a2b6 = 156: 78e72dc compat/mingw: handle WSA errors in strerror

  • 272: 0cf45c8 ! 157: fd6b18f compat/mingw: drop outdated comment

    @@ Metadata
      ## Commit message ##
         compat/mingw: drop outdated comment
     
    -    The part about keeping the original error number hasn't been accurate since
    -    commit c11f75c (mingw: make sure errno is set correctly when socket
    -    operations fail, 2019-11-25) and the part about strerror() not knowing
    -    about these errors is untrue since the previous commit.
    +    This comment has been true for the longest time; The combination of the
    +    two preceding commits made it incorrect, so let's drop that comment.
     
         Signed-off-by: Matthias Aßhauer <[email protected]>
         Signed-off-by: Johannes Schindelin <[email protected]>
  • 273: c4d7ea8 = 158: 5ae96a2 t0301: actually test credential-cache on Windows

  • 274: ef52c17 = 159: 09fe109 credential-cache: handle ECONNREFUSED gracefully

  • 157: 09c9eaf = 160: 8765262 Win32: make FILETIME conversion functions public

  • 158: 8a2cf44 = 161: afb6c97 Win32: dirent.c: Move opendir down

  • 159: 8bccc70 = 162: 5394912 mingw: make the dirent implementation pluggable

  • 160: d70dde0 = 163: 4d6c9ae Win32: make the lstat implementation pluggable

  • 161: 79b7550 = 164: 6d933f6 mingw: add infrastructure for read-only file system level caches

  • 162: 31d1d18 = 165: 4bd5d05 mingw: add a cache below mingw's lstat and dirent implementations

  • 163: fedce44 = 166: ac62ab4 fscache: load directories only once

  • 164: 101b990 = 167: 0b4d50d fscache: add key for GIT_TRACE_FSCACHE

  • 165: 537c684 = 168: 22e59f4 fscache: remember not-found directories

  • 166: 26e514b = 169: 6f5197b fscache: add a test for the dir-not-found optimization

  • 167: 4a0b366 = 170: 6b3627f add: use preload-index and fscache for performance

  • 168: de1f16b = 171: bd69cf7 dir.c: make add_excludes aware of fscache during status

  • 169: ccae4a7 = 172: 3de1d72 fscache: make fscache_enabled() public

  • 170: 675d8dc = 173: b8686d7 dir.c: regression fix for add_excludes with fscache

  • 171: 62a3d3c = 174: b2c8d16 fetch-pack.c: enable fscache for stats under .git/objects

  • 172: 71c8974 = 175: 2bdea05 checkout.c: enable fscache for checkout again

  • 173: 7ffa2ec = 176: ade2577 Enable the filesystem cache (fscache) in refresh_index().

  • 174: 0c81d79 = 177: 72e7282 fscache: use FindFirstFileExW to avoid retrieving the short name

  • 175: d27fb3c = 178: 24990f9 status: disable and free fscache at the end of the status command

  • 176: b0da78f = 179: 17b2ca1 fscache: add GIT_TEST_FSCACHE support

  • 177: c27092b = 180: 71c001b fscache: add fscache hit statistics

  • 178: 409d6ec = 181: 3d55d81 mem_pool: add GIT_TRACE_MEMPOOL support

  • 179: 0d603f9 = 182: b0d0b14 fscache: fscache takes an initial size

  • 180: 580ced9 = 183: d042571 fscache: update fscache to be thread specific instead of global

  • 181: 1ad0115 = 184: f5368b6 fscache: teach fscache to use mempool

  • 182: 8e76d16 = 185: 31d4005 fscache: make fscache_enable() thread safe

  • 184: fe8536e = 186: cf693a8 fscache: teach fscache to use NtQueryDirectoryFile

  • 186: f67147a = 187: e47cadc unpack-trees: enable fscache for sparse-checkout

  • 188: 8ee5310 = 188: 5fc6a7c fscache: remember the reparse tag for each entry

  • 190: 00da8ee = 189: 014d3fe fscache: implement an FSCache-aware is_mount_point()

  • 183: 8393a50 = 190: 7182f92 git-gui: provide question helper for retry fallback on Windows

  • 192: 36b6ed3 = 191: bc90e75 clean: make use of FSCache

  • 185: 6704d86 = 192: 25f46e3 git gui: set GIT_ASKPASS=git-gui--askpass if not set yet

  • 193: 908c5a1 = 193: 138f2a2 gitk: Unicode file name support

  • 187: 2bd9665 = 194: e1f73ec git-gui--askyesno: fix funny text wrapping

  • 194: 1a36bff = 195: 5c6b2a6 gitk: Use an external icon file on Windows

  • 189: 7117b15 = 196: b532ee6 git-gui--askyesno: allow overriding the window title

  • 195: 8999621 = 197: 4a5f1dc gitk: fix arrow keys in input fields with Tcl/Tk >= 8.6

  • 191: cd492f2 = 198: d033151 git-gui--askyesno (mingw): use Git for Windows' icon, if available

  • 196: cafd484 = 199: 17d1088 gitk: make the "list references" default window width wider

  • 197: 327543d = 200: 6adb8e4 pack-objects (mingw): demonstrate a segmentation fault with large deltas

  • 198: bfc3db8 = 201: 94378c1 mingw: support long paths

  • 199: 05674cc = 202: a5d11ab Win32: fix 'lstat("dir/")' with long paths

  • 200: 4ec7736 = 203: 3c4cd62 win32(long path support): leave drive-less absolute paths intact

  • 201: 884eda4 = 204: 072902e mingw: Support git_terminal_prompt with more terminals

  • 202: 448abe1 = 205: e79bbe4 compat/terminal.c: only use the Windows console if bash 'read -r' fails

  • 203: 7f91760 = 206: 0449fa6 mingw (git_terminal_prompt): do fall back to CONIN$/CONOUT$ method

  • 204: af1cd45 = 207: 37575e0 strbuf_readlink: don't call readlink twice if hint is the exact link size

  • 210: 5f4c415 = 208: 314d9aa compat/fsmonitor/fsm-*-win32: support long paths

  • 211: 4b2711a = 209: 2286800 clean: suggest using core.longPaths if paths are too long to remove

  • 205: dedb1ae = 210: 16ba97e strbuf_readlink: support link targets that exceed PATH_MAX

  • 206: 2e09e44 = 211: 3bbb298 lockfile.c: use is_dir_sep() instead of hardcoded '/' checks

  • 207: aadf124 = 212: 014c9ba Win32: don't call GetFileAttributes twice in mingw_lstat()

  • 208: de191d1 = 213: a5e362e Win32: implement stat() with symlink support

  • 209: af7734a = 214: 70e161c Win32: remove separate do_lstat() function

  • 212: 7a45cf7 = 215: 6a57f09 Win32: let mingw_lstat() error early upon problems with reparse points

  • 213: 6c99a15 = 216: d1a637d mingw: teach fscache and dirent about symlinks

  • 214: 41c5c14 = 217: b160896 Win32: lstat(): return adequate stat.st_size for symlinks

  • 215: 65b8430 = 218: 3b126ac Win32: factor out retry logic

  • 216: a67d839 = 219: 60b07ae Win32: change default of 'core.symlinks' to false

  • 217: 24160db = 220: eddaa17 Win32: add symlink-specific error codes

  • 218: d3df280 = 221: db44028 Win32: mingw_unlink: support symlinks to directories

  • 219: 87b35ec = 222: 9be895c Win32: mingw_rename: support renaming symlinks

  • 220: 4a58657 = 223: 0ee6c2c Win32: mingw_chdir: change to symlink-resolved directory

  • 221: 585b4bb = 224: 6fa7f53 Win32: implement readlink()

  • 222: 4236f8c = 225: 16c8396 mingw: lstat: compute correct size for symlinks

  • 223: 17bf729 = 226: 4bcc8a5 Win32: implement basic symlink() functionality (file symlinks only)

  • 224: f7ab0fb = 227: 0a04e07 Win32: symlink: add support for symlinks to directories

  • 225: 96891c3 = 228: e4a2ade mingw: try to create symlinks without elevated permissions

  • 226: 85d41e4 = 229: cffe5af mingw: emulate stat() a little more faithfully

  • 227: c80d141 = 230: 71f5ae4 mingw: special-case index entries for symlinks with buggy size

  • 228: 06376e6 = 231: 3b7f7fa mingw: introduce code to detect whether we're inside a Windows container

  • 229: eb17c48 = 232: 7cd902e mingw: when running in a Windows container, try to rename() harder

  • 230: f33e574 = 233: 11f08d4 mingw: move the file_attr_to_st_mode() function definition

  • 231: 167e81d = 234: f558a61 mingw: Windows Docker volumes are not symbolic links

  • 232: e13c7c6 = 235: 249fd8a Win32: symlink: move phantom symlink creation to a separate function

  • 234: ad1b7a4 = 236: 4d5a59a Introduce helper to create symlinks that knows about index_state

  • 235: 3199b1b = 237: 61e072f mingw: allow to specify the symlink type in .gitattributes

  • 236: faf1f46 = 238: b093fc0 Win32: symlink: add test for symlink attribute

  • 237: dfbdd01 = 239: 07d0a7a mingw: explicitly specify with which cmd to prefix the cmdline

  • 238: 0612f86 = 240: 132edae mingw: when path_lookup() failed, try BusyBox

  • 239: 3b9554e = 241: 95e3587 test-lib: avoid unnecessary Perl invocation

  • 240: f6719f8 = 242: bcec4b7 test-tool: learn to act as a drop-in replacement for iconv

  • 241: d7f4c1d = 243: cf2505f tests(mingw): if iconv is unavailable, use test-helper --iconv

  • 242: f03dc97 = 244: 6c4d258 gitattributes: mark .png files as binary

  • 233: 3e617a8 = 245: e333dec mingw: work around rename() failing on a read-only file

  • 243: 14fa4bf = 246: 7a8d524 tests: move test PNGs into t/lib-diff/

  • 244: 87dc864 = 247: dbd5f28 tests: only override sort & find if there are usable ones in /usr/bin/

  • 245: 3789353 = 248: 1064509 tests: use the correct path separator with BusyBox

  • 246: 6a6623b = 249: d442413 mingw: only use Bash-ism builtin pwd -W when available

  • 247: 7f70225 = 250: 14549d6 tests (mingw): remove Bash-specific pwd option

  • 248: 5503200 = 251: ace3077 test-lib: add BUSYBOX prerequisite

  • 249: 7ccc72d = 252: 332f414 t5003: use binary file from t/lib-diff/

  • 250: bf6204f = 253: 5099904 t5532: workaround for BusyBox on Windows

  • 251: 7c97cdd = 254: 680c136 t5605: special-case hardlink test for BusyBox-w32

  • 252: 25a13ab = 255: bb27736 t5813: allow for $PWD to be a Windows path

  • 253: 7e1cf71 = 256: ac2fe47 t9200: skip tests when $PWD contains a colon

  • 254: 77fb64f = 257: 9db019a mingw: add a Makefile target to copy test artifacts

  • 256: 0adaeae = 258: 1ecb133 mingw: kill child processes in a gentler way

  • 258: 3a711ce = 259: 4238ff7 mingw: do not call xutftowcs_path in mingw_mktemp

  • 255: 2e1f7ed = 260: c4cee35 mingw: optionally enable wsl compability file mode bits

  • 257: 64b0171 = 261: 0eaad07 mingw: really handle SIGINT

  • 260: de57309 = 262: e1a61a8 Partially un-revert "editor: save and reset terminal after calling EDITOR"

  • 264: 49453d0 = 263: 6071d7a Describe Git for Windows' architecture [no ci]

  • 265: 2890784 = 264: d94525a Modify the Code of Conduct for Git for Windows

  • 266: 2b556c9 = 265: 6e5660d CONTRIBUTING.md: add guide for first-time contributors

  • 267: b7c9a2b = 266: 07c3ffc README.md: Add a Windows-specific preamble

  • 268: 1f22ae1 = 267: 126f900 Add an issue template

  • 259: a0a9279 = 268: fc4f4cd Add a GitHub workflow to monitor component updates

  • 269: 5b004bc = 269: a1fc7cd Modify the GitHub Pull Request template (to reflect Git for Windows)

  • 261: db1e920 = 270: e4fe80e reset: reinstate support for the deprecated --stdin option

  • 262: c359f03 = 271: c3c769b fsmonitor: reintroduce core.useBuiltinFSMonitor

  • 263: 8732d41 = 272: b18e4dc dependabot: help keeping GitHub Actions versions up to date

  • 270: b6c04e4 = 273: ed5a452 SECURITY.md: document Git for Windows' policies

  • 275: 9b81fae (upstream: 1fbb8d7) < -: ------------ builtin/blame: fix out-of-bounds read with excessive --abbrev

  • 276: 049f0cf (upstream: 64f3ff3) < -: ------------ GIT-VERSION-GEN: allow it to be run in parallel

derrickstolee and others added 30 commits January 11, 2025 17:19
We add the ability to filter the object types in the path-walk API so
the callback function is called fewer times.

This adds the ability to ask for the commits in a list, as well. Future
changes will add the ability to visit annotated tags.

Signed-off-by: Derrick Stolee <[email protected]>
Add a new test-tool helper, name-hash, to output the value of the
name-hash algorithms for the input list of strings, one per line.

Since the name-hash values can be stored in the .bitmap files, it is
important that these hash functions do not change across Git versions.
Add a simple test to t5310-pack-bitmaps.sh to provide some testing of
the current values. Due to how these functions are implemented, it would
be difficult to change them without disturbing these values.

Create a performance test that uses test_size to demonstrate how
collisions occur for these hash algorithms. This test helps inform
someone as to the behavior of the name-hash algorithms for their repo
based on the paths at HEAD.

My copy of the Git repository shows modest statistics around the
collisions of the default name-hash algorithm:

Test                                              this tree
-----------------------------------------------------------------
5314.1: paths at head                                        4.5K
5314.2: number of distinct name-hashes                       4.1K
5314.3: number of distinct full-name-hashes                  4.5K
5314.4: maximum multiplicity of name-hashes                    13
5314.5: maximum multiplicity of fullname-hashes                 1

Here, the maximum collision multiplicity is 13, but around 10% of paths
have a collision with another path.

In a more interesting example, the microsoft/fluentui [1] repo had these
statistics at time of committing:

Test                                              this tree
-----------------------------------------------------------------
5314.1: paths at head                                       19.6K
5314.2: number of distinct name-hashes                       8.2K
5314.3: number of distinct full-name-hashes                 19.6K
5314.4: maximum multiplicity of name-hashes                   279
5314.5: maximum multiplicity of fullname-hashes                 1

[1] https://github.com/microsoft/fluentui

That demonstrates that of the nearly twenty thousand path names, they
are assigned around eight thousand distinct values. 279 paths are
assigned to a single value, leading the packing algorithm to sort
objects from those paths together, by size.

In this repository, no collisions occur for the full-name-hash
algorithm.

In a more extreme example, an internal monorepo had a much worse
collision rate:

Test                                              this tree
-----------------------------------------------------------------
5314.1: paths at head                                      221.6K
5314.2: number of distinct name-hashes                      72.0K
5314.3: number of distinct full-name-hashes                221.6K
5314.4: maximum multiplicity of name-hashes                 14.4K
5314.5: maximum multiplicity of fullname-hashes                 2

Even in this repository with many more paths at HEAD, the collision rate
was low and the maximum number of paths being grouped into a single
bucket by the full-path-name algorithm was two.

Signed-off-by: Derrick Stolee <[email protected]>
In anticipation of using the path-walk API to analyze tags or include
them in a pack-file, add the ability to walk the tags that were included
in the revision walk.

Signed-off-by: Derrick Stolee <[email protected]>
This option is still under discussion on the Git mailing list.

We still would like to have some real-world data, and the best way to
get it is to get a Git for Windows release into users' hands so that
they can test it.

Nevertheless, without the official blessing of the Git maintainer, this
optionis experimental, and we need to be clear about that.

Signed-off-by: Johannes Schindelin <[email protected]>
The sparse tree walk algorithm was created in d5d2e93 (revision:
implement sparse algorithm, 2019-01-16) and involves using the
mark_trees_uninteresting_sparse() method. This method takes a repository
and an oidset of tree IDs, some of which have the UNINTERESTING flag and
some of which do not.

Create a method that has an equivalent set of preconditions but uses a
"dense" walk (recursively visits all reachable trees, as long as they
have not previously been marked UNINTERESTING). This is an important
difference from mark_tree_uninteresting(), which short-circuits if the
given tree has the UNINTERESTING flag.

A use of this method will be added in a later change, with a condition
set whether the sparse or dense approach should be used.

Signed-off-by: Derrick Stolee <[email protected]>
This option causes the path-walk API to act like the sparse tree-walk
algorithm implemented by mark_trees_uninteresting_sparse() in
list-objects.c.

Starting from the commits marked as UNINTERESTING, their root trees and
all objects reachable from those trees are UNINTERSTING, at least as we
walk path-by-path. When we reach a path where all objects associated
with that path are marked UNINTERESTING, then do no continue walking the
children of that path.

We need to be careful to pass the UNINTERESTING flag in a deep way on
the UNINTERESTING objects before we start the path-walk, or else the
depth-first search for the path-walk API may accidentally report some
objects as interesting.

Signed-off-by: Derrick Stolee <[email protected]>
This will be helpful in a future change.

Signed-off-by: Derrick Stolee <[email protected]>
In order to more easily compute delta bases among objects that appear at the
exact same path, add a --path-walk option to 'git pack-objects'.

This option will use the path-walk API instead of the object walk given by
the revision machinery. Since objects will be provided in batches
representing a common path, those objects can be tested for delta bases
immediately instead of waiting for a sort of the full object list by
name-hash. This has multiple benefits, including avoiding collisions by
name-hash.

The objects marked as UNINTERESTING are included in these batches, so we
are guaranteeing some locality to find good delta bases.

After the individual passes are done on a per-path basis, the default
name-hash is used to find other opportunistic delta bases that did not
match exactly by the full path name.

RFC TODO: It is important to note that this option is inherently
incompatible with using a bitmap index. This walk probably also does not
work with other advanced features, such as delta islands.

Getting ahead of myself, this option compares well with --full-name-hash
when the packfile is large enough, but also performs at least as well as
the default in all cases that I've seen.

RFC TODO: this should probably be recording the batch locations to another
list so they could be processed in a second phase using threads.

RFC TODO: list some examples of how this outperforms previous pack-objects
strategies. (This is coming in later commits that include performance
test changes.)

Signed-off-by: Derrick Stolee <[email protected]>
There are many tests that validate whether 'git pack-objects' works as
expected. Instead of duplicating these tests, add a new test environment
variable, GIT_TEST_PACK_PATH_WALK, that implies --path-walk by default
when specified.

This was useful in testing the implementation of the --path-walk
implementation, especially in conjunction with test such as:

 - t0411-clone-from-partial.sh : One test fetches from a repo that does
   not have the boundary objects. This causes the path-based walk to
   fail. Disable the variable for this test.

 - t5306-pack-nobase.sh : Similar to t0411, one test fetches from a repo
   without a boundary object.

 - t5310-pack-bitmaps.sh : One test compares the case when packing with
   bitmaps to the case when packing without them. Since we disable the
   test variable when writing bitmaps, this causes a difference in the
   object list (the --path-walk option adds an extra object). Specify
   --no-path-walk in both processes for the comparison. Another test
   checks for a specific delta base, but when computing dynamically
   without using bitmaps, the base object it too small to be considered
   in the delta calculations so no base is used.

 - t5316-pack-delta-depth.sh : This script cares about certain delta
   choices and their chain lengths. The --path-walk option changes how
   these chains are selected, and thus changes the results of this test.

 - t5322-pack-objects-sparse.sh : This demonstrates the effectiveness of
   the --sparse option and how it combines with --path-walk.

 - t5332-multi-pack-reuse.sh : This test verifies that the preferred
   pack is used for delta reuse when possible. The --path-walk option is
   not currently aware of the preferred pack at all, so finds a
   different delta base.

 - t7406-submodule-update.sh : When using the variable, the --depth
   option collides with the --path-walk feature, resulting in a warning
   message. Disable the variable so this warning does not appear.

I want to call out one specific test change that is only temporary:

 - t5530-upload-pack-error.sh : One test cares specifically about an
   "unable to read" error message. Since the current implementation
   performs delta calculations within the path-walk API callback, a
   different "unable to get size" error message appears. When this
   is changed in a future refactoring, this test change can be reverted.

Signed-off-by: Derrick Stolee <[email protected]>
Since 'git pack-objects' supports a --path-walk option, allow passing it
through in 'git repack'. This presents interesting testing opportunities for
comparing the different repacking strategies against each other.

Add the --path-walk option to the performance tests in p5313.

For the microsoft/fluentui repo [1] checked out at a specific commit [2],
the results are very interesting:

Test                                           this tree
------------------------------------------------------------------
5313.2: thin pack                              0.40(0.47+0.04)
5313.3: thin pack size                                    1.2M
5313.4: thin pack with --full-name-hash        0.09(0.10+0.04)
5313.5: thin pack size with --full-name-hash             22.8K
5313.6: thin pack with --path-walk             0.08(0.06+0.02)
5313.7: thin pack size with --path-walk                  20.8K
5313.8: big pack                               2.16(8.43+0.23)
5313.9: big pack size                                    17.7M
5313.10: big pack with --full-name-hash        1.42(3.06+0.21)
5313.11: big pack size with --full-name-hash             18.0M
5313.12: big pack with --path-walk             2.21(8.39+0.24)
5313.13: big pack size with --path-walk                  17.8M
5313.14: repack                                98.05(662.37+2.64)
5313.15: repack size                                    449.1K
5313.16: repack with --full-name-hash          33.95(129.44+2.63)
5313.17: repack size with --full-name-hash              182.9K
5313.18: repack with --path-walk               106.21(121.58+0.82)
5313.19: repack size with --path-walk                   159.6K

[1] https://github.com/microsoft/fluentui
[2] e70848ebac1cd720875bccaa3026f4a9ed700e08

This repo suffers from having a lot of paths that collide in the name
hash, so examining them in groups by path leads to better deltas. Also,
in this case, the single-threaded implementation is competitive with the
full repack. This is saving time diffing files that have significant
differences from each other.

A similar, but private, repo has even more extremes in the thin packs:

Test                                           this tree
--------------------------------------------------------------
5313.2: thin pack                              2.39(2.91+0.10)
5313.3: thin pack size                                    4.5M
5313.4: thin pack with --full-name-hash        0.29(0.47+0.12)
5313.5: thin pack size with --full-name-hash             15.5K
5313.6: thin pack with --path-walk             0.35(0.31+0.04)
5313.7: thin pack size with --path-walk                  14.2K

Notice, however, that while the --full-name-hash version is working
quite well in these cases for the thin pack, it does poorly for some
other standard cases, such as this test on the Linux kernel repository:

Test                                           this tree
--------------------------------------------------------------
5313.2: thin pack                              0.01(0.00+0.00)
5313.3: thin pack size                                     310
5313.4: thin pack with --full-name-hash        0.00(0.00+0.00)
5313.5: thin pack size with --full-name-hash              1.4K
5313.6: thin pack with --path-walk             0.00(0.00+0.00)
5313.7: thin pack size with --path-walk                    310

Here, the --full-name-hash option does much worse than the default name
hash, but the path-walk option does exactly as well.

Signed-off-by: Derrick Stolee <[email protected]>
Users may want to enable the --path-walk option for 'git pack-objects' by
default, especially underneath commands like 'git push' or 'git repack'.

This should be limited to client repositories, since the --path-walk option
disables bitmap walks, so would be bad to include in Git servers when
serving fetches and clones. There is potential that it may be helpful to
consider when repacking the repository, to take advantage of improved deltas
across historical versions of the same files.

Much like how "pack.useSparse" was introduced and included in
"feature.experimental" before being enabled by default, use the repository
settings infrastructure to make the new "pack.usePathWalk" config enabled by
"feature.experimental" and "feature.manyFiles".

Signed-off-by: Derrick Stolee <[email protected]>
Repositories registered with Scalar are expected to be client-only
repositories that are rather large. This means that they are more likely to
be good candidates for using the --path-walk option when running 'git
pack-objects', especially under the hood of 'git push'. Enable this config
in Scalar repositories.

Signed-off-by: Derrick Stolee <[email protected]>
Previously, the --path-walk option to 'git pack-objects' would compute
deltas inline with the path-walk logic. This would make the progress
indicator look like it is taking a long time to enumerate objects, and
then very quickly computed deltas.

Instead of computing deltas on each region of objects organized by tree,
store a list of regions corresponding to these groups. These can later
be pulled from the list for delta compression before doing the "global"
delta search.

This presents a new progress indicator that can be used in tests to
verify that this stage is happening.

The current implementation is not integrated with threads, but could be
done in a future update.

Since we do not attempt to sort objects by size until after exploring
all trees, we can remove the previous change to t5530 due to a different
error message appearing first.

Signed-off-by: Derrick Stolee <[email protected]>
In anticipation of implementing 'git backfill', populate the necessary files
with the boilerplate of a new builtin.

RFC TODO: When preparing this for a full implementation, make sure it is
based on the newest standards introduced by [1].

[1] https://lore.kernel.org/git/[email protected]/T/#m606036ea2e75a6d6819d6b5c90e729643b0ff7f7
    [PATCH 1/3] builtin: add a repository parameter for builtin functions

Signed-off-by: Derrick Stolee <[email protected]>
The default behavior of 'git backfill' is to fetch all missing blobs that
are reachable from HEAD. Document and test this behavior.

The implementation is a very simple use of the path-walk API, initializing
the revision walk at HEAD to start the path-walk from all commits reachable
from HEAD. Ignore the object arrays that correspond to tree entries,
assuming that they are all present already.

Signed-off-by: Derrick Stolee <[email protected]>
Users may want to specify a minimum batch size for their needs. This is only
a minimum: the path-walk API provides a list of OIDs that correspond to the
same path, and thus it is optimal to allow delta compression across those
objects in a single server request.

We could consider limiting the request to have a maximum batch size in the
future.

Signed-off-by: Derrick Stolee <[email protected]>
One way to significantly reduce the cost of a Git clone and later fetches is
to use a blobless partial clone and combine that with a sparse-checkout that
reduces the paths that need to be populated in the working directory. Not
only does this reduce the cost of clones and fetches, the sparse-checkout
reduces the number of objects needed to download from a promisor remote.

However, history investigations can be expensie as computing blob diffs will
trigger promisor remote requests for one object at a time. This can be
avoided by downloading the blobs needed for the given sparse-checkout using
'git backfill' and its new '--sparse' mode, at a time that the user is
willing to pay that extra cost.

Note that this is distinctly different from the '--filter=sparse:<oid>'
option, as this assumes that the partial clone has all reachable trees and
we are using client-side logic to avoid downloading blobs outside of the
sparse-checkout cone. This avoids the server-side cost of walking trees
while also achieving a similar goal. It also downloads in batches based on
similar path names, presenting a resumable download if things are
interrupted.

This augments the path-walk API to have a possibly-NULL 'pl' member that may
point to a 'struct pattern_list'. This could be more general than the
sparse-checkout definition at HEAD, but 'git backfill --sparse' is currently
the only consumer.

Be sure to test this in both cone mode and not cone mode. Cone mode has the
benefit that the path-walk can skip certain paths once they would expand
beyond the sparse-checkout.

Signed-off-by: Derrick Stolee <[email protected]>
Start work on a new 'git survey' command to scan the repository
for monorepo performance and scaling problems.  The goal is to
measure the various known "dimensions of scale" and serve as a
foundation for adding additional measurements as we learn more
about Git monorepo scaling problems.

The initial goal is to complement the scanning and analysis performed
by the GO-based 'git-sizer' (https://github.com/github/git-sizer) tool.
It is hoped that by creating a builtin command, we may be able to take
advantage of internal Git data structures and code that is not
accessible from GO to gain further insight into potential scaling
problems.

Co-authored-by: Derrick Stolee <[email protected]>
Signed-off-by: Jeff Hostetler <[email protected]>
Signed-off-by: Derrick Stolee <[email protected]>
The previous change introduced the '--[no-]sparse' option for the 'git
backfill' command, but did not assume it as enabled by default. However,
this is likely the behavior that users will most often want to happen.
Without this default, users with a small sparse-checkout may be confused
when 'git backfill' downloads every version of every object in the full
history.

However, this is left as a separate change so this decision can be reviewed
independently of the value of the '--[no-]sparse' option.

Add a test of adding the '--sparse' option to a repo without sparse-checkout
to make it clear that supplying it without a sparse-checkout is an error.

Signed-off-by: Derrick Stolee <[email protected]>
By default we will scan all references in "refs/heads/", "refs/tags/"
and "refs/remotes/".

Add command line opts let the use ask for all refs or a subset of them
and to include a detached HEAD.

Signed-off-by: Jeff Hostetler <[email protected]>
Signed-off-by: Derrick Stolee <[email protected]>
Adapting the implementation of ll_find_deltas(), create a threaded
version of the --path-walk compression step in 'git pack-objects'.

This involves adding a 'regions' member to the thread_params struct,
allowing each thread to own a section of paths. We can simplify the way
jobs are split because there is no value in extending the batch based on
name-hash the way sections of the object entry array are attempted to be
grouped. We re-use the 'list_size' and 'remaining' items for the purpose
of borrowing work in progress from other "victim" threads when a thread
has finished its batch of work more quickly.

Using the Git repository as a test repo, the p5313 performance test
shows that the resulting size of the repo is the same, but the threaded
implementation gives gains of varying degrees depending on the number of
objects being packed. (This was tested on a 16-core machine.)

Test                                    HEAD~1    HEAD
-------------------------------------------------------------
5313.6: thin pack with --path-walk        0.01    0.01  +0.0%
5313.7: thin pack size with --path-walk    475     475  +0.0%
5313.12: big pack with --path-walk        1.99    1.87  -6.0%
5313.13: big pack size with --path-walk  14.4M   14.3M  -0.4%
5313.18: repack with --path-walk         98.14   41.46 -57.8%
5313.19: repack size with --path-walk   197.2M  197.3M  +0.0%

Signed-off-by: Derrick Stolee <[email protected]>
When adding tree objects, we are very careful to avoid adding the same
tree object more than once. There was one small gap in that logic,
though: when adding a root tree object. Two refs can easily share the
same root tree object, and we should still not add it more than once.

Signed-off-by: Johannes Schindelin <[email protected]>
This is a highly useful command, and we want it to get some testing "in
the wild". However, the patches have not yet been reviewed on the Git
mailing list, and are therefore subject to change. By marking the
command as experimental, users will be warned to pay attention to those
changes.

Signed-off-by: Johannes Schindelin <[email protected]>
When 'git survey' provides information to the user, this will be presented
in one of two formats: plaintext and JSON. The JSON implementation will be
delayed until the functionality is complete for the plaintext format.

The most important parts of the plaintext format are headers specifying the
different sections of the report and tables providing concreted data.

Create a custom table data structure that allows specifying a list of
strings for the row values. When printing the table, check each column for
the maximum width so we can create a table of the correct size from the
start.

The table structure is designed to be flexible to the different kinds of
output that will be implemented in future changes.

Signed-off-by: Derrick Stolee <[email protected]>
At the moment, nothing is obvious about the reason for the use of the
path-walk API, but this will become more prevelant in future iterations. For
now, use the path-walk API to sum up the counts of each kind of object.

For example, this is the reachable object summary output for my local repo:

REACHABLE OBJECT SUMMARY
========================
Object Type |  Count
------------+-------
       Tags |   1343
    Commits | 179344
      Trees | 314350
      Blobs | 184030

Signed-off-by: Derrick Stolee <[email protected]>
Now that we have explored objects by count, we can expand that a bit more to
summarize the data for the on-disk and inflated size of those objects. This
information is helpful for diagnosing both why disk space (and perhaps
clone or fetch times) is growing but also why certain operations are slow
because the inflated size of the abstract objects that must be processed is
so large.

Signed-off-by: Derrick Stolee <[email protected]>
In future changes, we will make use of these methods. The intention is to
keep track of the top contributors according to some metric. We don't want
to store all of the entries and do a sort at the end, so track a
constant-size table and remove rows that get pushed out depending on the
chosen sorting algorithm.

Co-authored-by: Jeff Hostetler <[email protected]>
Signed-off-by; Jeff Hostetler <[email protected]>
Signed-off-by: Derrick Stolee <[email protected]>
Since we are already walking our reachable objects using the path-walk API,
let's now collect lists of the paths that contribute most to different
metrics. Specifically, we care about

 * Number of versions.
 * Total size on disk.
 * Total inflated size (no delta or zlib compression).

This information can be critical to discovering which parts of the
repository are causing the most growth, especially on-disk size. Different
packing strategies might help compress data more efficiently, but the toal
inflated size is a representation of the raw size of all snapshots of those
paths. Even when stored efficiently on disk, that size represents how much
information must be processed to complete a command such as 'git blame'.

Since the on-disk size is likely to be fragile, stop testing the exact
output of 'git survey' and check that the correct set of headers is
output.

Signed-off-by: Derrick Stolee <[email protected]>
The 'git survey' builtin provides several detail tables, such as "top
files by on-disk size". The size of these tables defaults to 10,
currently.

Allow the user to specify this number via a new --top=<N> option or the
new survey.top config key.

Signed-off-by: Derrick Stolee <[email protected]>
Signed-off-by: Johannes Schindelin <[email protected]>
derrickstolee and others added 27 commits January 11, 2025 17:54
Getting started contributing to Git can be difficult on a Windows
machine. CONTRIBUTING.md contains a guide to getting started, including
detailed steps for setting up build tools, running tests, and
submitting patches to upstream.

[includes an example by Pratik Karki how to submit v2, v3, v4, etc.]

Signed-off-by: Derrick Stolee <[email protected]>
Includes touch-ups by 마누엘, Philip Oakley and 孙卓识.

Signed-off-by: Johannes Schindelin <[email protected]>
With improvements by Clive Chan, Adric Norris, Ben Bodenmiller and
Philip Oakley.

Helped-by: Clive Chan <[email protected]>
Helped-by: Adric Norris <[email protected]>
Helped-by: Ben Bodenmiller <[email protected]>
Helped-by: Philip Oakley <[email protected]>
Signed-off-by: Brendan Forster <[email protected]>
Signed-off-by: Johannes Schindelin <[email protected]>
Rather than using private IFTTT Applets that send mails to this
maintainer whenever a new version of a Git for Windows component was
released, let's use the power of GitHub workflows to make this process
publicly visible.

This workflow monitors the Atom/RSS feeds, and opens a ticket whenever a
new version was released.

Note: Bash sometimes releases multiple patched versions within a few
minutes of each other (i.e. 5.1p1 through 5.1p4, 5.0p15 and 5.0p16). The
MSYS2 runtime also has a similar system. We can address those patches as
a group, so we shouldn't get multiple issues about them.

Note further: We're not acting on newlib releases, OpenSSL alphas, Perl
release candidates or non-stable Perl releases. There's no need to open
issues about them.

Co-authored-by: Matthias Aßhauer <[email protected]>
Signed-off-by: Johannes Schindelin <[email protected]>
Git for Windows accepts pull requests; Core Git does not. Therefore we
need to adjust the template (because it only matches core Git's
project management style, not ours).

Also: direct Git for Windows enhancements to their contributions page,
space out the text for easy reading, and clarify that the mailing list
is plain text, not HTML.

Signed-off-by: Philip Oakley <[email protected]>
Signed-off-by: Johannes Schindelin <[email protected]>
The `--stdin` option was a well-established paradigm in other commands,
therefore we implemented it in `git reset` for use by Visual Studio.

Unfortunately, upstream Git decided that it is time to introduce
`--pathspec-from-file` instead.

To keep backwards-compatibility for some grace period, we therefore
reinstate the `--stdin` option on top of the `--pathspec-from-file`
option, but mark it firmly as deprecated.

Helped-by: Victoria Dye <[email protected]>
Helped-by: Matthew John Cheetham <[email protected]>
Signed-off-by: Johannes Schindelin <[email protected]>
Reintroduce the 'core.useBuiltinFSMonitor' config setting (originally added
in 0a756b2 (fsmonitor: config settings are repository-specific,
2021-03-05)) after its removal from the upstream version of FSMonitor.

Upstream, the 'core.useBuiltinFSMonitor' setting was rendered obsolete by
"overloading" the 'core.fsmonitor' setting to take a boolean value. However,
several applications (e.g., 'scalar') utilize the original config setting,
so it should be preserved for a deprecation period before complete removal:

* if 'core.fsmonitor' is a boolean, the user is correctly using the new
  config syntax; do not use 'core.useBuiltinFSMonitor'.
* if 'core.fsmonitor' is unspecified, use 'core.useBuiltinFSMonitor'.
* if 'core.fsmonitor' is a path, override and use the builtin FSMonitor if
  'core.useBuiltinFSMonitor' is 'true'; otherwise, use the FSMonitor hook
  indicated by the path.

Additionally, for this deprecation period, advise users to switch to using
'core.fsmonitor' to specify their use of the builtin FSMonitor.

Signed-off-by: Victoria Dye <[email protected]>
This is the recommended way on GitHub to describe policies revolving around
security issues and about supported versions.

Helped-by: Sven Strickroth <[email protected]>
Signed-off-by: Johannes Schindelin <[email protected]>
These are Git for Windows' Git GUI and gitk patches. We will have to
decide at some point what to do about them, but that's a little lower
priority (as Git GUI seems to be unmaintained for the time being, and
the gitk maintainer keeps a very low profile on the Git mailing list,
too).

Signed-off-by: Johannes Schindelin <[email protected]>
…dvice

clean: suggest using `core.longPaths` if paths are too long to remove
Signed-off-by: Johannes Schindelin <[email protected]>
This was pull request git-for-windows#1645 from ZCube/master

Support windows container.

Signed-off-by: Johannes Schindelin <[email protected]>
…ws#4527)

With this patch, Git for Windows works as intended on mounted APFS
volumes (where renaming read-only files would fail).

Signed-off-by: Johannes Schindelin <[email protected]>
Signed-off-by: Johannes Schindelin <[email protected]>
This patch introduces support to set special NTFS attributes that are
interpreted by the Windows Subsystem for Linux as file mode bits, UID
and GID.

Signed-off-by: Johannes Schindelin <[email protected]>
Handle Ctrl+C in Git Bash nicely

Signed-off-by: Johannes Schindelin <[email protected]>
A fix for calling `vim` in Windows Terminal caused a regression and was
reverted. We partially un-revert this, to get the fix again.

Signed-off-by: Johannes Schindelin <[email protected]>
This topic branch re-adds the deprecated --stdin/-z options to `git
reset`. Those patches were overridden by a different set of options in
the upstream Git project before we could propose `--stdin`.

We offered this in MinGit to applications that wanted a safer way to
pass lots of pathspecs to Git, and these applications will need to be
adjusted.

Instead of `--stdin`, `--pathspec-from-file=-` should be used, and
instead of `-z`, `--pathspec-file-nul`.

Signed-off-by: Johannes Schindelin <[email protected]>
Originally introduced as `core.useBuiltinFSMonitor` in Git for Windows
and developed, improved and stabilized there, the built-in FSMonitor
only made it into upstream Git (after unnecessarily long hemming and
hawing and throwing overly perfectionist style review sticks into the
spokes) as `core.fsmonitor = true`.

In Git for Windows, with this topic branch, we re-introduce the
now-obsolete config setting, with warnings suggesting to existing users
how to switch to the new config setting, with the intention to
ultimately drop the patch at some stage.

Signed-off-by: Johannes Schindelin <[email protected]>
…updates

Start monitoring updates of Git for Windows' component in the open
Add a README.md for GitHub goodness.

Signed-off-by: Johannes Schindelin <[email protected]>
@dscho dscho linked an issue Jan 11, 2025 that may be closed by this pull request
@dscho
Copy link
Member Author

dscho commented Jan 11, 2025

The reftable regression test where it updates refs in a massively concurrent manner failed:

  fatal: update_ref failed for ref 'refs/heads/branch-88': reftable: transaction prepare: I/O error

The error message I/O error is of course far from helpful.

At the same time it passed in my fork. So it is a flaky test now...

@dscho
Copy link
Member Author

dscho commented Jan 11, 2025

And vice versa, in my fork osx-meson failed in t5616.18 fetch --refetch triggers repacking while the same test succeeds in the PR build:

  ++ git -c protocol.version=0 -c gc.autoPackLimit=0 -c maintenance.incremental-repack.auto=1234 -C pc1 fetch --refetch origin
  error: unable to open .git/objects/pack/pack-6ac94f9c26c537ad200c52c992a627f57871f8aa.rev: No such file or directory
  fatal: unable to rename temporary '*.rev' file to '.git/objects/pack/pack-6ac94f9c26c537ad200c52c992a627f57871f8aa.rev'
  fatal: index-pack failed

Yet another newly-flaky test...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[New git version] v2.48.0