Skip to content

Releases: git-for-windows/git-snapshots

Thu, 23 Jan 2025 14:58:42 +0100

25 Jan 10:29
f045ed3
Compare
Choose a tag to compare
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

25 Jan 10:29
f48c92b
Compare
Choose a tag to compare
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

25 Jan 10:29
Compare
Choose a tag to compare
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

25 Jan 10:29
dfc2e3f
Compare
Choose a tag to compare
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

25 Jan 10:29
58d6792
Compare
Choose a tag to compare
credential-cache: handle ECONNREFUSED gracefully (#5329)

I should probably add some tests for this.

Mon, 30 Dec 2024 22:12:47 +0100

25 Jan 10:28
Compare
Choose a tag to compare
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

25 Jan 10:28
f1241af
Compare
Choose a tag to compare
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

25 Jan 10:28
Compare
Choose a tag to compare
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

25 Jan 10:28
Compare
Choose a tag to compare
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

25 Jan 10:28
3f4795c
Compare
Choose a tag to compare
Fix typo (#5228)

Fix double words.