Releases: git-for-windows/git-snapshots
Releases · git-for-windows/git-snapshots
Thu, 23 Jan 2025 14:58:42 +0100
mingw_open_existing: handle directories better (#5342) [`CreateFileW()` requires `FILE_FLAG_BACKUP_SEMANTICS` to create a directory handle](https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-createfilew#directories) and errors out with `ERROR_ACCESS_DENIED` without this flag. Fall back to accessing Directory handles this way. This fixes https://github.com/git-for-windows/git/issues/5068
Fri, 17 Jan 2025 09:22:26 +0100
Rebase to v2.48.0 (#5361) <details><summary>Range-diff relative to -rc2</summary> * 1: 8c8a20738d16 = 1: bbc14d71076a t9350: point out that refs are not updated correctly * 2: 25fb03214d1a = 2: b5fe0f6cb4c6 transport-helper: add trailing -- * 3: dca266332209 = 3: c74f47bdb3d2 remote-helper: check helper status after import/export * 6: f6f9f1c5a484 = 4: 6166ef7964b0 gitk(Windows): avoid inadvertently calling executables in the worktree * 7: 47dc063320ee = 5: dd17fae001d7 Always auto-gc after calling a fast-import transport * 10: c0d09b9c5f24 = 6: a1108cf54037 mingw: include the Python parts in the build * 11: d55d5e5d2830 = 7: a60cef929658 win32/pthread: avoid name clashes with winpthread * 12: 72f78bd097ae = 8: 3eaa1ce48e62 git-compat-util: avoid redeclaring _DEFAULT_SOURCE * 13: f7e4509ffb22 = 9: 461207c9e842 Import the source code of mimalloc v2.1.2 * 14: 0c0209d42289 = 10: dfda515d0ead mimalloc: adjust for building inside Git * 15: a27ec228d46c = 11: 1499dbda5643 mimalloc: offer a build-time option to enable it * 4: b536507c351b = 12: ec0016cb64d8 mingw: demonstrate a problem with certain absolute paths * 5: 90288be17bc5 = 13: c2b8b3d3d968 clean: do not traverse mount points * 16: 2524a044fae3 = 14: 080c8517efd8 mimalloc: use "weak" random seed when statically linked * 8: 2dcf725f2e78 = 15: e75cb3b51443 mingw: allow absolute paths without drive prefix * 9: 00dad35ac207 = 16: 64e8496b7e10 clean: remove mount points when possible * 17: b8668153dadc = 17: 11ebfb38332e mingw: use mimalloc * 18: 5dcfd019e121 = 18: 6b608e899130 transport: optionally disable side-band-64k * 23: 0dd5d9410ac8 = 19: 0cb219f0a47f mingw: ensure valid CTYPE * 24: bf75da68b3cf = 20: 0bc4c90b37de mingw: demonstrate a `git add` issue with NTFS junctions * 26: 07676d96f1d0 = 21: 345d8dd1b6f0 mingw: allow `git.exe` to be used instead of the "Git wrapper" * 27: 6c91598dc4cb = 22: 13709f0783a6 strbuf_realpath(): use platform-dependent API if available * 29: fe6fb0ec4346 = 23: 3db90c39c03c mingw: ignore HOMEDRIVE/HOMEPATH if it points to Windows' system directory * 30: 058aad7a7265 = 24: acc5a1412755 http: use new "best effort" strategy for Secure Channel revoke checking * 20: 6d49ea61fc70 = 25: d7476fc7eb9a mingw: do resolve symlinks in `getcwd()` * 21: 09d7dec59c27 = 26: 2b6f2917bb34 mingw: fix fatal error working on mapped network drives on Windows * 31: 6c2313d64d88 = 27: d9192520669f clink.pl: fix MSVC compile script to handle libcurl-d.lib * 32: 7231ff03b632 = 28: 132f4314d100 mingw: implement a platform-specific `strbuf_realpath()` * 22: d2efb3e4c18a = 29: ccdb636f7e63 vcxproj: unclash project directories with build outputs * 25: 6a67ad3cd320 = 30: c532ef35c7de t5505/t5516: allow running without `.git/branches/` in the templates * 28: f79ee510532c = 31: adfc048ec394 t5505/t5516: fix white-space around redirectors * 33: 432f1018a950 = 32: ca535032ad4c t3701: verify that we can add *lots* of files interactively * 34: ebd57fe043ae = 33: c3d5ebcdf19e git add -i: handle CR/LF line endings in the interactive input * 45: a17f9f86ad14 = 34: 201c0e830fcc commit: accept "scissors" with CR/LF line endings * 46: 9874912bb25e = 35: ae133a0ea9e3 t0014: fix indentation * 47: 4a85fd17c5d5 = 36: ac73ea47ec6a git-gui: accommodate for intent-to-add files * 35: 5cc86b2fec25 = 37: 77283d028d37 clink.pl: fix libexpatd.lib link error when using MSVC * 36: 1430754f8a63 = 38: 4bff95d54cf6 Makefile: clean up .ilk files when MSVC=1 * 37: 5c8e388900a4 = 39: db01c407b879 vcbuild: add support for compiling Windows resource files * 38: e18b12ccf4de = 40: 8f5ad65c777a config.mak.uname: add git.rc to MSVC builds * 39: b442bcd8def9 = 41: 3e47c796ebbc clink.pl: ignore no-stack-protector arg on MSVC=1 builds * 40: bfd7b0fce4fe = 42: b59e4b93533c clink.pl: move default linker options for MSVC=1 builds * 41: fbce80fb7b75 = 43: 49cf4b67ed15 buildsystems: remove duplicate clause * 48: 661287450151 = 44: 81ee80b54f7a vcpkg_install: detect lack of Git * 42: 03f535e73e91 = 45: adb78670a8b9 vcxproj: handle resource files, too * 49: 75993b4a4f00 = 46: e3729ad92552 vcpkg_install: add comment regarding slow network connections * 43: 5016af712e6e = 47: 69d15a382760 vcxproj: ignore -fno-stack-protector and -fno-common * 50: e96a3499ce78 = 48: 79bb88cfac65 vcxproj: support building Windows/ARM64 binaries * 44: 6f462b5f80d6 = 49: f1b2fd699f22 vcxproj: handle GUI programs, too * 51: 0559b8f3bf58 = 50: ff822c640f3d vcbuild: install ARM64 dependencies when building ARM64 binaries * 57: 5663ad415bce = 51: f45352ca45c7 cmake: install headless-git. * 52: 358ba6b62f81 = 52: 6e695685291c vcbuild: add an option to install individual 'features' * 53: 7b331668dbf9 = 53: b3ab8b78d1bb cmake: allow building for Windows/ARM64 * 54: 15e901f834a6 = 54: d7655970bb54 ci(vs-build) also build Windows/ARM64 artifacts * 55: 040847f4c50e = 55: f8c6875658ef Add schannel to curl installation * 56: 1cd5f8bffd04 = 56: c80d4f909063 cmake(): allow setting HOST_CPU for cross-compilation * 64: 95727aca15b9 = 57: 3aeb23b73891 CMake: default Visual Studio generator has changed * 68: beea9e12cac8 = 58: c20c6eee803f subtree: update `contrib/subtree` `test` target * 66: 127faab49a82 = 59: 1033d6fb5e17 .gitignore: add Visual Studio CMakeSetting.json file * 58: 6704142a9640 = 60: 1e95a2f61295 mingw: allow for longer paths in `parse_interpreter()` * 59: 296b420d826f = 61: 48c6336d00d7 compat/vcbuild: document preferred way to build in Visual Studio * 60: 8a42909e25bf = 62: 921f35cada18 http: optionally send SSL client certificate * 71: 3e7da28ee96e = 63: 1fcbe5cba6c5 ci: run `contrib/subtree` tests in CI builds * 61: 10a5c81ac116 = 64: 6183d2da274c hash-object: demonstrate a >4GB/LLP64 problem * 62: 3bef351a5b6d = 65: 23fe6002516b write_object_file_literally(): use size_t * 63: 2c008c51f882 = 66: c22d98bc72fa object-file.c: use size_t for header lengths * 65: c35308a76ad7 = 67: 4f197bd47d73 hash algorithms: use size_t for section lengths * 67: 3d25b0eff5de = 68: c4551e70dbd7 hash-object --stdin: verify that it works with >4GB/LLP64 * 69: fafa720aae5e = 69: 40431da79500 CMakeLists: add default "x64-windows" arch for Visual Studio * 70: 11b2ac66ec82 = 70: ce0d0a9baf8a hash-object: add another >4GB/LLP64 test case * 82: 4cd9933bb357 = 71: b045dfa18e60 setup: properly use "%(prefix)/" when in WSL * 72: 1bb4d1143527 = 72: 86670c89a893 CMake: show Win32 and Generator_platform build-option values * 73: fff28fcf13a5 = 73: d13b2b6f0b56 init: do parse _all_ core.* settings early * 74: 1a67a18cf4ec = 74: 1961e700e6c0 hash-object: add a >4GB/LLP64 test case using filtered input * 85: bffde5dd508e = 75: 307bb0547e24 compat/mingw.c: do not warn when failing to get owner * 75: 820a555c716f = 76: 7324a351e480 vcxproj: allow building with `NO_PERL` again * 76: 66d8ef53b1fa = 77: 348fae040254 vcxproj: require C11 * 77: 5c867e7adcb9 = 78: 102e426b4a4f vcxproj: ignore the `-pedantic` option * 78: 777ec5856d19 = 79: 32973aab639a vcxproj: include reftable when committing `.vcxproj` files * 79: 0aa5472d27e4 = 80: 60299ef25e4a vcxproj: handle libreftable_test, too * 80: af26bf72c0c3 = 81: a69adf6ed97f vcxproj: avoid escaping double quotes in the defines * 81: 933166251523 = 82: 331afd2601d8 ci: adjust Azure Pipeline for `runs_on_pool` * 84: eddaab658503 = 83: d4d7862dc610 ci: stop linking the `prove` cache * 83: 0ff2c1268d6b = 84: cadcb6dd24f6 Add config option `windows.appendAtomically` * 89: 814d99aaee3a = 85: b4b814ecc737 ci: reinstate Azure Pipelines support * 86: e8fdcc39a950 = 86: c71eebaae730 mingw: $env:TERM="xterm-256color" for newer OSes * 87: beb405d40bf3 = 87: 404e0aa054f9 winansi: check result and Buffer before using Name * 88: 02c0dca1bc2a = 88: 3f98d1317a78 mingw: change core.fsyncObjectFiles = 1 by default * 90: 876eee2c8fd3 = 89: ebc3f7bc3716 azure-pipeline: drop the `GETTEXT_POISON` job * 91: 136ed6b2e2e7 = 90: 3ec9280c324f azure-pipeline: stop hard-coding `apt-get` calls * 92: 3d2e22c57550 = 91: 209f633b293c azure-pipeline: drop the code to write to/read from a file share * 93: 12b65ef9ee62 = 92: ac9ce7cd5c4a azure-pipeline: use partial clone/parallel checkout to initialize minimal-sdk * 94: e08e05b2057e = 93: a671d4136f6a azure-pipeline: downcase the job name of the `Linux32` job * 95: e3fa52e1d63b = 94: 231a570c1766 bswap.h: add support for built-in bswap functions * 96: 01e8056d790c = 95: a4cc607692de MinGW: link as terminal server aware * 97: 7acf493c8e0f = 96: 7e2281559871 azure-pipeline: run static-analysis on jammy * 98: 7423fab61a19 = 97: 4c4a0d5e63ef Fix Windows version resources * 99: 3a39c43704a5 = 98: e80721de6fa0 config.mak.uname: add support for clangarm64 * 100: bd79a1de7022 = 99: 12dfa6893cb7 status: fix for old-style submodules with commondir * 101: 222abf90f26d = 100: d9aa4c7614c0 windows: skip linking `git-<command>` for built-ins * 102: 2f6d02724228 = 101: 58f6351bfc5b http: optionally load libcurl lazily * 103: 1440baad21bf = 102: 6f3580c94928 http: support lazy-loading libcurl also on Windows * 104: 09a62707250c = 103: 5c064c2ddaa1 http: when loading libcurl lazily, allow for multiple SSL backends * 105: 8631bd25e504 = 104: f3cd3ed40398 windows: fix Repository>Explore Working Copy * 106: f89dc5313b5d = 105: a8bd077c4b24 mingw: do load libcurl dynamically by default * 107: 48cc7ed78002 = 106: 095916405544 Add a GitHub workflow to verify that Git/Scalar work in Nano Server * 108: 5079c0195f1e = 107: 171878e1b313 mingw: suggest `windows.appendAtomically` in more cases * 109: 526958a9ad75 = 108: a3742f483395 win32: use native ANSI sequence processing, if possible * 110: 8d4b504dffc2 = 109: 52640776d329 git.rc: include winuser.h * 113: 659c640e12e7 = 110: 4d9ebe3839bf ci: work around a problem with HTTP/2 vs libcurl v8.10.0 * 114: 1de9cad1279a = 111: ef1206c7ae3a pack-objects: add --full-name-hash option * 115: ed17b4ff77f6 = 112: a79d35ac8ab2 repack: test --full-name-hash option * 116: 0990abf98a91 = 113: 8da736327560 pack-objects: add GIT_TEST_FULL_NAME_HASH * 117: acfc3341f16f = 114: 9b1f34325853 git-repack: update usage to match docs * 111: 5a7a5bac81d3 = 115: dbd4e4a01d99 common-main.c: fflush stdout buffer upon exit * 112: 7c23b9efa1e8 = 116: 7b12c5522453 t5601/t7406(mingw): do run tests with symlink support * 121: d43345128b8a = 117: 43ad97032dcb win32: ensure that `localtime_r()` is declared even in i686 builds * 122: c12070c703b1 = 118: fd55edeb077e Fallback to AppData if XDG_CONFIG_HOME is unset * 123: 5e1a6837f8b0 = 119: f08d175d8599 run-command: be helpful with Git LFS fails on Windows 7 * 118: 33f306409345 = 120: fe91a8a19368 p5313: add size comparison test * 119: 9fb1426137e3 = 121: 9e9b2949a3ff test-tool: add helper for name-hash values * 120: 131c260fc4f6 = 122: 36064b60c3a6 repack/pack-objects: mark `--full-name-hash` as experimental * 124: 74ce00b92e8d = 123: 98030c3bc295 path-walk: introduce an object walk by path * 125: a2cf338a3939 = 124: 4534fc6d5fa2 t6601: add helper for testing path-walk API * 126: e34dc7242adb = 125: 048428acdfe7 path-walk: allow consumer to specify object types * 127: 0e42bfa362fb = 126: a3d393ba9e07 path-walk: allow visiting tags * 128: 63fa6342a3b5 = 127: e35f96d76f59 revision: create mark_trees_uninteresting_dense() * 129: e545bee799ac = 128: ee8deefd88fe path-walk: add prune_all_uninteresting option * 130: d90b21c3cd40 = 129: f997fc8a189e pack-objects: extract should_attempt_deltas() * 131: 159547f7c92c = 130: 7075c096797a pack-objects: add --path-walk option * 132: fc70c9fc1fdc = 131: 2d88d3f8884d pack-objects: introduce GIT_TEST_PACK_PATH_WALK * 133: 34e991a53a52 = 132: 1d621e1bc249 repack: add --path-walk option * 134: 557e23b741c2 = 133: 91c1e93319c0 pack-objects: enable --path-walk via config * 135: b1d96616a251 = 134: 14f998ccfd27 scalar: enable path-walk during push via config * 136: 7b59e6ca2af0 = 135: 4bad79d7d301 pack-objects: refactor path-walk delta phase * 137: a7681ff0cc95 = 136: 0603e437641b pack-objects: thread the path-based compression * 138: 9ed9a44c5aa3 = 137: 23ae9245003b path-walk API: avoid adding a root tree more than once * 140: 5de5395b06e3 = 138: 58eb7f138823 backfill: add builtin boilerplate * 141: ec146ba14f73 = 139: ebd169260901 backfill: basic functionality and tests * 142: dc949345c921 = 140: 6bbc831ec60a backfill: add --batch-size=<n> option * 143: 35b7e38d0f2c = 141: 4f329aa3918c backfill: add --sparse option * 144: 2264e15b422c = 142: 5126f20b04ce backfill: assume --sparse when sparse-checkout is enabled * 145: a86d01703585 = 143: d0bd4c04aa35 backfill: mark it as experimental * 146: c6b7ce0285dc = 144: 2787935914b7 survey: stub in new experimental 'git-survey' command * 147: 7d894d8f4344 = 145: 81a04f41c929 survey: add command line opts to select references * 148: 0d8393e8c421 = 146: 3ee79f0a2bfb survey: start pretty printing data in table form * 149: db19259aebe8 = 147: 2f3acdf2c4d9 survey: add object count summary * 150: 4019c9076f19 = 148: ea53fbb6b473 survey: summarize total sizes by object type * 151: 1edff6de1419 = 149: e073a4283c63 survey: show progress during object walk * 152: e65957e9efbd = 150: 2c1b1631d5bd survey: add ability to track prioritized lists * 153: fc9fb68b3343 = 151: 64b2ec22510f survey: add report of "largest" paths * 154: 5c03374fcd40 = 152: 59481d173f28 survey: add --top=<N> option and config * 155: c1267cca01d3 = 153: 31789fdd9181 survey: clearly note the experimental nature in the output * 156: 084fec02a2f2 = 154: c847baace97b path-walk: improve path-walk speed with many tags * 19: 22ca7af048dc = 155: 5c9651358fc0 mingw: make sure `errno` is set correctly when socket operations fail * 139: 1350d79fe162 (upstream: d02c37c3e6ba) < -: ------------ t-reftable-basics: stop assuming that `malloc` is not a constant * 271: af9a2b699f57 = 156: 78e72dcb91f0 compat/mingw: handle WSA errors in strerror * 272: 0cf45c8d9fbd ! 157: fd6b18f18614 compat/mingw: drop outdated comment ``````diff @@ 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 <mha1993@live.de> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> `````` * 273: c4d7ea8372f5 = 158: 5ae96a24446e t0301: actually test credential-cache on Windows * 274: ef52c17b50f4 = 159: 09fe109da4bb credential-cache: handle ECONNREFUSED gracefully * 157: 09c9eafeeac6 = 160: 8765262b7e08 Win32: make FILETIME conversion functions public * 158: 8a2cf44a1461 = 161: afb6c971108d Win32: dirent.c: Move opendir down * 159: 8bccc70af122 = 162: 539491295f5a mingw: make the dirent implementation pluggable * 160: d70dde087f6c = 163: 4d6c9ae3c6ed Win32: make the lstat implementation pluggable * 161: 79b7550ae6be = 164: 6d933f6fce34 mingw: add infrastructure for read-only file system level caches * 162: 31d1d184a79f = 165: 4bd5d052ddfa mingw: add a cache below mingw's lstat and dirent implementations * 163: fedce4484342 = 166: ac62ab4e13b1 fscache: load directories only once * 164: 101b990185be = 167: 0b4d50d1b38e fscache: add key for GIT_TRACE_FSCACHE * 165: 537c684adf8b = 168: 22e59f4a26c1 fscache: remember not-found directories * 166: 26e514b94c0d = 169: 6f5197b4b09a fscache: add a test for the dir-not-found optimization * 167: 4a0b366e4a45 = 170: 6b3627fd0687 add: use preload-index and fscache for performance * 168: de1f16b8ef83 = 171: bd69cf7f40ff dir.c: make add_excludes aware of fscache during status * 169: ccae4a722a04 = 172: 3de1d729066c fscache: make fscache_enabled() public * 170: 675d8dc7c466 = 173: b8686d71ca97 dir.c: regression fix for add_excludes with fscache * 171: 62a3d3ca3d96 = 174: b2c8d16d2f7c fetch-pack.c: enable fscache for stats under .git/objects * 172: 71c8974605e0 = 175: 2bdea0514f46 checkout.c: enable fscache for checkout again * 173: 7ffa2ecc494a = 176: ade2577d4ce7 Enable the filesystem cache (fscache) in refresh_index(). * 174: 0c81d792d9a9 = 177: 72e728293bd4 fscache: use FindFirstFileExW to avoid retrieving the short name * 175: d27fb3c230c3 = 178: 24990f964b54 status: disable and free fscache at the end of the status command * 176: b0da78faa763 = 179: 17b2ca1d35e5 fscache: add GIT_TEST_FSCACHE support * 177: c27092b1de62 = 180: 71c001b3c598 fscache: add fscache hit statistics * 178: 409d6ec269ff = 181: 3d55d8129904 mem_pool: add GIT_TRACE_MEMPOOL support * 179: 0d603f9e58c5 = 182: b0d0b1427c17 fscache: fscache takes an initial size * 180: 580ced925d69 = 183: d04257110a3c fscache: update fscache to be thread specific instead of global * 181: 1ad0115e1d0a = 184: f5368b6253ee fscache: teach fscache to use mempool * 182: 8e76d16a2b32 = 185: 31d40058eb99 fscache: make fscache_enable() thread safe * 184: fe8536ee57c1 = 186: cf693a892399 fscache: teach fscache to use NtQueryDirectoryFile * 186: f67147a0f64c = 187: e47cadc54e52 unpack-trees: enable fscache for sparse-checkout * 188: 8ee531048514 = 188: 5fc6a7c28add fscache: remember the reparse tag for each entry * 190: 00da8eea04c2 = 189: 014d3fe6dc63 fscache: implement an FSCache-aware is_mount_point() * 183: 8393a50ec2dc = 190: 7182f923a859 git-gui: provide question helper for retry fallback on Windows * 192: 36b6ed30ff5e = 191: bc90e75a3fd8 clean: make use of FSCache * 185: 6704d86034ca = 192: 25f46e372f28 git gui: set GIT_ASKPASS=git-gui--askpass if not set yet * 193: 908c5a19b1d5 = 193: 138f2a25e214 gitk: Unicode file name support * 187: 2bd96653e85d = 194: e1f73ec6c938 git-gui--askyesno: fix funny text wrapping * 194: 1a36bff0cc61 = 195: 5c6b2a6873fa gitk: Use an external icon file on Windows * 189: 7117b15377f1 = 196: b532ee60524a git-gui--askyesno: allow overriding the window title * 195: 899962155717 = 197: 4a5f1dcc434f gitk: fix arrow keys in input fields with Tcl/Tk >= 8.6 * 191: cd492f2f9149 = 198: d033151da386 git-gui--askyesno (mingw): use Git for Windows' icon, if available * 196: cafd4841f8ca = 199: 17d1088962d2 gitk: make the "list references" default window width wider * 197: 327543d17f9b = 200: 6adb8e46978e pack-objects (mingw): demonstrate a segmentation fault with large deltas * 198: bfc3db8bb9cc = 201: 94378c11ae78 mingw: support long paths * 199: 05674cc789f8 = 202: a5d11abc13ef Win32: fix 'lstat("dir/")' with long paths * 200: 4ec7736d89dc = 203: 3c4cd629b6fc win32(long path support): leave drive-less absolute paths intact * 201: 884eda4cbb1b = 204: 072902edbb3c mingw: Support `git_terminal_prompt` with more terminals * 202: 448abe11dd6b = 205: e79bbe4a3d6b compat/terminal.c: only use the Windows console if bash 'read -r' fails * 203: 7f91760897df = 206: 0449fa6f97d4 mingw (git_terminal_prompt): do fall back to CONIN$/CONOUT$ method * 204: af1cd456aa03 = 207: 37575e031e2c strbuf_readlink: don't call readlink twice if hint is the exact link size * 210: 5f4c415e89d3 = 208: 314d9aa6240d compat/fsmonitor/fsm-*-win32: support long paths * 211: 4b2711a62fba = 209: 22868008f3c5 clean: suggest using `core.longPaths` if paths are too long to remove * 205: dedb1ae9ccf1 = 210: 16ba97eb386d strbuf_readlink: support link targets that exceed PATH_MAX * 206: 2e09e44445a3 = 211: 3bbb298a4cd9 lockfile.c: use is_dir_sep() instead of hardcoded '/' checks * 207: aadf12406aa6 = 212: 014c9ba727bc Win32: don't call GetFileAttributes twice in mingw_lstat() * 208: de191d11189e = 213: a5e362e390a5 Win32: implement stat() with symlink support * 209: af7734ab2e1e = 214: 70e161c34dfc Win32: remove separate do_lstat() function * 212: 7a45cf70899f = 215: 6a57f096f1bc Win32: let mingw_lstat() error early upon problems with reparse points * 213: 6c99a157e9bf = 216: d1a637d8c0f6 mingw: teach fscache and dirent about symlinks * 214: 41c5c14fb1ba = 217: b160896166e7 Win32: lstat(): return adequate stat.st_size for symlinks * 215: 65b8430fcee0 = 218: 3b126ac38bb6 Win32: factor out retry logic * 216: a67d839ab238 = 219: 60b07aed45ef Win32: change default of 'core.symlinks' to false * 217: 24160dbefb88 = 220: eddaa1718baa Win32: add symlink-specific error codes * 218: d3df2807d05d = 221: db44028fce60 Win32: mingw_unlink: support symlinks to directories * 219: 87b35ec1dcda = 222: 9be895cbdf9b Win32: mingw_rename: support renaming symlinks * 220: 4a58657ad9eb = 223: 0ee6c2c23e40 Win32: mingw_chdir: change to symlink-resolved directory * 221: 585b4bb51ceb = 224: 6fa7f5368c70 Win32: implement readlink() * 222: 4236f8cb711a = 225: 16c8396db85f mingw: lstat: compute correct size for symlinks * 223: 17bf729c5e37 = 226: 4bcc8a54d8c8 Win32: implement basic symlink() functionality (file symlinks only) * 224: f7ab0fb39789 = 227: 0a04e0774cb0 Win32: symlink: add support for symlinks to directories * 225: 96891c3624d7 = 228: e4a2ade4974f mingw: try to create symlinks without elevated permissions * 226: 85d41e4398d1 = 229: cffe5af35a59 mingw: emulate stat() a little more faithfully * 227: c80d1410f0e3 = 230: 71f5ae4dd1b6 mingw: special-case index entries for symlinks with buggy size * 228: 06376e653782 = 231: 3b7f7fa99e23 mingw: introduce code to detect whether we're inside a Windows container * 229: eb17c48a2d0f = 232: 7cd902e040bf mingw: when running in a Windows container, try to rename() harder * 230: f33e57480897 = 233: 11f08d458e05 mingw: move the file_attr_to_st_mode() function definition * 231: 167e81d42e64 = 234: f558a61b3843 mingw: Windows Docker volumes are *not* symbolic links * 232: e13c7c68882c = 235: 249fd8ae6bd6 Win32: symlink: move phantom symlink creation to a separate function * 234: ad1b7a4320d7 = 236: 4d5a59ac623c Introduce helper to create symlinks that knows about index_state * 235: 3199b1b73248 = 237: 61e072f3d199 mingw: allow to specify the symlink type in .gitattributes * 236: faf1f46b16ac = 238: b093fc05d47c Win32: symlink: add test for `symlink` attribute * 237: dfbdd01e8ae5 = 239: 07d0a7a29b2f mingw: explicitly specify with which cmd to prefix the cmdline * 238: 0612f86152b1 = 240: 132edae75393 mingw: when path_lookup() failed, try BusyBox * 239: 3b9554ef7f63 = 241: 95e358744003 test-lib: avoid unnecessary Perl invocation * 240: f6719f8c13b5 = 242: bcec4b73c9d1 test-tool: learn to act as a drop-in replacement for `iconv` * 241: d7f4c1d98496 = 243: cf2505f6c08c tests(mingw): if `iconv` is unavailable, use `test-helper --iconv` * 242: f03dc970e280 = 244: 6c4d2587b1d2 gitattributes: mark .png files as binary * 233: 3e617a81444d = 245: e333decb9bea mingw: work around rename() failing on a read-only file * 243: 14fa4bf0930a = 246: 7a8d524aa863 tests: move test PNGs into t/lib-diff/ * 244: 87dc864970d8 = 247: dbd5f28dfb55 tests: only override sort & find if there are usable ones in /usr/bin/ * 245: 3789353ae4da = 248: 106450955a1b tests: use the correct path separator with BusyBox * 246: 6a6623b8cedf = 249: d4424138d36f mingw: only use Bash-ism `builtin pwd -W` when available * 247: 7f70225772ad = 250: 14549d6338ab tests (mingw): remove Bash-specific pwd option * 248: 55032002904a = 251: ace3077a3a94 test-lib: add BUSYBOX prerequisite * 249: 7ccc72d4d624 = 252: 332f4145bb42 t5003: use binary file from t/lib-diff/ * 250: bf6204fb3ba7 = 253: 509990422e1f t5532: workaround for BusyBox on Windows * 251: 7c97cdd5032c = 254: 680c13654c7a t5605: special-case hardlink test for BusyBox-w32 * 252: 25a13abd59f2 = 255: bb27736b521d t5813: allow for $PWD to be a Windows path * 253: 7e1cf7133c9a = 256: ac2fe470fda1 t9200: skip tests when $PWD contains a colon * 254: 77fb64fc33e1 = 257: 9db019a61bc7 mingw: add a Makefile target to copy test artifacts * 256: 0adaeae337fc = 258: 1ecb133cc203 mingw: kill child processes in a gentler way * 258: 3a711ce1083c = 259: 4238ff7c7e2f mingw: do not call xutftowcs_path in mingw_mktemp * 255: 2e1f7ed403ba = 260: c4cee3523e7c mingw: optionally enable wsl compability file mode bits * 257: 64b01711607e = 261: 0eaad079591d mingw: really handle SIGINT * 260: de5730966959 = 262: e1a61a8c2d98 Partially un-revert "editor: save and reset terminal after calling EDITOR" * 264: 49453d059915 = 263: 6071d7ad49d6 Describe Git for Windows' architecture [no ci] * 265: 2890784120e5 = 264: d94525a8b11c Modify the Code of Conduct for Git for Windows * 266: 2b556c98253c = 265: 6e5660dd6da3 CONTRIBUTING.md: add guide for first-time contributors * 267: b7c9a2bf156a = 266: 07c3ffcd946b README.md: Add a Windows-specific preamble * 268: 1f22ae108d4e = 267: 126f9009d0be Add an issue template * 259: a0a92798912d = 268: fc4f4cdda78a Add a GitHub workflow to monitor component updates * 269: 5b004bcd6da1 = 269: a1fc7cd28578 Modify the GitHub Pull Request template (to reflect Git for Windows) * 261: db1e920795da = 270: e4fe80e736b9 reset: reinstate support for the deprecated --stdin option * 262: c359f0306923 = 271: c3c769bc06d6 fsmonitor: reintroduce core.useBuiltinFSMonitor * 263: 8732d4127ba1 = 272: b18e4dc5a660 dependabot: help keeping GitHub Actions versions up to date * 270: b6c04e48e4b1 = 273: ed5a452566fb SECURITY.md: document Git for Windows' policies * 275: 9b81fae3f908 (upstream: 1fbb8d7ecb7b) < -: ------------ builtin/blame: fix out-of-bounds read with excessive `--abbrev` * 276: 049f0cf1a5d0 (upstream: 64f3ff3ffcfe) < -: ------------ GIT-VERSION-GEN: allow it to be run in parallel </details>
Thu, 9 Jan 2025 12:40:38 +0100
GIT-VERSION-GEN: allow it to be run in parallel "Why would one want to run it in parallel?" I hear you ask. I am glad you are curious, because a curious story is what it is, indeed. The `GIT-VERSION-GEN` script is quite a pillar of Git's source code, with most lines being unchanged for the past 15 years. Until the v2.48.0 release candidate cycle. Its original purpose was to generate the version string and store it in the `GIT-VERSION-FILE`. This paradigm changed quite dramatically when support for building with Meson was introduced. Most crucially, a38edab7c88b (Makefile: generate doc versions via GIT-VERSION-GEN, 2024-12-06) changed the way the documentation is built by using the `GIT-VERSION-GEN` file to write out the `asciidocor-extensions.rb` and `asciidoc.conf` files with now hard-coded version strings. Crucially, the Makefile rule to generate those files need to be run in every build because `GIT_VERSION` could have been specified, which would require these files to be changed. This introduced a surprising race condition! And this is how that race surfaces: When calling `make -j2 html man` from the top-level directory (a variant of which is invoked in Git for Windows' release process), two sub-processes are spawned, a `make -C Documentation html` one and a `make -C Documentation man` one. Both run the rule to (re-)generate `asciidoctor-extensions.rb` or `asciidoc.conf`, invoking `GIT-VERSION-GEN` to do so. That script first generates a temporary file (appending the `+` character to the filename), then looks whether it contains something different than the already existing file (if it exists, that is), and either replaces it if needed, or removes the temporary file. If one of the two parallel invocations removes that temporary file before the other can compare it, or even worse: if one tries to replace the target file just after the other _started_ writing the temporary file (but did not finish), that race condition now causes bad builds. This may sound highly theoretical, but due to Git's choices, Git for Windows is forced to use a (slow) POSIX emulation layer to run that script and in the blink of an eye it becomes very much not theoretical at all. See these failed GitHub workflow runs as Exhibit A: https://github.com/git-for-windows/git-sdk-32/actions/runs/12663456654 https://github.com/git-for-windows/git-sdk-32/actions/runs/12683174970 https://github.com/git-for-windows/git-sdk-64/actions/runs/12649348496 While it is undesirable to run this script over and over again, certainly when this involves above-mentioned slow POSIX emulation layer, the stage of the release cycle in which we are presently finding ourselves dictates that a quick and reliable work-around be implemented that works around the race condition without changing the overall architecture of the build process. This patch does that: By using a filename suffix for the temporary file that includes the currently-executing script's process ID, We guarantee that the two competing invocations cannot overwrite or remove each others' temporary files. Incidentally, this also fixes something else: The `+` character is not even a valid filename character on Windows. The only reason why Git for Windows did not need this is that above-mentioned POSIX emulation layer also plays a couple of tricks with filenames (tricks that are not interoperable with regular Windows programs, though), and previous attempts to remedy this in git/git were unsuccessful, see e.g. https://lore.kernel.org/git/pull.216.git.gitgitgadget@gmail.com/ This commit fixes one of the issues that are currently delaying Git for Windows v2.48.0-rc2. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Tue, 7 Jan 2025 09:41:54 +0100
Reword a commit with user mention (#5343) This is a reword-only commit. As the Git for Windows branch thicket is rebased, I am getting GitHub notifications for every new copy of this commit since my username is mentioned without backticks. This commit changes the reference to a name and email pair.
Wed, 1 Jan 2025 22:00:05 +0100
credential-cache: handle ECONNREFUSED gracefully (#5329) I should probably add some tests for this.
Mon, 30 Dec 2024 22:12:47 +0100
Merge 'readme' into HEAD Add a README.md for GitHub goodness. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Thu, 19 Dec 2024 16:10:02 +0100
drop clangarm64-build (#5322) This is no longer needed, as Git for Windows' regular release process (as well as regular CI builds) now support the clang-aarch64 parts out of the box. I noticed that this is still part of Git for Windows' branch thicket when reviewing https://github.com/microsoft/git/pull/713
Tue, 17 Dec 2024 12:04:38 +0100
Merge 'readme' into HEAD Add a README.md for GitHub goodness. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Mon, 25 Nov 2024 09:23:39 +0100
Merge 'readme' into HEAD Add a README.md for GitHub goodness. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Fri, 25 Oct 2024 09:37:06 +0200
Fix typo (#5228) Fix double words.