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 rc1 #5337

Merged
merged 513 commits into from
Dec 31, 2024

Conversation

dscho
Copy link
Member

@dscho dscho commented Dec 30, 2024

Range-diff relative to
  • 1: f27e894 = 1: 11bb5b8 t9350: point out that refs are not updated correctly

  • 2: 6291a9c ! 2: aec753c transport-helper: add trailing --

    @@ Commit message
     
      ## transport-helper.c ##
     @@ transport-helper.c: static int get_exporter(struct transport *transport,
    - 	for (i = 0; i < revlist_args->nr; i++)
    + 	for (size_t i = 0; i < revlist_args->nr; i++)
      		strvec_push(&fastexport->args, revlist_args->items[i].string);
      
     +	strvec_push(&fastexport->args, "--");
  • 6: 972a8ce = 3: 31e1af5 remote-helper: check helper status after import/export

  • 3: 246d452 = 4: 5a897de gitk(Windows): avoid inadvertently calling executables in the worktree

  • 7: 9283464 = 5: 78f66b0 mingw: demonstrate a problem with certain absolute paths

  • 8: 9daf220 = 6: e087898 clean: do not traverse mount points

  • 10: cc54629 = 7: df3998b Always auto-gc after calling a fast-import transport

  • 11: abbe69b = 8: 87d4cfb mingw: allow absolute paths without drive prefix

  • 12: 4249561 = 9: 45e8ddb clean: remove mount points when possible

  • 4: 928b74b = 10: 3cc3ffa mingw: include the Python parts in the build

  • 5: e2d63e5 = 11: 3f1a73b win32/pthread: avoid name clashes with winpthread

  • 9: 850335d ! 12: 3f05b3b git-compat-util: avoid redeclaring _DEFAULT_SOURCE

    @@ Commit message
         Signed-off-by: Johannes Schindelin <[email protected]>
     
      ## git-compat-util.h ##
    -@@ git-compat-util.h: struct strbuf;
    +@@ git-compat-util.h: DISABLE_WARNING(-Wsign-compare)
      #define _ALL_SOURCE 1
      #define _GNU_SOURCE 1
      #define _BSD_SOURCE 1
  • 13: bead1b4 = 13: 560d0d4 Import the source code of mimalloc v2.1.2

  • 14: 2e49e8e = 14: 6dd92ca mimalloc: adjust for building inside Git

  • 15: 3f61f35 = 15: febf841 mimalloc: offer a build-time option to enable it

  • 16: 2df9f24 = 16: 4528095 mimalloc: use "weak" random seed when statically linked

  • 17: f5dee0a = 17: f458355 mingw: use mimalloc

  • 24: 051ad0c = 18: 9d275a0 mingw: demonstrate a git add issue with NTFS junctions

  • 26: 666ddb0 = 19: 31f58e3 strbuf_realpath(): use platform-dependent API if available

  • 18: f1ed354 = 20: f3e2ad9 transport: optionally disable side-band-64k

  • 19: bb909a6 = 21: a2b1b49 mingw: make sure errno is set correctly when socket operations fail

  • 20: 5069cbb = 22: 13b040d mingw: do resolve symlinks in getcwd()

  • 21: 7877c44 = 23: 3272ab0 mingw: fix fatal error working on mapped network drives on Windows

  • 22: 26ef7f2 = 24: 3acd06a clink.pl: fix MSVC compile script to handle libcurl-d.lib

  • 28: 464879f = 25: 222babc mingw: implement a platform-specific strbuf_realpath()

  • 23: 02fd6ac = 26: d0e2fb9 mingw: ensure valid CTYPE

  • 25: cbda9e7 = 27: 0b5dd6d mingw: allow git.exe to be used instead of the "Git wrapper"

  • 27: b410471 = 28: ac16fde mingw: ignore HOMEDRIVE/HOMEPATH if it points to Windows' system directory

  • 29: a62c776 = 29: efa8463 http: use new "best effort" strategy for Secure Channel revoke checking

  • 30: de8e303 = 30: 10731e4 vcxproj: unclash project directories with build outputs

  • 31: 6995f48 = 31: a6ba317 t5505/t5516: allow running without .git/branches/ in the templates

  • 32: 4860eaa = 32: 41c294e t5505/t5516: fix white-space around redirectors

  • 33: 303c42b = 33: ff5a4db t3701: verify that we can add lots of files interactively

  • 37: adbffc0 = 34: 184a4ba clink.pl: fix libexpatd.lib link error when using MSVC

  • 38: 5ebaabe = 35: eda3ac0 Makefile: clean up .ilk files when MSVC=1

  • 40: 3786942 = 36: 87fe2b9 vcbuild: add support for compiling Windows resource files

  • 41: def6b2c = 37: 0853341 config.mak.uname: add git.rc to MSVC builds

  • 42: 9855a1a = 38: b47a343 clink.pl: ignore no-stack-protector arg on MSVC=1 builds

  • 34: 2a12948 = 39: e4243ee git add -i: handle CR/LF line endings in the interactive input

  • 35: 47a4dc2 = 40: fffb68b commit: accept "scissors" with CR/LF line endings

  • 36: 7068e74 = 41: 9f96f7a t0014: fix indentation

  • 39: 9cfb8af = 42: 1379467 git-gui: accommodate for intent-to-add files

  • 49: 767ea7a = 43: 342ac02 vcpkg_install: detect lack of Git

  • 50: 797b057 = 44: b4879d1 vcpkg_install: add comment regarding slow network connections

  • 43: 1be2e98 = 45: f15d9a4 clink.pl: move default linker options for MSVC=1 builds

  • 51: 7a890c8 = 46: 040d62c vcxproj: support building Windows/ARM64 binaries

  • 44: adb6516 = 47: a9494c8 buildsystems: remove duplicate clause

  • 52: c6e7e04 = 48: eec15e9 vcbuild: install ARM64 dependencies when building ARM64 binaries

  • 45: 0ce0360 = 49: df922fa vcxproj: handle resource files, too

  • 53: 42a4de8 = 50: b76a3ad vcbuild: add an option to install individual 'features'

  • 46: cd4fa54 = 51: c073149 vcxproj: ignore -fno-stack-protector and -fno-common

  • 54: b5253ed ! 52: 48ecb20 cmake: allow building for Windows/ARM64

    @@ contrib/buildsystems/CMakeLists.txt: if(USE_VCPKG)
      	# In the vcpkg edition, we need this to be able to link to libcurl
      	set(CURL_NO_CURL_CMAKE ON)
     @@ contrib/buildsystems/CMakeLists.txt: string(REPLACE "@USE_GETTEXT_SCHEME@" "" git_build_options "${git_build_options}
    - string(REPLACE "@LOCALEDIR@" "'${LOCALEDIR}'" git_build_options "${git_build_options}")
    - string(REPLACE "@BROKEN_PATH_FIX@" "" git_build_options "${git_build_options}")
    + string(REPLACE "@USE_LIBPCRE2@" "" git_build_options "${git_build_options}")
    + string(REPLACE "@X@" "${EXE_EXTENSION}" git_build_options "${git_build_options}")
      if(USE_VCPKG)
     -	string(APPEND git_build_options "PATH=\"$PATH:$TEST_DIRECTORY/../compat/vcbuild/vcpkg/installed/x64-windows/bin\"\n")
     +	string(APPEND git_build_options "PATH=\"$PATH:$TEST_DIRECTORY/../compat/vcbuild/vcpkg/installed/${VCPKG_ARCH}/bin\"\n")
  • 47: 47e926f = 53: 3f2bc24 vcxproj: handle GUI programs, too

  • 55: 3fe9617 = 54: 7eb63e5 ci(vs-build) also build Windows/ARM64 artifacts

  • 48: 48d634b = 55: 297e258 cmake: install headless-git.

  • 56: 7229e6b = 56: d4c2eb0 Add schannel to curl installation

  • 57: b08ceed = 57: cc998a1 cmake(): allow setting HOST_CPU for cross-compilation

  • 62: c6617dc = 58: 60e1f22 subtree: update contrib/subtree test target

  • 58: 3605e9e = 59: 84ade65 mingw: allow for longer paths in parse_interpreter()

  • 59: 80f8927 = 60: c20d25f compat/vcbuild: document preferred way to build in Visual Studio

  • 60: eb5a4c2 = 61: caa497b http: optionally send SSL client certificate

  • 64: 93cc63e ! 62: ef3864e ci: run contrib/subtree tests in CI builds

    @@ Commit message
         Signed-off-by: Victoria Dye <[email protected]>
     
      ## ci/run-build-and-tests.sh ##
    -@@ ci/run-build-and-tests.sh: then
    - fi
    - check_unignored_build_artifacts
    +@@ ci/run-build-and-tests.sh: case "$jobname" in
    + 	;;
    + esac
      
     +case " $MAKE_TARGETS " in
     +*" all "*) make -C contrib/subtree test;;
     +esac
     +
    + check_unignored_build_artifacts
      save_good_tree
     
      ## ci/run-test-slice.sh ##
  • 61: 8d08b04 = 63: da9353e CMake: default Visual Studio generator has changed

  • 63: 243de9a = 64: d02506e .gitignore: add Visual Studio CMakeSetting.json file

  • 70: a4f9942 = 65: 217c404 CMakeLists: add default "x64-windows" arch for Visual Studio

  • 73: 007aa44 = 66: 4659ca0 CMake: show Win32 and Generator_platform build-option values

  • 65: be7a83b = 67: 7064474 hash-object: demonstrate a >4GB/LLP64 problem

  • 66: 5e385ee = 68: cc41ae7 write_object_file_literally(): use size_t

  • 67: 7763825 = 69: d356a95 object-file.c: use size_t for header lengths

  • 68: c40cce2 = 70: 3a7bad3 hash algorithms: use size_t for section lengths

  • 69: 0266868 = 71: e712f83 hash-object --stdin: verify that it works with >4GB/LLP64

  • 71: 04f3f52 = 72: 93c471b hash-object: add another >4GB/LLP64 test case

  • 72: 393cd05 = 73: 3806fdc setup: properly use "%(prefix)/" when in WSL

  • 74: fdb6e11 = 74: 4995368 init: do parse all core.* settings early

  • 75: e876d15 = 75: a6eb082 hash-object: add a >4GB/LLP64 test case using filtered input

  • 77: 8523711 = 76: d750ec6 vcxproj: allow building with NO_PERL again

  • 78: 4163c01 = 77: 5735c9f vcxproj: require C11

  • 79: 2abe6f3 = 78: 0c544f2 vcxproj: ignore the -pedantic option

  • 83: 3b721e8 = 79: a966265 Add config option windows.appendAtomically

  • 80: 53fcfbb = 80: a743fb7 vcxproj: include reftable when committing .vcxproj files

  • 76: 4f50a50 = 81: 6ee1f62 compat/mingw.c: do not warn when failing to get owner

  • 85: c0b742a = 82: bd7b567 mingw: $env:TERM="xterm-256color" for newer OSes

  • 86: c2c7e03 = 83: 267c656 winansi: check result and Buffer before using Name

  • 87: 2423212 = 84: a27122f mingw: change core.fsyncObjectFiles = 1 by default

  • 81: 80291a1 = 85: 4473e64 vcxproj: handle libreftable_test, too

  • 82: f75ac66 = 86: d4953f3 vcxproj: avoid escaping double quotes in the defines

  • 84: 60f3569 = 87: d8215b9 ci: adjust Azure Pipeline for runs_on_pool

  • 88: f7fcdfe = 88: 6be0928 ci: stop linking the prove cache

  • 89: 6678438 = 89: 697c1b9 ci: reinstate Azure Pipelines support

  • 90: 96657e2 = 90: 928a978 azure-pipeline: drop the GETTEXT_POISON job

  • 91: a9af8be = 91: f450aab azure-pipeline: stop hard-coding apt-get calls

  • 92: 5cd8498 = 92: 35109d2 azure-pipeline: drop the code to write to/read from a file share

  • 93: e1bd570 = 93: 3c25d5b azure-pipeline: use partial clone/parallel checkout to initialize minimal-sdk

  • 94: 60670ba = 94: e95207b azure-pipeline: downcase the job name of the Linux32 job

  • 96: c879d01 = 95: 32fc08e azure-pipeline: run static-analysis on jammy

  • 98: a98bbf6 = 96: 01511dc bswap.h: add support for built-in bswap functions

  • 95: 77ded97 = 97: 0906557 MinGW: link as terminal server aware

  • 97: 1acf162 = 98: 8752383 Fix Windows version resources

  • 99: 3c78990 = 99: 10c9b97 config.mak.uname: add support for clangarm64

  • 100: e351ec8 < -: ----------- ci: create clangarm64-build.yml

  • 104: 1f5d6b2 = 100: a312f70 status: fix for old-style submodules with commondir

  • 105: b3573d0 = 101: 0c6e6d7 windows: skip linking git-<command> for built-ins

  • 106: ef57b5e = 102: 2191bbd windows: fix Repository>Explore Working Copy

  • 101: 7e9e7db = 103: a2e93ff http: optionally load libcurl lazily

  • 102: b8bf94e = 104: 61872fb http: support lazy-loading libcurl also on Windows

  • 103: 341c532 = 105: edb4af1 http: when loading libcurl lazily, allow for multiple SSL backends

  • 107: 7347c83 = 106: 4733873 mingw: do load libcurl dynamically by default

  • 108: 5792917 = 107: a13f595 Add a GitHub workflow to verify that Git/Scalar work in Nano Server

  • 109: b367f70 = 108: 2f6d36e mingw: suggest windows.appendAtomically in more cases

  • 110: e79fd76 = 109: 6fa79c8 win32: use native ANSI sequence processing, if possible

  • 112: ba44977 = 110: 70bfa98 git.rc: include winuser.h

  • 111: 793e990 = 111: cef418d ci: work around a problem with HTTP/2 vs libcurl v8.10.0

  • 118: 45712e6 = 112: 234f80e pack-objects: add --full-name-hash option

  • 119: 8c1ada6 = 113: b0f1e44 repack: test --full-name-hash option

  • 120: 1b4cbdd = 114: c85f4fd pack-objects: add GIT_TEST_FULL_NAME_HASH

  • 121: 97ac379 = 115: 4875b99 git-repack: update usage to match docs

  • 113: 43041db = 116: 2c5bf42 common-main.c: fflush stdout buffer upon exit

  • 114: a657db8 = 117: 08fb43a t5601/t7406(mingw): do run tests with symlink support

  • 115: 803664a ! 118: f3b8834 win32: ensure that localtime_r() is declared even in i686 builds

    @@ Commit message
         Signed-off-by: Johannes Schindelin <[email protected]>
     
      ## git-compat-util.h ##
    -@@ git-compat-util.h: struct strbuf;
    +@@ git-compat-util.h: DISABLE_WARNING(-Wsign-compare)
      /* Approximation of the length of the decimal representation of this type. */
      #define decimal_length(x)	((int)(sizeof(x) * 2.56 + 0.5) + 1)
      
  • 116: facad06 = 119: a591f56 Fallback to AppData if XDG_CONFIG_HOME is unset

  • 117: c084e11 = 120: 4d845df run-command: be helpful with Git LFS fails on Windows 7

  • 122: ff70b3e = 121: e06da52 p5313: add size comparison test

  • 123: e9e1bd0 = 122: 8d4f0c4 test-tool: add helper for name-hash values

  • 124: d7f370c = 123: 4c46e3e repack/pack-objects: mark --full-name-hash as experimental

  • 125: dd1838d = 124: c9c2c66 path-walk: introduce an object walk by path

  • 126: 00eb543 (upstream: b30404d) < -: ----------- mingw_rename: do support directory renames

  • 127: 51143f5 = 125: ca36934 t6601: add helper for testing path-walk API

  • 128: 1c48b5f = 126: 90d3afd path-walk: allow consumer to specify object types

  • 129: f3372d6 = 127: eaeef4f path-walk: allow visiting tags

  • 130: 332753b = 128: 978bec2 revision: create mark_trees_uninteresting_dense()

  • 131: a928048 = 129: 443ce30 path-walk: add prune_all_uninteresting option

  • 132: aec69e9 = 130: 1584676 pack-objects: extract should_attempt_deltas()

  • 133: 1f0ee50 = 131: e15ba67 pack-objects: add --path-walk option

  • 134: 09a9988 = 132: 236812d pack-objects: introduce GIT_TEST_PACK_PATH_WALK

  • 135: 1e7dbcb = 133: 5d0b9bd repack: add --path-walk option

  • 136: ef89194 = 134: caf0ee4 pack-objects: enable --path-walk via config

  • 137: 21b2a09 = 135: 9381bc2 scalar: enable path-walk during push via config

  • 138: 7bf1b20 = 136: 631020e pack-objects: refactor path-walk delta phase

  • 139: 500d88b = 137: 5b0d493 pack-objects: thread the path-based compression

  • 140: 76edb0e = 138: e001506 path-walk API: avoid adding a root tree more than once

  • 141: 92eaef3 = 139: 6e7c46b backfill: add builtin boilerplate

  • 142: cf287bf = 140: c1b581b backfill: basic functionality and tests

  • 143: a4b3f64 = 141: 384f58f backfill: add --batch-size= option

  • 144: eca47f3 = 142: 926c796 backfill: add --sparse option

  • 145: ccec549 = 143: 1ecc734 backfill: assume --sparse when sparse-checkout is enabled

  • 146: bb0476a = 144: 0d7f640 backfill: mark it as experimental

  • 147: 38cc6ef = 145: a27ff73 survey: stub in new experimental 'git-survey' command

  • 148: 97951c0 = 146: 0ac3b9c survey: add command line opts to select references

  • 149: 376f5cc = 147: bc83015 survey: start pretty printing data in table form

  • 150: f9b6169 = 148: 7425c88 survey: add object count summary

  • 151: 7d417a9 = 149: 003f67d survey: summarize total sizes by object type

  • 152: 1268677 = 150: 1c95f36 survey: show progress during object walk

  • 153: a793ddf = 151: 9c755fe survey: add ability to track prioritized lists

  • 154: ded35b8 = 152: 3703b6e survey: add report of "largest" paths

  • 155: 57b7bc9 = 153: 43e0236 survey: add --top= option and config

  • 156: d18a94c = 154: 3f58674 survey: clearly note the experimental nature in the output

  • 157: 354fa83 = 155: 8b13e88 path-walk: improve path-walk speed with many tags

  • 158: a150449 (upstream: c1c5b03) < -: ----------- cmake: better support for out-of-tree builds follow-up

  • 159: 555743c (upstream: df87d53) < -: ----------- cmake(mergetools): better support for out-of-tree builds

  • 160: 1671a05 (upstream: ca358e6) < -: ----------- cmake: use the correct file name for the Perl header

  • 161: 9d204d2 (upstream: 1c01f0f) < -: ----------- cmake: put the Perl modules into the correct location again

  • 162: 3112552 (upstream: 2456374) < -: ----------- cmake/vcxproj: stop special-casing remote-ext

  • 163: ec576d5 = 156: 1c879fd Win32: make FILETIME conversion functions public

  • 164: 9279dfb = 157: 51e1021 Win32: dirent.c: Move opendir down

  • 165: 055ab1b = 158: 6ee445a mingw: make the dirent implementation pluggable

  • 166: 414ec68 = 159: 670dce5 Win32: make the lstat implementation pluggable

  • 167: 63400a8 = 160: 389e13b mingw: add infrastructure for read-only file system level caches

  • 168: 0121406 = 161: 0761e04 mingw: add a cache below mingw's lstat and dirent implementations

  • 169: 8468338 = 162: f23e2bf fscache: load directories only once

  • 170: 8d99b81 = 163: 3d535b9 fscache: add key for GIT_TRACE_FSCACHE

  • 171: 4d2b5b6 = 164: 25fb82c fscache: remember not-found directories

  • 172: d363684 = 165: 7600a21 fscache: add a test for the dir-not-found optimization

  • 173: 732e080 = 166: bd2d35b add: use preload-index and fscache for performance

  • 174: 542851f = 167: e0642de dir.c: make add_excludes aware of fscache during status

  • 175: 15adc5a = 168: bd8ce2a fscache: make fscache_enabled() public

  • 176: 5406c77 = 169: fea8108 dir.c: regression fix for add_excludes with fscache

  • 177: 6f51ff9 = 170: 897b200 fetch-pack.c: enable fscache for stats under .git/objects

  • 178: f0c36bf = 171: e52ef8c checkout.c: enable fscache for checkout again

  • 179: 55a7b5c = 172: f90855d Enable the filesystem cache (fscache) in refresh_index().

  • 180: e1fc253 = 173: 722d3c5 fscache: use FindFirstFileExW to avoid retrieving the short name

  • 181: 7f1db36 = 174: 89d6d84 status: disable and free fscache at the end of the status command

  • 182: 1962d8a = 175: 0809171 fscache: add GIT_TEST_FSCACHE support

  • 183: 634038d = 176: 7060aa6 fscache: add fscache hit statistics

  • 184: 8e1d68a = 177: c2e9695 mem_pool: add GIT_TRACE_MEMPOOL support

  • 185: 3467b1a = 178: 08ce978 fscache: fscache takes an initial size

  • 186: 52ddf03 = 179: c7d6766 fscache: update fscache to be thread specific instead of global

  • 187: 0efde44 = 180: 8d9991c fscache: teach fscache to use mempool

  • 188: 0e644b7 = 181: e12d96e fscache: make fscache_enable() thread safe

  • 189: 570d994 = 182: c0451e0 fscache: teach fscache to use NtQueryDirectoryFile

  • 190: 9dff7b5 = 183: 6c73835 unpack-trees: enable fscache for sparse-checkout

  • 191: 3a54c42 = 184: c657ee8 fscache: remember the reparse tag for each entry

  • 192: f864334 = 185: 91983eb fscache: implement an FSCache-aware is_mount_point()

  • 193: 661e162 = 186: 6358ee1 clean: make use of FSCache

  • 194: 4202631 = 187: 142ea99 git-gui: provide question helper for retry fallback on Windows

  • 195: acf9a7c = 188: 4a0bec0 git gui: set GIT_ASKPASS=git-gui--askpass if not set yet

  • 199: 08da229 = 189: 80e4165 gitk: Unicode file name support

  • 196: 7c1d577 = 190: e263eaa git-gui--askyesno: fix funny text wrapping

  • 200: d76caf6 ! 191: 0828715 gitk: Use an external icon file on Windows

    @@ gitk-git/gitk: if {[expr {[exec git rev-parse --is-inside-work-tree] == "true"}]
     +    }
      }
      # wait for the window to become visible
    - tkwait visibility .
    + if {![winfo viewable .]} {tkwait visibility .}
  • 197: fe69b7a = 192: 5f60d3d git-gui--askyesno: allow overriding the window title

  • 201: 288d132 = 193: fd3b10c gitk: fix arrow keys in input fields with Tcl/Tk >= 8.6

  • 198: 324aea6 = 194: 5c4c32b git-gui--askyesno (mingw): use Git for Windows' icon, if available

  • 202: c41a447 = 195: cfca01f gitk: make the "list references" default window width wider

  • 203: c1c919c = 196: 7887a31 pack-objects (mingw): demonstrate a segmentation fault with large deltas

  • 204: 79a3c8a = 197: ad48595 mingw: support long paths

  • 205: 9003e33 = 198: 14ad2f4 Win32: fix 'lstat("dir/")' with long paths

  • 206: 29c782d = 199: f55c731 win32(long path support): leave drive-less absolute paths intact

  • 208: 9b5ba98 = 200: dc755c9 mingw: Support git_terminal_prompt with more terminals

  • 209: a6daf6e = 201: 4cd5716 compat/terminal.c: only use the Windows console if bash 'read -r' fails

  • 210: 7ae4874 = 202: 77734b7 mingw (git_terminal_prompt): do fall back to CONIN$/CONOUT$ method

  • 211: 46279d9 = 203: dc8a4b0 strbuf_readlink: don't call readlink twice if hint is the exact link size

  • 213: ac316d1 = 204: 92bfb98 strbuf_readlink: support link targets that exceed PATH_MAX

  • 214: fa4fddf = 205: c4f7174 lockfile.c: use is_dir_sep() instead of hardcoded '/' checks

  • 215: f8ac948 = 206: e01c8d3 Win32: don't call GetFileAttributes twice in mingw_lstat()

  • 216: 2bb1e6e = 207: 6638195 Win32: implement stat() with symlink support

  • 217: f3c9296 = 208: 02c9dcf Win32: remove separate do_lstat() function

  • 218: db1a414 = 209: aca5e49 Win32: let mingw_lstat() error early upon problems with reparse points

  • 219: 515cc68 = 210: ef613e5 mingw: teach fscache and dirent about symlinks

  • 220: e4dcb79 = 211: a420856 Win32: lstat(): return adequate stat.st_size for symlinks

  • 207: 63d220b = 212: 0b0e044 compat/fsmonitor/fsm-*-win32: support long paths

  • 212: e79d110 = 213: 9d5f2b8 clean: suggest using core.longPaths if paths are too long to remove

  • 221: 9e4afe6 = 214: 4a2f57f Win32: factor out retry logic

  • 222: 84d9820 = 215: 3604ed0 Win32: change default of 'core.symlinks' to false

  • 223: 1d45809 = 216: 921c079 Win32: add symlink-specific error codes

  • 224: 4de059f = 217: 778eff3 Win32: mingw_unlink: support symlinks to directories

  • 225: 961af97 = 218: 8a25f9c Win32: mingw_rename: support renaming symlinks

  • 226: 81da756 = 219: 81e820c Win32: mingw_chdir: change to symlink-resolved directory

  • 227: 5a99c68 = 220: 171c880 Win32: implement readlink()

  • 228: cb332f8 = 221: 7f0f1d8 mingw: lstat: compute correct size for symlinks

  • 229: 89f21d2 = 222: be47a54 Win32: implement basic symlink() functionality (file symlinks only)

  • 230: 386a891 = 223: dca3e9d Win32: symlink: add support for symlinks to directories

  • 231: 88ba28a = 224: 8c3b470 mingw: try to create symlinks without elevated permissions

  • 232: 1dc2358 = 225: 1c9007c mingw: emulate stat() a little more faithfully

  • 233: 5dd4668 = 226: 393bd2c mingw: special-case index entries for symlinks with buggy size

  • 237: 07c0a27 = 227: e44eee3 Win32: symlink: move phantom symlink creation to a separate function

  • 239: 15384ce = 228: 3082a65 Introduce helper to create symlinks that knows about index_state

  • 234: 1c10ce3 = 229: 3b96aaf mingw: introduce code to detect whether we're inside a Windows container

  • 241: d0c63fc = 230: 6b4fd22 mingw: allow to specify the symlink type in .gitattributes

  • 235: 1e220c0 = 231: 1d5ceb9 mingw: when running in a Windows container, try to rename() harder

  • 242: e4b6fbb = 232: c598361 Win32: symlink: add test for symlink attribute

  • 236: e617430 = 233: d0dcac4 mingw: move the file_attr_to_st_mode() function definition

  • 243: 45bac5f = 234: 53d4e1b mingw: explicitly specify with which cmd to prefix the cmdline

  • 238: eb12ea2 = 235: db1ca57 mingw: Windows Docker volumes are not symbolic links

  • 244: 37decb7 = 236: a0e53ef mingw: when path_lookup() failed, try BusyBox

  • 240: 5b9e665 = 237: 0d4c9f8 mingw: work around rename() failing on a read-only file

  • 245: 07fec36 = 238: 4598563 test-lib: avoid unnecessary Perl invocation

  • 246: 702299d = 239: ad650eb test-tool: learn to act as a drop-in replacement for iconv

  • 247: 601e0da = 240: c1bc594 tests(mingw): if iconv is unavailable, use test-helper --iconv

  • 248: 577a559 = 241: 28f6be5 gitattributes: mark .png files as binary

  • 249: ee2fa97 = 242: db8e5b3 tests: move test PNGs into t/lib-diff/

  • 250: d16830e = 243: e7b6cba tests: only override sort & find if there are usable ones in /usr/bin/

  • 251: c11bf87 = 244: d962207 tests: use the correct path separator with BusyBox

  • 252: fab7c33 = 245: 13d7b5b mingw: only use Bash-ism builtin pwd -W when available

  • 253: f5baf12 = 246: df947e5 tests (mingw): remove Bash-specific pwd option

  • 254: eb3e36a = 247: 1e3eca7 test-lib: add BUSYBOX prerequisite

  • 255: 2af28e3 = 248: ee34322 t5003: use binary file from t/lib-diff/

  • 256: 0085446 = 249: 821e2c9 t5532: workaround for BusyBox on Windows

  • 257: 39e29a7 = 250: 317680f t5605: special-case hardlink test for BusyBox-w32

  • 258: 1328e05 = 251: 09264eb t5813: allow for $PWD to be a Windows path

  • 259: 7e177a9 = 252: 15768a6 t9200: skip tests when $PWD contains a colon

  • 260: 4cf2e36 = 253: 7685619 mingw: add a Makefile target to copy test artifacts

  • 261: cc5440a = 254: 1dbc892 mingw: kill child processes in a gentler way

  • 263: a4fc574 = 255: cec15dd mingw: do not call xutftowcs_path in mingw_mktemp

  • 262: 8220040 = 256: ea0e118 mingw: optionally enable wsl compability file mode bits

  • 264: d2dbe72 = 257: de8147f mingw: really handle SIGINT

  • 268: c70b1f4 = 258: 8b65236 Describe Git for Windows' architecture [no ci]

  • 269: 3f6c794 = 259: 47c803f Modify the Code of Conduct for Git for Windows

  • 270: 0e9c0e2 = 260: 56b4fbf CONTRIBUTING.md: add guide for first-time contributors

  • 271: 7f6bb21 = 261: 8ef9c1d README.md: Add a Windows-specific preamble

  • 273: e4a253a = 262: 0c0c2fd Add a GitHub workflow to monitor component updates

  • 272: 4e9118a = 263: 4563fc0 Add an issue template

  • 265: 9d05384 = 264: 4132d28 Partially un-revert "editor: save and reset terminal after calling EDITOR"

  • 266: 09ac5d9 = 265: 09b369f reset: reinstate support for the deprecated --stdin option

  • 267: 9c1c5e0 = 266: 0ee11d5 fsmonitor: reintroduce core.useBuiltinFSMonitor

  • 275: b6ae40e = 267: bb00470 dependabot: help keeping GitHub Actions versions up to date

  • 274: 69d6c8d = 268: 0cddc3c Modify the GitHub Pull Request template (to reflect Git for Windows)

  • 276: adc85a7 (upstream: 8525e92) < -: ----------- Document how $HOME is set on Windows

  • 277: 75db731 = 269: ae5442e SECURITY.md: document Git for Windows' policies

  • 278: a203ce6 < -: ----------- fixup! ci: create clangarm64-build.yml

