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-rc0 #5176

Merged
merged 1,055 commits into from
Sep 26, 2024
Merged

Rebase to v2.47.0-rc0 #5176

merged 1,055 commits into from
Sep 26, 2024

Conversation

dscho
Copy link
Member

@dscho dscho commented Sep 26, 2024

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

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

  • 5: fc564e3 = 3: 2950204 transport-helper: add trailing --

  • 6: 0a8e3f5 = 4: f6a1087 remote-helper: check helper status after import/export

  • 7: 17bba8e = 5: f577d4f mingw: demonstrate a problem with certain absolute paths

  • 8: d806221 = 6: 932c431 clean: do not traverse mount points

  • 9: 5686029 = 7: bc5dcde mingw: include the Python parts in the build

  • 10: e6653f9 = 8: 3f57ab8 Always auto-gc after calling a fast-import transport

  • 11: 9ff3a3d = 9: 4b660c2 mingw: allow absolute paths without drive prefix

  • 12: 8bb6c1e = 10: 0c35494 clean: remove mount points when possible

  • 13: 672e4f2 ! 11: 61f6465 win32/pthread: avoid name clashes with winpthread

    @@ compat/win32/pthread.c: static unsigned __stdcall win32_start_routine(void *arg)
      	return 0;
      }
      
    --int pthread_create(pthread_t *thread, const void *unused,
    +-int pthread_create(pthread_t *thread, const void *attr UNUSED,
     -		   void *(*start_routine)(void *), void *arg)
    -+int win32_pthread_create(pthread_t *thread, const void *unused,
    ++int win32_pthread_create(pthread_t *thread, const void *attr UNUSED,
     +			 void *(*start_routine)(void *), void *arg)
      {
      	thread->arg = arg;
  • 14: 09876dd = 12: a55ffbd git-compat-util: avoid redeclaring _DEFAULT_SOURCE

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

  • 16: b9c4eb2 = 14: 89248e7 mimalloc: adjust for building inside Git

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

  • 18: 4530a6b = 16: b3e07b9 mimalloc: use "weak" random seed when statically linked

  • 19: 721eec2 = 17: 260111b mingw: use mimalloc

  • 20: 31160bb ! 18: 6965bc6 transport: optionally disable side-band-64k

    @@ send-pack.c: int send_pack(struct send_pack_args *args,
      	int agent_supported = 0;
      	int advertise_sid = 0;
     @@ send-pack.c: int send_pack(struct send_pack_args *args,
    - 		return 0;
    + 		goto out;
      	}
      
     +	git_config_get_bool("sendpack.sideband", &use_sideband);
      	git_config_get_bool("push.negotiate", &push_negotiate);
    - 	if (push_negotiate)
    - 		get_commons_through_negotiation(args->url, remote_refs, &commons);
    + 	if (push_negotiate) {
    + 		trace2_region_enter("send_pack", "push_negotiate", the_repository);
     @@ send-pack.c: int send_pack(struct send_pack_args *args,
      		allow_deleting_refs = 1;
      	if (server_supports("ofs-delta"))
  • 27: 14c3501 = 19: 8289990 mingw: demonstrate a git add issue with NTFS junctions

  • 21: 3ba8c79 = 20: 8984fef mingw: make sure errno is set correctly when socket operations fail

  • 22: afee39f = 21: 53d32ae mingw: do resolve symlinks in getcwd()

  • 23: 32bad31 = 22: 7fb700b mingw: fix fatal error working on mapped network drives on Windows

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

  • 26: c561389 = 24: 89be22f mingw: ensure valid CTYPE

  • 29: b314796 = 25: cbbb7f6 mingw: allow git.exe to be used instead of the "Git wrapper"

  • 30: 367af8a = 26: 977e2f0 strbuf_realpath(): use platform-dependent API if available

  • 32: d83f5e8 = 27: c5ffba6 mingw: ignore HOMEDRIVE/HOMEPATH if it points to Windows' system directory

  • 34: 884fbfb = 28: c985261 mingw: implement a platform-specific strbuf_realpath()

  • 25: 8801afc = 29: 10567fe vcxproj: unclash project directories with build outputs

  • 28: 189d1cd = 30: cf6faf0 t5505/t5516: allow running without .git/branches/ in the templates

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

  • 33: 27e161a = 32: 0a7c029 http: use new "best effort" strategy for Secure Channel revoke checking

  • 35: 68c871f = 33: 6525eb8 t3701: verify that we can add lots of files interactively

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

  • 42: 96f3555 = 35: 0446698 commit: accept "scissors" with CR/LF line endings

  • 43: 2415aa8 = 36: 5b5e5de t0014: fix indentation

  • 44: caaf8ac = 37: 1ca48ed git-gui: accommodate for intent-to-add files

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

  • 37: 347d2d3 = 39: 5f048eb Makefile: clean up .ilk files when MSVC=1

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

  • 39: 3f1f131 = 41: c9c34c3 config.mak.uname: add git.rc to MSVC builds

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

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

  • 50: 5dcf680 = 44: 79964ea buildsystems: remove duplicate clause

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

  • 54: 1f8310d = 46: 2f1c159 vcxproj: ignore -fno-stack-protector and -fno-common

  • 56: 179e8ac = 47: c4431a6 vcxproj: handle GUI programs, too

  • 45: de50978 = 48: 2210374 vcpkg_install: detect lack of Git

  • 58: 00848d0 = 49: ead04e0 cmake: install headless-git.

  • 46: 12048b5 = 50: 19199f2 vcpkg_install: add comment regarding slow network connections

  • 47: 3a2a268 = 51: 820f045 vcxproj: support building Windows/ARM64 binaries

  • 49: e1cdf71 = 52: 182255b vcbuild: install ARM64 dependencies when building ARM64 binaries

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

  • 53: 99c4bda = 54: b3b6334 cmake: allow building for Windows/ARM64

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

  • 57: 14b7459 = 56: 4b9eb75 Add schannel to curl installation

  • 59: 7e4f229 = 57: f015e72 cmake(): allow setting HOST_CPU for cross-compilation

  • 64: b8b1296 = 58: c4da4b2 mingw: allow for longer paths in parse_interpreter()

  • 65: cab2b72 = 59: 31c45b2 compat/vcbuild: document preferred way to build in Visual Studio

  • 66: ed39322 = 60: 7425303 http: optionally send SSL client certificate

  • 60: b38a487 = 61: 9b96cc1 CMake: default Visual Studio generator has changed

  • 61: 5ba4177 = 62: 0d7a5df .gitignore: add Visual Studio CMakeSetting.json file

  • 62: 9282eff = 63: 97bfd92 subtree: update contrib/subtree test target

  • 63: 8cfea37 = 64: e19671a CMakeLists: add default "x64-windows" arch for Visual Studio

  • 67: c7cf32d = 65: d052839 ci: run contrib/subtree tests in CI builds

  • 68: 4ad003d = 66: c80fe50 CMake: show Win32 and Generator_platform build-option values

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

  • 71: 7eff60f = 68: 26250d7 write_object_file_literally(): use size_t

  • 72: eb7bc6b = 69: 0e2f164 object-file.c: use size_t for header lengths

  • 69: 404d93b = 70: f365901 init: do parse all core.* settings early

  • 78: a77fce4 ! 71: 8c54e26 Enable the built-in FSMonitor as an experimental feature

    @@ Commit message
     
      ## repo-settings.c ##
     @@
    - #include "config.h"
    + #include "repo-settings.h"
      #include "repository.h"
      #include "midx.h"
     +#include "fsmonitor-ipc.h"
  • 73: 6faae20 = 72: 1660078 hash algorithms: use size_t for section lengths

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

  • 75: 0f5221e = 74: 1df41f8 hash-object: add another >4GB/LLP64 test case

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

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

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

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

  • 82: cb96a6e = 79: f9b0c49 winansi: check result and Buffer before using Name

  • 77: 14c432a ! 80: b18d107 Add config option windows.appendAtomically

    @@ Documentation/config/windows.txt (new)
     +	set it false to turn it off.
     
      ## compat/mingw.c ##
    -@@
    -+#define USE_THE_REPOSITORY_VARIABLE
    - #include "../git-compat-util.h"
    - #include "win32.h"
    - #include <aclapi.h>
     @@
      #include "gettext.h"
      #define SECURITY_WIN32
  • 97: d6c73a5 = 81: a850019 mingw: change core.fsyncObjectFiles = 1 by default

  • 83: 340965d = 82: 37bc490 vcxproj: allow building with NO_PERL again

  • 84: b399e4d = 83: 4b37b41 vcxproj: require C11

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

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

  • 87: 22cf792 = 86: 6503c82 vcxproj: handle libreftable_test, too

  • 88: 2d16464 = 87: 44cd22c vcxproj: avoid escaping double quotes in the defines

  • 89: ca24900 = 88: accc435 ci: adjust Azure Pipeline for runs_on_pool

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

  • 91: 800490f = 90: f50e8b0 ci: reinstate Azure Pipelines support

  • 92: a599e1b = 91: 62700f3 azure-pipeline: drop the GETTEXT_POISON job

  • 93: 1fa3bab = 92: 2976f8a azure-pipeline: stop hard-coding apt-get calls

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

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

  • 96: fac5243 = 95: 09e3a1b azure-pipeline: downcase the job name of the Linux32 job

  • 98: dd17e89 = 96: 998692f azure-pipeline: run static-analysis on jammy

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

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

  • 102: c8feee1 = 99: e05606d config.mak.uname: add support for clangarm64

  • 104: 7be890e = 100: 874decc Fix Windows version resources

  • 101: 6f296a1 = 101: 1bbe8cf http: optionally load libcurl lazily

  • 105: 1dd84d1 = 102: 6f04ab6 ci: create clangarm64-build.yml

  • 106: 521b0e0 = 103: 06e72a4 status: fix for old-style submodules with commondir

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

  • 108: 8266ae8 = 105: 6559f8c windows: fix Repository>Explore Working Copy

  • 103: 7015b7e = 106: 0850d0f http: support lazy-loading libcurl also on Windows

  • 109: e463c5f = 107: 9d0520d http: when loading libcurl lazily, allow for multiple SSL backends

  • 110: 246c049 = 108: 126c854 mingw: do load libcurl dynamically by default

  • 111: 6f841b3 = 109: abde14f Add a GitHub workflow to verify that Git/Scalar work in Nano Server

  • 112: 54f725f = 110: 162c2ec mingw: suggest windows.appendAtomically in more cases

  • 113: ba87a0d = 111: b7739dd win32: use native ANSI sequence processing, if possible

  • 114: e9fc25a = 112: dcb5075 git.rc: include winuser.h

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

  • 116: 55a95de = 114: 0373585 t5601/t7406(mingw): do run tests with symlink support

  • 2: f35db51 = 115: f8426a9 ci: work around a problem with HTTP/2 vs libcurl v8.10.0

  • 3: e346cc0 (upstream: e1e0d30) < -: ------------ t5512.40 sometimes dies by SIGPIPE

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

  • 119: 391cd2a = 117: bc45485 Fallback to AppData if XDG_CONFIG_HOME is unset

  • 118: 3f2c20a ! 118: 0ef4a4e pack-objects: add --full-name-hash option

    @@ builtin/pack-objects.c: static void add_cruft_object_entry(const struct object_i
      					    0, name && no_try_delta(name),
      					    pack, offset);
      	}
    -@@ builtin/pack-objects.c: int cmd_pack_objects(int argc, const char **argv, const char *prefix)
    +@@ builtin/pack-objects.c: int cmd_pack_objects(int argc,
      		OPT_STRING_LIST(0, "uri-protocol", &uri_protocols,
      				N_("protocol"),
      				N_("exclude any configured uploadpack.blobpackfileuri with this protocol")),
    @@ builtin/pack-objects.c: int cmd_pack_objects(int argc, const char **argv, const
      		OPT_END(),
      	};
      
    -@@ builtin/pack-objects.c: int cmd_pack_objects(int argc, const char **argv, const char *prefix)
    +@@ builtin/pack-objects.c: int cmd_pack_objects(int argc,
      	if (pack_to_stdout || !rev_list_all)
      		write_bitmap_index = 0;
      
    @@ builtin/repack.c: static void prepare_pack_objects(struct child_process *cmd,
      	if (args->local)
      		strvec_push(&cmd->args,  "--local");
      	if (args->quiet)
    -@@ builtin/repack.c: int cmd_repack(int argc, const char **argv, const char *prefix)
    +@@ builtin/repack.c: int cmd_repack(int argc,
      				N_("pass --no-reuse-delta to git-pack-objects")),
      		OPT_BOOL('F', NULL, &po_args.no_reuse_object,
      				N_("pass --no-reuse-object to git-pack-objects")),
  • 121: 10680be = 119: 3f79411 repack: test --full-name-hash option

  • 122: 2d1854f ! 120: e05e2cd pack-objects: add GIT_TEST_FULL_NAME_HASH

    @@ builtin/pack-objects.c: struct configured_exclusion {
      
      static inline uint32_t pack_name_hash_fn(const char *name)
      {
    -@@ builtin/pack-objects.c: int cmd_pack_objects(int argc, const char **argv, const char *prefix)
    +@@ builtin/pack-objects.c: int cmd_pack_objects(int argc,
      	if (pack_to_stdout || !rev_list_all)
      		write_bitmap_index = 0;
      
  • 123: 8f25388 = 121: c5297f2 git-repack: update usage to match docs

  • 124: d2791c1 = 122: a9be155 p5313: add size comparison test

  • 125: 5f29863 ! 123: 385283b test-tool: add helper for name-hash values

    @@ Commit message
         Signed-off-by: Derrick Stolee <stolee@gmail.com>
     
      ## Makefile ##
    -@@ Makefile: TEST_BUILTINS_OBJS += test-match-trees.o
    +@@ Makefile: TEST_BUILTINS_OBJS += test-lazy-init-name-hash.o
    + TEST_BUILTINS_OBJS += test-match-trees.o
      TEST_BUILTINS_OBJS += test-mergesort.o
      TEST_BUILTINS_OBJS += test-mktemp.o
    - TEST_BUILTINS_OBJS += test-oid-array.o
     +TEST_BUILTINS_OBJS += test-name-hash.o
      TEST_BUILTINS_OBJS += test-online-cpus.o
      TEST_BUILTINS_OBJS += test-pack-mtimes.o
    @@ t/helper/test-tool.c: static struct test_cmd cmds[] = {
      	{ "mergesort", cmd__mergesort },
      	{ "mktemp", cmd__mktemp },
     +	{ "name-hash", cmd__name_hash },
    - 	{ "oid-array", cmd__oid_array },
      	{ "online-cpus", cmd__online_cpus },
      	{ "pack-mtimes", cmd__pack_mtimes },
    + 	{ "parse-options", cmd__parse_options },
     
      ## t/helper/test-tool.h ##
     @@ t/helper/test-tool.h: int cmd__lazy_init_name_hash(int argc, const char **argv);
  • 126: d020fb4 ! 124: bd5a2db repack/pack-objects: mark --full-name-hash as experimental

    @@ Commit message
         Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
     
      ## builtin/pack-objects.c ##
    -@@ builtin/pack-objects.c: int cmd_pack_objects(int argc, const char **argv, const char *prefix)
    +@@ builtin/pack-objects.c: int cmd_pack_objects(int argc,
      				N_("protocol"),
      				N_("exclude any configured uploadpack.blobpackfileuri with this protocol")),
      		OPT_BOOL(0, "full-name-hash", &use_full_name_hash,
    @@ builtin/pack-objects.c: int cmd_pack_objects(int argc, const char **argv, const
      
     
      ## builtin/repack.c ##
    -@@ builtin/repack.c: int cmd_repack(int argc, const char **argv, const char *prefix)
    +@@ builtin/repack.c: int cmd_repack(int argc,
      		OPT_BOOL('F', NULL, &po_args.no_reuse_object,
      				N_("pass --no-reuse-object to git-pack-objects")),
      		OPT_BOOL(0, "full-name-hash", &po_args.full_name_hash,
  • 244: bd4446e = 125: e5c11f5 path-walk: introduce an object walk by path

  • 245: ce11b59 = 126: 017e36a t6601: add helper for testing path-walk API

  • 246: c76e9e7 = 127: 3289262 path-walk: allow consumer to specify object types

  • 247: 7a85f9a = 128: a5f2805 path-walk: allow visiting tags

  • 248: 0ab378d = 129: b6785fd revision: create mark_trees_uninteresting_dense()

  • 249: ac60e11 = 130: d1e895f path-walk: add prune_all_uninteresting option

  • 250: fda0d77 ! 131: 8a73f51 pack-objects: extract should_attempt_deltas()

    @@ Commit message
         Signed-off-by: Derrick Stolee <stolee@gmail.com>
     
      ## builtin/pack-objects.c ##
    -@@ builtin/pack-objects.c: static int add_ref_tag(const char *tag UNUSED, const struct object_id *oid,
    +@@ builtin/pack-objects.c: static int add_ref_tag(const char *tag UNUSED, const char *referent UNUSED, cons
      	return 0;
      }
      
  • 251: 318fd94 ! 132: bb182d9 pack-objects: add --path-walk option

    @@ builtin/pack-objects.c: static void get_object_list(struct rev_info *revs, int a
      
      	if (unpack_unreachable_expiration) {
      		revs->ignore_missing_links = 1;
    -@@ builtin/pack-objects.c: int cmd_pack_objects(int argc, const char **argv, const char *prefix)
    +@@ builtin/pack-objects.c: int cmd_pack_objects(int argc,
      			 N_("use the sparse reachability algorithm")),
      		OPT_BOOL(0, "thin", &thin,
      			 N_("create thin packs")),
    @@ builtin/pack-objects.c: int cmd_pack_objects(int argc, const char **argv, const
      		OPT_BOOL(0, "shallow", &shallow,
      			 N_("create packs suitable for shallow fetches")),
      		OPT_BOOL(0, "honor-pack-keep", &ignore_packed_keep_on_disk,
    -@@ builtin/pack-objects.c: int cmd_pack_objects(int argc, const char **argv, const char *prefix)
    +@@ builtin/pack-objects.c: int cmd_pack_objects(int argc,
      		window = 0;
      
      	strvec_push(&rp, "pack-objects");
  • 252: 9d7c5cb ! 133: f403cae pack-objects: introduce GIT_TEST_PACK_PATH_WALK

    @@ builtin/pack-objects.c: static int add_objects_by_path(const char *path,
      		    oid_object_info_extended(the_repository, oid, &oi,
      					     OBJECT_INFO_FOR_PREFETCH) < 0)
      			continue;
    -@@ builtin/pack-objects.c: int cmd_pack_objects(int argc, const char **argv, const char *prefix)
    +@@ builtin/pack-objects.c: int cmd_pack_objects(int argc,
      	if (pack_to_stdout != !base_name || argc)
      		usage_with_options(pack_usage, pack_objects_options);
      
    @@ t/t5316-pack-delta-depth.sh: max_chain() {
     
      ## t/t5332-multi-pack-reuse.sh ##
     @@ t/t5332-multi-pack-reuse.sh: TEST_PASSES_SANITIZE_LEAK=true
    - . ./test-lib.sh
    - . "$TEST_DIRECTORY"/lib-bitmap.sh
      
    + GIT_TEST_MULTI_PACK_INDEX=0
    + GIT_TEST_MULTI_PACK_INDEX_WRITE_INCREMENTAL=0
    ++
     +# The --path-walk option does not consider the preferred pack
     +# at all for reusing deltas, so this variable changes the
     +# behavior of this test, if enabled.
  • 253: c417efb ! 134: 0aa7820 repack: add --path-walk option

    @@ builtin/repack.c: static void prepare_pack_objects(struct child_process *cmd,
      	if (args->local)
      		strvec_push(&cmd->args,  "--local");
      	if (args->quiet)
    -@@ builtin/repack.c: int cmd_repack(int argc, const char **argv, const char *prefix)
    +@@ builtin/repack.c: int cmd_repack(int argc,
      				N_("pass --no-reuse-object to git-pack-objects")),
      		OPT_BOOL(0, "full-name-hash", &po_args.full_name_hash,
      				N_("(EXPERIMENTAL!) pass --full-name-hash to git-pack-objects")),
  • 254: ebc52fc ! 135: a004ba9 pack-objects: enable --path-walk via config

    @@ Documentation/config/pack.txt: pack.useSparse::
      	commit at the tip of any reference that is a suffix of any value
     
      ## builtin/pack-objects.c ##
    -@@ builtin/pack-objects.c: int cmd_pack_objects(int argc, const char **argv, const char *prefix)
    +@@ builtin/pack-objects.c: int cmd_pack_objects(int argc,
      		if (use_bitmap_index > 0 ||
      		    !use_internal_rev_list)
      			path_walk = 0;
    @@ repo-settings.c: void prepare_repo_settings(struct repository *r)
      		r->settings.pack_use_bitmap_boundary_traversal = 1;
      		r->settings.pack_use_multi_pack_reuse = 1;
     +		r->settings.pack_use_path_walk = 1;
    - 
    - 		/*
    - 		 * Force enable the builtin FSMonitor (unless the repo
    -@@ repo-settings.c: void prepare_repo_settings(struct repository *r)
    + 	}
    + 	if (manyfiles) {
      		r->settings.index_version = 4;
      		r->settings.index_skip_hash = 1;
      		r->settings.core_untracked_cache = UNTRACKED_CACHE_WRITE;
    @@ repo-settings.c: void prepare_repo_settings(struct repository *r)
      	repo_cfg_bool(r, "index.sparse", &r->settings.sparse_index, 0);
      	repo_cfg_bool(r, "index.skiphash", &r->settings.index_skip_hash, r->settings.index_skip_hash);
     
    - ## repository.h ##
    -@@ repository.h: struct repo_settings {
    + ## repo-settings.h ##
    +@@ repo-settings.h: struct repo_settings {
      	enum untracked_cache_setting core_untracked_cache;
      
      	int pack_use_sparse;
  • 255: f3c46f9 = 136: 6749045 scalar: enable path-walk during push via config

  • 256: 940c8a2 ! 137: 3c063bb pack-objects: refactor path-walk delta phase

    @@ builtin/pack-objects.c: static int should_attempt_deltas(struct object_entry *en
      	return 1;
      }
      
    -+static void find_deltas_for_region(struct object_entry *list,
    ++static void find_deltas_for_region(struct object_entry *list UNUSED,
     +				   struct packing_region *region,
     +				   unsigned int *processed)
     +{
  • 257: d9fc474 = 138: c599014 pack-objects: thread the path-based compression

  • 120: 2d4c3f4 ! 139: 6ed4dbe run-command: be helpful with Git LFS fails on Windows 7

    @@ Commit message
     
      ## compat/win32/path-utils.c ##
     @@
    + 
      #include "../../git-compat-util.h"
      #include "../../environment.h"
     +#include "../../wrapper.h"
    @@ git-compat-util.h: static inline int git_offset_1st_component(const char *path)
      #endif
      
     +#ifndef warn_about_git_lfs_on_windows7
    -+static inline void warn_about_git_lfs_on_windows7(int exit_code, const char *argv0)
    ++static inline void warn_about_git_lfs_on_windows7(int exit_code UNUSED,
    ++						  const char *argv0 UNUSED)
     +{
     +}
     +#endif
  • 258: ce757fa ! 140: 30b5cf7 backfill: add builtin boilerplate

    @@ Makefile: BUILTIN_OBJS += builtin/am.o
      BUILTIN_OBJS += builtin/branch.o
     
      ## builtin.h ##
    -@@ builtin.h: int cmd_am(int argc, const char **argv, const char *prefix);
    - int cmd_annotate(int argc, const char **argv, const char *prefix);
    - int cmd_apply(int argc, const char **argv, const char *prefix);
    - int cmd_archive(int argc, const char **argv, const char *prefix);
    -+int cmd_backfill(int argc, const char **argv, const char *prefix);
    - int cmd_bisect(int argc, const char **argv, const char *prefix);
    - int cmd_blame(int argc, const char **argv, const char *prefix);
    - int cmd_branch(int argc, const char **argv, const char *prefix);
    +@@ builtin.h: int cmd_am(int argc, const char **argv, const char *prefix, struct repository *r
    + int cmd_annotate(int argc, const char **argv, const char *prefix, struct repository *repo);
    + int cmd_apply(int argc, const char **argv, const char *prefix, struct repository *repo);
    + int cmd_archive(int argc, const char **argv, const char *prefix, struct repository *repo);
    ++int cmd_backfill(int argc, const char **argv, const char *prefix, struct repository *repo);
    + int cmd_bisect(int argc, const char **argv, const char *prefix, struct repository *repo);
    + int cmd_blame(int argc, const char **argv, const char *prefix, struct repository *repo);
    + int cmd_branch(int argc, const char **argv, const char *prefix, struct repository *repo);
     
      ## builtin/backfill.c (new) ##
     @@
    @@ builtin/backfill.c (new)
     +	NULL
     +};
     +
    -+int cmd_backfill(int argc, const char **argv, const char *prefix)
    ++int cmd_backfill(int argc, const char **argv, const char *prefix, struct repository *repo)
     +{
     +	struct option options[] = {
     +		OPT_END(),
    @@ builtin/backfill.c (new)
     +	argc = parse_options(argc, argv, prefix, options, builtin_backfill_usage,
     +			     0);
     +
    -+	git_config(git_default_config, NULL);
    ++	repo_config(repo, git_default_config, NULL);
     +
     +	die(_("not implemented"));
     +
  • 259: ad7a519 ! 141: 19cbfed backfill: basic functionality and tests

    @@ builtin/backfill.c
     +	reprepare_packed_git(ctx->repo);
     +}
     +
    -+static int fill_missing_blobs(const char *path,
    ++static int fill_missing_blobs(const char *path UNUSED,
     +			      struct oid_array *list,
     +			      enum object_type type,
     +			      void *data)
    @@ builtin/backfill.c
     +		off_t size = 0;
     +		struct object_info info = OBJECT_INFO_INIT;
     +		info.disk_sizep = &size;
    -+		if (oid_object_info_extended(the_repository,
    ++		if (oid_object_info_extended(ctx->repo,
     +					     &list->oid[i],
     +					     &info,
     +					     OBJECT_INFO_FOR_PREFETCH) ||
    @@ builtin/backfill.c
     +	return ret;
     +}
     +
    - int cmd_backfill(int argc, const char **argv, const char *prefix)
    + int cmd_backfill(int argc, const char **argv, const char *prefix, struct repository *repo)
      {
     +	struct backfill_context ctx = {
    -+		.repo = the_repository,
    ++		.repo = repo,
     +		.current_batch = OID_ARRAY_INIT,
     +		.batch_size = 16000,
     +	};
      	struct option options[] = {
      		OPT_END(),
      	};
    -@@ builtin/backfill.c: int cmd_backfill(int argc, const char **argv, const char *prefix)
    +@@ builtin/backfill.c: int cmd_backfill(int argc, const char **argv, const char *prefix, struct reposit
      
    - 	git_config(git_default_config, NULL);
    + 	repo_config(repo, git_default_config, NULL);
      
     -	die(_("not implemented"));
     -
  • 260: bed08ea ! 142: 34b077a backfill: add --batch-size= option

    @@ builtin/backfill.c
      	NULL
      };
      
    -@@ builtin/backfill.c: int cmd_backfill(int argc, const char **argv, const char *prefix)
    +@@ builtin/backfill.c: int cmd_backfill(int argc, const char **argv, const char *prefix, struct reposit
      		.batch_size = 16000,
      	};
      	struct option options[] = {
  • 261: 9dc751a ! 143: a05ddaa backfill: add --sparse option

    @@ builtin/backfill.c: static int do_backfill(struct backfill_context *ctx)
      	repo_init_revisions(ctx->repo, &revs, "");
      	handle_revision_arg("HEAD", &revs, 0, 0);
      
    -@@ builtin/backfill.c: int cmd_backfill(int argc, const char **argv, const char *prefix)
    - 		.repo = the_repository,
    +@@ builtin/backfill.c: int cmd_backfill(int argc, const char **argv, const char *prefix, struct reposit
    + 		.repo = repo,
      		.current_batch = OID_ARRAY_INIT,
      		.batch_size = 16000,
     +		.sparse = 0,
  • 262: d95811c ! 144: 65ea334 backfill: assume --sparse when sparse-checkout is enabled

    @@ Documentation/git-backfill.txt: OPTIONS
      --------
     
      ## builtin/backfill.c ##
    +@@
    ++#define USE_THE_REPOSITORY_VARIABLE /* for core_apply_sparse_checkout */
    ++
    + #include "builtin.h"
    + #include "git-compat-util.h"
    + #include "config.h"
     @@
      #include "repository.h"
      #include "commit.h"
    @@ builtin/backfill.c
      #include "hex.h"
      #include "tree.h"
      #include "tree-walk.h"
    -@@ builtin/backfill.c: int cmd_backfill(int argc, const char **argv, const char *prefix)
    +@@ builtin/backfill.c: int cmd_backfill(int argc, const char **argv, const char *prefix, struct reposit
      
    - 	git_config(git_default_config, NULL);
    + 	repo_config(repo, git_default_config, NULL);
      
     +	if (ctx.sparse < 0)
     +		ctx.sparse = core_apply_sparse_checkout;
  • 263: 3793d09 = 145: f3d90f9 backfill: mark it as experimental

  • 264: 3a8cd93 ! 146: c162f25 survey: stub in new experimental 'git-survey' command

    @@ Makefile: BUILTIN_OBJS += builtin/sparse-checkout.o
      BUILTIN_OBJS += builtin/unpack-file.o
     
      ## builtin.h ##
    -@@ builtin.h: int cmd_status(int argc, const char **argv, const char *prefix);
    - int cmd_stash(int argc, const char **argv, const char *prefix);
    - int cmd_stripspace(int argc, const char **argv, const char *prefix);
    - int cmd_submodule__helper(int argc, const char **argv, const char *prefix);
    -+int cmd_survey(int argc, const char **argv, const char *prefix);
    - int cmd_switch(int argc, const char **argv, const char *prefix);
    - int cmd_symbolic_ref(int argc, const char **argv, const char *prefix);
    - int cmd_tag(int argc, const char **argv, const char *prefix);
    +@@ builtin.h: int cmd_sparse_checkout(int argc, const char **argv, const char *prefix, struct
    + int cmd_status(int argc, const char **argv, const char *prefix, struct repository *repo);
    + int cmd_stash(int argc, const char **argv, const char *prefix, struct repository *repo);
    + int cmd_stripspace(int argc, const char **argv, const char *prefix, struct repository *repo);
    ++int cmd_survey(int argc, const char **argv, const char *prefix, struct repository *repo);
    + int cmd_submodule__helper(int argc, const char **argv, const char *prefix, struct repository *repo);
    + int cmd_switch(int argc, const char **argv, const char *prefix, struct repository *repo);
    + int cmd_symbolic_ref(int argc, const char **argv, const char *prefix, struct repository *repo);
     
      ## builtin/survey.c (new) ##
     @@
    @@ builtin/survey.c (new)
     +	git_config(survey_load_config_cb, ctx);
     +}
     +
    -+int cmd_survey(int argc, const char **argv, const char *prefix)
    ++int cmd_survey(int argc, const char **argv, const char *prefix, struct repository *repo)
     +{
     +	static struct survey_context ctx = {
     +		.opts = {
    @@ builtin/survey.c (new)
     +	if (argc == 2 && !strcmp(argv[1], "-h"))
     +		usage_with_options(survey_usage, survey_options);
     +
    -+	ctx.repo = the_repository;
    ++	ctx.repo = repo;
     +
     +	prepare_repo_settings(ctx.repo);
     +	survey_load_config(&ctx);
  • 265: c08fa91 ! 147: 25da397 survey: add command line opts to select references

    @@ builtin/survey.c: static void survey_load_config(struct survey_context *ctx)
     +	ref_array_clear(&ref_array);
     +}
     +
    - int cmd_survey(int argc, const char **argv, const char *prefix)
    + int cmd_survey(int argc, const char **argv, const char *prefix, struct repository *repo)
      {
      	static struct survey_context ctx = {
      		.opts = {
    @@ builtin/survey.c: static void survey_load_config(struct survey_context *ctx)
      		OPT_END(),
      	};
      
    -@@ builtin/survey.c: int cmd_survey(int argc, const char **argv, const char *prefix)
    +@@ builtin/survey.c: int cmd_survey(int argc, const char **argv, const char *prefix, struct repositor
      	if (ctx.opts.show_progress < 0)
      		ctx.opts.show_progress = isatty(2);
      
  • 266: 2c0755d ! 148: 30f822b survey: start pretty printing data in table form

    @@ builtin/survey.c: static void clear_survey_context(struct survey_context *ctx)
      /*
       * After parsing the command line arguments, figure out which refs we
       * should scan.
    -@@ builtin/survey.c: int cmd_survey(int argc, const char **argv, const char *prefix)
    +@@ builtin/survey.c: int cmd_survey(int argc, const char **argv, const char *prefix, struct repositor
      
      	survey_phase_refs(&ctx);
      
  • 267: 9e2f0af ! 149: 0c4bec0 survey: add object count summary

    @@ builtin/survey.c: static void survey_phase_refs(struct survey_context *ctx)
     +	trace2_region_leave("survey", "phase/objects", ctx->repo);
      }
      
    - int cmd_survey(int argc, const char **argv, const char *prefix)
    -@@ builtin/survey.c: int cmd_survey(int argc, const char **argv, const char *prefix)
    + int cmd_survey(int argc, const char **argv, const char *prefix, struct repository *repo)
    +@@ builtin/survey.c: int cmd_survey(int argc, const char **argv, const char *prefix, struct repositor
      
      	survey_phase_refs(&ctx);
      
  • 268: 947c2c5 = 150: 45bdbf0 survey: summarize total sizes by object type

  • 269: 4e42826 = 151: 6be5118 survey: show progress during object walk

  • 270: 2a99b7c = 152: 62548a9 survey: add ability to track prioritized lists

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

  • 272: f18c0c2 ! 154: afc60cf survey: add --top= option and config

    @@ builtin/survey.c: static void initialize_report(struct survey_context *ctx)
      }
      
      static void survey_phase_objects(struct survey_context *ctx)
    -@@ builtin/survey.c: int cmd_survey(int argc, const char **argv, const char *prefix)
    +@@ builtin/survey.c: int cmd_survey(int argc, const char **argv, const char *prefix, struct repositor
      		.opts = {
      			.verbose = 0,
      			.show_progress = -1, /* defaults to isatty(2) */
    @@ builtin/survey.c: int cmd_survey(int argc, const char **argv, const char *prefix
      
      			.refs.want_all_refs = -1,
      
    -@@ builtin/survey.c: int cmd_survey(int argc, const char **argv, const char *prefix)
    +@@ builtin/survey.c: int cmd_survey(int argc, const char **argv, const char *prefix, struct repositor
      	static struct option survey_options[] = {
      		OPT__VERBOSE(&ctx.opts.verbose, N_("verbose output")),
      		OPT_BOOL(0, "progress", &ctx.opts.show_progress, N_("show progress")),
  • 273: d28dc5b ! 155: bb6ebd1 survey: clearly note the experimental nature in the output

    @@ builtin/survey.c
      
      static const char * const survey_usage[] = {
      	N_("(EXPERIMENTAL!) git survey <options>"),
    -@@ builtin/survey.c: int cmd_survey(int argc, const char **argv, const char *prefix)
    +@@ builtin/survey.c: int cmd_survey(int argc, const char **argv, const char *prefix, struct repositor
      	if (argc == 2 && !strcmp(argv[1], "-h"))
      		usage_with_options(survey_usage, survey_options);
      
    @@ builtin/survey.c: int cmd_survey(int argc, const char **argv, const char *prefix
     +				 want_color_fd(2, GIT_COLOR_AUTO) ? GIT_COLOR_YELLOW : "",
     +				 "(THIS IS EXPERIMENTAL, EXPECT THE OUTPUT FORMAT TO CHANGE!)");
     +
    - 	ctx.repo = the_repository;
    + 	ctx.repo = repo;
      
      	prepare_repo_settings(ctx.repo);
  • 127: 20bfc1f = 156: 69522da Win32: make FILETIME conversion functions public

  • 128: 58f9dfe = 157: 5b0c984 Win32: dirent.c: Move opendir down

  • 129: 071ce86 = 158: f1662b8 mingw: make the dirent implementation pluggable

  • 130: 1913d2b = 159: 7b4a13f Win32: make the lstat implementation pluggable

  • 131: 6d42e40 ! 160: 8a07e6c mingw: add infrastructure for read-only file system level caches

    @@ Documentation/config/core.txt: relatively high IO latencies.  When enabled, Git
      	names that need to be unset before spawning any other process.
     
      ## builtin/commit.c ##
    -@@ builtin/commit.c: int cmd_status(int argc, const char **argv, const char *prefix)
    +@@ builtin/commit.c: struct repository *repo UNUSED)
      		       PATHSPEC_PREFER_FULL,
      		       prefix, argv);
      
    @@ compat/mingw.c: enum hide_dotfiles_type {
     +int core_fscache;
      
      int mingw_core_config(const char *var, const char *value,
    - 		      const struct config_context *ctx, void *cb)
    + 		      const struct config_context *ctx UNUSED,
     @@ compat/mingw.c: int mingw_core_config(const char *var, const char *value,
      		return 0;
      	}
  • 132: e574b79 ! 161: 7aa8425 mingw: add a cache below mingw's lstat and dirent implementations

    @@ compat/win32/fscache.c (new)
     +/*
     + * Compares the paths of two fsentry structures for equality.
     + */
    -+static int fsentry_cmp(void *unused_cmp_data,
    ++static int fsentry_cmp(void *cmp_data UNUSED,
     +		       const struct fsentry *fse1, const struct fsentry *fse2,
    -+		       void *unused_keydata)
    ++		       void *keydata UNUSED)
     +{
     +	int res;
     +	if (fse1 == fse2)
  • 133: 1d30c43 = 162: cf70e90 fscache: load directories only once

  • 134: 583d8aa = 163: c4473a9 fscache: add key for GIT_TRACE_FSCACHE

  • 135: 61d45de = 164: 1b4f462 fscache: remember not-found directories

  • 136: 664e8ac = 165: eb91130 fscache: add a test for the dir-not-found optimization

  • 137: 0ae9145 ! 166: 617c2d1 add: use preload-index and fscache for performance

    @@ Commit message
         Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
     
      ## builtin/add.c ##
    -@@ builtin/add.c: int cmd_add(int argc, const char **argv, const char *prefix)
    - 	die_in_unpopulated_submodule(the_repository->index, prefix);
    - 	die_path_inside_submodule(the_repository->index, &pathspec);
    +@@ builtin/add.c: int cmd_add(int argc,
    + 	die_in_unpopulated_submodule(repo->index, prefix);
    + 	die_path_inside_submodule(repo->index, &pathspec);
      
     +	enable_fscache(1);
     +	/* We do not really re-read the index but update the up-to-date flags */
    -+	preload_index(the_repository->index, &pathspec, 0);
    ++	preload_index(repo->index, &pathspec, 0);
     +
      	if (add_new_files) {
      		int baselen;
      
    -@@ builtin/add.c: int cmd_add(int argc, const char **argv, const char *prefix)
    +@@ builtin/add.c: int cmd_add(int argc,
      	free(ps_matched);
      	dir_clear(&dir);
      	clear_pathspec(&pathspec);
  • 138: 851b171 = 167: 7678e5c dir.c: make add_excludes aware of fscache during status

  • 139: 0a4e8f8 = 168: 4b39ba5 fscache: make fscache_enabled() public

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

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

  • 142: af3cee0 = 171: c97a8dd checkout.c: enable fscache for checkout again

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

  • 144: baf0136 = 173: 62a9ebc fscache: use FindFirstFileExW to avoid retrieving the short name

  • 145: 174e972 ! 174: 8b379b1 status: disable and free fscache at the end of the status command

    @@ Commit message
         Signed-off-by: Ben Peart <benpeart@microsoft.com>
     
      ## builtin/commit.c ##
    -@@ builtin/commit.c: int cmd_status(int argc, const char **argv, const char *prefix)
    +@@ builtin/commit.c: struct repository *repo UNUSED)
      	wt_status_print(&s);
      	wt_status_collect_free_buffers(&s);
      
  • 146: 26798fc = 175: 7dfd5d4 fscache: add GIT_TEST_FSCACHE support

  • 147: 57d95da = 176: 9f0398d fscache: add fscache hit statistics

  • 148: 203101d = 177: 898a7b0 mem_pool: add GIT_TRACE_MEMPOOL support

  • 149: 1746116 ! 178: be72b30 fscache: fscache takes an initial size

    @@ Commit message
         Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
     
      ## builtin/add.c ##
    -@@ builtin/add.c: int cmd_add(int argc, const char **argv, const char *prefix)
    - 	die_in_unpopulated_submodule(the_repository->index, prefix);
    - 	die_path_inside_submodule(the_repository->index, &pathspec);
    +@@ builtin/add.c: int cmd_add(int argc,
    + 	die_in_unpopulated_submodule(repo->index, prefix);
    + 	die_path_inside_submodule(repo->index, &pathspec);
      
     -	enable_fscache(1);
     +	enable_fscache(0);
      	/* We do not really re-read the index but update the up-to-date flags */
    - 	preload_index(the_repository->index, &pathspec, 0);
    + 	preload_index(repo->index, &pathspec, 0);
      
     
      ## builtin/checkout.c ##
    @@ builtin/checkout.c: static int checkout_worktree(const struct checkout_opts *opt
      	errs |= finish_delayed_checkout(&state, opts->show_progress);
     
      ## builtin/commit.c ##
    -@@ builtin/commit.c: int cmd_status(int argc, const char **argv, const char *prefix)
    +@@ builtin/commit.c: struct repository *repo UNUSED)
      		       PATHSPEC_PREFER_FULL,
      		       prefix, argv);
      
    @@ builtin/commit.c: int cmd_status(int argc, const char **argv, const char *prefix
      	if (status_format != STATUS_FORMAT_PORCELAIN &&
      	    status_format != STATUS_FORMAT_PORCELAIN_V2)
      		progress_flag = REFRESH_PROGRESS;
    -@@ builtin/commit.c: int cmd_status(int argc, const char **argv, const char *prefix)
    +@@ builtin/commit.c: struct repository *repo UNUSED)
      	wt_status_print(&s);
      	wt_status_collect_free_buffers(&s);
      
  • 150: db35cf5 = 179: 6325d20 fscache: update fscache to be thread specific instead of global

  • 151: ea24769 = 180: 34fe22c fscache: teach fscache to use mempool

  • 152: e01925b = 181: f085223 fscache: make fscache_enable() thread safe

  • 154: f0ac738 = 182: 1dda695 fscache: teach fscache to use NtQueryDirectoryFile

  • 156: c702d42 = 183: c2ff9e3 unpack-trees: enable fscache for sparse-checkout

  • 158: a39b0cb = 184: 752e625 fscache: remember the reparse tag for each entry

  • 160: 0275f96 = 185: 5effe01 fscache: implement an FSCache-aware is_mount_point()

  • 163: cbc3820 ! 186: 7335e91 clean: make use of FSCache

    @@ Commit message
         Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
     
      ## builtin/clean.c ##
    -@@ builtin/clean.c: int cmd_clean(int argc, const char **argv, const char *prefix)
    +@@ builtin/clean.c: int cmd_clean(int argc,
      
      	if (repo_read_index(the_repository) < 0)
      		die(_("index file corrupt"));
    @@ builtin/clean.c: int cmd_clean(int argc, const char **argv, const char *prefix)
      
      	pl = add_pattern_list(&dir, EXC_CMDL, "--exclude option");
      	for (i = 0; i < exclude_list.nr; i++)
    -@@ builtin/clean.c: int cmd_clean(int argc, const char **argv, const char *prefix)
    +@@ builtin/clean.c: int cmd_clean(int argc,
      		}
      	}
      
  • 153: 614b54a = 187: ab36404 git-gui: provide question helper for retry fallback on Windows

  • 155: 55a60a1 = 188: f9bcdc7 git gui: set GIT_ASKPASS=git-gui--askpass if not set yet

  • 157: 302c46d = 189: 8134f3d git-gui--askyesno: fix funny text wrapping

  • 159: bb4a2c1 = 190: 8694acf git-gui--askyesno: allow overriding the window title

  • 161: 9014b9b = 191: 18c726e gitk: Unicode file name support

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

  • 164: 0a75037 = 193: b897abc gitk: Use an external icon file on Windows

  • 165: 95ad775 = 194: fd6437d gitk: fix arrow keys in input fields with Tcl/Tk >= 8.6

  • 166: 0f60870 = 195: 2fabe46 gitk: make the "list references" default window width wider

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

  • 168: 021726e ! 197: e91062d mingw: support long paths

    @@ compat/mingw.c: static enum hide_dotfiles_type hide_dotfiles = HIDE_DOTFILES_DOT
     +}
     +
      int mingw_core_config(const char *var, const char *value,
    - 		      const struct config_context *ctx, void *cb)
    - {
    + 		      const struct config_context *ctx UNUSED,
    + 		      void *cb UNUSED)
     @@ compat/mingw.c: static wchar_t *normalize_ntpath(wchar_t *wbuf)
      int mingw_unlink(const char *pathname)
      {
    @@ compat/mingw.c: int mingw_rmdir(const char *pathname)
      
      	while ((ret = _wrmdir(wpathname)) == -1 && tries < ARRAY_SIZE(delay)) {
     @@ compat/mingw.c: static int set_hidden_flag(const wchar_t *path, int set)
    - int mingw_mkdir(const char *path, int mode)
    + int mingw_mkdir(const char *path, int mode UNUSED)
      {
      	int ret;
     -	wchar_t wpath[MAX_PATH];
  • 169: f4942ce = 198: f6d060b Win32: fix 'lstat("dir/")' with long paths

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

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

  • 176: 21c96ac ! 201: 057f6d4 clean: suggest using core.longPaths if paths are too long to remove

    @@ Commit message
         Signed-off-by: Ben Boeckel <mathstuf@gmail.com>
     
      ## Documentation/config/advice.txt ##
    -@@ Documentation/config/advice.txt: advice.*::
    +@@ Documentation/config/advice.txt: all advice messages.
      		set their identity configuration.
      	mergeConflict::
      		Shown when various commands stop because of conflicts.
    @@ builtin/clean.c: static int remove_dirs(struct strbuf *path, const char *prefix,
      				*dir_gone = 0;
      				ret = 1;
      			}
    -@@ builtin/clean.c: int cmd_clean(int argc, const char **argv, const char *prefix)
    +@@ builtin/clean.c: int cmd_clean(int argc,
      				qname = quote_path(item->string, NULL, &buf, 0);
      				errno = saved_errno;
      				warning_errno(_(msg_warn_remove_failed), qname);
  • 171: 781e463 = 202: d8d09ab mingw: Support git_terminal_prompt with more terminals

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

  • 173: 7a21b9d = 204: b32df1e mingw (git_terminal_prompt): do fall back to CONIN$/CONOUT$ method

  • 174: a77944a < -: ------------ Unbreak interactive GPG prompt upon signing

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

  • 178: 25eee7c = 206: a15c613 strbuf_readlink: support link targets that exceed PATH_MAX

  • 179: 1925b12 = 207: 6275390 lockfile.c: use is_dir_sep() instead of hardcoded '/' checks

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

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

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

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

  • 184: 0240aa2 = 212: 49cc901 mingw: teach fscache and dirent about symlinks

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

  • 186: 07ad87a = 214: e943c58 Win32: factor out retry logic

  • 187: 4d77b6c = 215: b105378 Win32: change default of 'core.symlinks' to false

  • 188: 93348ea = 216: f0f022d Win32: add symlink-specific error codes

  • 189: fb3c384 = 217: faa04b5 Win32: mingw_unlink: support symlinks to directories

  • 190: 1802cf2 = 218: 8e50d25 Win32: mingw_rename: support renaming symlinks

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

  • 192: 0137e5b ! 220: a9938d0 Win32: implement readlink()

    @@ compat/mingw.h: struct utsname {
       * trivial stubs
       */
      
    --static inline int readlink(const char *path, char *buf, size_t bufsiz)
    +-static inline int readlink(const char *path UNUSED, char *buf UNUSED, size_t bufsiz UNUSED)
     -{ errno = ENOSYS; return -1; }
    - static inline int symlink(const char *oldpath, const char *newpath)
    + static inline int symlink(const char *oldpath UNUSED, const char *newpath UNUSED)
      { errno = ENOSYS; return -1; }
    - static inline int fchmod(int fildes, mode_t mode)
    + static inline int fchmod(int fildes UNUSED, mode_t mode UNUSED)
     @@ compat/mingw.h: int setitimer(int type, struct itimerval *in, struct itimerval *out);
      int sigaction(int sig, struct sigaction *in, struct sigaction *out);
      int link(const char *oldpath, const char *newpath);
  • 193: 7cbbc7e = 221: 92f6f6c mingw: lstat: compute correct size for symlinks

  • 194: d9676dc ! 222: f372e99 Win32: implement basic symlink() functionality (file symlinks only)

    @@ compat/mingw.h: struct utsname {
       * trivial stubs
       */
      
    --static inline int symlink(const char *oldpath, const char *newpath)
    +-static inline int symlink(const char *oldpath UNUSED, const char *newpath UNUSED)
     -{ errno = ENOSYS; return -1; }
    - static inline int fchmod(int fildes, mode_t mode)
    + static inline int fchmod(int fildes UNUSED, mode_t mode UNUSED)
      { errno = ENOSYS; return -1; }
      #ifndef __MINGW64_VERSION_MAJOR
     @@ compat/mingw.h: int setitimer(int type, struct itimerval *in, struct itimerval *out);
  • 195: 3d785fc ! 223: fd7535d Win32: symlink: add support for symlinks to directories

    @@ compat/mingw.c: static inline int is_wdir_sep(wchar_t wchar)
      /* Normalizes NT paths as returned by some low-level APIs. */
      static wchar_t *normalize_ntpath(wchar_t *wbuf)
      {
    -@@ compat/mingw.c: int mingw_mkdir(const char *path, int mode)
    +@@ compat/mingw.c: int mingw_mkdir(const char *path, int mode UNUSED)
      		return -1;
      
      	ret = _wmkdir(wpath);
  • 196: db59bc4 = 224: 6203204 mingw: try to create symlinks without elevated permissions

  • 197: 1ebcc99 = 225: fcef52a mingw: emulate stat() a little more faithfully

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

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

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

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

  • 205: 722a834 = 230: 8a7b14f mingw: Windows Docker volumes are not symbolic links

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

  • 200: b9b2adc = 232: 7a5d265 Win32: symlink: move phantom symlink creation to a separate function

  • 202: 9e51a9a ! 233: 2c414ca Introduce helper to create symlinks that knows about index_state

    @@ git-compat-util.h: static inline int git_has_dir_sep(const char *path)
      
     +#ifndef create_symlink
     +struct index_state;
    -+static inline int git_create_symlink(struct index_state *index, const char *target, const char *link)
    ++static inline int git_create_symlink(struct index_state *index UNUSED,
    ++				     const char *target, const char *link)
     +{
     +	return symlink(target, link);
     +}
    @@ merge-recursive.c: static int update_file_flags(struct merge_options *opt,
     
      ## refs/files-backend.c ##
     @@ refs/files-backend.c: static int create_ref_symlink(struct ref_lock *lock, const char *target)
    - #ifndef NO_SYMLINK_HEAD
    + 
      	char *ref_path = get_locked_file_path(&lock->lk);
      	unlink(ref_path);
     -	ret = symlink(target, ref_path);
  • 204: 38f7ed5 = 234: 880d387 mingw: allow to specify the symlink type in .gitattributes

  • 206: bda809d = 235: c30acd3 Win32: symlink: add test for symlink attribute

  • 208: 850e3ca = 236: bf3bbc3 mingw: explicitly specify with which cmd to prefix the cmdline

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

  • 210: 864e8d8 = 238: bf25de0 test-lib: avoid unnecessary Perl invocation

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

  • 212: 2d2de6c = 240: 0656ea5 tests(mingw): if iconv is unavailable, use test-helper --iconv

  • 213: d2062cc = 241: cfebe5d gitattributes: mark .png files as binary

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

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

  • 216: 06fc9fc ! 244: 2fcd9d9 tests: use the correct path separator with BusyBox

    @@ t/lib-proto-disable.sh: setup_ext_wrapper () {
      }
     
      ## t/t0021-conversion.sh ##
    -@@ t/t0021-conversion.sh: export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
    +@@ t/t0021-conversion.sh: TEST_PASSES_SANITIZE_LEAK=true
      . ./test-lib.sh
      . "$TEST_DIRECTORY"/lib-terminal.sh
      
  • 217: ec5232f = 245: 4e9c7a2 mingw: only use Bash-ism builtin pwd -W when available

  • 218: 91d1456 = 246: 3a0450e tests (mingw): remove Bash-specific pwd option

  • 219: 3d148a6 = 247: f3d15bb test-lib: add BUSYBOX prerequisite

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

  • 221: 1faeaf0 = 249: 709c8bc t5532: workaround for BusyBox on Windows

  • 222: 4623aee = 250: 80230b3 t5605: special-case hardlink test for BusyBox-w32

  • 223: b0095e8 = 251: dcd9dd4 t5813: allow for $PWD to be a Windows path

  • 224: 401cb93 = 252: da3aba0 t9200: skip tests when $PWD contains a colon

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

  • 226: a3a2b32 = 254: ce3085a mingw: kill child processes in a gentler way

  • 227: 703d0da = 255: 6b8ce47 mingw: optionally enable wsl compability file mode bits

  • 231: a34a4d3 = 256: b95b626 mingw: do not call xutftowcs_path in mingw_mktemp

  • 228: c9076df = 257: b04f22e mingw: really handle SIGINT

  • 234: 778b3f0 = 258: 09a0526 Partially un-revert "editor: save and reset terminal after calling EDITOR"

  • 232: 4d02bc6 = 259: 35dcdd9 Add a GitHub workflow to monitor component updates

  • 235: aed93ff ! 260: eab4d9d reset: reinstate support for the deprecated --stdin option

    @@ builtin/reset.c: static const char * const git_reset_usage[] = {
      	NULL
      };
      
    -@@ builtin/reset.c: int cmd_reset(int argc, const char **argv, const char *prefix)
    +@@ builtin/reset.c: int cmd_reset(int argc,
      	struct object_id oid;
      	struct pathspec pathspec;
      	int intent_to_add = 0;
    @@ builtin/reset.c: int cmd_reset(int argc, const char **argv, const char *prefix)
      	const struct option options[] = {
      		OPT__QUIET(&quiet, N_("be quiet, only report errors")),
      		OPT_BOOL(0, "no-refresh", &no_refresh,
    -@@ builtin/reset.c: int cmd_reset(int argc, const char **argv, const char *prefix)
    +@@ builtin/reset.c: int cmd_reset(int argc,
      				N_("record only the fact that removed paths will be added later")),
      		OPT_PATHSPEC_FROM_FILE(&pathspec_from_file),
      		OPT_PATHSPEC_FILE_NUL(&pathspec_file_nul),
    @@ builtin/reset.c: int cmd_reset(int argc, const char **argv, const char *prefix)
      		OPT_END()
      	};
      
    -@@ builtin/reset.c: int cmd_reset(int argc, const char **argv, const char *prefix)
    +@@ builtin/reset.c: int cmd_reset(int argc,
      						PARSE_OPT_KEEP_DASHDASH);
      	parse_args(&pathspec, argv, prefix, patch_mode, &rev);
      
  • 236: c841d6e ! 261: c10b13c fsmonitor: reintroduce core.useBuiltinFSMonitor

    @@ Commit message
         Signed-off-by: Victoria Dye <vdye@github.com>
     
      ## Documentation/config/advice.txt ##
    -@@ Documentation/config/advice.txt: advice.*::
    +@@ Documentation/config/advice.txt: all advice messages.
      		Shown when the user tries to create a worktree from an
      		invalid reference, to tell the user how to create a new unborn
      		branch instead.
    @@ fsmonitor-settings.c
     +#include "advice.h"
      
      /*
    -  * We keep this structure defintion private and have getters
    +  * We keep this structure definition private and have getters
     @@ fsmonitor-settings.c: static struct fsmonitor_settings *alloc_settings(void)
      	return s;
      }
  • 237: 12224bb = 262: c5ea125 dependabot: help keeping GitHub Actions versions up to date

  • 229: 25eeae7 = 263: 1e3450a Describe Git for Windows' architecture [no ci]

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

  • 233: dd7859a = 265: 8426302 CONTRIBUTING.md: add guide for first-time contributors

  • 238: 89a6099 = 266: f6204b6 README.md: Add a Windows-specific preamble

  • 239: 2a5e47a = 267: 03bc833 Add an issue template

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

  • 241: 526471d = 269: d081204 .github: Add configuration for the Sentiment Bot

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

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

Lots of added UNUSED, context changes, transitioning away from the_repository... But also one change I meant to make earlier:

174: a77944a < -: ------------ Unbreak interactive GPG prompt upon signing

It seems that this patch is no longer needed, so let's drop it.

derrickstolee and others added 30 commits September 26, 2024 22:11
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>
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>
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>
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
Config option to disable side-band-64k for transport
Make sure `errno` is set when socket operations fail
mingw: fix fatal error working on mapped network drives on Windows
clink.pl: fix MSVC compile script to handle libcurl-d.lib
Handle `git add <file>` where <file> traverses an NTFS junction
Allow running Git directly from `C:\Program Files\Git\mingw64\bin\git.exe`
Introduce and use the new "best effort" strategy for Secure Channel revoke checking
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
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>
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.
Vcpkg Install: detect lack of working Git, and note possible vcpkg time outs
cmake(): allow setting HOST_CPU for cross-compilation
Philip Oakley and others added 22 commits September 26, 2024 23:41
Git for Windows accepts pull requests; Core Git does not. Therefore we
need to adjust the template (because it only matches core Git's
project management style, not ours).

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

Signed-off-by: Philip Oakley <philipoakley@iee.org>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
The sentiment bot will help detect when things get too heated.
Hopefully.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Git documentation refers to $HOME and $XDG_CONFIG_HOME often, but does not specify how or where these values come from on Windows where neither is set by default. The new documentation reflects the behavior of setup_windows_environment() in compat/mingw.c.

Signed-off-by: Alejandro Barreto <alejandro.barreto@ni.com>
This is the recommended way on GitHub to describe policies revolving around
security issues and about supported versions.

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

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
clean: suggest using `core.longPaths` if paths are too long to remove
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
This was pull request #1645 from ZCube/master

Support windows container.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
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>
Specify symlink type in .gitattributes
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>
Switch to batched fsync by default
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>
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 dscho added this to the Next release milestone Sep 26, 2024
@dscho dscho self-assigned this Sep 26, 2024
@dscho
Copy link
Member Author

dscho commented Sep 26, 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 Sep 26, 2024

/release

The release-git workflow run was started

@gitforwindowshelper gitforwindowshelper bot merged commit e6b0617 into main Sep 26, 2024
98 of 99 checks passed
@gitforwindowshelper gitforwindowshelper bot deleted the rebase-to-v2.47.0-rc0 branch September 26, 2024 23:19
@dscho dscho linked an issue Sep 26, 2024 that may be closed by this pull request
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-rc0