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.38.0-rc0 #4021

Merged
merged 997 commits into from
Sep 16, 2022
Merged

Rebase to v2.38.0-rc0 #4021

merged 997 commits into from
Sep 16, 2022

Conversation

dscho
Copy link
Member

@dscho dscho commented Sep 16, 2022

Range-diff relative to the current `main` branch
  • 1: ae86b86 = 1: e1c540c t9350: point out that refs are not updated correctly

  • 2: ab69ea8 = 2: 8082fe4 transport-helper: add trailing --

  • 3: 54396e2 = 3: 481d838 remote-helper: check helper status after import/export

  • 5: f719924 = 4: 6671718 mingw: demonstrate a problem with certain absolute paths

  • 4: 9849ef5 = 5: 607c337 Always auto-gc after calling a fast-import transport

  • 6: 666b55b < -: ------------ archive: replace write_or_die() calls with write_block_or_die()
    
    
  • 10: 5cbc301 < -: ------------ archive: avoid spawning gzip
    
    
  • 15: 11264b0 = 10: 7b93cc2 mingw: include the Python parts in the build

  • 12: 1f634b9 = 11: 63dab35 gitk: Escape file paths before piping to git log

  • 13: c80f11e = 12: 9867f31 clean: remove mount points when possible

  • 16: b304680 = 13: 920138a Config option to disable side-band-64k for transport

  • 17: d711bd2 = 14: 7a7dffa mingw: make sure errno is set correctly when socket operations fail

  • 18: 1d10cc4 = 15: bac9575 mingw: do resolve symlinks in getcwd()

  • 19: 0038219 = 16: 8214a5c mingw: fix fatal error working on mapped network drives on Windows

  • 22: a05f733 = 17: 9b681be mingw: ensure valid CTYPE

  • 14: f343dd8 = 18: c041836 mingw: demonstrate a git add issue with NTFS junctions

  • 24: beb3082 = 19: 1f39185 mingw: allow git.exe to be used instead of the "Git wrapper"

  • 25: 1c305cf = 20: bb6f4fa strbuf_realpath(): use platform-dependent API if available

  • 28: 7e7190c = 21: faec88e mingw: ignore HOMEDRIVE/HOMEPATH if it points to Windows' system directory

  • 29: cb3b22c = 22: 1ecef8e http: use new "best effort" strategy for Secure Channel revoke checking

  • 20: f51dca1 = 23: 2536656 clink.pl: fix MSVC compile script to handle libcurl-d.lib

  • 30: c98beec = 24: 1ba1a9d mingw: implement a platform-specific strbuf_realpath()

  • 21: ef31fd2 = 25: 12e0667 vcxproj: unclash project directories with build outputs

  • 23: 5eed085 ! 26: fdb7550 t5505/t5516: allow running without .git/branches/ in the templates

    @@ t/t5505-remote.sh: test_expect_success 'migrate a remote from named file in $GIT
      	(
      		cd six &&
      		git remote rm origin &&
    +-		mkdir .git/branches &&
     +		mkdir -p .git/branches &&
      		echo "$origin_url#main" >.git/branches/origin &&
      		git remote rename origin origin &&
    @@ t/t5505-remote.sh: test_expect_success 'migrate a remote from named file in $GIT
      	(
      		cd seven &&
      		git remote rm origin &&
    +-		mkdir .git/branches &&
     +		mkdir -p .git/branches &&
      		echo "quux#foom" > .git/branches/origin &&
      		git remote rename origin origin &&
    @@ t/t5516-fetch-push.sh: test_expect_success 'fetch with branches' '
      	mk_empty testrepo &&
      	git branch second $the_first_commit &&
      	git checkout second &&
    +-	mkdir testrepo/.git/branches &&
     +	mkdir -p testrepo/.git/branches &&
      	echo ".." > testrepo/.git/branches/branch1 &&
      	(
    @@ t/t5516-fetch-push.sh: test_expect_success 'fetch with branches' '
      
      test_expect_success 'fetch with branches containing #' '
      	mk_empty testrepo &&
    +-	mkdir testrepo/.git/branches &&
     +	mkdir -p testrepo/.git/branches &&
      	echo "..#second" > testrepo/.git/branches/branch2 &&
      	(
      		cd testrepo &&
    -@@ t/t5516-fetch-push.sh: test_expect_success 'fetch with branches containing #' '
    - test_expect_success 'push with branches' '
    - 	mk_empty testrepo &&
    +@@ t/t5516-fetch-push.sh: test_expect_success 'push with branches' '
      	git checkout second &&
    + 
    + 	test_when_finished "rm -rf .git/branches" &&
    +-	mkdir .git/branches &&
     +	mkdir -p .git/branches &&
      	echo "testrepo" > .git/branches/branch1 &&
    - 	git push branch1 &&
    - 	(
    -@@ t/t5516-fetch-push.sh: test_expect_success 'push with branches' '
      
    - test_expect_success 'push with branches containing #' '
    + 	git push branch1 &&
    +@@ t/t5516-fetch-push.sh: test_expect_success 'push with branches containing #' '
      	mk_empty testrepo &&
    + 
    + 	test_when_finished "rm -rf .git/branches" &&
    +-	mkdir .git/branches &&
     +	mkdir -p .git/branches &&
      	echo "testrepo#branch3" > .git/branches/branch2 &&
    + 
      	git push branch2 &&
    - 	(
  • 27: 12a00d1 ! 27: 2160fce t5505/t5516: fix white-space around redirectors

    @@ t/t5516-fetch-push.sh: test_expect_success 'fetch with branches' '
      		cd testrepo &&
      		git fetch branch2 &&
     @@ t/t5516-fetch-push.sh: test_expect_success 'push with branches' '
    - 	mk_empty testrepo &&
    - 	git checkout second &&
    + 
    + 	test_when_finished "rm -rf .git/branches" &&
      	mkdir -p .git/branches &&
     -	echo "testrepo" > .git/branches/branch1 &&
     +	echo "testrepo" >.git/branches/branch1 &&
    + 
      	git push branch1 &&
      	(
    - 		cd testrepo &&
    -@@ t/t5516-fetch-push.sh: test_expect_success 'push with branches' '
    - test_expect_success 'push with branches containing #' '
    - 	mk_empty testrepo &&
    +@@ t/t5516-fetch-push.sh: test_expect_success 'push with branches containing #' '
    + 
    + 	test_when_finished "rm -rf .git/branches" &&
      	mkdir -p .git/branches &&
     -	echo "testrepo#branch3" > .git/branches/branch2 &&
     +	echo "testrepo#branch3" >.git/branches/branch2 &&
    + 
      	git push branch2 &&
      	(
    - 		cd testrepo &&
     @@ t/t5516-fetch-push.sh: EOF
      	git init no-thin &&
      	git --git-dir=no-thin/.git config receive.unpacklimit 0 &&
  • 26: 0588767 = 28: ad04f51 Allow add -p and add -i with a large number of files

  • 31: 783307f = 29: 100a975 t3701: verify that we can add lots of files interactively

  • 32: 58d581b = 30: 7e5094e git add -i: handle CR/LF line endings in the interactive input

  • 36: 746f589 = 31: b21916e clink.pl: fix libexpatd.lib link error when using MSVC

  • 37: 7ad85bd = 32: bf25f6b Makefile: clean up .ilk files when MSVC=1

  • 38: 5b37548 = 33: c39dfee vcbuild: add support for compiling Windows resource files

  • 39: 7001ed0 = 34: e45eb41 config.mak.uname: add git.rc to MSVC builds

  • 33: 6322afc = 35: bda7bd9 commit: accept "scissors" with CR/LF line endings

  • 34: b7ee730 = 36: 1b23cfd t0014: fix indentation

  • 35: 64bedae = 37: 5314e08 git-gui: accommodate for intent-to-add files

  • 40: 4229e71 = 38: cbd7448 clink.pl: ignore no-stack-protector arg on MSVC=1 builds

  • 41: 7bc5f6b = 39: a09a029 clink.pl: move default linker options for MSVC=1 builds

  • 47: 1f8748b = 40: 35b4e38 vcpkg_install: detect lack of Git

  • 42: c49614d = 41: a2758d0 buildsystems: remove duplicate clause

  • 50: 26f3562 = 42: ee5af34 vcpkg_install: add comment regarding slow network connections

  • 43: 15e8d38 = 43: 653ef80 vcxproj: handle resource files, too

  • 52: 1037048 = 44: d565baa vcxproj: support building Windows/ARM64 binaries

  • 44: 920266a = 45: 99f2e86 vcxproj: ignore -fno-stack-protector and -fno-common

  • 54: 38b7c5d = 46: 2916679 vcbuild: install ARM64 dependencies when building ARM64 binaries

  • 45: 90f1b5b = 47: ff4e2e1 vcxproj: handle GUI programs, too

  • 56: 64f83e8 = 48: f71b8f0 vcbuild: add an option to install individual 'features'

  • 46: 788496e ! 49: b8ae498 win32: add a helper to run git.exe without a foreground window

    @@ Makefile: compat/nedmalloc/nedmalloc.sp compat/nedmalloc/nedmalloc.o: EXTRA_CPPF
      
     @@ Makefile: clean: profile-clean coverage-clean cocciclean
      	$(RM) po/git.pot po/git-core.pot
    - 	$(RM) *.res
    + 	$(RM) git.res
      	$(RM) $(OBJECTS)
     +	$(RM) headless-git.o
      	$(RM) $(LIB_FILE) $(XDIFF_LIB) $(REFTABLE_LIB) $(REFTABLE_TEST_LIB)
  • 58: 98cd770 = 50: 4cfc909 cmake: allow building for Windows/ARM64

  • 48: 27ced5b = 51: cddc674 git maintenance: avoid console window in scheduled tasks on Windows

  • 49: 3ece0a6 = 52: a597d7b Add a GitHub workflow to generate Git for Windows' Pacman package

  • 51: 95bd756 = 53: e17402f git-artifacts: if GPG secrets are available, use them

  • 53: f94fd9e = 54: 1d2c687 git-artifacts: also code-sign, if configured via the secrets

  • 55: 63e63ae = 55: eb56663 git-artifacts: also build the installer

  • 57: 1f9c4f6 = 56: 507caf6 git-artifacts: also build portable, mingit and mingit-busybox

  • 59: 88c8301 = 57: 286f370 git-artifacts: also build 32-bit versions

  • 61: 5e65e9a = 58: a62b7f9 git-artifacts: also build the nuget package

  • 63: 706e147 = 59: 74d09dc git-artifacts: allow restricting which artifacts are built

  • 64: 845e925 = 60: 8550041 git-artifacts: allow specifying repo/ref via workflow_dispatch

  • 65: 5c68e3e = 61: 4b51d6e git-artifacts: cache the build-installers artifact

  • 66: 47a0963 = 62: 1ca5014 git-artifacts: use the cached build-installers instead of makepkg-git

  • 60: 97b7164 = 63: 7543e15 ci(vs-build) also build Windows/ARM64 artifacts

  • 67: 214ba16 = 64: 68d7ae9 git-artifacts: add ARM64 artifacts

  • 62: 1efd586 = 65: 3d96f97 Add schannel to curl installation

  • 74: 1bde85d = 66: 1188219 git-artifacts: add workaround for GCM Core on ARM64

  • 68: cc14281 = 67: 630d02d git-artifacts(arm64): avoid hard-linking the dashed built-ins

  • 69: 938ebc6 = 68: 4f1d1f9 git-artifacts: use a narrower PATH

  • 70: d78aee8 = 69: d715db3 git-artifacts: fix BUILD_ONLY handling for ARM64

  • 71: 52da5f1 = 70: 862076b git-artifacts: extend the SKIP logic to handle pkg and build-arm64

  • 72: ef41657 = 71: d54f001 git-artifacts: mark all inputs as "not required"

  • 73: 92a6d81 = 72: c05801e git-artifacts(build-arm64): build artifacts using the intended Git revision

  • 75: c8bd524 = 73: a982171 cmake(): allow setting HOST_CPU for cross-compilation

  • 76: db263be = 74: 62acf98 git-artifacts: use the setup-git-for-windows-sdk Action

  • 77: 586e440 = 75: 488456a ci(): add HOST_CPU to CMake command

  • 78: d2c0317 = 76: ea48d99 subtree: update contrib/subtree test target

  • 79: 021caaf = 77: 7387a76 ci(vs-build): download the vcpkg artifacts using a dedicated Action

  • 80: 912211c = 78: ff5e984 mingw: allow for longer paths in parse_interpreter()

  • 81: ef3e53d = 79: 45a5d78 compat/vcbuild: document preferred way to build in Visual Studio

  • 82: bbaf1f8 = 80: b5a014a http: optionally send SSL client certificate

  • 83: b771d3a = 81: f6f01bd CMake: default Visual Studio generator has changed

  • 84: 801018c = 82: f7ca3c6 .gitignore: add Visual Studio CMakeSetting.json file

  • 85: f15f157 = 83: dc77415 hash-object: demonstrate a >4GB/LLP64 problem

  • 86: 8b603fb = 84: 9dd28b0 CMakeLists: add default "x64-windows" arch for Visual Studio

  • 87: 820a1f0 = 85: 83aa608 fsmonitor: reintroduce core.useBuiltinFSMonitor

  • 88: 7f15973 ! 86: e9cbc5a hash_object_file_literally(): use size_t

    @@ object-store.h: static inline int write_object_file(const void *buf, unsigned lo
     +int write_object_file_literally(const void *buf, size_t len,
      				const char *type, struct object_id *oid,
      				unsigned flags);
    - 
    + int stream_loose_object(struct input_stream *in_stream, size_t len,
  • 89: 63e2295 = 87: 7e80060 ci: run contrib/subtree tests in CI builds

  • 90: f43728f = 88: 3d3f165 CMake: show Win32 and Generator_platform build-option values

  • 91: dc9c250 = 89: 0af57e9 init: do parse all core.* settings early

  • 92: 8bd0bad = 90: 57a866b Enable the built-in FSMonitor as an experimental feature

  • 93: 5eec758 ! 91: ee00326 object-file.c: use size_t for header lengths

    @@ object-file.c: static int write_buffer(int fd, const void *buf, size_t len)
      		      struct object_id *oid)
      {
      	hash_object_file_literally(algo, buf, len, type_name(type), oid);
    -@@ object-file.c: static int freshen_packed_object(const struct object_id *oid)
    - 	return 1;
    +@@ object-file.c: int stream_loose_object(struct input_stream *in_stream, size_t len,
    + 	return err;
      }
      
     -int write_object_file_flags(const void *buf, unsigned long len,
  • 94: c017889 = 92: 3f2541e hash algorithms: use size_t for section lengths

  • 95: 12853da = 93: d18a78b hash-object --stdin: verify that it works with >4GB/LLP64

  • 96: 5ce7cff = 94: c4701dd hash-object: add another >4GB/LLP64 test case

  • 125: 9ea4211 = 95: 47742b8 vcxproj: allow building with NO_PERL again

  • 126: 02da463 = 96: 103c942 vcxproj: require C11

  • 98: 5879eb5 = 97: c22d07e setup: properly use "%(prefix)/" when in WSL

  • 127: c628fe3 = 98: 9d8e328 vcxproj: ignore the -pedantic option

  • 97: 7fe1eb7 = 99: 561a5e8 hash-object: add a >4GB/LLP64 test case using filtered input

  • 99: c4af75a = 100: ac8105a compat/mingw.c: do not warn when failing to get owner

  • 100: dbcf6ec = 101: 439a8b2 mingw: $env:TERM="xterm-256color" for newer OSes

  • 101: 4295ad2 = 102: 47afddb winansi: check result and Buffer before using Name

  • 102: 8cd241f = 103: 0ba0416 Add config option windows.appendAtomically

  • 128: 4ce1741 = 104: ad6afeb vcxproj: include reftable when committing .vcxproj files

  • 129: 9ee7289 = 105: f6946cf vcxproj: handle libreftable_test, too

  • 130: 54fd462 = 106: fcb8aed vcxproj: avoid escaping double quotes in the defines

  • 131: 8603412 = 107: c9bfa3a ci: adjust Azure Pipeline for runs_on_pool

  • 132: 2b79cfe = 108: a379a40 ci: stop linking the prove cache

  • 133: cb4cc3d = 109: 8a3a771 ci: reinstate Azure Pipelines support

  • 134: 14895fc = 110: fe20eb6 azure-pipeline: drop the GETTEXT_POISON job

  • 135: 34e2791 = 111: b6aa24d azure-pipeline: stop hard-coding apt-get calls

  • 136: 39dbdd8 = 112: 9c44fa9 azure-pipeline: drop the code to write to/read from a file share

  • 137: c99c1ee = 113: ac551bf azure-pipeline: use partial clone/parallel checkout to initialize minimal-sdk

  • 138: 9dd6cc6 = 114: 38fc4d2 azure-pipeline: downcase the job name of the Linux32 job

  • 139: ac363dd = 115: 8079031 azure-pipeline: run static-analysis on bionic

  • 124: 7617888 = 116: 9393f68 MinGW: link as terminal server aware

  • 235: 45a8eca = 117: 825c77b win32/pthread: avoid name clashes with winpthread

  • 236: 9e7f6dd = 118: 3bc8e61 git-compat-util: avoid redeclaring _DEFAULT_SOURCE

  • 237: ce055a3 = 119: 85dfed2 Import the source code of mimalloc

  • 238: 52846ae = 120: 34da9a7 mimalloc: adjust for building inside Git

  • 239: 4a078fa = 121: b13fd67 mimalloc: avoid %z format

  • 240: e56f44a = 122: 44d01f4 mimalloc: avoid having to link to psapi just for mimalloc

  • 241: 59f74e9 = 123: f930463 mimalloc: avoid having to link to bcrypt just for mimalloc

  • 242: 2075ffd = 124: 314ace6 mimalloc: offer a build-time option to enable it

  • 243: 53ff12c = 125: aa076e0 mimalloc: make MIMALLOC_SHOW_STATS work with redirected stderr

  • 244: e02f80a = 126: ff2ce66 mingw: use mimalloc

  • 140: 14bb1e7 = 127: facf40a Win32: make FILETIME conversion functions public

  • 141: 1a0db9d = 128: 055b028 Win32: dirent.c: Move opendir down

  • 142: 2a6031e = 129: da9a2a8 mingw: make the dirent implementation pluggable

  • 143: 5ed1165 = 130: 6665f73 Win32: make the lstat implementation pluggable

  • 144: 4c7a0e8 = 131: 74d18a7 add infrastructure for read-only file system level caches

  • 145: 04f0eea = 132: c887104 mingw: add a cache below mingw's lstat and dirent implementations

  • 146: 7732cba = 133: c38580c fscache: load directories only once

  • 147: 2423add = 134: 9f148f2 fscache: add key for GIT_TRACE_FSCACHE

  • 148: 9efa26d = 135: 7fdc57e fscache: remember not-found directories

  • 149: bab6c54 = 136: 455c2e3 fscache: add a test for the dir-not-found optimization

  • 150: 07ed04d = 137: 137482a add: use preload-index and fscache for performance

  • 151: bb9eda8 = 138: 47cf2b5 dir.c: make add_excludes aware of fscache during status

  • 152: 5481d04 = 139: e98fd0c fscache: make fscache_enabled() public

  • 153: ac0d931 = 140: 6a42aa2 dir.c: regression fix for add_excludes with fscache

  • 154: 222ea58 = 141: 5fdfdf8 fetch-pack.c: enable fscache for stats under .git/objects

  • 155: 8083408 = 142: 9bece8c checkout.c: enable fscache for checkout again

  • 156: 19fcc4e = 143: 8166572 Enable the filesystem cache (fscache) in refresh_index().

  • 157: 93d1777 = 144: fbd5b1c fscache: use FindFirstFileExW to avoid retrieving the short name

  • 158: c8d1ef4 = 145: d1a82a9 status: disable and free fscache at the end of the status command

  • 159: ebd7033 = 146: 98c2e04 fscache: add GIT_TEST_FSCACHE support

  • 160: 0278530 = 147: 9f00d95 fscache: add fscache hit statistics

  • 161: c2e5684 = 148: cc57cd2 mem_pool: add GIT_TRACE_MEMPOOL support

  • 162: 6e64932 = 149: 23cc27b fscache: fscache takes an initial size

  • 163: b69b01c = 150: e7f9898 fscache: update fscache to be thread specific instead of global

  • 164: 63cd434 = 151: c07d166 fscache: teach fscache to use mempool

  • 165: 7e70584 = 152: 7671b2e fscache: make fscache_enable() thread safe

  • 166: 88ec319 = 153: db7a4ec fscache: teach fscache to use NtQueryDirectoryFile

  • 167: 9f5d680 = 154: a5fddb7 unpack-trees: enable fscache for sparse-checkout

  • 168: 20e9add = 155: 2af243c fscache: remember the reparse tag for each entry

  • 103: bab3b66 = 156: 28f0304 git-gui: provide question helper for retry fallback on Windows

  • 169: 11d4c65 = 157: 66577d6 fscache: implement an FSCache-aware is_mount_point()

  • 104: 0334e9c = 158: e68f005 git gui: set GIT_ASKPASS=git-gui--askpass if not set yet

  • 107: 27cfa37 = 159: 1bb10ea respect core.hooksPath, falling back to .git/hooks

  • 170: 9ccebb8 = 160: abbb795 clean: make use of FSCache

  • 108: 571b3c2 = 161: 1b3937c gitk: Unicode file name support

  • 105: 8fa9f9a = 162: 69ac28a git-gui--askyesno: fix funny text wrapping

  • 109: a2e617a = 163: d190d96 gitk: Use an external icon file on Windows

  • 106: 1776f90 = 164: 5a0579f git-gui--askyesno: allow overriding the window title

  • 110: 1409ef7 = 165: c47f966 gitk: fix arrow keys in input fields with Tcl/Tk >= 8.6

  • 111: 48f07cd = 166: 3b82633 git-gui--askyesno (mingw): use Git for Windows' icon, if available

  • 112: 791b338 = 167: a826a55 gitk: make the "list references" default window width wider

  • 171: 88a9853 = 168: 8c3ddd3 pack-objects (mingw): demonstrate a segmentation fault with large deltas

  • 172: d8c2462 = 169: a5186c2 mingw: support long paths

  • 173: 3df12f3 = 170: a4b1114 Win32: fix 'lstat("dir/")' with long paths

  • 174: 9a2ae5f ! 171: ae4e147 mingw: ensure that core.longPaths is handled always

    @@ builtin/bisect--helper.c: int cmd_bisect__helper(int argc, const char **argv, co
     +	git_config(git_default_config, NULL);
      	argc = parse_options(argc, argv, prefix, options,
      			     git_bisect_helper_usage,
    - 			     PARSE_OPT_KEEP_DASHDASH | PARSE_OPT_KEEP_UNKNOWN);
    + 			     PARSE_OPT_KEEP_DASHDASH | PARSE_OPT_KEEP_UNKNOWN_OPT);
     
      ## builtin/bundle.c ##
     @@
    @@ builtin/check-ref-format.c
      static const char builtin_check_ref_format_usage[] =
      "git check-ref-format [--normalize] [<options>] <refname>\n"
     @@ builtin/check-ref-format.c: int cmd_check_ref_format(int argc, const char **argv, const char *prefix)
    - 	int flags = 0;
    - 	const char *refname;
    + 	char *to_free = NULL;
    + 	int ret = 1;
      
     +	git_config(git_default_config, NULL);
      	if (argc == 2 && !strcmp(argv[1], "-h"))
    @@ builtin/merge-index.c: int cmd_merge_index(int argc, const char **argv, const ch
     
      ## builtin/merge-tree.c ##
     @@
    - #include "blob.h"
      #include "exec-cmd.h"
      #include "merge-blobs.h"
    + #include "quote.h"
     +#include "config.h"
      
    - static const char merge_tree_usage[] = "git merge-tree <base-tree> <branch1> <branch2>";
    + static int line_termination = '\n';
      
     @@ builtin/merge-tree.c: int cmd_merge_tree(int argc, const char **argv, const char *prefix)
    - 	if (argc != 4)
    - 		usage(merge_tree_usage);
    + 		OPT_END()
    + 	};
      
     +	git_config(git_default_config, NULL);
    - 	buf1 = get_tree_descriptor(r, t+0, argv[1]);
    - 	buf2 = get_tree_descriptor(r, t+1, argv[2]);
    - 	buf3 = get_tree_descriptor(r, t+2, argv[3]);
    ++
    + 	/* Parse arguments */
    + 	original_argc = argc - 1; /* ignoring argv[0] */
    + 	argc = parse_options(argc, argv, prefix, mt_options,
     
      ## builtin/mktag.c ##
     @@ builtin/mktag.c: int cmd_mktag(int argc, const char **argv, const char *prefix)
    @@ builtin/reflog.c: int cmd_reflog(int argc, const char **argv, const char *prefix
      
     +	git_config(git_default_config, NULL);
      	argc = parse_options(argc, argv, prefix, options, reflog_usage,
    + 			     PARSE_OPT_SUBCOMMAND_OPTIONAL |
      			     PARSE_OPT_KEEP_DASHDASH | PARSE_OPT_KEEP_ARGV0 |
    - 			     PARSE_OPT_KEEP_UNKNOWN |
     
      ## builtin/remote-ext.c ##
     @@
    @@ builtin/remote-ext.c: int cmd_remote_ext(int argc, const char **argv, const char
     
      ## builtin/remote.c ##
     @@ builtin/remote.c: int cmd_remote(int argc, const char **argv, const char *prefix)
    + 		OPT_END()
      	};
    - 	int result;
      
     +	git_config(git_default_config, NULL);
      	argc = parse_options(argc, argv, prefix, options, builtin_remote_usage,
    - 		PARSE_OPT_STOP_AT_NON_OPTION);
    + 			     PARSE_OPT_SUBCOMMAND_OPTIONAL);
      
     
      ## builtin/rev-parse.c ##
  • 175: f65d8c4 ! 172: b161856 compat/fsmonitor/fsm-*-win32: support long paths

    @@ compat/fsmonitor/fsm-listen-win32.c: static int process_worktree_events(struct f
      	 * If the kernel gets more events than will fit in the kernel
     
      ## compat/fsmonitor/fsm-settings-win32.c ##
    -@@ compat/fsmonitor/fsm-settings-win32.c: static enum fsmonitor_reason check_vfs4git(struct repository *r)
    -  */
    +@@ compat/fsmonitor/fsm-settings-win32.c: static int check_remote_protocol(wchar_t *wpath)
      static enum fsmonitor_reason check_remote(struct repository *r)
      {
    + 	int ret;
     -	wchar_t wpath[MAX_PATH];
     -	wchar_t wfullpath[MAX_PATH];
     +	wchar_t wpath[MAX_LONG_PATH];
  • 176: 070982a = 173: e87a650 mingw: Support git_terminal_prompt with more terminals

  • 177: 54cc64c = 174: 9e64a6d compat/terminal.c: only use the Windows console if bash 'read -r' fails

  • 178: e397113 = 175: 4045d58 mingw (git_terminal_prompt): do fall back to CONIN$/CONOUT$ method

  • 179: 1c71006 = 176: 343cb04 Unbreak interactive GPG prompt upon signing

  • 180: fc800a2 = 177: d4afc7e strbuf_readlink: don't call readlink twice if hint is the exact link size

  • 181: 8fcb007 = 178: 84d1fc2 strbuf_readlink: support link targets that exceed PATH_MAX

  • 182: a1e07d3 = 179: 4df3457 lockfile.c: use is_dir_sep() instead of hardcoded '/' checks

  • 187: 845827a = 180: 0cb0c40 clean: suggest using core.longPaths if paths are too long to remove

  • 183: 139aaa1 = 181: 3be7cfb Win32: don't call GetFileAttributes twice in mingw_lstat()

  • 184: 0a3cc55 = 182: 486537a Win32: implement stat() with symlink support

  • 185: 928faaf = 183: 9254a1d Win32: remove separate do_lstat() function

  • 186: 6e15d1a = 184: 5a082f5 Win32: let mingw_lstat() error early upon problems with reparse points

  • 188: 1b8c2fb = 185: f299987 mingw: teach fscache and dirent about symlinks

  • 189: 45d6ec8 = 186: d29d78d Win32: lstat(): return adequate stat.st_size for symlinks

  • 190: 69276cd = 187: e8e77cb Win32: factor out retry logic

  • 191: a2dd305 = 188: 2317280 Win32: change default of 'core.symlinks' to false

  • 192: 1c4ec86 = 189: 34e5622 Win32: add symlink-specific error codes

  • 193: 455739b = 190: 6b018f7 Win32: mingw_unlink: support symlinks to directories

  • 194: 1101585 = 191: afd0b3b Win32: mingw_rename: support renaming symlinks

  • 195: 8d7f000 = 192: 3b8e0db Win32: mingw_chdir: change to symlink-resolved directory

  • 196: 469d533 = 193: 10803a3 Win32: implement readlink()

  • 197: f918fbc = 194: ecf2380 mingw: lstat: compute correct size for symlinks

  • 198: 9cbacce = 195: 69973d1 Win32: implement basic symlink() functionality (file symlinks only)

  • 199: 3637e40 = 196: 1b17ac0 Win32: symlink: add support for symlinks to directories

  • 200: 353df52 = 197: 5b31879 mingw: try to create symlinks without elevated permissions

  • 201: 94fecae = 198: 6511703 mingw: emulate stat() a little more faithfully

  • 202: 98b32d1 = 199: 973fe3a mingw: special-case index entries for symlinks with buggy size

  • 207: ec52e55 = 200: 9a62649 mingw: introduce code to detect whether we're inside a Windows container

  • 209: 2c6591e = 201: 6b57168 mingw: when running in a Windows container, try to rename() harder

  • 211: daa52d9 = 202: c32a4e7 mingw: move the file_attr_to_st_mode() function definition

  • 203: 1594420 = 203: b6ddca9 Win32: symlink: move phantom symlink creation to a separate function

  • 213: 9f6d0ac = 204: adda2a7 mingw: Windows Docker volumes are not symbolic links

  • 204: c8e87f6 = 205: d72e07c Introduce helper to create symlinks that knows about index_state

  • 205: 1931132 = 206: e109581 mingw: allow to specify the symlink type in .gitattributes

  • 206: 0e12da1 = 207: a5b42ee Win32: symlink: add test for symlink attribute

  • 208: fe2758c = 208: 9b86c8e mingw: explicitly specify with which cmd to prefix the cmdline

  • 210: 4dc74b2 = 209: c6bb0e6 mingw: when path_lookup() failed, try BusyBox

  • 212: 34d54e8 = 210: 1543bd1 test-lib: avoid unnecessary Perl invocation

  • 214: 6c74c6f = 211: c8c6f5f tests: replace mingw_test_cmp with a helper in C

  • 215: f830050 = 212: 90f9333 test-tool: learn to act as a drop-in replacement for iconv

  • 216: 7c340fc = 213: ac5e171 tests(mingw): if iconv is unavailable, use test-helper --iconv

  • 217: 50fceec = 214: d8b4e96 gitattributes: mark .png files as binary

  • 218: 4e2afb4 ! 215: a879ff8 tests: move test PNGs into t/lib-diff/

    @@ t/t6403-merge-file.sh: test_expect_success "expected conflict markers" '
      
     
      ## t/t6407-merge-binary.sh ##
    -@@ t/t6407-merge-binary.sh: TEST_PASSES_SANITIZE_LEAK=true
    +@@ t/t6407-merge-binary.sh: export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
      
      test_expect_success setup '
      
  • 219: 7bf0a3c = 216: 14597eb tests: only override sort & find if there are usable ones in /usr/bin/

  • 220: e099c34 = 217: 8eb0287 tests: use the correct path separator with BusyBox

  • 221: 2275b99 = 218: 8dad74f mingw: only use Bash-ism builtin pwd -W when available

  • 222: cf7e951 = 219: 8c27052 tests (mingw): remove Bash-specific pwd option

  • 223: 891699c = 220: d43d800 test-lib: add BUSYBOX prerequisite

  • 224: ec883ee = 221: 74d4ef4 t0021: use Windows path when appropriate

  • 225: 2dadb43 = 222: 4471a7a t5003: use binary file from t/lib-diff/

  • 226: a0cdc75 = 223: 7e12c02 t5532: workaround for BusyBox on Windows

  • 227: e53a418 = 224: a1fad28 t5605: special-case hardlink test for BusyBox-w32

  • 228: ad63bf4 = 225: f47e268 t5813: allow for $PWD to be a Windows path

  • 229: 06080f0 = 226: 6ca169d t9200: skip tests when $PWD contains a colon

  • 232: 4d60df9 = 227: 1eec264 mingw: add a Makefile target to copy test artifacts

  • 230: 56963d0 = 228: 9c9c1da mingw: kill child processes in a gentler way

  • 231: d3d2f8e = 229: d9a4b91 mingw: do not call xutftowcs_path in mingw_mktemp

  • 233: f0da0f3 = 230: 986684b mingw: really handle SIGINT

  • 234: d1f6dc3 = 231: 18f6cc8 Partially un-revert "editor: save and reset terminal after calling EDITOR"

  • 115: 3d07d44 = 232: 16ba674 Modify the Code of Conduct for Git for Windows

  • 116: 7f6c6bb = 233: 4efcd53 CONTRIBUTING.md: add guide for first-time contributors

  • 117: 84f8d28 = 234: 87de92c README.md: Add a Windows-specific preamble

  • 118: 862fffb = 235: 5136963 Add an issue template

  • 119: 1d4ef51 = 236: 9d3de24 Modify the GitHub Pull Request template (to reflect Git for Windows)

  • 120: 1545bcb = 237: b65196e .github: Add configuration for the Sentiment Bot

  • 113: 1084daa = 238: cd39e48 reset: reinstate support for the deprecated --stdin option

  • 114: 86b55ea = 239: bd909f5 mingw: deprecate old-style runtime-prefix handling in interpolate_path()

  • 122: ea0b08f = 240: d196ef3 Add a GitHub workflow to monitor component updates

  • 121: 22cd55b = 241: 0c44887 Document how $HOME is set on Windows

  • 123: 396169c = 242: 66ace5f SECURITY.md: document Git for Windows' policies

The only noteworthy change here is this:

-  6:  666b55b99f4d <   -:  ------------ archive: replace write_or_die() calls with write_block_or_die()
- 10:  5cbc301b51a3 <   -:  ------------ archive: avoid spawning `gzip`

The reason that these two commits were dropped without replacement is that the dont-spawn-gzip-in-archive patches were obsoleted by rs/archive-with-internal-gzip.

dscho and others added 30 commits September 16, 2022 03:30
…vision

We cannot just check out the current revision: The user might have
overridden `REPOSITORY` and `REF` via the workflow dispatch.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Git's regular Makefile mentions that HOST_CPU should be defined when cross-compiling Git: https://github.com/git-for-windows/git/blob/37796bca76ef4180c39ee508ca3e42c0777ba444/Makefile#L438-L439

This is then used to set the GIT_HOST_CPU variable when compiling Git: https://github.com/git-for-windows/git/blob/37796bca76ef4180c39ee508ca3e42c0777ba444/Makefile#L1337-L1341

Then, when the user runs `git version --build-options`, it returns that value: https://github.com/git-for-windows/git/blob/37796bca76ef4180c39ee508ca3e42c0777ba444/help.c#L658

This commit adds the same functionality to the CMake configuration. Users can now set -DHOST_CPU= to set the target architecture.

Signed-off-by: Dennis Ameling <dennis@dennisameling.com>
This simplifies the workflow dramatically, as well as accelerating it
because the Action recently learned to use the partial clone/parallel
checkout features of Git.

Note that we have to reinstate that `/usr/bin/git` hack (a shell script
that simply redirects to `/mingw64/bin/git.exe`) in the `pkg` job
manually, since we no longer cache the `build-installers` artifact
_after_ installing that hack in `bundle-artifacts`.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
This is needed for the next commit, where we add HOST_CPU to the CMake
invocation.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
This is needed for the next change, where we add HOST_CPU support to the
CMake definition.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
The intention of this change is to align with how the top-level git
`Makefile` defines its own test target (which also internally calls
`$(MAKE) -C t/ all`). This change also ensures the consistency of
`make -C contrib/subtree test` with other testing in CI executions
(which rely on `$DEFAULT_TEST_TARGET` being defined as `prove`).

Signed-off-by: Victoria Dye <vdye@github.com>
As mentioned in the Makefile and CMakeLists.txt: "When cross-compiling, define HOST_CPU as the canonical name of the CPU on which the built Git will run (for instance "x86_64")"

This commit sets the HOST_CPU variable since Git for Windows arm64 is cross-compiled from an amd64 host.

Signed-off-by: Dennis Ameling <dennis@dennisameling.com>
We now have a GitHub Action to download and cache Azure Pipelines
artifacts (such as the `vcpkg` artifacts), hiding gnarly internals, and
also providing some robustness against network glitches. Let's use it.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
As reported in newren/git-filter-repo#225, it
looks like 99 bytes is not really sufficient to represent e.g. the full
path to Python when installed via Windows Store (and this path is used
in the hasb bang line when installing scripts via `pip`).

Let's increase it to what is probably the maximum sensible path size:
MAX_PATH. This makes `parse_interpreter()` in line with what
`lookup_prog()` handles.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Vilius Šumskas <vilius@sumskas.eu>
We used to have that `make vcxproj` hack, but a hack it is. In the
meantime, we have a much cleaner solution: using CMake, either
explicitly, or even more conveniently via Visual Studio's built-in CMake
support (simply open Git's top-level directory via File>Open>Folder...).

Let's let the `README` reflect this.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
This adds support for a new http.sslAutoClientCert config value.

In cURL 7.77 or later the schannel backend does not automatically send
client certificates from the Windows Certificate Store anymore.

This config value is only used if http.sslBackend is set to "schannel",
and can be used to opt in to the old behavior and force cURL to send
client certificates.

This fixes git-for-windows#3292

Signed-off-by: Pascal Muller <pascalmuller@gmail.com>
Correct some wording and inform users regarding the Visual Studio
changes (from V16.6) to the default generator.

Subsequent commits ensure that Git for Windows can be directly
opened in modern Visual Studio without needing special configuration
of the CMakeLists settings.

It appeares that internally Visual Studio creates it's own version of the
.sln file (etc.) for extension tools that expect them.

The large number of references below document the shifting of Visual Studio
default and CMake setting options.

refs: https://docs.microsoft.com/en-us/search/?scope=C%2B%2B&view=msvc-150&terms=Ninja

1. https://docs.microsoft.com/en-us/cpp/linux/cmake-linux-configure?view=msvc-160
(note the linux bit)
 "In Visual Studio 2019 version 16.6 or later ***, Ninja is the default
generator for configurations targeting a remote system or WSL. For more
information, see this post on the C++ Team Blog
[https://devblogs.microsoft.com/cppblog/linux-development-with-visual-studio-first-class-support-for-gdbserver-improved-build-times-with-ninja-and-updates-to-the-connection-manager/].

For more information about these settings, see CMakeSettings.json reference
[https://docs.microsoft.com/en-us/cpp/build/cmakesettings-reference?view=msvc-160]."

2. https://docs.microsoft.com/en-us/cpp/build/cmake-presets-vs?view=msvc-160
"CMake supports two files that allow users to specify common configure,
build, and test options and share them with others: CMakePresets.json
and CMakeUserPresets.json."

" Both files are supported in Visual Studio 2019 version 16.10 or later.
***"
3. https://devblogs.microsoft.com/cppblog/linux-development-with-visual-studio-first-class-support-for-gdbserver-improved-build-times-with-ninja-and-updates-to-the-connection-manager/
" Ninja has been the default generator (underlying build system) for
CMake configurations targeting Windows for some time***, but in Visual
Studio 2019 version 16.6 Preview 3*** we added support for Ninja on Linux."

4. https://docs.microsoft.com/en-us/cpp/build/cmakesettings-reference?view=msvc-160
" `generator`: specifies CMake generator to use for this configuration.
May be one of:

    Visual Studio 2019 only:
        Visual Studio 16 2019
        Visual Studio 16 2019 Win64
        Visual Studio 16 2019 ARM

    Visual Studio 2017 and later:
        Visual Studio 15 2017
        Visual Studio 15 2017 Win64
        Visual Studio 15 2017 ARM
        Visual Studio 14 2015
        Visual Studio 14 2015 Win64
        Visual Studio 14 2015 ARM
        Unix Makefiles
        Ninja

Because Ninja is designed for fast build speeds instead of flexibility
and function, it is set as the default. However, some CMake projects may
be unable to correctly build using Ninja. If this occurs, you can
instruct CMake to generate Visual Studio projects instead.

To specify a Visual Studio generator in Visual Studio 2017, open the
settings editor from the main menu by choosing CMake | Change CMake
Settings. Delete "Ninja" and type "V". This activates IntelliSense,
which enables you to choose the generator you want."

"To specify a Visual Studio generator in Visual Studio 2019, right-click
on the CMakeLists.txt file in Solution Explorer and choose CMake
Settings for project > Show Advanced Settings > CMake Generator.

When the active configuration specifies a Visual Studio generator, by
default MSBuild.exe is invoked with` -m -v:minimal` arguments."

5. https://docs.microsoft.com/en-us/cpp/build/cmake-presets-vs?view=msvc-160#enable-cmakepresetsjson-integration-in-visual-studio-2019
"Enable CMakePresets.json integration in Visual Studio 2019

CMakePresets.json integration isn't enabled by default in Visual Studio
2019. You can enable it for all CMake projects in Tools > Options >
CMake > General: (tick a box)" ... see more.

6. https://docs.microsoft.com/en-us/cpp/build/cmakesettings-reference?view=msvc-140
(whichever v140 is..)
"CMake projects are supported in Visual Studio 2017 and later."

7. https://docs.microsoft.com/en-us/cpp/overview/what-s-new-for-cpp-2017?view=msvc-150
"Support added for the CMake Ninja generator."

8. https://docs.microsoft.com/en-us/cpp/overview/what-s-new-for-cpp-2017?view=msvc-150#cmake-support-via-open-folder
"CMake support via Open Folder
Visual Studio 2017 introduces support for using CMake projects without
converting to MSBuild project files (.vcxproj). For more information,
see CMake projects in Visual
Studio[https://docs.microsoft.com/en-us/cpp/build/cmake-projects-in-visual-studio?view=msvc-150].
Opening CMake projects with Open Folder automatically configures the
environment for C++ editing, building, and debugging." ... +more!

9. https://docs.microsoft.com/en-us/cpp/build/cmake-presets-vs?view=msvc-160#supported-cmake-and-cmakepresetsjson-versions
"Visual Studio reads and evaluates CMakePresets.json and
CMakeUserPresets.json itself and doesn't invoke CMake directly with the
--preset option. So, CMake version 3.20 or later isn't strictly required
when you're building with CMakePresets.json inside Visual Studio. We
recommend using CMake version 3.14 or later."

10. https://docs.microsoft.com/en-us/cpp/build/cmake-presets-vs?view=msvc-160#enable-cmakepresetsjson-integration-in-visual-studio-2019
"If you don't want to enable CMakePresets.json integration for all CMake
projects, you can enable CMakePresets.json integration for a single
CMake project by adding a CMakePresets.json file to the root of the open
folder. You must close and reopen the folder in Visual Studio to
activate the integration.

11. https://docs.microsoft.com/en-us/cpp/build/cmake-presets-vs?view=msvc-160#default-configure-presets
***(doesn't actually say which version..)
"Default Configure Presets
If no CMakePresets.json or CMakeUserPresets.json file exists, or if
CMakePresets.json or CMakeUserPresets.json is invalid, Visual Studio
will fall back*** on the following default Configure Presets:

Windows example
JSON
{
  "name": "windows-default",
  "displayName": "Windows x64 Debug",
  "description": "Sets Ninja generator, compilers, x64 architecture,
build and install directory, debug build type",
  "generator": "Ninja",
  "binaryDir": "${sourceDir}/out/build/${presetName}",
  "architecture": {
    "value": "x64",
    "strategy": "external"
  },
  "cacheVariables": {
    "CMAKE_BUILD_TYPE": "Debug",
    "CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}"
  },
  "vendor": {
    "microsoft.com/VisualStudioSettings/CMake/1.0": {
      "hostOS": [ "Windows" ]
    }
  }
},
"

Signed-off-by: Philip Oakley <philipoakley@iee.email>
The CMakeSettings.json file is tool generated. Developers may track it
should they provide additional settings.

Signed-off-by: Philip Oakley <philipoakley@iee.email>
On LLP64 systems, such as Windows, the size of `long`, `int`, etc. is
only 32 bits (for backward compatibility). Git's use of `unsigned long`
for file memory sizes in many places, rather than size_t, limits the
handling of large files on LLP64 systems (commonly given as `>4GB`).

Provide a minimum test for handling a >4GB file. The `hash-object`
command, with the  `--literally` and without `-w` option avoids
writing the object, either loose or packed. This avoids the code paths
hitting the `bigFileThreshold` config test code, the zlib code, and the
pack code.

Subsequent patches will walk the test's call chain, converting types to
`size_t` (which is larger in LLP64 data models) where appropriate.

Signed-off-by: Philip Oakley <philipoakley@iee.email>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
In Git-for-Windows, work on using ARM64 has progressed. The
commit 2d94b77 (cmake: allow building for Windows/ARM64, 2020-12-04)
failed to notice that /compat/vcbuild/vcpkg_install.bat will default to
using the "x64-windows" architecture for the vcpkg installation if not set,
but CMake is not told of this default. Commit 635b6d9 (vcbuild: install
ARM64 dependencies when building ARM64 binaries, 2020-01-31) later updated
vcpkg_install.bat to accept an arch (%1) parameter, but retained the default.

This default is neccessary for the use case where the project directory is
opened directly in Visual Studio, which will find and build a CMakeLists.txt
file without any parameters, thus expecting use of the default setting.

Also Visual studio will generate internal .sln solution and .vcxproj project
files needed for some extension tools. Inform users of the additional
.sln/.vcxproj generation.

** How to test:
 rm -rf '.vs' # remove old visual studio settings
 rm -rf 'compat/vcbuild/vcpkg' # remove any vcpkg downloads
 rm -rf 'contrib/buildsystems/out' # remove builds & CMake artifacts
 with a fresh Visual Studio Community Edition, File>>Open>>(git *folder*)
   to load the project (which will take some time!).
 check for successful compilation.
The implicit .sln (etc.) are in the hidden .vs directory created by
Visual Studio.

Signed-off-by: Philip Oakley <philipoakley@iee.email>
Reintroduce the 'core.useBuiltinFSMonitor' config setting (originally added
in 0a756b2 (fsmonitor: config settings are repository-specific,
2021-03-05)) after its removal from the upstream version of FSMonitor.

Upstream, the 'core.useBuiltinFSMonitor' setting was rendered obsolete by
"overloading" the 'core.fsmonitor' setting to take a boolean value. However,
several applications (e.g., 'scalar') utilize the original config setting,
so it should be preserved for a deprecation period before complete removal:

* if 'core.fsmonitor' is a boolean, the user is correctly using the new
  config syntax; do not use 'core.useBuiltinFSMonitor'.
* if 'core.fsmonitor' is unspecified, use 'core.useBuiltinFSMonitor'.
* if 'core.fsmonitor' is a path, override and use the builtin FSMonitor if
  'core.useBuiltinFSMonitor' is 'true'; otherwise, use the FSMonitor hook
  indicated by the path.

Additionally, for this deprecation period, advise users to switch to using
'core.fsmonitor' to specify their use of the builtin FSMonitor.

Signed-off-by: Victoria Dye <vdye@github.com>
The previous commit adds a test that demonstrates a problem in the
`hash-object --literally` command, manifesting in an unnecessary file
size limit on systems using the LLP64 data model (which includes
Windows).

Walking the affected code path is `cmd_hash_object()` >> `hash_fd()` >>
`hash_literally()` >> `hash_object_file_literally()`.

The function `hash_object_file_literally()` is the first with a file
length parameter (via a mem buffer). This commit changes the type of
that parameter to the LLP64 compatible `size_t` type.

There are no other uses of the function. The `strbuf` type is already
`size_t` compatible.

Note: The hash-object test does not yet pass. Subsequent commits will
continue to walk the call tree's lower level functions to identify
further fixes.

Signed-off-by: Philip Oakley <philipoakley@iee.email>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Because `git subtree` (unlike most other `contrib` modules) is included as
part of the standard release of Git for Windows, its stability should be
verified as consistently as it is for the rest of git. By including the
`git subtree` tests in the CI workflow, these tests are as much of a gate to
merging and indicator of stability as the standard test suite.

Signed-off-by: Victoria Dye <vdye@github.com>
Ensure key CMake option values are part of the CMake output to
facilitate user support when tool updates impact the wider CMake
actions, particularly ongoing 'improvements' in Visual Studio.

These CMake displays perform the same function as the build-options.txt
provided in the main Git for Windows. CMake is already chatty.
The setting of CMAKE_EXPORT_COMPILE_COMMANDS is also reported.

Include the environment's CMAKE_EXPORT_COMPILE_COMMANDS value which
may have been propogated to CMake's internal value.

Testing the CMAKE_EXPORT_COMPILE_COMMANDS processing can be difficult
in the Visual Studio environment, as it may be cached in many places.
The 'environment' may include the OS, the user shell, CMake's
own environment, along with the Visual Studio presets and caches.

See previous commit for arefacts that need removing for a clean test.

Signed-off-by: Philip Oakley <philipoakley@iee.email>
In Git for Windows, `has_symlinks` is set to 0 by default. Therefore, we
need to parse the config setting `core.symlinks` to know if it has been
set to `true`. In `git init`, we must do that before copying the
templates because they might contain symbolic links.

Even if the support for symbolic links on Windows has not made it to
upstream Git yet, we really should make sure that all the `core.*`
settings are parsed before proceeding, as they might very well change
the behavior of `git init` in a way the user intended.

This fixes git-for-windows#3414

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
If `feature.experimental` and `feature.manyFiles` are set and the user
has not explicitly turned off the builtin FSMonitor, we now start
the built-in FSMonitor by default.

Only forcing it when UNSET matches the behavior of UPDATE_DEFAULT_BOOL()
used for other repo settings.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
Continue walking the code path for the >4GB `hash-object --literally`
test. The `hash_object_file_literally()` function internally uses both
`hash_object_file()` and `write_object_file_prepare()`. Both function
signatures use `unsigned long` rather than `size_t` for the mem buffer
sizes. Use `size_t` instead, for LLP64 compatibility.

While at it, convert those function's object's header buffer length to
`size_t` for consistency. The value is already upcast to `uintmax_t` for
print format compatibility.

Note: The hash-object test still does not pass. A subsequent commit
continues to walk the call tree's lower level hash functions to identify
further fixes.

Signed-off-by: Philip Oakley <philipoakley@iee.email>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Continue walking the code path for the >4GB `hash-object --literally`
test to the hash algorithm step for LLP64 systems.

This patch lets the SHA1DC code use `size_t`, making it compatible with
LLP64 data models (as used e.g. by Windows).

The interested reader of this patch will note that we adjust the
signature of the `git_SHA1DCUpdate()` function without updating _any_
call site. This certainly puzzled at least one reviewer already, so here
is an explanation:

This function is never called directly, but always via the macro
`platform_SHA1_Update`, which is usually called via the macro
`git_SHA1_Update`. However, we never call `git_SHA1_Update()` directly
in `struct git_hash_algo`. Instead, we call `git_hash_sha1_update()`,
which is defined thusly:

    static void git_hash_sha1_update(git_hash_ctx *ctx,
                                     const void *data, size_t len)
    {
        git_SHA1_Update(&ctx->sha1, data, len);
    }

i.e. it contains an implicit downcast from `size_t` to `unsigned long`
(before this here patch). With this patch, there is no downcast anymore.

With this patch, finally, the t1007-hash-object.sh "files over 4GB hash
literally" test case is fixed.

Signed-off-by: Philip Oakley <philipoakley@iee.email>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Just like the `hash-object --literally` code path, the `--stdin` code
path also needs to use `size_t` instead of `unsigned long` to represent
memory sizes, otherwise it would cause problems on platforms using the
LLP64 data model (such as Windows).

To limit the scope of the test case, the object is explicitly not
written to the object store, nor are any filters applied.

The `big` file from the previous test case is reused to save setup time;
To avoid relying on that side effect, it is generated if it does not
exist (e.g. when running via `sh t1007-*.sh --long --run=1,41`).

Signed-off-by: Philip Oakley <philipoakley@iee.email>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
To complement the `--stdin` and `--literally` test cases that verify
that we can hash files larger than 4GB on 64-bit platforms using the
LLP64 data model, here is a test case that exercises `hash-object`
_without_ any options.

Just as before, we use the `big` file from the previous test case if it
exists to save on setup time, otherwise generate it.

Signed-off-by: Philip Oakley <philipoakley@iee.email>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
This is another fall-out of the recent refactoring flurry.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
This fixes the build after 7bc341e (git-compat-util: add a test
balloon for C99 support, 2021-12-01).

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Derrick Stolee <derrickstolee@github.com>
This is now passed by default, ever since 6a8cbc4 (developer: enable
pedantic by default, 2021-09-03).

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
To verify that the `clean` side of the `clean`/`smudge` filter code is
correct with regards to LLP64 (read: to ensure that `size_t` is used
instead of `unsigned long`), here is a test case using a trivial filter,
specifically _not_ writing anything to the object store to limit the
scope of the test case.

As in previous commits, the `big` file from previous test cases is
reused if available, to save setup time, otherwise re-generated.

Signed-off-by: Philip Oakley <philipoakley@iee.email>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
@vdye vdye temporarily deployed to monitor-components September 21, 2022 17:46 Inactive
@vdye vdye temporarily deployed to monitor-components September 21, 2022 17:46 Inactive
@vdye vdye temporarily deployed to monitor-components September 21, 2022 17:46 Inactive
@vdye vdye temporarily deployed to monitor-components September 21, 2022 17:46 Inactive
@vdye vdye temporarily deployed to monitor-components September 21, 2022 17:46 Inactive
@vdye vdye temporarily deployed to monitor-components September 21, 2022 17:46 Inactive
@vdye vdye temporarily deployed to monitor-components September 21, 2022 17:46 Inactive
@vdye vdye temporarily deployed to monitor-components September 21, 2022 17:46 Inactive
@vdye vdye temporarily deployed to monitor-components September 22, 2022 08:46 Inactive
@vdye vdye temporarily deployed to monitor-components September 22, 2022 08:46 Inactive
@vdye vdye temporarily deployed to monitor-components September 22, 2022 08:46 Inactive
@vdye vdye temporarily deployed to monitor-components September 22, 2022 08:46 Inactive
@vdye vdye temporarily deployed to monitor-components September 22, 2022 08:46 Inactive
@vdye vdye temporarily deployed to monitor-components September 22, 2022 08:46 Inactive
@vdye vdye temporarily deployed to monitor-components September 22, 2022 08:46 Inactive
@vdye vdye temporarily deployed to monitor-components September 22, 2022 08:46 Inactive
@vdye vdye temporarily deployed to monitor-components September 22, 2022 08:46 Inactive
@vdye vdye temporarily deployed to monitor-components September 22, 2022 08:46 Inactive
@vdye vdye temporarily deployed to monitor-components September 22, 2022 08:46 Inactive
@vdye vdye temporarily deployed to monitor-components September 22, 2022 08:46 Inactive
@vdye vdye temporarily deployed to monitor-components September 22, 2022 08:46 Inactive
@vdye vdye temporarily deployed to monitor-components September 22, 2022 08:46 Inactive
@vdye vdye temporarily deployed to monitor-components September 22, 2022 08:46 Inactive
@vdye vdye temporarily deployed to monitor-components September 22, 2022 08:46 Inactive
@vdye vdye temporarily deployed to monitor-components September 22, 2022 08:46 Inactive
@vdye vdye temporarily deployed to monitor-components September 22, 2022 08:46 Inactive
@vdye vdye temporarily deployed to monitor-components September 22, 2022 08:46 Inactive
@vdye vdye temporarily deployed to monitor-components September 22, 2022 08:46 Inactive
@vdye vdye temporarily deployed to monitor-components September 22, 2022 08:46 Inactive
@vdye vdye temporarily deployed to monitor-components September 22, 2022 08:46 Inactive
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.