This topic branch extends the protections introduced for Git GUI's
CVE-2022-41953 to cover `gitk`, too.

Signed-off-by: Johannes Schindelin <[email protected]>
These fixes were necessary for Sverre Rabbelier's remote-hg to work,
but for some magic reason they are not necessary for the current
remote-hg. Makes you wonder how that one gets away with it.

Signed-off-by: Johannes Schindelin <[email protected]>
This topic branch allows us to specify absolute paths without the drive
prefix e.g. when cloning.

Example:

	C:\Users\me> git clone https://github.com/git/git \upstream-git

This will clone into a new directory C:\upstream-git, in line with how
Windows interprets absolute paths.

Signed-off-by: Johannes Schindelin <[email protected]>
@dscho dscho added this to the Next release milestone Dec 30, 2024
@dscho dscho self-assigned this Dec 30, 2024
@dscho dscho linked an issue Dec 30, 2024 that may be closed by this pull request
Git LFS is now built with Go 1.21 which no longer supports Windows 7.
However, Git for Windows still wants to support Windows 7.

Ideally, Git LFS would re-introduce Windows 7 support until Git for
Windows drops support for Windows 7, but that's not going to happen:
git-for-windows#4996 (comment)

The next best thing we can do is to let the users know what is
happening, and how to get out of their fix, at least.

