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.47.0-rc1 #5187

Merged
merged 454 commits into from
Oct 4, 2024

Conversation

dscho
Copy link
Member

@dscho dscho commented Oct 3, 2024

Range-diff relative to
  • 1: 42c72f6 = 1: f4a21be gitk(Windows): avoid inadvertently calling executables in the worktree

  • 2: 75259a3 = 2: 4d1fa2f t9350: point out that refs are not updated correctly

  • 3: 2950204 = 3: 9c8ddeb transport-helper: add trailing --

  • 4: f6a1087 = 4: 0388e0f remote-helper: check helper status after import/export

  • 5: f577d4f = 5: a2fc5f4 mingw: demonstrate a problem with certain absolute paths

  • 8: 3f57ab8 = 6: 19e2851 Always auto-gc after calling a fast-import transport

  • 9: 4b660c2 = 7: 591248d mingw: allow absolute paths without drive prefix

  • 7: bc5dcde = 8: 241c1df mingw: include the Python parts in the build

  • 6: 932c431 = 9: a6c8bed clean: do not traverse mount points

  • 11: 61f6465 = 10: dff182e win32/pthread: avoid name clashes with winpthread

  • 10: 0c35494 = 11: 39566c5 clean: remove mount points when possible

  • 12: a55ffbd = 12: 34ba44b git-compat-util: avoid redeclaring _DEFAULT_SOURCE

  • 13: be7959f = 13: f603a03 Import the source code of mimalloc v2.1.2

  • 14: 89248e7 = 14: 25f63e8 mimalloc: adjust for building inside Git

  • 15: c9ca751 = 15: f699fda mimalloc: offer a build-time option to enable it

  • 16: b3e07b9 = 16: cac1794 mimalloc: use "weak" random seed when statically linked

  • 17: 260111b = 17: 6021bfb mingw: use mimalloc

  • 18: 6965bc6 = 18: 8eeb5a0 transport: optionally disable side-band-64k

  • 20: 8984fef = 19: 228a2ba mingw: make sure errno is set correctly when socket operations fail

  • 21: 53d32ae = 20: 65bfabd mingw: do resolve symlinks in getcwd()

  • 22: 7fb700b = 21: c08df14 mingw: fix fatal error working on mapped network drives on Windows

  • 19: 8289990 = 22: e781529 mingw: demonstrate a git add issue with NTFS junctions

  • 23: b4fa6a6 = 23: c78ac59 clink.pl: fix MSVC compile script to handle libcurl-d.lib

  • 24: 89be22f = 24: 64b04e8 mingw: ensure valid CTYPE

  • 26: 977e2f0 = 25: ae71902 strbuf_realpath(): use platform-dependent API if available

  • 25: cbbb7f6 = 26: 40e207d mingw: allow git.exe to be used instead of the "Git wrapper"

  • 28: c985261 = 27: b680f09 mingw: implement a platform-specific strbuf_realpath()

  • 29: 10567fe = 28: 1b42afc vcxproj: unclash project directories with build outputs

  • 27: c5ffba6 = 29: 2e0c2ab mingw: ignore HOMEDRIVE/HOMEPATH if it points to Windows' system directory

  • 32: 0a7c029 = 30: cfcc099 http: use new "best effort" strategy for Secure Channel revoke checking

  • 30: cf6faf0 = 31: f1f23e4 t5505/t5516: allow running without .git/branches/ in the templates

  • 31: 6a86813 = 32: dd2a525 t5505/t5516: fix white-space around redirectors

  • 33: 6525eb8 = 33: 72487ea t3701: verify that we can add lots of files interactively

  • 34: d79c625 = 34: 6288c4d git add -i: handle CR/LF line endings in the interactive input

  • 35: 0446698 = 35: 4958dbf commit: accept "scissors" with CR/LF line endings

  • 36: 5b5e5de = 36: abfefcf t0014: fix indentation

  • 37: 1ca48ed = 37: 64d500c git-gui: accommodate for intent-to-add files

  • 38: 0756a77 = 38: 526a67e clink.pl: fix libexpatd.lib link error when using MSVC

  • 39: 5f048eb = 39: 980c640 Makefile: clean up .ilk files when MSVC=1

  • 40: 6b9547e = 40: b3909cb vcbuild: add support for compiling Windows resource files

  • 41: c9c34c3 = 41: 991b6bc config.mak.uname: add git.rc to MSVC builds

  • 42: 84fd96a = 42: dd1e678 clink.pl: ignore no-stack-protector arg on MSVC=1 builds

  • 43: 3a4cc66 = 43: 048c378 clink.pl: move default linker options for MSVC=1 builds

  • 44: 79964ea = 44: af990b7 buildsystems: remove duplicate clause

  • 45: 455cd80 = 45: c11788b vcxproj: handle resource files, too

  • 46: 2f1c159 = 46: d9a9273 vcxproj: ignore -fno-stack-protector and -fno-common

  • 47: c4431a6 = 47: 76ca105 vcxproj: handle GUI programs, too

  • 48: 2210374 = 48: e24174d vcpkg_install: detect lack of Git

  • 50: 19199f2 = 49: c848dd0 vcpkg_install: add comment regarding slow network connections

  • 51: 820f045 = 50: 673ea43 vcxproj: support building Windows/ARM64 binaries

  • 52: 182255b = 51: d7299cb vcbuild: install ARM64 dependencies when building ARM64 binaries

  • 49: ead04e0 = 52: e581b8f cmake: install headless-git.

  • 53: 06e20e7 = 53: a35125a vcbuild: add an option to install individual 'features'

  • 54: b3b6334 = 54: a048ca2 cmake: allow building for Windows/ARM64

  • 55: 8be6669 = 55: e3e5c93 ci(vs-build) also build Windows/ARM64 artifacts

  • 56: 4b9eb75 = 56: 4ee6903 Add schannel to curl installation

  • 57: f015e72 = 57: 33191e9 cmake(): allow setting HOST_CPU for cross-compilation

  • 58: c4da4b2 = 58: 589c2ed mingw: allow for longer paths in parse_interpreter()

  • 63: 97bfd92 = 59: 17271de subtree: update contrib/subtree test target

  • 59: 31c45b2 = 60: 1d39b88 compat/vcbuild: document preferred way to build in Visual Studio

  • 60: 7425303 = 61: f3a8521 http: optionally send SSL client certificate

  • 65: d052839 = 62: bd5a61a ci: run contrib/subtree tests in CI builds

  • 61: 9b96cc1 = 63: 3821d74 CMake: default Visual Studio generator has changed

  • 62: 0d7a5df = 64: 6c8207b .gitignore: add Visual Studio CMakeSetting.json file

  • 64: e19671a = 65: f3bd851 CMakeLists: add default "x64-windows" arch for Visual Studio

  • 66: c80fe50 = 66: 134d2ad CMake: show Win32 and Generator_platform build-option values

  • 70: f365901 = 67: 45da5f1 init: do parse all core.* settings early

  • 67: 51f2c96 = 68: a559944 hash-object: demonstrate a >4GB/LLP64 problem

  • 68: 26250d7 = 69: 7d65d13 write_object_file_literally(): use size_t

  • 69: 0e2f164 ! 70: 22c171e object-file.c: use size_t for header lengths

    @@ object-file.c: static void write_object_file_prepare(const struct git_hash_algo
      {
      	git_hash_ctx c;
      
    -@@ object-file.c: int finalize_object_file(const char *tmpfile, const char *filename)
    +@@ object-file.c: int finalize_object_file_flags(const char *tmpfile, const char *filename,
      }
      
      static void hash_object_file_literally(const struct git_hash_algo *algo,
  • 72: 1660078 ! 71: 18a1d9e hash algorithms: use size_t for section lengths

    @@ sha1dc_git.h: void git_SHA1DCInit(SHA1_CTX *);
     +void git_SHA1DCUpdate(SHA1_CTX *ctx, const void *data, size_t len);
      
      #define platform_SHA_IS_SHA1DC /* used by "test-tool sha1-is-sha1dc" */
    - #define platform_SHA_CTX SHA1_CTX
    + 
     
      ## t/t1007-hash-object.sh ##
     @@ t/t1007-hash-object.sh: test_expect_success '--stdin outside of repository (uses SHA-1)' '
  • 71: 8c54e26 = 72: bc167c8 Enable the built-in FSMonitor as an experimental feature

  • 73: c6506c2 = 73: 010e219 hash-object --stdin: verify that it works with >4GB/LLP64

  • 74: 1df41f8 = 74: 5fd5556 hash-object: add another >4GB/LLP64 test case

  • 75: 385fcc4 = 75: eae8966 setup: properly use "%(prefix)/" when in WSL

  • 76: b6d1f32 = 76: 5c00a23 hash-object: add a >4GB/LLP64 test case using filtered input

  • 77: a4d2995 = 77: 64dc42c compat/mingw.c: do not warn when failing to get owner

  • 80: b18d107 = 78: 7486396 Add config option windows.appendAtomically

  • 78: 8f16ccb = 79: fe66c70 mingw: $env:TERM="xterm-256color" for newer OSes

  • 79: f9b0c49 = 80: 278e737 winansi: check result and Buffer before using Name

  • 81: a850019 = 81: cbd02d4 mingw: change core.fsyncObjectFiles = 1 by default

  • 82: 37bc490 = 82: 72a3cfd vcxproj: allow building with NO_PERL again

  • 83: 4b37b41 = 83: c7f6953 vcxproj: require C11

  • 84: 4f98a72 = 84: e681757 vcxproj: ignore the -pedantic option

  • 85: 12432c6 = 85: 6946087 vcxproj: include reftable when committing .vcxproj files

  • 86: 6503c82 = 86: caceb15 vcxproj: handle libreftable_test, too

  • 87: 44cd22c = 87: 4243581 vcxproj: avoid escaping double quotes in the defines

  • 88: accc435 = 88: 6c18069 ci: adjust Azure Pipeline for runs_on_pool

  • 89: 240dd56 = 89: e095e4c ci: stop linking the prove cache

  • 90: f50e8b0 = 90: a981ae8 ci: reinstate Azure Pipelines support

  • 91: 62700f3 = 91: 727d268 azure-pipeline: drop the GETTEXT_POISON job

  • 92: 2976f8a = 92: ecc368b azure-pipeline: stop hard-coding apt-get calls

  • 93: c7a8171 = 93: ea10516 azure-pipeline: drop the code to write to/read from a file share

  • 94: 48622b4 = 94: 190832c azure-pipeline: use partial clone/parallel checkout to initialize minimal-sdk

  • 95: 09e3a1b = 95: 7d81f0b azure-pipeline: downcase the job name of the Linux32 job

  • 96: 998692f = 96: 28d78a2 azure-pipeline: run static-analysis on jammy

  • 97: 106ae5e = 97: c9f66c4 bswap.h: add support for built-in bswap functions

  • 99: e05606d = 98: 6c1b605 config.mak.uname: add support for clangarm64

  • 98: 5747657 = 99: 86c3000 MinGW: link as terminal server aware

  • 100: 874decc = 100: a36a76c Fix Windows version resources

  • 102: 6f04ab6 = 101: a99ced1 ci: create clangarm64-build.yml

  • 103: 06e72a4 = 102: da2c993 status: fix for old-style submodules with commondir

  • 101: 1bbe8cf = 103: 630c9ff http: optionally load libcurl lazily

  • 106: 0850d0f = 104: f0ba8a2 http: support lazy-loading libcurl also on Windows

  • 107: 9d0520d = 105: 1cc64e9 http: when loading libcurl lazily, allow for multiple SSL backends

  • 104: 413fcfe = 106: b81567e windows: skip linking git-<command> for built-ins

  • 105: 6559f8c = 107: 3106f5f windows: fix Repository>Explore Working Copy

  • 108: 126c854 = 108: 09bef5a mingw: do load libcurl dynamically by default

  • 109: abde14f = 109: 93c275d Add a GitHub workflow to verify that Git/Scalar work in Nano Server

  • 110: 162c2ec = 110: 5ac3aeb mingw: suggest windows.appendAtomically in more cases

  • 111: b7739dd = 111: 11c77e4 win32: use native ANSI sequence processing, if possible

  • 112: dcb5075 = 112: 1687e53 git.rc: include winuser.h

  • 113: baafe37 = 113: a533937 common-main.c: fflush stdout buffer upon exit

  • 114: 0373585 ! 114: b01d5cb t5601/t7406(mingw): do run tests with symlink support

    @@ t/t5601-clone.sh: export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
     
      ## t/t7406-submodule-update.sh ##
     @@ t/t7406-submodule-update.sh: export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
    - 
    + TEST_PASSES_SANITIZE_LEAK=true
      . ./test-lib.sh
      
     +# This test script contains test cases that need to create symbolic links. To
  • 115: f8426a9 = 115: 26ba963 ci: work around a problem with HTTP/2 vs libcurl v8.10.0

  • 118: 0ef4a4e = 116: 6ed5f62 pack-objects: add --full-name-hash option

  • 116: 74a7247 = 117: ddf961b win32: ensure that localtime_r() is declared even in i686 builds

  • 117: bc45485 = 118: aaf6d53 Fallback to AppData if XDG_CONFIG_HOME is unset

  • 139: 6ed4dbe = 119: 7442730 run-command: be helpful with Git LFS fails on Windows 7

  • 119: 3f79411 = 120: 5cc3464 repack: test --full-name-hash option

  • 120: e05e2cd = 121: 221be0e pack-objects: add GIT_TEST_FULL_NAME_HASH

  • 121: c5297f2 = 122: 78dbc40 git-repack: update usage to match docs

  • 122: a9be155 = 123: 4a37ccb p5313: add size comparison test

  • 123: 385283b = 124: 18686eb test-tool: add helper for name-hash values

  • 124: bd5a2db = 125: 82bb044 repack/pack-objects: mark --full-name-hash as experimental

  • 125: e5c11f5 = 126: 41e90b4 path-walk: introduce an object walk by path

  • 126: 017e36a = 127: 65b5595 t6601: add helper for testing path-walk API

  • 127: 3289262 = 128: 73ba4a8 path-walk: allow consumer to specify object types

  • 128: a5f2805 = 129: 35d4207 path-walk: allow visiting tags

  • 129: b6785fd = 130: 1b04296 revision: create mark_trees_uninteresting_dense()

  • 130: d1e895f = 131: 9ce5da5 path-walk: add prune_all_uninteresting option

  • 131: 8a73f51 = 132: aeae574 pack-objects: extract should_attempt_deltas()

  • 132: bb182d9 = 133: 6f5880b pack-objects: add --path-walk option

  • 133: f403cae = 134: 310e324 pack-objects: introduce GIT_TEST_PACK_PATH_WALK

  • 134: 0aa7820 = 135: 18e3a55 repack: add --path-walk option

  • 135: a004ba9 = 136: a10bc41 pack-objects: enable --path-walk via config

  • 136: 6749045 = 137: 5b2135e scalar: enable path-walk during push via config

  • 137: 3c063bb = 138: d832880 pack-objects: refactor path-walk delta phase

  • 138: c599014 = 139: f49d804 pack-objects: thread the path-based compression

  • 140: 30b5cf7 = 140: 067a6ef backfill: add builtin boilerplate

  • 141: 19cbfed = 141: 17e488e backfill: basic functionality and tests

  • 142: 34b077a = 142: 56d80aa backfill: add --batch-size= option

  • 143: a05ddaa = 143: 13ea665 backfill: add --sparse option

  • 144: 65ea334 = 144: fa6bb8c backfill: assume --sparse when sparse-checkout is enabled

  • 145: f3d90f9 = 145: 8984fa7 backfill: mark it as experimental

  • 146: c162f25 = 146: d1c3b61 survey: stub in new experimental 'git-survey' command

  • 147: 25da397 = 147: f7b61d1 survey: add command line opts to select references

  • 148: 30f822b = 148: bcccf3d survey: start pretty printing data in table form

  • 149: 0c4bec0 = 149: 7d969b7 survey: add object count summary

  • 150: 45bdbf0 = 150: 0e8de6d survey: summarize total sizes by object type

  • 151: 6be5118 = 151: f7d3e95 survey: show progress during object walk

  • 152: 62548a9 = 152: d701fb9 survey: add ability to track prioritized lists

  • 153: 545bf8c = 153: a279cfc survey: add report of "largest" paths

  • 154: afc60cf = 154: 35aee93 survey: add --top= option and config

  • 155: bb6ebd1 = 155: 9df90e8 survey: clearly note the experimental nature in the output

  • 156: 69522da = 156: 1bc2027 Win32: make FILETIME conversion functions public

  • 157: 5b0c984 = 157: 190ad5f Win32: dirent.c: Move opendir down

  • 158: f1662b8 = 158: 906efb1 mingw: make the dirent implementation pluggable

  • 159: 7b4a13f = 159: f587985 Win32: make the lstat implementation pluggable

  • 160: 8a07e6c = 160: e1f72b8 mingw: add infrastructure for read-only file system level caches

  • 161: 7aa8425 = 161: 1710b32 mingw: add a cache below mingw's lstat and dirent implementations

  • 162: cf70e90 = 162: bd64e8a fscache: load directories only once

  • 163: c4473a9 = 163: abfa5b8 fscache: add key for GIT_TRACE_FSCACHE

  • 164: 1b4f462 = 164: dfa162b fscache: remember not-found directories

  • 165: eb91130 = 165: 969a7fa fscache: add a test for the dir-not-found optimization

  • 166: 617c2d1 = 166: bb144d7 add: use preload-index and fscache for performance

  • 167: 7678e5c = 167: d86ddce dir.c: make add_excludes aware of fscache during status

  • 168: 4b39ba5 = 168: 3cbe5eb fscache: make fscache_enabled() public

  • 169: 6ef3cc7 = 169: 5ddee41 dir.c: regression fix for add_excludes with fscache

  • 170: 6346624 = 170: cd2cc2c fetch-pack.c: enable fscache for stats under .git/objects

  • 171: c97a8dd = 171: 6f9a6ac checkout.c: enable fscache for checkout again

  • 172: 4c3505c = 172: bff685b Enable the filesystem cache (fscache) in refresh_index().

  • 173: 62a9ebc = 173: 5f6841b fscache: use FindFirstFileExW to avoid retrieving the short name

  • 174: 8b379b1 = 174: 7c2407a status: disable and free fscache at the end of the status command

  • 175: 7dfd5d4 = 175: 6ccfc7f fscache: add GIT_TEST_FSCACHE support

  • 176: 9f0398d = 176: 4129718 fscache: add fscache hit statistics

  • 177: 898a7b0 = 177: 61908a6 mem_pool: add GIT_TRACE_MEMPOOL support

  • 178: be72b30 = 178: d199d45 fscache: fscache takes an initial size

  • 179: 6325d20 = 179: 57c3489 fscache: update fscache to be thread specific instead of global

  • 180: 34fe22c = 180: 4be363e fscache: teach fscache to use mempool

  • 181: f085223 = 181: 5ab04fb fscache: make fscache_enable() thread safe

  • 182: 1dda695 = 182: 2ce4c07 fscache: teach fscache to use NtQueryDirectoryFile

  • 183: c2ff9e3 = 183: 16991c8 unpack-trees: enable fscache for sparse-checkout

  • 184: 752e625 = 184: 3c1023b fscache: remember the reparse tag for each entry

  • 185: 5effe01 = 185: 66de623 fscache: implement an FSCache-aware is_mount_point()

  • 187: ab36404 = 186: 9178653 git-gui: provide question helper for retry fallback on Windows

  • 186: 7335e91 = 187: b924477 clean: make use of FSCache

  • 188: f9bcdc7 = 188: 9d9e902 git gui: set GIT_ASKPASS=git-gui--askpass if not set yet

  • 189: 8134f3d = 189: a0ac891 git-gui--askyesno: fix funny text wrapping

  • 191: 18c726e = 190: d375ea2 gitk: Unicode file name support

  • 190: 8694acf = 191: c7a8078 git-gui--askyesno: allow overriding the window title

  • 193: b897abc = 192: 8be786c gitk: Use an external icon file on Windows

  • 192: 9a4a9e2 = 193: 121ae0e git-gui--askyesno (mingw): use Git for Windows' icon, if available

  • 194: fd6437d = 194: 831062c gitk: fix arrow keys in input fields with Tcl/Tk >= 8.6

  • 195: 2fabe46 = 195: 6be9636 gitk: make the "list references" default window width wider

  • 196: f970a6f = 196: 2094052 pack-objects (mingw): demonstrate a segmentation fault with large deltas

  • 197: e91062d = 197: 5085003 mingw: support long paths

  • 198: f6d060b = 198: b5c8307 Win32: fix 'lstat("dir/")' with long paths

  • 199: a78e081 = 199: 6680255 win32(long path support): leave drive-less absolute paths intact

  • 202: d8d09ab = 200: 39c0088 mingw: Support git_terminal_prompt with more terminals

  • 203: 13aad84 = 201: 9f8bee9 compat/terminal.c: only use the Windows console if bash 'read -r' fails

  • 204: b32df1e = 202: 00da3d0 mingw (git_terminal_prompt): do fall back to CONIN$/CONOUT$ method

  • 200: 42a535e = 203: e752356 compat/fsmonitor/fsm-*-win32: support long paths

  • 201: 057f6d4 = 204: 1dec1c4 clean: suggest using core.longPaths if paths are too long to remove

  • 205: d792ed3 = 205: e971106 strbuf_readlink: don't call readlink twice if hint is the exact link size

  • 206: a15c613 = 206: f5b42d4 strbuf_readlink: support link targets that exceed PATH_MAX

  • 207: 6275390 = 207: 759618e lockfile.c: use is_dir_sep() instead of hardcoded '/' checks

  • 208: 768c262 = 208: 3d51e3d Win32: don't call GetFileAttributes twice in mingw_lstat()

  • 209: 86f1eae = 209: 3129777 Win32: implement stat() with symlink support

  • 210: 22bf97f = 210: dc29e1a Win32: remove separate do_lstat() function

  • 211: adc69e9 = 211: a38a3d3 Win32: let mingw_lstat() error early upon problems with reparse points

  • 212: 49cc901 = 212: 9be9c3a mingw: teach fscache and dirent about symlinks

  • 213: 9c27ec7 = 213: 00c33cf Win32: lstat(): return adequate stat.st_size for symlinks

  • 214: e943c58 = 214: cdbefd8 Win32: factor out retry logic

  • 215: b105378 = 215: b76865b Win32: change default of 'core.symlinks' to false

  • 216: f0f022d = 216: 0aab789 Win32: add symlink-specific error codes

  • 217: faa04b5 = 217: 1b5d98d Win32: mingw_unlink: support symlinks to directories

  • 218: 8e50d25 = 218: 13f00f9 Win32: mingw_rename: support renaming symlinks

  • 219: c720d21 = 219: fbd9aac Win32: mingw_chdir: change to symlink-resolved directory

  • 220: a9938d0 = 220: ee29c5a Win32: implement readlink()

  • 221: 92f6f6c = 221: 0841843 mingw: lstat: compute correct size for symlinks

  • 222: f372e99 = 222: 4ba730d Win32: implement basic symlink() functionality (file symlinks only)

  • 223: fd7535d = 223: 7872b88 Win32: symlink: add support for symlinks to directories

  • 224: 6203204 = 224: 510badc mingw: try to create symlinks without elevated permissions

  • 225: fcef52a = 225: 6c89038 mingw: emulate stat() a little more faithfully

  • 226: 1917acd = 226: 14617f3 mingw: special-case index entries for symlinks with buggy size

  • 227: f9e8663 = 227: d756acb mingw: introduce code to detect whether we're inside a Windows container

  • 228: ae7ce1b = 228: 8425785 mingw: when running in a Windows container, try to rename() harder

  • 229: e4d85dd = 229: b05e984 mingw: move the file_attr_to_st_mode() function definition

  • 230: 8a7b14f = 230: 744ce6d mingw: Windows Docker volumes are not symbolic links

  • 231: 2191e90 = 231: dc6ba01 mingw: work around rename() failing on a read-only file

  • 232: 7a5d265 = 232: 12f0ea3 Win32: symlink: move phantom symlink creation to a separate function

  • 233: 2c414ca = 233: 47c427a Introduce helper to create symlinks that knows about index_state

  • 234: 880d387 = 234: e66f01a mingw: allow to specify the symlink type in .gitattributes

  • 235: c30acd3 = 235: 2c62c09 Win32: symlink: add test for symlink attribute

  • 236: bf3bbc3 = 236: 93ea9b9 mingw: explicitly specify with which cmd to prefix the cmdline

  • 237: b8dc8ab = 237: f40f3f5 mingw: when path_lookup() failed, try BusyBox

  • 238: bf25de0 = 238: 260a12d test-lib: avoid unnecessary Perl invocation

  • 239: 49ea6d6 = 239: de5a684 test-tool: learn to act as a drop-in replacement for iconv

  • 240: 0656ea5 = 240: 385ae19 tests(mingw): if iconv is unavailable, use test-helper --iconv

  • 241: cfebe5d = 241: 55c8c6f gitattributes: mark .png files as binary

  • 242: eb3d3e6 = 242: aa1e445 tests: move test PNGs into t/lib-diff/

  • 243: e9e724b = 243: c928445 tests: only override sort & find if there are usable ones in /usr/bin/

  • 244: 2fcd9d9 = 244: 747d1af tests: use the correct path separator with BusyBox

  • 245: 4e9c7a2 = 245: 54f6687 mingw: only use Bash-ism builtin pwd -W when available

  • 246: 3a0450e = 246: 9fd3a37 tests (mingw): remove Bash-specific pwd option

  • 247: f3d15bb = 247: 46b9fa7 test-lib: add BUSYBOX prerequisite

  • 248: 522f574 = 248: 31354e8 t5003: use binary file from t/lib-diff/

  • 249: 709c8bc = 249: bd5ca8b t5532: workaround for BusyBox on Windows

  • 250: 80230b3 = 250: 5fe6b0f t5605: special-case hardlink test for BusyBox-w32

  • 251: dcd9dd4 = 251: 6a4bb55 t5813: allow for $PWD to be a Windows path

  • 252: da3aba0 = 252: 25bdb82 t9200: skip tests when $PWD contains a colon

  • 253: 4826cd4 = 253: cb33611 mingw: add a Makefile target to copy test artifacts

  • 254: ce3085a = 254: 066af3c mingw: kill child processes in a gentler way

  • 255: 6b8ce47 = 255: 2990afe mingw: optionally enable wsl compability file mode bits

  • 257: b04f22e = 256: e0b23e7 mingw: really handle SIGINT

  • 256: b95b626 = 257: 3881185 mingw: do not call xutftowcs_path in mingw_mktemp

  • 258: 09a0526 = 258: 28c3e43 Partially un-revert "editor: save and reset terminal after calling EDITOR"

  • 259: 35dcdd9 = 259: 75885fa Add a GitHub workflow to monitor component updates

  • 260: eab4d9d = 260: ff41d3b reset: reinstate support for the deprecated --stdin option

  • 261: c10b13c = 261: 3340122 fsmonitor: reintroduce core.useBuiltinFSMonitor

  • 262: c5ea125 = 262: 147203e dependabot: help keeping GitHub Actions versions up to date

  • 263: 1e3450a = 263: 9e6a091 Describe Git for Windows' architecture [no ci]

  • 264: 2aebbed = 264: e155e47 Modify the Code of Conduct for Git for Windows

  • 265: 8426302 = 265: 034b75a CONTRIBUTING.md: add guide for first-time contributors

  • 266: f6204b6 = 266: 9db70a5 README.md: Add a Windows-specific preamble

  • 267: 03bc833 = 267: 93ffaaf Add an issue template

  • 268: cccb602 = 268: ecf272b Modify the GitHub Pull Request template (to reflect Git for Windows)

  • 269: d081204 = 269: 1f01e8a .github: Add configuration for the Sentiment Bot

  • 270: bbd23b4 = 270: c35f255 Document how $HOME is set on Windows

  • 271: 418a02d = 271: a734359 SECURITY.md: document Git for Windows' policies

Only diff context changes this time around.

derrickstolee and others added 30 commits October 3, 2024 08:18
The new '--full-name-hash' option for 'git repack' is a simple
pass-through to the underlying 'git pack-objects' subcommand. However,
this subcommand may have other options and a temporary filename as part
of the subcommand execution that may not be predictable or could change
over time.

The existing test_subcommand method requires an exact list of arguments
for the subcommand. This is too rigid for our needs here, so create a
new method, test_subcommand_flex. Use it to check that the
--full-name-hash option is passing through.

Signed-off-by: Derrick Stolee <stolee@gmail.com>
Add a new environment variable to opt-in to the --full-name-hash option
in 'git pack-objects'. This allows for extra testing of the feature
without repeating all of the test scenarios.

But this option isn't free. There are a few tests that change behavior
with the variable enabled.

First, there are a few tests that are very sensitive to certain delta
bases being picked. These are both involving the generation of thin
bundles and then counting their objects via 'git index-pack --fix-thin'
which pulls the delta base into the new packfile. For these tests,
disable the option as a decent long-term option.

Second, there are two tests in t5616-partial-clone.sh that I believe are
actually broken scenarios. While the client is set up to clone the
'promisor-server' repo via a treeless partial clone filter (tree:0),
that filter does not translate to the 'server' repo. Thus, fetching from
these repos causes the server to think that the client has all reachable
trees and blobs from the commits advertised as 'haves'. This leads the
server to providing a thin pack assuming those objects as delta bases.
Changing the name-hash algorithm presents new delta bases and thus
breaks the expectations of these tests. An alternative could be to set
up 'server' as a promisor server with the correct filter enabled. This
may also point out more issues with partial clone being set up as a
remote-based filtering mechanism and not a repository-wide setting. For
now, do the minimal change to make the test work by disabling the test
variable.

Signed-off-by: Derrick Stolee <stolee@gmail.com>
This also adds the '--full-name-hash' option introduced in the previous
change and adds newlines to the synopsis.

Signed-off-by: Derrick Stolee <stolee@gmail.com>
As custom options are added to 'git pack-objects' and 'git repack' to
adjust how compression is done, use this new performance test script to
demonstrate their effectiveness in performance and size.

The recently-added --full-name-hash option swaps the default name-hash
algorithm with one that attempts to uniformly distribute the hashes
based on the full path name instead of the last 16 characters.

This has a dramatic effect on full repacks for repositories with many
versions of most paths. It can have a negative impact on cases such as
pushing a single change.

This can be seen by running pt5313 on the open source fluentui
repository [1]. Most commits will have this kind of output for the thin
and big pack cases, though certain commits (such as [2]) will have
problematic thin pack size for other reasons.

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

Checked out at the parent of [2], I see the following statistics:

Test                                           this tree
------------------------------------------------------------------
5313.2: thin pack                              0.02(0.01+0.01)
5313.3: thin pack size                                    1.1K
5313.4: thin pack with --full-name-hash        0.02(0.01+0.00)
5313.5: thin pack size with --full-name-hash              3.0K
5313.6: big pack                               1.65(3.35+0.24)
5313.7: big pack size                                    58.0M
5313.8: big pack with --full-name-hash         1.53(2.52+0.18)
5313.9: big pack size with --full-name-hash              57.6M
5313.10: repack                                176.52(706.60+3.53)
5313.11: repack size                                    446.7K
5313.12: repack with --full-name-hash          37.47(134.18+3.06)
5313.13: repack size with --full-name-hash              183.1K

Note that this demonstrates a 3x size _increase_ in the case that
simulates a small "git push". The size change is neutral on the case of
pushing the difference between HEAD and HEAD~1000.

However, the full repack case is both faster and more efficient.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Signed-off-by: Derrick Stolee <stolee@gmail.com>
In anticipation of a few planned applications, introduce the most basic form
of a path-walk API. It currently assumes that there are no UNINTERESTING
objects, and does not include any complicated filters. It calls a function
pointer on groups of tree and blob objects as grouped by path. This only
includes objects the first time they are discovered, so an object that
appears at multiple paths will not be included in two batches.

There are many future adaptations that could be made, but they are left for
future updates when consumers are ready to take advantage of those features.

Signed-off-by: Derrick Stolee <stolee@gmail.com>
Add some tests based on the current behavior, doing interesting checks
for different sets of branches, ranges, and the --boundary option. This
sets a baseline for the behavior and we can extend it as new options are
introduced.

Signed-off-by: Derrick Stolee <stolee@gmail.com>
This option is still under discussion on the Git mailing list.

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

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

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
This topic branch extends the protections introduced for Git GUI's
CVE-2022-41953 to cover `gitk`, too.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
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 <johannes.schindelin@gmx.de>
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 <johannes.schindelin@gmx.de>
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 <johannes.schindelin@gmx.de>
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 <johannes.schindelin@gmx.de>
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 <johannes.schindelin@gmx.de>
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 <johannes.schindelin@gmx.de>
…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 13 commits October 3, 2024 08:57
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
This was pull request git-for-windows#1645 from ZCube/master

Support windows container.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
…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 <johannes.schindelin@gmx.de>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
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 <johannes.schindelin@gmx.de>
Handle Ctrl+C in Git Bash nicely

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
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 <johannes.schindelin@gmx.de>
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 <johannes.schindelin@gmx.de>
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 <johannes.schindelin@gmx.de>
…updates

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

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
@dscho
Copy link
Member Author

dscho commented Oct 3, 2024

So... A couple of changes needed on top:

  • I fixed the DCO failures by adjusting the authorships of several commits (neither Stolee nor Jeff are at GitHub any longer).
  • I dropped 8c54e26 because
    1. FSMonitor has not been experimental for a very long time
    2. The patch caused merge conflicts with a004ba9

I have those changes locally, but unfortunately there is a serious new problem: t0610.47(ref transaction: many concurrent writers) consistently fails on Windows. I'll have to spend time figuring out how to address this.

Copy link

@derrickstolee derrickstolee left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While you work on the test failures, I will approve this version of the rebase. Looking forward to seeing what you discover about the concurrent write failures.

@rimrul
Copy link
Member

rimrul commented Oct 4, 2024

The issue on Win32 is different: we cannot commit the "tables.list" lock via rename(3P) because the target file may be open for reading by a concurrent process. I guess that Cygwin has proper POSIX semantics for rename(3P) and thus doesn't hit the same issue. We already try to emulate POSIX semantics somewhat in mingw_rename() by using a retry-loop when we hit ERROR_ACCESS_DENIED, which is what we get when the target file is open in another process. But that seemingly isn't enough when there is a lot of contention around a file. So I'm currently investigating whether we can adopt something similar to what Cygwin is doing for Win32, as well. I assume that they use FILE_RENAME_INFORMATION_EX with FILE_RENAME_POSIX_SEMANTICS, which should give us what we're looking for. […] But my guess was correct: they do use FILE_RENAME_POSIX_SEMANTICS. The catch is that this flag only exists in Windows 10 and newer. But that should be a fine compromise.

https://lore.kernel.org/git/Zv-HbT8qrM6IYKb4@pks.im/T/#m702741a2ccb1cddb45a5410ac762d236c1566b27

@dscho
Copy link
Member Author

dscho commented Oct 4, 2024

@rimrul great find, thanks! I wasn't able to keep up with the Git mailing list.

@dscho
Copy link
Member Author

dscho commented Oct 4, 2024

Range-diff relative to the original rebase to -rc1

Note: This was run with log.mailmap=false (because range-diff lacks the --no-mailmap option).

  • 1: bc167c8 < -: ------------ Enable the built-in FSMonitor as an experimental feature

  • 2: 73ba4a8 ! 1: 6fedcc4 path-walk: allow consumer to specify object types

    @@
      ## Metadata ##
    -Author: Derrick Stolee <derrickstolee@github.com>
    +Author: Derrick Stolee <stolee@gmail.com>
     
      ## Commit message ##
         path-walk: allow consumer to specify object types
  • 3: 35d4207 = 2: e6acd74 path-walk: allow visiting tags

  • 4: 1b04296 = 3: 8e5e612 revision: create mark_trees_uninteresting_dense()

  • 5: 9ce5da5 = 4: d0f2213 path-walk: add prune_all_uninteresting option

  • 6: aeae574 = 5: ce40df4 pack-objects: extract should_attempt_deltas()

  • 7: 6f5880b = 6: 8e8a5b8 pack-objects: add --path-walk option

  • 8: 310e324 = 7: 13ff91f pack-objects: introduce GIT_TEST_PACK_PATH_WALK

  • 9: 18e3a55 = 8: a9bc29e repack: add --path-walk option

  • 10: a10bc41 = 9: 5b38114 pack-objects: enable --path-walk via config

  • 11: 5b2135e = 10: c7bd1df scalar: enable path-walk during push via config

  • 12: d832880 = 11: 2488d13 pack-objects: refactor path-walk delta phase

  • 13: f49d804 = 12: 4f530f7 pack-objects: thread the path-based compression

  • 14: 067a6ef ! 13: 1dedc04 backfill: add builtin boilerplate

    @@
      ## Metadata ##
    -Author: Derrick Stolee <derrickstolee@github.com>
    +Author: Derrick Stolee <stolee@gmail.com>
     
      ## Commit message ##
         backfill: add builtin boilerplate
  • 15: 17e488e ! 14: 2fae6ee backfill: basic functionality and tests

    @@
      ## Metadata ##
    -Author: Derrick Stolee <derrickstolee@github.com>
    +Author: Derrick Stolee <stolee@gmail.com>
     
      ## Commit message ##
         backfill: basic functionality and tests
  • 16: 56d80aa ! 15: 4392105 backfill: add --batch-size= option

    @@
      ## Metadata ##
    -Author: Derrick Stolee <derrickstolee@github.com>
    +Author: Derrick Stolee <stolee@gmail.com>
     
      ## Commit message ##
         backfill: add --batch-size=<n> option
  • 17: 13ea665 ! 16: 120e50c backfill: add --sparse option

    @@
      ## Metadata ##
    -Author: Derrick Stolee <derrickstolee@github.com>
    +Author: Derrick Stolee <stolee@gmail.com>
     
      ## Commit message ##
         backfill: add --sparse option
  • 18: fa6bb8c ! 17: bff91f1 backfill: assume --sparse when sparse-checkout is enabled

    @@
      ## Metadata ##
    -Author: Derrick Stolee <derrickstolee@github.com>
    +Author: Derrick Stolee <stolee@gmail.com>
     
      ## Commit message ##
         backfill: assume --sparse when sparse-checkout is enabled
  • 19: 8984fa7 = 18: 192f63e backfill: mark it as experimental

  • 20: d1c3b61 ! 19: 714bedd survey: stub in new experimental 'git-survey' command

    @@
      ## Metadata ##
    -Author: Jeff Hostetler <jeffhostetler@github.com>
    +Author: Jeff Hostetler <git@jeffhostetler.com>
     
      ## Commit message ##
         survey: stub in new experimental 'git-survey' command
  • 21: f7b61d1 ! 20: 5bac1ad survey: add command line opts to select references

    @@
      ## Metadata ##
    -Author: Jeff Hostetler <jeffhostetler@github.com>
    +Author: Jeff Hostetler <git@jeffhostetler.com>
     
      ## Commit message ##
         survey: add command line opts to select references
  • 22: bcccf3d = 21: 8f9e220 survey: start pretty printing data in table form

  • 23: 7d969b7 = 22: f2f89bc survey: add object count summary

  • 24: 0e8de6d = 23: f39486a survey: summarize total sizes by object type

  • 25: f7d3e95 = 24: 6a43d07 survey: show progress during object walk

  • 26: d701fb9 = 25: 34983c1 survey: add ability to track prioritized lists

  • 27: a279cfc = 26: 5484401 survey: add report of "largest" paths

  • 28: 35aee93 = 27: 7e30b29 survey: add --top= option and config

  • 29: 9df90e8 = 28: 2be2c92 survey: clearly note the experimental nature in the output

  • 30: 1bc2027 = 29: ca2829a Win32: make FILETIME conversion functions public

  • 31: 190ad5f = 30: efd0753 Win32: dirent.c: Move opendir down

  • 32: 906efb1 = 31: 2c4e757 mingw: make the dirent implementation pluggable

  • 33: f587985 = 32: 6070b5d Win32: make the lstat implementation pluggable

  • 34: e1f72b8 = 33: e4b7d0f mingw: add infrastructure for read-only file system level caches

  • 35: 1710b32 = 34: 273b65d mingw: add a cache below mingw's lstat and dirent implementations

  • 36: bd64e8a = 35: 4fc7b9e fscache: load directories only once

  • 37: abfa5b8 = 36: 0fc3a76 fscache: add key for GIT_TRACE_FSCACHE

  • 38: dfa162b = 37: 028fac7 fscache: remember not-found directories

  • 39: 969a7fa = 38: db1aa34 fscache: add a test for the dir-not-found optimization

  • 40: bb144d7 = 39: 9888212 add: use preload-index and fscache for performance

  • 41: d86ddce = 40: 08455cf dir.c: make add_excludes aware of fscache during status

  • 42: 3cbe5eb = 41: c30c7af fscache: make fscache_enabled() public

  • 43: 5ddee41 = 42: 5b0f5ab dir.c: regression fix for add_excludes with fscache

  • 44: cd2cc2c = 43: ca14fa2 fetch-pack.c: enable fscache for stats under .git/objects

  • 45: 6f9a6ac = 44: 2e5a053 checkout.c: enable fscache for checkout again

  • 46: bff685b = 45: 95dd5f5 Enable the filesystem cache (fscache) in refresh_index().

  • 47: 5f6841b = 46: ae01e29 fscache: use FindFirstFileExW to avoid retrieving the short name

  • 48: 7c2407a = 47: e6aace3 status: disable and free fscache at the end of the status command

  • 49: 6ccfc7f = 48: d8b2771 fscache: add GIT_TEST_FSCACHE support

  • 50: 4129718 = 49: d7c89b0 fscache: add fscache hit statistics

  • 51: 61908a6 = 50: b6d63b6 mem_pool: add GIT_TRACE_MEMPOOL support

  • 52: d199d45 = 51: ff03c40 fscache: fscache takes an initial size

  • 53: 57c3489 = 52: bbfecad fscache: update fscache to be thread specific instead of global

  • 54: 4be363e = 53: a49d409 fscache: teach fscache to use mempool

  • 55: 5ab04fb = 54: 936a148 fscache: make fscache_enable() thread safe

  • 56: 2ce4c07 = 55: af2cbc4 fscache: teach fscache to use NtQueryDirectoryFile

  • 57: 16991c8 = 56: 0bc448d unpack-trees: enable fscache for sparse-checkout

  • 58: 3c1023b = 57: e9b3856 fscache: remember the reparse tag for each entry

  • 60: 9178653 = 58: ed01d91 git-gui: provide question helper for retry fallback on Windows

  • 59: 66de623 = 59: fad0d53 fscache: implement an FSCache-aware is_mount_point()

  • 62: 9d9e902 = 60: 23e7a19 git gui: set GIT_ASKPASS=git-gui--askpass if not set yet

  • 61: b924477 = 61: 634d2fd clean: make use of FSCache

  • 64: d375ea2 = 62: 77d9198 gitk: Unicode file name support

  • 63: a0ac891 = 63: eff723f git-gui--askyesno: fix funny text wrapping

  • 66: 8be786c = 64: 574b793 gitk: Use an external icon file on Windows

  • 65: c7a8078 = 65: f915c80 git-gui--askyesno: allow overriding the window title

  • 68: 831062c = 66: 60ab5b7 gitk: fix arrow keys in input fields with Tcl/Tk >= 8.6

  • 67: 121ae0e = 67: 60e7d4a git-gui--askyesno (mingw): use Git for Windows' icon, if available

  • 69: 6be9636 = 68: a7d2c23 gitk: make the "list references" default window width wider

  • 70: 2094052 = 69: 90dd9df pack-objects (mingw): demonstrate a segmentation fault with large deltas

  • 71: 5085003 = 70: 5521252 mingw: support long paths

  • 72: b5c8307 = 71: be9ac19 Win32: fix 'lstat("dir/")' with long paths

  • 73: 6680255 = 72: edd7b9e win32(long path support): leave drive-less absolute paths intact

  • 74: 39c0088 = 73: 4fa5d93 mingw: Support git_terminal_prompt with more terminals

  • 75: 9f8bee9 = 74: 5242dd5 compat/terminal.c: only use the Windows console if bash 'read -r' fails

  • 76: 00da3d0 = 75: 23da434 mingw (git_terminal_prompt): do fall back to CONIN$/CONOUT$ method

  • 79: e971106 = 76: 74b72b7 strbuf_readlink: don't call readlink twice if hint is the exact link size

  • 77: e752356 = 77: a345fc3 compat/fsmonitor/fsm-*-win32: support long paths

  • 78: 1dec1c4 = 78: a13b107 clean: suggest using core.longPaths if paths are too long to remove

  • 80: f5b42d4 = 79: 4b961fb strbuf_readlink: support link targets that exceed PATH_MAX

  • 81: 759618e = 80: 0796d92 lockfile.c: use is_dir_sep() instead of hardcoded '/' checks

  • 82: 3d51e3d = 81: 2a3f2e7 Win32: don't call GetFileAttributes twice in mingw_lstat()

  • 83: 3129777 = 82: 72bb1c8 Win32: implement stat() with symlink support

  • 84: dc29e1a = 83: 3ddbf36 Win32: remove separate do_lstat() function

  • 85: a38a3d3 = 84: 1bc1573 Win32: let mingw_lstat() error early upon problems with reparse points

  • 86: 9be9c3a = 85: 077ca3d mingw: teach fscache and dirent about symlinks

  • 87: 00c33cf = 86: 71d4237 Win32: lstat(): return adequate stat.st_size for symlinks

  • 88: cdbefd8 = 87: 59e73e6 Win32: factor out retry logic

  • 89: b76865b = 88: a88262b Win32: change default of 'core.symlinks' to false

  • 90: 0aab789 = 89: 73aa817 Win32: add symlink-specific error codes

  • 91: 1b5d98d = 90: bcd17e6 Win32: mingw_unlink: support symlinks to directories

  • 92: 13f00f9 = 91: a6b6059 Win32: mingw_rename: support renaming symlinks

  • 93: fbd9aac = 92: cfe1b4f Win32: mingw_chdir: change to symlink-resolved directory

  • 94: ee29c5a = 93: 7218afe Win32: implement readlink()

  • 95: 0841843 = 94: 6f3d99b mingw: lstat: compute correct size for symlinks

  • 96: 4ba730d = 95: a6bfbd0 Win32: implement basic symlink() functionality (file symlinks only)

  • 97: 7872b88 = 96: 26495c7 Win32: symlink: add support for symlinks to directories

  • 98: 510badc = 97: 40bd44a mingw: try to create symlinks without elevated permissions

  • 99: 6c89038 = 98: 0323d4d mingw: emulate stat() a little more faithfully

  • 100: 14617f3 = 99: 409d835 mingw: special-case index entries for symlinks with buggy size

  • 101: d756acb = 100: 182e519 mingw: introduce code to detect whether we're inside a Windows container

  • 102: 8425785 = 101: 4bf94db mingw: when running in a Windows container, try to rename() harder

  • 103: b05e984 = 102: 74cf36c mingw: move the file_attr_to_st_mode() function definition

  • 104: 744ce6d = 103: 179084c mingw: Windows Docker volumes are not symbolic links

  • 106: 12f0ea3 = 104: f087676 Win32: symlink: move phantom symlink creation to a separate function

  • 107: 47c427a = 105: 1263235 Introduce helper to create symlinks that knows about index_state

  • 108: e66f01a = 106: a96c675 mingw: allow to specify the symlink type in .gitattributes

  • 109: 2c62c09 = 107: b4744d8 Win32: symlink: add test for symlink attribute

  • 110: 93ea9b9 = 108: 08dde17 mingw: explicitly specify with which cmd to prefix the cmdline

  • 111: f40f3f5 = 109: 3c30fa9 mingw: when path_lookup() failed, try BusyBox

  • 112: 260a12d = 110: ddcc426 test-lib: avoid unnecessary Perl invocation

  • 113: de5a684 = 111: 60bbecf test-tool: learn to act as a drop-in replacement for iconv

  • 105: dc6ba01 = 112: 2cbb28f mingw: work around rename() failing on a read-only file

  • 114: 385ae19 = 113: e36a6be tests(mingw): if iconv is unavailable, use test-helper --iconv

  • 115: 55c8c6f = 114: 56d40ca gitattributes: mark .png files as binary

  • 116: aa1e445 = 115: 6788827 tests: move test PNGs into t/lib-diff/

  • 117: c928445 = 116: 80dd451 tests: only override sort & find if there are usable ones in /usr/bin/

  • 118: 747d1af = 117: 61b13d6 tests: use the correct path separator with BusyBox

  • 119: 54f6687 = 118: d60e553 mingw: only use Bash-ism builtin pwd -W when available

  • 120: 9fd3a37 = 119: d899318 tests (mingw): remove Bash-specific pwd option

  • 121: 46b9fa7 = 120: 13908df test-lib: add BUSYBOX prerequisite

  • 122: 31354e8 = 121: b0ff24d t5003: use binary file from t/lib-diff/

  • 123: bd5ca8b = 122: 15dfc0c t5532: workaround for BusyBox on Windows

  • 124: 5fe6b0f = 123: 5a9274c t5605: special-case hardlink test for BusyBox-w32

  • 125: 6a4bb55 = 124: eeaff0e t5813: allow for $PWD to be a Windows path

  • 126: 25bdb82 = 125: 7779b95 t9200: skip tests when $PWD contains a colon

  • 127: cb33611 = 126: a7bab71 mingw: add a Makefile target to copy test artifacts

  • 129: 2990afe = 127: 15ae007 mingw: optionally enable wsl compability file mode bits

  • 128: 066af3c = 128: 6e70a32 mingw: kill child processes in a gentler way

  • 131: 3881185 = 129: 24c2e4b mingw: do not call xutftowcs_path in mingw_mktemp

  • 130: e0b23e7 = 130: 9bad165 mingw: really handle SIGINT

  • 132: 28c3e43 = 131: a5cd03b Partially un-revert "editor: save and reset terminal after calling EDITOR"

  • 133: 75885fa = 132: d2f963e Add a GitHub workflow to monitor component updates

  • 137: 9e6a091 = 133: 1b3e316 Describe Git for Windows' architecture [no ci]

  • 134: ff41d3b = 134: 4f0462d reset: reinstate support for the deprecated --stdin option

  • 135: 3340122 = 135: 3f88490 fsmonitor: reintroduce core.useBuiltinFSMonitor

  • 136: 147203e = 136: 866b1c5 dependabot: help keeping GitHub Actions versions up to date

  • 138: e155e47 = 137: d4b1f97 Modify the Code of Conduct for Git for Windows

  • 139: 034b75a = 138: d634b06 CONTRIBUTING.md: add guide for first-time contributors

  • 140: 9db70a5 = 139: c4881c1 README.md: Add a Windows-specific preamble

  • 141: 93ffaaf = 140: 8614edb Add an issue template

  • 142: ecf272b = 141: 7ff9f4d Modify the GitHub Pull Request template (to reflect Git for Windows)

  • 143: 1f01e8a = 142: dd05d1c .github: Add configuration for the Sentiment Bot

  • 144: c35f255 = 143: f346b35 Document how $HOME is set on Windows

  • 145: a734359 = 144: 4bcceba SECURITY.md: document Git for Windows' policies

  • -: ------------ > 145: 3903e5d mingw: work around file sharing violations with open()

@derrickstolee I finally figured out how to work around the t0610.47(ref transaction: many concurrent writers) problem: 3903e5d

@rimrul thanks to your timely PR comment, I also reported this work-around to the Git mailing list: https://lore.kernel.org/git/8718c5c4-1d0a-104b-eb39-6338ae9c5dbf@gmx.de/

@dscho
Copy link
Member Author

dscho commented Oct 4, 2024

I finally figured out how to work around the t0610.47(ref transaction: many concurrent writers) problem: 3903e5d

Apparently not quite: win+VS test (6) still fails:

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

@dscho
Copy link
Member Author

dscho commented Oct 4, 2024

Apparently not quite: win+VS test (6) still fails:

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

And win test (6) fails, too, with the same symptom.

@dscho
Copy link
Member Author

dscho commented Oct 4, 2024

Okay...
my-give-up

I officially declare my inability to fix this t0610.47 failure before Git for Windows v2.47.0 is due. I've disabled the test case for now, which is also what the original author of that test case suggested.

We tried quite a few things, but this is a failure introduced at the
last -rc before v2.47.0 _and_ it only documents existing behavior as
far as Windows is concerned (concurrent writes are a problem there with
reftables).

So let's punt and simply disable this test for now, to take the pressure
off of v2.47.0.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
@dscho
Copy link
Member Author

dscho commented Oct 4, 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.

@dscho
Copy link
Member Author

dscho commented Oct 4, 2024

/release

The release-git workflow run was started

@dscho dscho added this to the Next release milestone Oct 4, 2024
@gitforwindowshelper gitforwindowshelper bot merged commit 49e3069 into git-for-windows:main Oct 4, 2024
66 of 67 checks passed
@dscho dscho deleted the rebase-to-v2.47.0-rc1 branch October 4, 2024 13:32
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.47.0-rc1