This is not quite as easy as it would first seem because programs
compiled with Go 1.21 or newer will simply throw an exception and fail
with an Access Violation on Windows 7.

The only way I found to address this is to replicate the logic from Go's
very own `version` command (which can determine the Go version with
which a given executable was built) to detect the situation, and in that
case offer a helpful error message.

This addresses git-for-windows#4996.

Signed-off-by: Johannes Schindelin <[email protected]>
@dscho dscho force-pushed the rebase-to-v2.48.0-rc1 branch from a0dce28 to 33b68f2 Compare December 30, 2024 20:10
@dscho
Copy link
Member Author

dscho commented Dec 30, 2024

Due to ps/build-sign-compare, a couple of comparisons now need casts (and some loop variables need a different type).

Range-diff relative to previously range-diff'ed PR branch
  • 1: 4d845df ! 1: fe4d145 run-command: be helpful with Git LFS fails on Windows 7

    @@ compat/win32/path-utils.c: int win32_fspathcmp(const char *a, const char *b)
     +				 */
     +				if ((q[32] & 0x80) ||
     +				    !q[32] ||
    -+				    (q + 33 + q[32] - p) > size ||
    -+				    q[32] + 1 > go_version_size)
    ++				    (q + 33 + q[32] - p) > (ssize_t)size ||
    ++				    q[32] + 1 > (ssize_t)go_version_size)
     +					goto fail;
     +				res = q[32];
     +				memcpy(go_version, q + 33, res);
  • 2: 0ac3b9c ! 2: d45968a survey: add command line opts to select references

    @@ builtin/survey.c: static void survey_load_config(struct survey_context *ctx)
     +	do_load_refs(ctx, &ref_array);
     +
     +	ctx->report.refs.refs_nr = ref_array.nr;
    -+	for (size_t i = 0; i < ref_array.nr; i++) {
    ++	for (int i = 0; i < ref_array.nr; i++) {
     +		unsigned long size;
     +		struct ref_array_item *item = ref_array.items[i];
     +
  • 3: bc83015 = 3: 8460b70 survey: start pretty printing data in table form

  • 4: 7425c88 ! 4: 13fbae2 survey: add object count summary

    @@ builtin/survey.c: static void do_load_refs(struct survey_context *ctx,
     +	do_load_refs(ctx, &ctx->ref_array);
      
     -	ctx->report.refs.refs_nr = ref_array.nr;
    --	for (size_t i = 0; i < ref_array.nr; i++) {
    +-	for (int i = 0; i < ref_array.nr; i++) {
     +	ctx->report.refs.refs_nr = ctx->ref_array.nr;
    -+	for (size_t i = 0; i < ctx->ref_array.nr; i++) {
    ++	for (int i = 0; i < ctx->ref_array.nr; i++) {
      		unsigned long size;
     -		struct ref_array_item *item = ref_array.items[i];
     +		struct ref_array_item *item = ctx->ref_array.items[i];
    @@ builtin/survey.c: static void survey_phase_refs(struct survey_context *ctx)
     +	repo_init_revisions(ctx->repo, &revs, "");
     +	revs.tag_objects = 1;
     +
    -+	for (size_t i = 0; i < ctx->ref_array.nr; i++) {
    ++	for (int i = 0; i < ctx->ref_array.nr; i++) {
     +		struct ref_array_item *item = ctx->ref_array.items[i];
     +		add_pending_oid(&revs, NULL, &item->objectname, add_flags);
     +	}
  • 5: 003f67d ! 5: 09efe71 survey: summarize total sizes by object type

    @@ builtin/survey.c: static void survey_phase_objects(struct survey_context *ctx)
      	repo_init_revisions(ctx->repo, &revs, "");
      	revs.tag_objects = 1;
      
    - 	for (size_t i = 0; i < ctx->ref_array.nr; i++) {
    + 	for (int i = 0; i < ctx->ref_array.nr; i++) {
      		struct ref_array_item *item = ctx->ref_array.items[i];
      		add_pending_oid(&revs, NULL, &item->objectname, add_flags);
     +		display_progress(ctx->progress, ++(ctx->progress_nr));
  • 6: 1c95f36 ! 6: ddb7e1a survey: show progress during object walk

    @@ builtin/survey.c: static void survey_phase_objects(struct survey_context *ctx)
     +	if (ctx->opts.show_progress)
     +		ctx->progress = start_progress(_("Preparing object walk"),
     +					       ctx->progress_total);
    - 	for (size_t i = 0; i < ctx->ref_array.nr; i++) {
    + 	for (int i = 0; i < ctx->ref_array.nr; i++) {
      		struct ref_array_item *item = ctx->ref_array.items[i];
      		add_pending_oid(&revs, NULL, &item->objectname, add_flags);
      		display_progress(ctx->progress, ++(ctx->progress_nr));
  • 7: 9c755fe = 7: d46939c survey: add ability to track prioritized lists

  • 8: 3703b6e = 8: 44cd3bd survey: add report of "largest" paths

  • 9: 43e0236 = 9: cfad2c1 survey: add --top= option and config

  • 10: 3f58674 = 10: e62a711 survey: clearly note the experimental nature in the output

  • 11: 8b13e88 = 11: 605266f path-walk: improve path-walk speed with many tags

  • 12: 1c879fd = 12: 9ccf04f Win32: make FILETIME conversion functions public

  • 13: 51e1021 = 13: 4f83bd3 Win32: dirent.c: Move opendir down

  • 14: 6ee445a = 14: acf826e mingw: make the dirent implementation pluggable

  • 15: 670dce5 = 15: ffd7471 Win32: make the lstat implementation pluggable

  • 16: 389e13b = 16: 7b21c41 mingw: add infrastructure for read-only file system level caches

  • 17: 0761e04 = 17: 58f5f5e mingw: add a cache below mingw's lstat and dirent implementations

  • 18: f23e2bf = 18: dbb5727 fscache: load directories only once

  • 19: 3d535b9 = 19: d421be1 fscache: add key for GIT_TRACE_FSCACHE

  • 20: 25fb82c = 20: 8b6e95a fscache: remember not-found directories

  • 21: 7600a21 = 21: efb704a fscache: add a test for the dir-not-found optimization

  • 22: bd2d35b = 22: bb34411 add: use preload-index and fscache for performance

  • 23: e0642de = 23: 152143b dir.c: make add_excludes aware of fscache during status

  • 24: bd8ce2a = 24: c6d73c3 fscache: make fscache_enabled() public

  • 25: fea8108 = 25: 7b4bee2 dir.c: regression fix for add_excludes with fscache

  • 26: 897b200 = 26: 6344695 fetch-pack.c: enable fscache for stats under .git/objects

  • 27: e52ef8c = 27: 4610ee1 checkout.c: enable fscache for checkout again

  • 28: f90855d = 28: d6fc4aa Enable the filesystem cache (fscache) in refresh_index().

  • 29: 722d3c5 = 29: 18c3184 fscache: use FindFirstFileExW to avoid retrieving the short name

  • 30: 89d6d84 = 30: 7a7008f status: disable and free fscache at the end of the status command

  • 31: 0809171 = 31: b4c0f8c fscache: add GIT_TEST_FSCACHE support

  • 32: 7060aa6 = 32: cc3b3d3 fscache: add fscache hit statistics

  • 33: c2e9695 = 33: 897a967 mem_pool: add GIT_TRACE_MEMPOOL support

  • 34: 08ce978 = 34: f493a1c fscache: fscache takes an initial size

  • 35: c7d6766 = 35: 948cb0d fscache: update fscache to be thread specific instead of global

  • 36: 8d9991c = 36: 47b4a7d fscache: teach fscache to use mempool

  • 37: e12d96e = 37: fc8074f fscache: make fscache_enable() thread safe

  • 38: c0451e0 ! 38: 44a932c fscache: teach fscache to use NtQueryDirectoryFile

    @@ compat/win32/fscache.c: static struct fsentry *fsentry_create_list(struct fscach
     +	/* handle CWD */
     +	if (!wlen) {
     +		wlen = GetCurrentDirectoryW(ARRAY_SIZE(pattern), pattern);
    -+		if (!wlen || wlen >= ARRAY_SIZE(pattern)) {
    ++		if (!wlen || wlen >= (ssize_t)ARRAY_SIZE(pattern)) {
     +			errno = wlen ? ENAMETOOLONG : err_win_to_posix(GetLastError());
     +			return NULL;
     +		}
    @@ compat/win32/fscache.c: static struct fsentry *fsentry_create_list(struct fscach
     +		 * instead of a directory).  Verify that is the actual cause
     +		 * of the error.
     +		*/
    -+		if (status == STATUS_INVALID_PARAMETER) {
    ++		if (status == (NTSTATUS)STATUS_INVALID_PARAMETER) {
     +			DWORD attributes = GetFileAttributesW(pattern);
     +			if (!(attributes & FILE_ATTRIBUTE_DIRECTORY))
     +				status = ERROR_DIRECTORY;
  • 39: 6c73835 = 39: c9de081 unpack-trees: enable fscache for sparse-checkout

  • 43: 142ea99 = 40: 8e1b2fe git-gui: provide question helper for retry fallback on Windows

  • 40: c657ee8 = 41: e582a35 fscache: remember the reparse tag for each entry

  • 44: 4a0bec0 = 42: 369a476 git gui: set GIT_ASKPASS=git-gui--askpass if not set yet

  • 41: 91983eb = 43: 7b81d7b fscache: implement an FSCache-aware is_mount_point()

  • 46: e263eaa = 44: 0ecf309 git-gui--askyesno: fix funny text wrapping

  • 42: 6358ee1 = 45: c22b327 clean: make use of FSCache

  • 45: 80e4165 = 46: 4588dd6 gitk: Unicode file name support

  • 47: 0828715 = 47: b03f003 gitk: Use an external icon file on Windows

  • 48: 5f60d3d = 48: ab8aecc git-gui--askyesno: allow overriding the window title

  • 49: fd3b10c = 49: e4ee6ab gitk: fix arrow keys in input fields with Tcl/Tk >= 8.6

  • 50: 5c4c32b = 50: f11b5eb git-gui--askyesno (mingw): use Git for Windows' icon, if available

  • 51: cfca01f = 51: 35fe057 gitk: make the "list references" default window width wider

  • 52: 7887a31 = 52: 087fcdc pack-objects (mingw): demonstrate a segmentation fault with large deltas

  • 53: ad48595 = 53: eb4c9f3 mingw: support long paths

  • 54: 14ad2f4 = 54: a6d0870 Win32: fix 'lstat("dir/")' with long paths

  • 55: f55c731 = 55: 2fc693c win32(long path support): leave drive-less absolute paths intact

  • 68: 0b0e044 = 56: a40ccd9 compat/fsmonitor/fsm-*-win32: support long paths

  • 69: 9d5f2b8 = 57: 642bf6a clean: suggest using core.longPaths if paths are too long to remove

  • 56: dc755c9 = 58: 5188ef4 mingw: Support git_terminal_prompt with more terminals

  • 57: 4cd5716 = 59: 9f1c3b1 compat/terminal.c: only use the Windows console if bash 'read -r' fails

  • 58: 77734b7 = 60: 35fda38 mingw (git_terminal_prompt): do fall back to CONIN$/CONOUT$ method

  • 59: dc8a4b0 = 61: aef6f68 strbuf_readlink: don't call readlink twice if hint is the exact link size

  • 60: 92bfb98 = 62: f1fdf8f strbuf_readlink: support link targets that exceed PATH_MAX

  • 61: c4f7174 = 63: dd48368 lockfile.c: use is_dir_sep() instead of hardcoded '/' checks

  • 62: e01c8d3 = 64: d1e8d91 Win32: don't call GetFileAttributes twice in mingw_lstat()

  • 63: 6638195 = 65: 069a48f Win32: implement stat() with symlink support

  • 64: 02c9dcf = 66: d4764dd Win32: remove separate do_lstat() function

  • 65: aca5e49 = 67: a4a9549 Win32: let mingw_lstat() error early upon problems with reparse points

  • 66: ef613e5 = 68: e908af5 mingw: teach fscache and dirent about symlinks

  • 67: a420856 = 69: e6eb0c3 Win32: lstat(): return adequate stat.st_size for symlinks

  • 70: 4a2f57f = 70: 18c55cb Win32: factor out retry logic

  • 71: 3604ed0 = 71: a030354 Win32: change default of 'core.symlinks' to false

  • 72: 921c079 = 72: a7cbb6c Win32: add symlink-specific error codes

  • 73: 778eff3 = 73: 3c3d8b8 Win32: mingw_unlink: support symlinks to directories

  • 74: 8a25f9c = 74: 210defc Win32: mingw_rename: support renaming symlinks

  • 75: 81e820c = 75: 4d1e17c Win32: mingw_chdir: change to symlink-resolved directory

  • 76: 171c880 = 76: faf75cd Win32: implement readlink()

  • 77: 7f0f1d8 = 77: 87f2027 mingw: lstat: compute correct size for symlinks

  • 78: be47a54 = 78: 8c705f6 Win32: implement basic symlink() functionality (file symlinks only)

  • 79: dca3e9d = 79: d030803 Win32: symlink: add support for symlinks to directories

  • 80: 8c3b470 = 80: 854ea6e mingw: try to create symlinks without elevated permissions

  • 81: 1c9007c = 81: 4171920 mingw: emulate stat() a little more faithfully

  • 82: 393bd2c = 82: 4132145 mingw: special-case index entries for symlinks with buggy size

  • 85: 3b96aaf = 83: 227d8f2 mingw: introduce code to detect whether we're inside a Windows container

  • 87: 1d5ceb9 = 84: 4685d74 mingw: when running in a Windows container, try to rename() harder

  • 89: d0dcac4 = 85: f082d36 mingw: move the file_attr_to_st_mode() function definition

  • 91: db1ca57 ! 86: 0fd6703 mingw: Windows Docker volumes are not symbolic links

    @@ compat/win32/fscache.c: static struct fsentry *fseentry_create_entry(struct fsca
     +	 * telling Git that these are *not* symbolic links.
     +	 */
     +	if (fse->reparse_tag == IO_REPARSE_TAG_SYMLINK &&
    -+	    sizeof(buf) > (list ? list->len + 1 : 0) + fse->len + 1 &&
    ++	    sizeof(buf) > (size_t)(list ? list->len + 1 : 0) + fse->len + 1 &&
     +	    is_inside_windows_container()) {
     +		size_t off = 0;
     +		if (list) {
  • 83: e44eee3 = 87: a06a178 Win32: symlink: move phantom symlink creation to a separate function

  • 84: 3082a65 = 88: 2214990 Introduce helper to create symlinks that knows about index_state

  • 86: 6b4fd22 = 89: 5cd117b mingw: allow to specify the symlink type in .gitattributes

  • 88: c598361 = 90: 47f18ce Win32: symlink: add test for symlink attribute

  • 90: 53d4e1b = 91: 85effa5 mingw: explicitly specify with which cmd to prefix the cmdline

  • 92: a0e53ef = 92: ad26f19 mingw: when path_lookup() failed, try BusyBox

  • 94: 4598563 = 93: 7b20306 test-lib: avoid unnecessary Perl invocation

  • 95: ad650eb = 94: 4958313 test-tool: learn to act as a drop-in replacement for iconv

  • 93: 0d4c9f8 = 95: a153b30 mingw: work around rename() failing on a read-only file

  • 96: c1bc594 = 96: 674530f tests(mingw): if iconv is unavailable, use test-helper --iconv

  • 97: 28f6be5 = 97: 6ce4a3b gitattributes: mark .png files as binary

  • 98: db8e5b3 = 98: c3a2be1 tests: move test PNGs into t/lib-diff/

  • 99: e7b6cba = 99: ec4d724 tests: only override sort & find if there are usable ones in /usr/bin/

  • 100: d962207 = 100: b46a9b5 tests: use the correct path separator with BusyBox

  • 101: 13d7b5b = 101: ac5a672 mingw: only use Bash-ism builtin pwd -W when available

  • 102: df947e5 = 102: 6152bcd tests (mingw): remove Bash-specific pwd option

  • 103: 1e3eca7 = 103: 8ee0271 test-lib: add BUSYBOX prerequisite

  • 104: ee34322 = 104: f9dbe55 t5003: use binary file from t/lib-diff/

  • 105: 821e2c9 = 105: d9e072b t5532: workaround for BusyBox on Windows

  • 106: 317680f = 106: 5f01139 t5605: special-case hardlink test for BusyBox-w32

  • 107: 09264eb = 107: d279ba6 t5813: allow for $PWD to be a Windows path

  • 108: 15768a6 = 108: 5bbbb0f t9200: skip tests when $PWD contains a colon

  • 109: 7685619 = 109: 4af18b4 mingw: add a Makefile target to copy test artifacts

  • 112: ea0e118 ! 110: ad56c15 mingw: optionally enable wsl compability file mode bits

    @@ compat/win32/fscache.c: static struct fsentry *fseentry_create_entry(struct fsca
      	filetime_to_timespec((FILETIME *)&(fdata->CreationTime),
      			     &(fse->u.s.st_ctim));
     +	if (fdata->EaSize > 0 &&
    -+	    sizeof(buf) >= (list ? list->len+1 : 0) + fse->len+1 &&
    ++	    sizeof(buf) >= (size_t)(list ? list->len+1 : 0) + fse->len+1 &&
     +	    are_wsl_compatible_mode_bits_enabled()) {
     +		size_t off = 0;
     +		wchar_t wpath[MAX_LONG_PATH];
  • 110: 1dbc892 = 111: 251ef0e mingw: kill child processes in a gentler way

  • 111: cec15dd = 112: 9faf285 mingw: do not call xutftowcs_path in mingw_mktemp

  • 113: de8147f = 113: 70d062c mingw: really handle SIGINT

  • 120: 4132d28 = 114: 1d8bfb6 Partially un-revert "editor: save and reset terminal after calling EDITOR"

  • 121: 09b369f = 115: d7bed3c reset: reinstate support for the deprecated --stdin option

  • 114: 8b65236 = 116: 781defd Describe Git for Windows' architecture [no ci]

  • 115: 47c803f = 117: c320c64 Modify the Code of Conduct for Git for Windows

  • 116: 56b4fbf = 118: 31aeadc CONTRIBUTING.md: add guide for first-time contributors

  • 117: 8ef9c1d = 119: b873c17 README.md: Add a Windows-specific preamble

  • 118: 0c0c2fd = 120: e9611a4 Add a GitHub workflow to monitor component updates

  • 119: 4563fc0 = 121: a64fdf6 Add an issue template

  • 122: 0ee11d5 = 122: dd9f5a6 fsmonitor: reintroduce core.useBuiltinFSMonitor

  • 123: bb00470 = 123: 164076d dependabot: help keeping GitHub Actions versions up to date

  • 124: 0cddc3c = 124: bc3b399 Modify the GitHub Pull Request template (to reflect Git for Windows)

  • 125: ae5442e = 125: d902c18 SECURITY.md: document Git for Windows' policies

dscho added 21 commits December 30, 2024 21:33
It seems to be not exactly rare on Windows to install NTFS junction
points (the equivalent of "bind mounts" on Linux/Unix) in worktrees,
e.g. to map some development tools into a subdirectory.

In such a scenario, it is pretty horrible if `git clean -dfx` traverses
into the mapped directory and starts to "clean up".

Let's just not do that. Let's make sure before we traverse into a
directory that it is not a mount point (or junction).

This addresses git-for-windows#607

Signed-off-by: Johannes Schindelin <[email protected]>
Windows' equivalent to "bind mounts", NTFS junction points, can be
unlinked without affecting the mount target. This is clearly what users
expect to happen when they call `git clean -dfx` in a worktree that
contains NTFS junction points: the junction should be removed, and the
target directory of said junction should be left alone (unless it is
inside the worktree).

Signed-off-by: Johannes Schindelin <[email protected]>
This topic branch teaches `git clean` to respect NTFS junctions and Unix
bind mounts: it will now stop at those boundaries.

Signed-off-by: Johannes Schindelin <[email protected]>
In MSYS2, we have two Python interpreters at our disposal, so we can
include the Python stuff in the build.

Signed-off-by: Johannes Schindelin <[email protected]>
This topic vendors in mimalloc v2.0.9, a fast allocator that allows Git
for Windows to perform efficiently.

Switch Git for Windows to using mimalloc instead of nedmalloc
…eband-config

Config option to disable side-band-64k for transport
Make sure `errno` is set when socket operations fail
…ymlinks

Do resolve symlinks in `getcwd()`
mingw: fix fatal error working on mapped network drives on Windows
…g-curl

clink.pl: fix MSVC compile script to handle libcurl-d.lib
…nction

Handle `git add <file>` where <file> traverses an NTFS junction
Allow running Git directly from `C:\Program Files\Git\mingw64\bin\git.exe`
…st-effort

Introduce and use the new "best effort" strategy for Secure Channel revoke checking
…-in-vs/master

ci: avoid d/f conflict in vs/master
This topic branch allows `add -p` and `add -i` with a large number of
files. It is kind of a hack that was never really meant to be
upstreamed. Let's see if we can do better in the built-in `add -p`.

Signed-off-by: Johannes Schindelin <[email protected]>
git add -i: handle CR/LF line endings in the interactive input
Rationalize line endings for scissors-cleanup
…xtra_info

t/t0014: fix: eliminate additional lines from trace
This merges the current version of the patch that tries to address Git
GUI's problems with intent-to-add files.

This patch will likely be improved substantially before it is merged
into Git GUI's main branch, but we want to have _something_ resembling a
fix already in Git for Windows v2.29.0.

Signed-off-by: Johannes Schindelin <[email protected]>
…e-and-headless

Include Windows-specific maintenance and headless-git
Even if CMake is not the canonical way to build Git for Windows, but
CMake support merely exists in Git to support building Git for Windows
using Visual Studio, we should include `headless-git` in such a scenario
when installing the binaries to a given location.
dscho and others added 11 commits December 30, 2024 22:12
…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 force-pushed the rebase-to-v2.48.0-rc1 branch from aceb01b to 5d54b0d Compare December 30, 2024 21:13
@dscho
Copy link
Member Author

dscho commented Dec 30, 2024

I won't even say more than "ps/ci-meson"...

Range-diff relative to the previously range-diff'ed PR branch
  • 1: 8d4f0c4 ! 1: c18eec2 test-tool: add helper for name-hash values

    @@ Makefile: TEST_BUILTINS_OBJS += test-lazy-init-name-hash.o
      TEST_BUILTINS_OBJS += test-pack-mtimes.o
      TEST_BUILTINS_OBJS += test-parse-options.o
     
    + ## t/helper/meson.build ##
    +@@ t/helper/meson.build: test_tool_sources = [
    +   'test-match-trees.c',
    +   'test-mergesort.c',
    +   'test-mktemp.c',
    ++  'test-name-hash.c',
    +   'test-online-cpus.c',
    +   'test-pack-mtimes.c',
    +   'test-parse-options.c',
    +
      ## t/helper/test-name-hash.c (new) ##
     @@
     +/*
  • 2: 4c46e3e = 2: d3c8e10 repack/pack-objects: mark --full-name-hash as experimental

  • 3: 0374048 = 3: 717d2ea path-walk: introduce an object walk by path

  • 4: 03f1fa3 ! 4: 5712852 t6601: add helper for testing path-walk API

    @@ Makefile: TEST_BUILTINS_OBJS += test-parse-options.o
      TEST_BUILTINS_OBJS += test-pkt-line.o
      TEST_BUILTINS_OBJS += test-proc-receive.o
     
    + ## t/helper/meson.build ##
    +@@ t/helper/meson.build: test_tool_sources = [
    +   'test-parse-pathspec-file.c',
    +   'test-partial-clone.c',
    +   'test-path-utils.c',
    ++  'test-path-walk.c',
    +   'test-pcre2-config.c',
    +   'test-pkt-line.c',
    +   'test-proc-receive.c',
    +
      ## t/helper/test-path-walk.c (new) ##
     @@
     +#define USE_THE_REPOSITORY_VARIABLE
  • 5: 582bd80 = 5: 5ca70e2 path-walk: allow consumer to specify object types

  • 6: e2b31bf = 6: ea9bfb1 path-walk: allow visiting tags

  • 7: 1e832cf = 7: 22bf55a revision: create mark_trees_uninteresting_dense()

  • 8: b129aab = 8: c828be5 path-walk: add prune_all_uninteresting option

  • 9: 476cbfe = 9: 4ba7825 pack-objects: extract should_attempt_deltas()

  • 10: 664ac43 = 10: 631e5ae pack-objects: add --path-walk option

  • 11: c2ac1ec = 11: 668d2c6 pack-objects: introduce GIT_TEST_PACK_PATH_WALK

  • 12: cc51d58 = 12: c08b741 repack: add --path-walk option

  • 13: 7230ab5 = 13: bcc2998 pack-objects: enable --path-walk via config

  • 14: d1a5221 = 14: b66f206 scalar: enable path-walk during push via config

  • 15: 0599e54 = 15: fc1b841 pack-objects: refactor path-walk delta phase

  • 16: 79d3bac = 16: 00d5b70 pack-objects: thread the path-based compression

  • 17: 7bb97e8 = 17: 82591fb path-walk API: avoid adding a root tree more than once

  • 18: 1b4947c = 18: ed57923 backfill: add builtin boilerplate

  • 19: 6e8604a = 19: 8fa78d4 backfill: basic functionality and tests

  • 20: 1ff5b45 = 20: 6bbef15 backfill: add --batch-size= option

  • 21: c079c34 = 21: cdcc117 backfill: add --sparse option

  • 22: 5e99f2d = 22: 0ccd24d backfill: assume --sparse when sparse-checkout is enabled

  • 23: 7870d2e = 23: e3a0eb1 backfill: mark it as experimental

  • 24: e21724b = 24: 247d737 survey: stub in new experimental 'git-survey' command

  • 25: 382efe4 = 25: 1b0e485 survey: add command line opts to select references

  • 26: 3910994 = 26: dcde0e1 survey: start pretty printing data in table form

  • 27: 13b0b53 = 27: ae8bf20 survey: add object count summary

  • 28: fcabcb0 = 28: e91880a survey: summarize total sizes by object type

  • 29: 96a0bfa = 29: 8039e13 survey: show progress during object walk

  • 30: 541d7d7 = 30: 4c6ca70 survey: add ability to track prioritized lists

  • 31: ca12e0f = 31: b0605a4 survey: add report of "largest" paths

  • 32: bae196c = 32: daeb926 survey: add --top= option and config

  • 33: 21dfb32 = 33: 937327e survey: clearly note the experimental nature in the output

  • 34: c699a87 = 34: 43f7f13 path-walk: improve path-walk speed with many tags

  • 35: 4e6190f = 35: 7437408 Win32: make FILETIME conversion functions public

  • 36: 8b623d5 = 36: c467349 Win32: dirent.c: Move opendir down

  • 37: 95e9209 = 37: c1a73bc mingw: make the dirent implementation pluggable

  • 38: a0f82f1 = 38: 8f716ae Win32: make the lstat implementation pluggable

  • 39: 3366a23 = 39: 84375a7 mingw: add infrastructure for read-only file system level caches

  • 40: f040a69 = 40: 1ff2275 mingw: add a cache below mingw's lstat and dirent implementations

  • 41: 309e63a = 41: 3c6c1a3 fscache: load directories only once

  • 42: 99d3337 = 42: 842ccc1 fscache: add key for GIT_TRACE_FSCACHE

  • 43: 17cdf4f = 43: e251d36 fscache: remember not-found directories

  • 44: affe15b = 44: f2ed338 fscache: add a test for the dir-not-found optimization

  • 45: 969f9e7 = 45: 37a5774 add: use preload-index and fscache for performance

  • 46: af49fd2 = 46: 1eecdca dir.c: make add_excludes aware of fscache during status

  • 47: 3c048e2 = 47: 8b9520d fscache: make fscache_enabled() public

  • 48: cb866f3 = 48: 6e65c31 dir.c: regression fix for add_excludes with fscache

  • 49: 4c4a72a = 49: 5ce03d7 fetch-pack.c: enable fscache for stats under .git/objects

  • 50: 7f345f5 = 50: e89f5ef checkout.c: enable fscache for checkout again

  • 51: cbadbe4 = 51: 9a234e5 Enable the filesystem cache (fscache) in refresh_index().

  • 52: d26c1ed = 52: ba37bce fscache: use FindFirstFileExW to avoid retrieving the short name

  • 53: 9ca3a0e = 53: c16679f status: disable and free fscache at the end of the status command

  • 54: fd7b7fc = 54: e31fe77 fscache: add GIT_TEST_FSCACHE support

  • 55: b34eee1 = 55: b7f233d fscache: add fscache hit statistics

  • 56: 9b0b6ee = 56: 7212f15 mem_pool: add GIT_TRACE_MEMPOOL support

  • 57: eddc760 = 57: d62cc4a fscache: fscache takes an initial size

  • 58: 221f9dd = 58: 7b620c6 fscache: update fscache to be thread specific instead of global

  • 59: ad091bf = 59: 3308914 fscache: teach fscache to use mempool

  • 60: 0f24ce6 = 60: 951831f fscache: make fscache_enable() thread safe

  • 61: 83bc2d0 = 61: 0ed68ab fscache: teach fscache to use NtQueryDirectoryFile

  • 62: 25c70b0 = 62: a4932ba unpack-trees: enable fscache for sparse-checkout

  • 63: 89088f7 = 63: 658faab fscache: remember the reparse tag for each entry

  • 64: 921f938 = 64: 84dc943 fscache: implement an FSCache-aware is_mount_point()

  • 66: 11069a0 = 65: aff9c5c clean: make use of FSCache

  • 65: a1feba2 = 66: 13aaa6f git-gui: provide question helper for retry fallback on Windows

  • 67: a79c002 = 67: 999b9d2 git gui: set GIT_ASKPASS=git-gui--askpass if not set yet

  • 68: bc18dfc = 68: 53bc672 gitk: Unicode file name support

  • 69: 917217d = 69: d2a95c9 git-gui--askyesno: fix funny text wrapping

  • 70: 3bd46de = 70: 2891686 gitk: Use an external icon file on Windows

  • 71: 20044bb = 71: e85ee97 git-gui--askyesno: allow overriding the window title

  • 72: 9fa3633 = 72: 9360077 gitk: fix arrow keys in input fields with Tcl/Tk >= 8.6

  • 73: 99ecbd2 = 73: 8b10c79 git-gui--askyesno (mingw): use Git for Windows' icon, if available

  • 74: 47b96c1 = 74: ec83eb8 gitk: make the "list references" default window width wider

  • 75: 3cee48d = 75: dba37e8 pack-objects (mingw): demonstrate a segmentation fault with large deltas

  • 76: 7aac222 = 76: da59a5a mingw: support long paths

  • 77: f115175 = 77: 29d2eb0 Win32: fix 'lstat("dir/")' with long paths

  • 78: f413f5d = 78: 281482c win32(long path support): leave drive-less absolute paths intact

  • 79: cdf49ad = 79: 9d9060a compat/fsmonitor/fsm-*-win32: support long paths

  • 80: 5b508a6 = 80: ba0f161 clean: suggest using core.longPaths if paths are too long to remove

  • 81: c6625e1 = 81: ffac96b mingw: Support git_terminal_prompt with more terminals

  • 82: 0f255a7 = 82: 8b9b5a0 compat/terminal.c: only use the Windows console if bash 'read -r' fails

  • 83: 52b9608 = 83: 86d309f mingw (git_terminal_prompt): do fall back to CONIN$/CONOUT$ method

  • 84: 8020a58 = 84: c8b30ea strbuf_readlink: don't call readlink twice if hint is the exact link size

  • 85: 7de9902 = 85: 7564b76 strbuf_readlink: support link targets that exceed PATH_MAX

  • 86: ffbb7ee = 86: 7045375 lockfile.c: use is_dir_sep() instead of hardcoded '/' checks

  • 87: 179e6bd = 87: 4dd345f Win32: don't call GetFileAttributes twice in mingw_lstat()

  • 88: 96e9fad = 88: 24b2079 Win32: implement stat() with symlink support

  • 89: 88c2b18 = 89: 4448227 Win32: remove separate do_lstat() function

  • 90: 5d60f48 = 90: 720ff4f Win32: let mingw_lstat() error early upon problems with reparse points

  • 91: 1d7afb2 = 91: 7f0e475 mingw: teach fscache and dirent about symlinks

  • 92: 5e2e1f5 = 92: 15d9ebc Win32: lstat(): return adequate stat.st_size for symlinks

  • 93: 31b041e = 93: bfe3a8d Win32: factor out retry logic

  • 94: 279626a = 94: fd71c74 Win32: change default of 'core.symlinks' to false

  • 95: 34702c6 = 95: 9d3dc70 Win32: add symlink-specific error codes

  • 96: c48d516 = 96: 4aacaa2 Win32: mingw_unlink: support symlinks to directories

  • 97: 509ec5c = 97: a476dff Win32: mingw_rename: support renaming symlinks

  • 98: f209a70 = 98: b5ce5a5 Win32: mingw_chdir: change to symlink-resolved directory

  • 99: e28536b = 99: bbdff29 Win32: implement readlink()

  • 100: ad2b400 = 100: 22444da mingw: lstat: compute correct size for symlinks

  • 101: e88c4db = 101: 779dfff Win32: implement basic symlink() functionality (file symlinks only)

  • 102: dbe99bc = 102: d7135b3 Win32: symlink: add support for symlinks to directories

  • 103: 91a7291 = 103: f776f96 mingw: try to create symlinks without elevated permissions

  • 104: efbd12f = 104: bb48bc5 mingw: emulate stat() a little more faithfully

  • 105: 7415564 = 105: b19e053 mingw: special-case index entries for symlinks with buggy size

  • 106: 2ceaa79 = 106: 0f5b3be mingw: introduce code to detect whether we're inside a Windows container

  • 107: 6b51fc8 = 107: 03e4daf mingw: when running in a Windows container, try to rename() harder

  • 110: 93d7490 = 108: f33b115 mingw: move the file_attr_to_st_mode() function definition

  • 108: 3c48f29 = 109: 61d9dc0 Win32: symlink: move phantom symlink creation to a separate function

  • 109: a042ebd = 110: 714ab70 Introduce helper to create symlinks that knows about index_state

  • 111: d977903 = 111: c1d47f9 mingw: allow to specify the symlink type in .gitattributes

  • 112: ceaf6b0 = 112: ddd67d2 mingw: Windows Docker volumes are not symbolic links

  • 113: d81d31d = 113: c85178f Win32: symlink: add test for symlink attribute

  • 114: 7adbbbc = 114: d710917 mingw: work around rename() failing on a read-only file

  • 115: 1bef75c = 115: 3c55f81 mingw: explicitly specify with which cmd to prefix the cmdline

  • 116: 8a79e07 = 116: 6202426 mingw: when path_lookup() failed, try BusyBox

  • 117: c5467ad = 117: 8d068c8 test-lib: avoid unnecessary Perl invocation

  • 118: 374c902 ! 118: 33afc51 test-tool: learn to act as a drop-in replacement for iconv

    @@ Makefile: TEST_BUILTINS_OBJS += test-hash-speed.o
      TEST_BUILTINS_OBJS += test-lazy-init-name-hash.o
      TEST_BUILTINS_OBJS += test-match-trees.o
     
    + ## t/helper/meson.build ##
    +@@ t/helper/meson.build: test_tool_sources = [
    +   'test-hash.c',
    +   'test-hashmap.c',
    +   'test-hexdump.c',
    ++  'test-iconv.c',
    +   'test-json-writer.c',
    +   'test-lazy-init-name-hash.c',
    +   'test-match-trees.c',
    +
      ## t/helper/test-iconv.c (new) ##
     @@
     +#include "test-tool.h"
  • 119: f6355ed = 119: dcab3e9 tests(mingw): if iconv is unavailable, use test-helper --iconv

  • 120: 8513428 = 120: 3b6db2a gitattributes: mark .png files as binary

  • 121: 72adc65 = 121: 7bcc5bb tests: move test PNGs into t/lib-diff/

  • 122: 9d92b67 = 122: 1819e89 tests: only override sort & find if there are usable ones in /usr/bin/

  • 123: c4252e2 = 123: cb214a9 tests: use the correct path separator with BusyBox

  • 124: e8502d8 = 124: b44e0a1 mingw: only use Bash-ism builtin pwd -W when available

  • 125: 2e86327 = 125: 6f709cd tests (mingw): remove Bash-specific pwd option

  • 126: b8487f4 = 126: fe9b337 test-lib: add BUSYBOX prerequisite

  • 127: de225da = 127: 56397c0 t5003: use binary file from t/lib-diff/

  • 128: dea8482 = 128: 943cebe t5532: workaround for BusyBox on Windows

  • 129: 3379c4b = 129: 76aaf08 t5605: special-case hardlink test for BusyBox-w32

  • 130: 9931655 = 130: b11693c t5813: allow for $PWD to be a Windows path

  • 131: 0b49737 = 131: cc5a6a1 t9200: skip tests when $PWD contains a colon

  • 132: bb0b44c = 132: e77fe5f mingw: add a Makefile target to copy test artifacts

  • 133: ef9cd5b = 133: 08bf6c2 mingw: kill child processes in a gentler way

  • 134: e42c4f4 = 134: 9dc26ca mingw: optionally enable wsl compability file mode bits

  • 136: f6bfbba = 135: cf381e0 mingw: do not call xutftowcs_path in mingw_mktemp

  • 135: b5b4f66 = 136: 985de60 mingw: really handle SIGINT

  • 137: 4d00c93 = 137: c0e4873 Partially un-revert "editor: save and reset terminal after calling EDITOR"

  • 138: f75dec5 = 138: afc1e3b reset: reinstate support for the deprecated --stdin option

  • 140: d53f131 = 139: b44b8e6 Describe Git for Windows' architecture [no ci]

  • 141: 9aaf22b = 140: 05e17f6 Modify the Code of Conduct for Git for Windows

  • 142: dd56ead = 141: bfe0af7 CONTRIBUTING.md: add guide for first-time contributors

  • 143: 76a8b95 = 142: 80bd342 README.md: Add a Windows-specific preamble

  • 145: 7bdcac7 = 143: 1ba81bb Add a GitHub workflow to monitor component updates

  • 144: 23d4d50 = 144: befbbb2 Add an issue template

  • 139: da8c37a = 145: 4fcf9ff fsmonitor: reintroduce core.useBuiltinFSMonitor

  • 147: 7742f46 = 146: 7e81408 dependabot: help keeping GitHub Actions versions up to date

  • 146: 38943c5 = 147: 183c8c9 Modify the GitHub Pull Request template (to reflect Git for Windows)

  • 148: 61db885 = 148: 24fa65c SECURITY.md: document Git for Windows' policies

@dscho
Copy link
Member Author

dscho commented Dec 30, 2024

/git-artifacts

The tag-git workflow run was started

The git-artifacts-x86_64 workflow run was started.
The git-artifacts-i686 workflow run was started.
The git-artifacts-aarch64 workflow run was started.

@dscho
Copy link
Member Author

dscho commented Dec 30, 2024

There are apparently new checks in Git GUI and in gitk that fail to anticipate Git for Windows' version scheme:

image

image

I will have to cut out more vacation time tomorrow to fix these.

@rimrul
Copy link
Member

rimrul commented Dec 31, 2024

All the version check code in git-gui is ancient.

https://github.com/git/git/blame/master/git-gui/git-gui.sh#L964-L1056

Maybe this?

git@e5b5eca

@rimrul
Copy link
Member

rimrul commented Dec 31, 2024

@rimrul
Copy link
Member

rimrul commented Dec 31, 2024

Did the output of a plain git version change?

@dscho
Copy link
Member Author

dscho commented Dec 31, 2024

@rimrul you're right, it's neither git gui nor gitk, the fault lies with the git version output. Compare these two:

git version v2.48.0-rc1.windows.1
git version 2.48.0.rc0.windows.1

Notice the v and the - differences.

@dscho
Copy link
Member Author

dscho commented Dec 31, 2024

My money is on 992bc56.

@dscho
Copy link
Member Author

dscho commented Dec 31, 2024

My money is on 992bc56.

And that wild guess turned out to be spot on: GIT_VERSION is set in our automation, and before that commit that environment variable would have been ignored, after that commit the environment variable's contents override what git version shows.

@rimrul
Copy link
Member

rimrul commented Dec 31, 2024

And I think I found the review that caused this new behaviour:

https://lore.kernel.org/git/[email protected]/

dscho added a commit to git-for-windows/git-for-windows-automation that referenced this pull request Dec 31, 2024
In the course of testing Git for Windows v2.48.0-rc1 before releasing
the artifacts, I noticed a rather big regression in Git GUI/gitk:
git-for-windows/git#5337 (comment)

Essentially, they both complained about incompatible Git versions.

The culprit is not in Git GUI nor in gitk, though, it is in Git's
992bc5618f2 (GIT-VERSION-GEN: fix overriding GIT_VERSION, 2024-12-20).
As of that revision, Git's build will now respect the environment
variable `GIT_VERSION` and use it verbatim.

In Git for Windows' automation, we have defined that environment
variable for ages, and it is not in the form that `git version` is
supposed to be: The latter should output a version that does _not_ start
with a `v` and does not include dashes either (replacing any `-` by `.`
in the build process).

This broke Git for Windows v2.48.0-rc1, and we have to adapt the
automation. We did this in git-for-windows/MINGW-packages@56d5c67af
(git: force-fully ignore the environment variable `GIT_VERSION`,
2024-12-31).

To make this take effect in a rebuild of the Git for Windows artifacts,
we have to ignore the previously-cached packages (where `git version`
would still output `git version v2.48.0-rc1.windows.1` instead of the
desired `git version 2.48.0.rc1.windows.1`). We do that by
using a special cache key for that Git version.

Signed-off-by: Johannes Schindelin <[email protected]>
@dscho
Copy link
Member Author

dscho commented Dec 31, 2024

(Hopefully) fixed via git-for-windows/MINGW-packages@56d5c67 and git-for-windows/git-for-windows-automation@6224fe2, then manually triggering the git-artifacts runs for aarch64, x86_64 and for i686. (I could unfortunately not simply re-run the previous runs because they would still have targeted the original git-for-windows-automation commit and hence retrieved the cached package without rebuilding it, and therefore it would not have addressed the symptoms).

@dscho
Copy link
Member Author

dscho commented Dec 31, 2024

(Hopefully) fixed

Looking good:

GIT_VERSION=2.48.0.rc1.windows.1

@dscho
Copy link
Member Author

dscho commented Dec 31, 2024

I noticed that the release notes still claim that MSYS2 runtime is at v3.5.5, but I do not want to spend the time to go through the entire release process again: I want to have a vacation, and it's only -rc1 anyway (and most of the people who would test -rc1 are probably wiser than me and simply turned off their notifications so that their vacation isn't kaput).

So I'll just release -rc1 as-is.

@dscho
Copy link
Member Author

dscho commented Dec 31, 2024

/release

The release-git workflow run was started

@gitforwindowshelper gitforwindowshelper bot merged commit 5d54b0d into git-for-windows:main Dec 31, 2024
71 of 72 checks passed
@dscho dscho deleted the rebase-to-v2.48.0-rc1 branch December 31, 2024 10:41
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-rc1