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.27.0-rc0 #2626

Merged
merged 838 commits into from
May 29, 2020
Merged

Conversation

dscho
Copy link
Member

@dscho dscho commented May 15, 2020

Apart from commits that made it upstream already, the range-diff only contains changes in the context. Here is a slightly annotated output of git range-diff 'origin/master^{/^Start.the.merging-rebase}..origin/master' 'rebase-to-v2.27.0-rc0^{/^Start.the.merging-rebase}..rebase-to-v2.27.0-rc0 (where origin/master is 01c50ad and rebase-to-v2.27.0-rc0 is fb008e4):

   1:  50dd295eea3b =   1:  b293828d33d5 t9350: point out that refs are not updated correctly
   2:  d965934153ac =   2:  bac564b581c1 transport-helper: add trailing --
   3:  697d91e93585 =   3:  66b3f4dbc327 remote-helper: check helper status after import/export
   7:  4ed4c58b0d28 =   4:  68148ee61334 mingw: demonstrate a problem with certain absolute paths
   8:  7804b61cece7 =   5:  ea38a0fa60fb archive: replace write_or_die() calls with write_block_or_die()
   4:  a588c226ea2a =   6:  9402739610fa Always auto-gc after calling a fast-import transport
   5:  862b9a7184bd =   7:  56a8d7f22591 diffcore-rename: speed up register_rename_src
-  6:  116ccb6db5ec (upstream: 121c0d4151a6) <   -:  ------------ t3904: fix incorrect demonstration of a bug
-  9:  6d767de2973f (upstream: 7723436149b9) <   -:  ------------ stash -p: (partially) fix bug concerning split hunks
  11:  67ac329a33bc =   8:  c90b3ffe9b70 mingw: allow absolute paths without drive prefix
  12:  01e561e1a655 =   9:  aa499df52228 mingw: handle absolute paths in expand_user_path()
  13:  931de1e7f7e9 =  10:  305b23aedb6f archive: avoid spawning `gzip`
  14:  23d80326670a =  11:  5b0aaa82854a mingw: change core.fsyncObjectFiles = 1 by default
  10:  c1252725114e =  12:  c3489c2bd130 gitk: prevent overly long command lines
  15:  5ef07a8170a2 =  13:  64368b27e17c gitk: Escape file paths before piping to git log
- 16:  32ce88dfbab6 (merged, modified, as 8b39dfdf47ee) <   -:  ------------ mingw: explicitly `fflush` stdout
  18:  fd5704f3bb54 !  14:  5d3735e2e25e clean: do not traverse mount points
    @@ compat/mingw.h: static inline void convert_slashes(char *path)
      #define query_user_email mingw_query_user_email
     
      ## git-compat-util.h ##
    -@@ git-compat-util.h: static inline char *git_find_last_dir_sep(const char *path)
    - #define find_last_dir_sep git_find_last_dir_sep
    +@@ git-compat-util.h: static inline int git_has_dir_sep(const char *path)
    + #define has_dir_sep(path) git_has_dir_sep(path)
      #endif
      
     +#ifndef is_mount_point
  23:  83599274af4c =  15:  e6cdbe6c694a clean: remove mount points when possible
  17:  9071c13478ac =  16:  1bf7aaa90070 mingw: move Git for Windows' system config where users expect it
  19:  b3177eff9351 =  17:  28f875e12f60 vcpkg_install: detect lack of Git
  20:  4b7ee3e41455 =  18:  88375029bd15 config: normalize the path of the system gitconfig
- 21:  b11a3e0db70d (merged, modified, via 8b39dfdf47ee) <   -:  ------------ mingw: make is_hidden tests in t0001/t5611 more robust
- 22:  e7b58e85b36a (upstream: 3efc128cd59f) <   -:  ------------ Help debugging with MSys2 by optionally executing bash with strace
- 24:  1e741cc2ce7c (upstream: 23eafd924a2d) <   -:  ------------ mingw: cope with the Isilon network file system
  25:  6106686b1b7a =  19:  73f6dbfe264d config.mak.uname: PCRE1 cleanup
  26:  2574ec523910 =  20:  85387397a463 vcpkg_install: add comment regarding slow network connections
  27:  2ce22dd2e227 =  21:  8a358f3f7f49 mingw: include the Python parts in the build
  28:  0f02d63a4858 =  22:  f661a08871ea Config option to disable side-band-64k for transport
  29:  a544be126e64 =  23:  5cb17def0aad mingw: make sure `errno` is set correctly when socket operations fail
  30:  1864b955caed =  24:  9de1c2bbbc2f mingw: do resolve symlinks in `getcwd()`
  31:  87e7354e33b6 =  25:  2e5a1b695a87 mingw: demonstrate a `git add` issue with NTFS junctions
  32:  35c4223fc788 =  26:  9f5005c8cc49 mingw: ensure valid CTYPE
  33:  00f5748e96ba !  27:  a830ed4aaa21 strbuf_realpath(): use platform-dependent API if available
    @@ abspath.c: char *strbuf_realpath(struct strbuf *resolved, const char *path,
      
     
      ## git-compat-util.h ##
    -@@ git-compat-util.h: static inline char *git_find_last_dir_sep(const char *path)
    +@@ git-compat-util.h: static inline int git_has_dir_sep(const char *path)
      #define query_user_email() NULL
      #endif
      
  34:  9c02870180c7 =  28:  32244a7bbe2b mingw: allow `git.exe` to be used instead of the "Git wrapper"
- 35:  c39edbf7d101 (upstream: b6852e197942) <   -:  ------------ mingw: do not treat `COM0` as a reserved file name
  36:  de0732944a0a =  29:  508ba527e734 mingw: fix fatal error working on mapped network drives on Windows
  37:  4f0e9585fefb =  30:  3f9d248cd353 clink.pl: fix MSVC compile script to handle libcurl-d.lib
  38:  c92b093564df =  31:  82458fdb06d9 mingw: implement a platform-specific `strbuf_realpath()`
  39:  3f51abed1d0d =  32:  189600882f05 tests: exercise the RUNTIME_PREFIX feature
  40:  00618fd96f1a =  33:  0bf1699b2371 credential.c: fix credential reading with regards to CR/LF
  41:  0b09a629bb94 =  34:  c45a7c45983f http: use new "best effort" strategy for Secure Channel revoke checking
- 42:  1f6ccf292d4c (upstream: 1f27522d8c65) <   -:  ------------ t4061: use POSIX compliant regex(7)
- 43:  8b842e4db36d (upstream: 6ec5df61d525) <   -:  ------------ test-lib-functions: test_cmp: eval $GIT_TEST_CMP
- 44:  f9ea51f68c4e (upstream: 6e45972cd74d) <   -:  ------------ t5003: drop the subshell in test_lazy_prereq
- 45:  40bb1ae4c777 (upstream: d2fae19e0ffa) <   -:  ------------ ci: make MAKEFLAGS available inside the Docker container in the Linux32 job
- 46:  9e5b95991393 (upstream: ff0dab331e27) <   -:  ------------ t5003: skip conversion test if unzip -a is unavailable
- 47:  76eece0bcac0 (upstream: ffce2ebdd9ad) <   -:  ------------ ci/lib-docker: preserve required environment variables
- 48:  6623e68051fc (upstream: 6c28bef2d4bb) <   -:  ------------ t5616: use rev-parse instead to get HEAD's object_id
- 49:  32d76748a921 (upstream: 2bd1e2d273b6) <   -:  ------------ ci/linux32: parameterise command to switch arch
- 50:  a86158dd146e (upstream: d51dd4ca3ad1) <   -:  ------------ t7063: drop non-POSIX argument "-ls" from find(1)
- 51:  46ecdd2cc5c6 (upstream: 5a33f541ddb5) <   -:  ------------ ci: refactor docker runner script
- 52:  857deac62540 (upstream: f73533aa38e5) <   -:  ------------ t4124: tweak test so that non-compliant diff(1) can also be used
- 53:  611153b6f8b4 (upstream: c3bc449eb1b8) <   -:  ------------ ci/linux32: libify install-dependencies step
- 54:  08ed273c41c8 (upstream: 84370e36bb6b) <   -:  ------------ t5703: feed raw data into test-tool unpack-sideband
- 55:  ac79ebf539f7 (upstream: e0f8690dee7e) <   -:  ------------ travis: build and test on Linux with musl libc and busybox
- 56:  49b6a5ae99c3 (upstream: 826f0c0df250) <   -:  ------------ subtree: fix build with AsciiDoctor 2
- 57:  65d56d8454d8 (upstream: a748f3f3dc0a) <   -:  ------------ mingw: use modern strftime implementation if possible
- 58:  27b53bd158dd (upstream: 5127e8cf7aa7) <   -:  ------------ ci/lib: if CI type is unknown, show the environment variables
- 59:  afe3961b1c5c (upstream: a3f2eec862b6) <   -:  ------------ ci/lib: allow running in GitHub Actions
- 60:  a7ea5e0d1993 (upstream: 855c158e81d9) <   -:  ------------ ci/lib: set TERM environment variable if not exist
- 61:  44337e8d780d (upstream: 87b68db3ac54) <   -:  ------------ ci: fix the `jobname` of the `GETTEXT_POISON` job
- 62:  17abfb38484c (upstream: 61432dd630e3) <   -:  ------------ ci: explicit install all required packages
- 63:  7665009c65a7 (upstream: 4fef6321a5eb) <   -:  ------------ ci: run gem with sudo to install asciidoctor
- 64:  26b74dd0484c (upstream: 889cacb68976) <   -:  ------------ ci: configure GitHub Actions for CI/PR
- 65:  d5878c74971d (upstream: 9ae7dcb40252) <   -:  ------------ README: add a build badge for the GitHub Actions runs
- 66:  37837c557b2e (upstream: 6081d3898fe5) <   -:  ------------ ci: retire the Azure Pipelines definition
- 67:  618e01402766 (upstream: 662f9cf1548c) <   -:  ------------ tests: when run in Bash, annotate test failures with file name/line number
- 68:  dd48a9f53e2d (upstream: 676eb0c1ce0d) <   -:  ------------ ci: add a problem matcher for GitHub Actions
- 69:  7203c1b2a901 (upstream: f72f328bc57e) <   -:  ------------ ci: let GitHub Actions upload failed tests' directories
  70:  e64a88ac7bdd =  35:  d9bb41b42eb5 [fix] Gitk fails to open on a bare Git repository on Windows
  71:  d3249db9a38d =  36:  24c7e680d195 mingw: improve performance of mingw_unlink()
  72:  a5338eb5b65e =  37:  1d9531960c04 git-gui: provide question helper for retry fallback on Windows
  73:  406b1753789d =  38:  56256f9f4cf8 git gui: set GIT_ASKPASS=git-gui--askpass if not set yet
  74:  b0d991fe719e =  39:  391a2e2128d5 git-gui--askyesno: fix funny text wrapping
  75:  d257dd9529b7 =  40:  2f2d9a630f6d git-gui--askyesno: allow overriding the window title
  76:  e7fbdf420f6e =  41:  c505148f10e0 respect core.hooksPath, falling back to .git/hooks
  77:  6fb6dca96150 =  42:  68106d40b236 gitk: Unicode file name support
  78:  9bb01f14dc22 =  43:  ce909d8f68e6 gitk: Use an external icon file on Windows
  79:  1fd9ffd54e1c =  44:  56dd649502ad gitk: fix arrow keys in input fields with Tcl/Tk >= 8.6
  80:  e89b5ac523e6 =  45:  45b1fa5daa15 git-gui--askyesno (mingw): use Git for Windows' icon, if available
  81:  aa7348d3d2e5 =  46:  0b4f369e2bfe gitk: make the "list references" default window width wider
 179:  bac48d1aa30d !  47:  d878e5711c9b status: carry the --no-lock-index option for backwards-compatibility
    @@ builtin/commit.c: int cmd_status(int argc, const char **argv, const char *prefix
      	unsigned int progress_flag = 0;
      	int fd;
     @@ builtin/commit.c: int cmd_status(int argc, const char **argv, const char *prefix)
    - 		{ OPTION_CALLBACK, 'M', "find-renames", &rename_score_arg,
    + 		OPT_CALLBACK_F('M', "find-renames", &rename_score_arg,
      		  N_("n"), N_("detect renames, optionally set similarity index"),
    - 		  PARSE_OPT_OPTARG | PARSE_OPT_NONEG, opt_parse_rename_score },
    + 		  PARSE_OPT_OPTARG | PARSE_OPT_NONEG, opt_parse_rename_score),
     +		OPT_BOOL(0, "no-lock-index", &no_lock_index,
     +			 N_("(DEPRECATED: use `git --no-optional-locks status` "
     +			    "instead) Do not lock the index")),
 181:  155132732a14 !  48:  f111cb72052b status: reinstate --show-ignored-directory as a deprecated option
    @@ builtin/commit.c: int cmd_status(int argc, const char **argv, const char *prefix
      	unsigned int progress_flag = 0;
      	int fd;
     @@ builtin/commit.c: int cmd_status(int argc, const char **argv, const char *prefix)
    - 		{ OPTION_CALLBACK, 'M', "find-renames", &rename_score_arg,
    + 		OPT_CALLBACK_F('M', "find-renames", &rename_score_arg,
      		  N_("n"), N_("detect renames, optionally set similarity index"),
    - 		  PARSE_OPT_OPTARG | PARSE_OPT_NONEG, opt_parse_rename_score },
    + 		  PARSE_OPT_OPTARG | PARSE_OPT_NONEG, opt_parse_rename_score),
     +		OPT_BOOL(0, "show-ignored-directory", &show_ignored_directory,
     +			N_("(DEPRECATED: use --ignore=matching instead) Only "
     +			   "show directories that match an ignore pattern "
 177:  b034a59214b7 =  49:  c0f66feae28a Modify the Code of Conduct for Git for Windows
 178:  e9afc125c44e =  50:  b818af1c6259 CONTRIBUTING.md: add guide for first-time contributors
 180:  f84a08f1ac7b =  51:  418fe819f132 README.md: Add a Windows-specific preamble
 182:  99b8e5f1f271 =  52:  b2eb7fc1cf51 Add an issue template
 185:  43093e251275 =  53:  759c8c8e4b74 Modify the GitHub Pull Request template (to reflect Git for Windows)
 186:  6b3acc11fbcc =  54:  c798f9a66961 .github: Add configuration for the Sentiment Bot
 187:  d65ac5feed07 =  55:  34df3ddac65b Document how $HOME is set on Windows
 183:  0da864976b31 =  56:  f4186a16c6d0 status: verify that --show-ignored-directory prints a warning
 184:  58d01e0d5d6f =  57:  123c91b91e56 reset: reinstate support for the deprecated --stdin option
 188:  1cbbb2a1125f =  58:  593bca16b9dd SECURITY.md: document Git for Windows' policies
 190:  f9b122725326 !  59:  b83aeae66144 vcxproj: unclash project directories with build outputs
    @@ config.mak.uname: vcxproj:
     +	 echo '</Project>') >git-remote-http.proj/LinkOrCopyRemoteHttp.targets
     +	git add -f git.proj/LinkOrCopyBuiltins.targets git-remote-http.proj/LinkOrCopyRemoteHttp.targets
      
    - 	# Add command-list.h
    - 	$(MAKE) MSVC=1 SKIP_VCPKG=1 prefix=/mingw64 command-list.h
    + 	# Add command-list.h and config-list.h
    + 	$(MAKE) MSVC=1 SKIP_VCPKG=1 prefix=/mingw64 config-list.h command-list.h
     
      ## contrib/buildsystems/Generators/Vcxproj.pm ##
     @@ contrib/buildsystems/Generators/Vcxproj.pm: sub createProject {
 191:  5a818a276ec9 =  60:  f25f0a0b08e9 t5505/t5516: allow running without `.git/branches/` in the templates
 192:  60fe2fdffb98 =  61:  84e5e9db8438 t5505/t5516: fix white-space around redirectors
 193:  329890063d50 =  62:  4e0815e6ea9b ci: avoid pounding on the poor ci-artifacts container
  82:  ea734d027937 =  63:  8c6f87a9b0fd Win32: make FILETIME conversion functions public
  84:  1238231afe99 =  64:  40391bd909ca Win32: dirent.c: Move opendir down
  86:  0484dfbad1e6 =  65:  0b0e5d99d88e mingw: make the dirent implementation pluggable
  87:  69661bfa5fc7 =  66:  81e340a51861 Win32: make the lstat implementation pluggable
  88:  570325f18a98 =  67:  d237c7cf98e5 add infrastructure for read-only file system level caches
  89:  af9c2fce1413 =  68:  ee29b3e18675 mingw: add a cache below mingw's lstat and dirent implementations
  90:  0e9a5374cc74 =  69:  7d00008180a4 fscache: load directories only once
  91:  fa76cb8faa2a =  70:  73460e58d9d9 fscache: add key for GIT_TRACE_FSCACHE
  83:  bad614d33e29 =  71:  250b7896e3e1 Allow `add -p` and `add -i` with a large number of files
  92:  4f7947e5fced =  72:  01d82d680acd fscache: remember not-found directories
  85:  8a2bf06eb48d =  73:  e6b20245faaf t3701: verify that we can add *lots* of files interactively
  93:  ac2b51d21c4a =  74:  94a9a57de5fa fscache: add a test for the dir-not-found optimization
  94:  9df56f8545a0 =  75:  c3d60f2147cb add: use preload-index and fscache for performance
  95:  6cdb4b86c861 =  76:  b489f74f8888 dir.c: make add_excludes aware of fscache during status
  96:  8f62bbb8dbcc =  77:  fc2d28a0a8bc fscache: make fscache_enabled() public
  97:  176a4f6bf459 =  78:  c7c253839bc6 dir.c: regression fix for add_excludes with fscache
  98:  3530843dc2a5 =  79:  5d40ce080534 fetch-pack.c: enable fscache for stats under .git/objects
  99:  7c9bb443f4a4 !  80:  62571fa5e0f2 checkout.c: enable fscache for checkout again
    @@ Commit message
         Signed-off-by: Takuto Ikuta <tikuta@chromium.org>
     
      ## builtin/checkout.c ##
    -@@ builtin/checkout.c: static int checkout_worktree(const struct checkout_opts *opts)
    - 	state.istate = &the_index;
    +@@ builtin/checkout.c: static int checkout_worktree(const struct checkout_opts *opts,
    + 			       NULL);
      
      	enable_delayed_checkout(&state);
     +	enable_fscache(1);
      	for (pos = 0; pos < active_nr; pos++) {
      		struct cache_entry *ce = active_cache[pos];
      		if (ce->ce_flags & CE_MATCHED) {
    -@@ builtin/checkout.c: static int checkout_worktree(const struct checkout_opts *opts)
    +@@ builtin/checkout.c: static int checkout_worktree(const struct checkout_opts *opts,
      			pos = skip_same_name(ce, pos) - 1;
      		}
      	}
 100:  9828b1d715be =  81:  e7576b324caa Enable the filesystem cache (fscache) in refresh_index().
 101:  2598c1bdcfcb =  82:  09dc759bab04 fscache: use FindFirstFileExW to avoid retrieving the short name
 102:  af7d3593142d =  83:  6f1fc94c787f status: disable and free fscache at the end of the status command
 103:  a09ee0fb7950 =  84:  a9b170a461c2 fscache: add GIT_TEST_FSCACHE support
 104:  37e35eef0eb5 =  85:  262afc902c6b At the end of the add command, disable and free the fscache so that we don't leak the memory and so that we can dump the fscache statistics.
 105:  7dcd821441e0 =  86:  ac1b5da00d0c fscache: add fscache hit statistics
 106:  bf89a7c735e8 =  87:  660ab99e01ba mem_pool: add GIT_TRACE_MEMPOOL support
 107:  b041e771b06b !  88:  b07a9c9908ed fscache: fscache takes an initial size
    @@ builtin/add.c: int cmd_add(int argc, const char **argv, const char *prefix)
      
     
      ## builtin/checkout.c ##
    -@@ builtin/checkout.c: static int checkout_worktree(const struct checkout_opts *opts)
    - 	state.istate = &the_index;
    +@@ builtin/checkout.c: static int checkout_worktree(const struct checkout_opts *opts,
    + 			       NULL);
      
      	enable_delayed_checkout(&state);
     -	enable_fscache(1);
    @@ builtin/checkout.c: static int checkout_worktree(const struct checkout_opts *opt
      	for (pos = 0; pos < active_nr; pos++) {
      		struct cache_entry *ce = active_cache[pos];
      		if (ce->ce_flags & CE_MATCHED) {
    -@@ builtin/checkout.c: static int checkout_worktree(const struct checkout_opts *opts)
    +@@ builtin/checkout.c: static int checkout_worktree(const struct checkout_opts *opts,
      			pos = skip_same_name(ce, pos) - 1;
      		}
      	}
 108:  49442ad82b8a =  89:  1ee9a27db803 fscache: update fscache to be thread specific instead of global
 109:  d7fd98ecb9b6 =  90:  3b54bce3e7db fscache: teach fscache to use mempool
 110:  9894582a7145 =  91:  13f8293edc49 fscache: make fscache_enable() thread safe
 111:  22ac79fd8e6f =  92:  50345d4d0715 fscache: teach fscache to use NtQueryDirectoryFile
 112:  88796f001321 !  93:  da9f071b8a60 unpack-trees: enable fscache for sparse-checkout
    @@ unpack-trees.c: static void mark_new_skip_worktree(struct pattern_list *pl,
     +	disable_fscache();
      }
      
    - static int verify_absent(const struct cache_entry *,
    + static void populate_from_existing_patterns(struct unpack_trees_options *o,
 113:  29809f503268 =  94:  6edf34defe18 fscache: remember the reparse tag for each entry
 114:  935904ca531e =  95:  eaf35b19cde1 fscache: implement an FSCache-aware is_mount_point()
 115:  a09d65e2521d =  96:  15e6d37464b6 clean: make use of FSCache
 116:  f162d66919d7 =  97:  22bff35e4779 pack-objects (mingw): demonstrate a segmentation fault with large deltas
 117:  87c89cf1705d =  98:  134b203abc06 mingw: support long paths
 118:  d28cbea675e1 =  99:  279fcd4bf534 Win32: fix 'lstat("dir/")' with long paths
 119:  98709ceb199e ! 100:  79277960258e mingw: ensure that core.longPaths is handled *always*
    @@ builtin/credential.c: int cmd_credential(int argc, const char **argv, const char
      ## builtin/fetch-pack.c ##
     @@
      #include "connect.h"
    - #include "sha1-array.h"
    + #include "oid-array.h"
      #include "protocol.h"
     +#include "config.h"
      
    @@ builtin/pack-refs.c
     
      ## builtin/prune-packed.c ##
     @@
    + #include "builtin.h"
      #include "parse-options.h"
    - #include "packfile.h"
    - #include "object-store.h"
    + #include "prune-packed.h"
     +#include "config.h"
      
      static const char * const prune_packed_usage[] = {
    @@ builtin/prune-packed.c: int cmd_prune_packed(int argc, const char **argv, const
     
      ## builtin/prune.c ##
     @@
    - #include "parse-options.h"
    - #include "progress.h"
    + #include "prune-packed.h"
      #include "object-store.h"
    + #include "shallow.h"
     +#include "config.h"
      
      static const char * const prune_usage[] = {
 120:  4e72b504bc1a = 101:  410e17548341 mingw: Support `git_terminal_prompt` with more terminals
 121:  7341e0c00b56 = 102:  0490e4f5871f compat/terminal.c: only use the Windows console if bash 'read -r' fails
 122:  848a26b24951 = 103:  ab940bc05be9 mingw (git_terminal_prompt): do fall back to CONIN$/CONOUT$ method
 123:  fc8bf8526313 = 104:  fee26e77b167 Unbreak interactive GPG prompt upon signing
 124:  297c67830f9d = 105:  081d030ea120 mingw: disable t9020
 125:  6d34106274dc = 106:  f5c2158eb3c5 strbuf_readlink: don't call readlink twice if hint is the exact link size
 126:  4f1bc0ccc4ce ! 107:  6796432b093c strbuf_readlink: support link targets that exceed PATH_MAX
    @@ Commit message
         Signed-off-by: Karsten Blees <blees@dcon.de>
     
      ## strbuf.c ##
    -@@ strbuf.c: ssize_t strbuf_write(struct strbuf *sb, FILE *f)
    +@@ strbuf.c: ssize_t strbuf_write_fd(struct strbuf *sb, int fd)
    + 	return sb->len ? write(fd, sb->buf, sb->len) : 0;
      }
      
    - 
     -#define STRBUF_MAXLINK (2*PATH_MAX)
     -
      int strbuf_readlink(struct strbuf *sb, const char *path, size_t hint)
 127:  09e19b8867d2 = 108:  817f9f16ed37 lockfile.c: use is_dir_sep() instead of hardcoded '/' checks
 128:  5f13acfeecb8 = 109:  4eeb2b7a2cf9 Win32: don't call GetFileAttributes twice in mingw_lstat()
 129:  94a672a9ea52 = 110:  68d7303d2c74 Win32: implement stat() with symlink support
 130:  b49a4a90968f = 111:  b4bdcc9cbcca Win32: remove separate do_lstat() function
 131:  b6c248630248 = 112:  fcfe780a9f46 Win32: let mingw_lstat() error early upon problems with reparse points
 132:  33c033ba5085 = 113:  034852ab2847 mingw: teach fscache and dirent about symlinks
 133:  2ca7505fe258 = 114:  7a1aa01318f8 Win32: lstat(): return adequate stat.st_size for symlinks
 134:  51fdfc6edd2c = 115:  ffda26ece80f Win32: factor out retry logic
 135:  7a9d7cd5f198 = 116:  d2d0fe8b5672 Win32: change default of 'core.symlinks' to false
 136:  0fcbdcde1db9 = 117:  fa6c5481b565 Win32: add symlink-specific error codes
 137:  a5cbecf9ffc8 = 118:  19991b7283ed Win32: mingw_unlink: support symlinks to directories
 138:  9bb7a48ffea4 = 119:  b586cc9d2a27 Win32: mingw_rename: support renaming symlinks
 139:  07f81e3fdb5f = 120:  cf3eb4a9d2f2 Win32: mingw_chdir: change to symlink-resolved directory
 140:  2c1409d127cc = 121:  1c765f1bee6d Win32: implement readlink()
 141:  c9bec41fe36d = 122:  46d6a0c21aff Win32: implement basic symlink() functionality (file symlinks only)
 142:  1869749c15f3 = 123:  b78c5aa3b08b Win32: symlink: add support for symlinks to directories
 143:  12c59c46a2a0 = 124:  d5b0d1ef1abe mingw: try to create symlinks without elevated permissions
 144:  7effd74ed0e9 = 125:  5a4bbc017f53 mingw: emulate stat() a little more faithfully
 149:  397cd1a695db = 126:  9dfc492a0b37 Win32: symlink: move phantom symlink creation to a separate function
 150:  701a42835dbb ! 127:  4fc01e816a4d Introduce helper to create symlinks that knows about index_state
    @@ entry.c: static int write_entry(struct cache_entry *ce,
      			return error_errno("unable to create symlink %s", path);
     
      ## git-compat-util.h ##
    -@@ git-compat-util.h: static inline char *git_find_last_dir_sep(const char *path)
    +@@ git-compat-util.h: static inline int git_has_dir_sep(const char *path)
      #define is_mount_point is_mount_point_via_stat
      #endif
      
 151:  4436fe3e61bf = 128:  5c769c7cd54f mingw: allow to specify the symlink type in .gitattributes
 152:  77370859d7af = 129:  733761913b31 Win32: symlink: add test for `symlink` attribute
 153:  0f88a2950bdf = 130:  fb5718c2f9e7 transport-helper: prefer Git's builtins over dashed form
 154:  ad4a2314dc7b = 131:  7585fb80b9cd mingw: explicitly specify with which cmd to prefix the cmdline
 155:  aa7f485b1dec = 132:  6c8f20235fdd mingw: when path_lookup() failed, try BusyBox
 145:  cec61e674431 = 133:  09425c135eee mingw: introduce code to detect whether we're inside a Windows container
 156:  819237af370d = 134:  0e357bc72de3 test-lib: avoid unnecessary Perl invocation
 146:  385ebd3f49d7 = 135:  9323588fcb5e mingw: when running in a Windows container, try to rename() harder
 157:  a6fd87dbb381 ! 136:  9dfd7bfece7f tests: replace mingw_test_cmp with a helper in C
    @@ Commit message
         Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
     
      ## Makefile ##
    -@@ Makefile: X =
    - PROGRAMS += $(patsubst %.o,git-%$X,$(PROGRAM_OBJS))
    - 
    +@@ Makefile: PROGRAMS += $(patsubst %.o,git-%$X,$(PROGRAM_OBJS))
    + TEST_BUILTINS_OBJS += test-advise.o
    + TEST_BUILTINS_OBJS += test-bloom.o
      TEST_BUILTINS_OBJS += test-chmtime.o
     +TEST_BUILTINS_OBJS += test-cmp.o
      TEST_BUILTINS_OBJS += test-config.o
    @@ t/helper/test-cmp.c (new)
     +}
     
      ## t/helper/test-tool.c ##
    -@@ t/helper/test-tool.c: struct test_cmd {
    - 
    - static struct test_cmd cmds[] = {
    +@@ t/helper/test-tool.c: static struct test_cmd cmds[] = {
    + 	{ "advise", cmd__advise_if_enabled },
    + 	{ "bloom", cmd__bloom },
      	{ "chmtime", cmd__chmtime },
     +	{ "cmp", cmd__cmp },
      	{ "config", cmd__config },
    @@ t/helper/test-tool.c: struct test_cmd {
     
      ## t/helper/test-tool.h ##
     @@
    - #include "git-compat-util.h"
    - 
    + int cmd__advise_if_enabled(int argc, const char **argv);
    + int cmd__bloom(int argc, const char **argv);
      int cmd__chmtime(int argc, const char **argv);
     +int cmd__cmp(int argc, const char **argv);
      int cmd__config(int argc, const char **argv);
 147:  6bec2211a0e3 = 137:  4776a81db6f5 mingw: move the file_attr_to_st_mode() function definition
 158:  f4461772ff7a ! 138:  c834b6fc98d6 test-tool: learn to act as a drop-in replacement for `iconv`
    @@ Commit message
     
      ## Makefile ##
     @@ Makefile: TEST_BUILTINS_OBJS += test-genzeros.o
    + TEST_BUILTINS_OBJS += test-hash-speed.o
      TEST_BUILTINS_OBJS += test-hash.o
      TEST_BUILTINS_OBJS += test-hashmap.o
    - TEST_BUILTINS_OBJS += test-hash-speed.o
     +TEST_BUILTINS_OBJS += test-iconv.o
      TEST_BUILTINS_OBJS += test-index-version.o
      TEST_BUILTINS_OBJS += test-json-writer.o
 148:  5618023e5700 = 139:  db175d5e47db mingw: Windows Docker volumes are *not* symbolic links
 159:  6a2ec00de531 = 140:  b522f7a9dc3b tests(mingw): if `iconv` is unavailable, use `test-helper --iconv`
 160:  9a486c4642e5 = 141:  a63377ff7a00 tests: use t/diff-lib/* consistently
 161:  3ffb09ed109d = 142:  9e545bb99980 gitattributes: mark .png files as binary
 162:  964c7d8d45d4 = 143:  ab664cc90452 tests: move test PNGs into t/diff-lib/
 163:  9a54297a9b33 = 144:  627053957df9 tests: only override sort & find if there are usable ones in /usr/bin/
 164:  20c85ddfbe17 = 145:  f4f2b684320c tests: use the correct path separator with BusyBox
 165:  e104c07fe83c = 146:  1daea5b757e8 mingw: only use Bash-ism `builtin pwd -W` when available
 166:  25111b863024 = 147:  189637a415b0 tests (mingw): remove Bash-specific pwd option
 167:  60d8fc6eda9a = 148:  44831f935c83 test-lib: add BUSYBOX prerequisite
 168:  0e247d37af79 = 149:  16a640ba0404 t0021: use Windows path when appropriate
 169:  1cd310193c22 = 150:  0724048aad14 t5003: use binary file from t/diff-lib/
 170:  1b6635d3e272 = 151:  49c814ef37d8 t5532: workaround for BusyBox on Windows
 171:  4db3143d7a8c = 152:  6983dfe8e36a t5605: special-case hardlink test for BusyBox-w32
 172:  a3e992f3b5bb = 153:  f4a03b331284 t5813: allow for $PWD to be a Windows path
 173:  2a85dd17c757 = 154:  02735b1ef0aa t9200: skip tests when $PWD contains a colon
 175:  dcb1eb7d53ec = 155:  305fcd9dd9d6 mingw: add a Makefile target to copy test artifacts
 174:  dd1e7c22fac4 = 156:  73843dbde48d mingw: kill child processes in a gentler way
 176:  758bf84f84a8 = 157:  dae8279aeb99 mingw: really handle SIGINT
-189:  a0b310861825 (upstream: a0b310861825) <   -:  ------------ macOS/brew: let the build find gettext headers/libraries/msgfmt

Note: the "slight annotation" was performed mostly automatically:

$ x="$(git range-diff -s origin/master^{/^Start.the}..origin/master v2.26.2..v2.27.0-rc0 |
    sed -n 's/^[ 0-9]*:  \([0-9a-f][0-9a-f]*\) [=!] [ 0-9]*:  \([0-9a-f][0-9a-f]*\).*/-e "s\/\1\/\1 (upstream: \2)\/"/p')"

$ git range-diff \
    'origin/master^{/^Start.the.merging-rebase}..origin/master' \
    'rebase-to-v2.27.0-rc0^{/^Start.the.merging-rebase}..rebase-to-v2.27.0-rc0 |
  sed -e 's/^[ 0-9]*:  [0-9a-f]* [=!]/ &/' \
      -e 's/^[ 0-9]*:  [0-9a-f]* </-&/' \
      -e 's/^[ 0-9]*:  [0-9a-f]* >/+&/' |
  eval sed $x

There were three commits that made it upstream which were not annotated automatically: 32ce88d, b11a3e0 and 7665009. I added that annotation manually.

adoakley and others added 30 commits May 10, 2020 09:58
Perforce allows you commit files and directories with the same name,
so you could have files //depot/foo and //depot/foo/bar both checked
in.  A p4 sync of a repository in this state fails.  Deleting one of
the files recovers the repository.

When this happens we want git-p4 to recover in the same way as
perforce.

Note that Perforce has this change in their 2017.1 version:

     Bugs fixed in 2017.1
     #1489051 (Job git-for-windows#2170) **
        Submitting a file with the same name as an existing depot
        directory path (or vice versa) will now be rejected.

so people hopefully will not creating damaged Perforce repos
anymore, but "git p4" needs to be able to interact with already
corrupt ones.

Signed-off-by: Andrew Oakley <andrew@adoakley.name>
Reviewed-by: Luke Diamand <luke@diamand.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Tree entries are sorted in path order, meaning that directory names get
a slash ('/') appended implicitly.  Git fsck checks if trees contains
consecutive duplicates, but due to that ordering there can be
non-consecutive duplicates as well if one of them is a directory and the
other one isn't.  Such a tree cannot be fully checked out.

Find these duplicates by recording candidate file names on a stack and
check candidate directory names against that stack to find matches.

Suggested-by: Brandon Williams <bwilliamseng@gmail.com>
Original-test-by: Brandon Williams <bwilliamseng@gmail.com>
Signed-off-by: René Scharfe <l.s.r@web.de>
Reviewed-by: Luke Diamand <luke@diamand.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
When computing changed-path Bloom filters for a commit, we need to
know if the commit has a parent or not. If the commit is not parsed,
then its parent pointer will be NULL.

As far as I can tell, the only opportunity to reach this code
without parsing the commit is inside "test-tool bloom
get_filter_for_commit" but it is best to be safe.

Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
In Documentation/technical/commit-graph-format.txt, the definition
of the BIDX chunk specifies the length is a number of 8-byte words.
During development we discovered that using 8-byte words in the
Murmur3 hash algorithm causes issues with big-endian versus little-
endian machines. Thus, the hash algorithm was adapted to work on a
byte-by-byte basis. However, this caused a change in the definition
of a "word" in bloom.h. Now, a "word" is a single byte, which allows
filters to be as small as two bytes. These length-two filters are
demonstrated in t0095-bloom.sh, and a larger filter of length 25 is
demonstrated as well.

The original point of using 8-byte words was for alignment reasons.
It also presented opportunities for extremely sparse Bloom filters
when there were a small number of changes at a commit, creating a
very low false-positive rate. However, modifying the format at this
point is unlikely to be a valuable exercise. Also, this use of
single-byte granularity does present opportunities to save space.
It is unclear if 8-byte alignment of the filters would present any
meaningful performance benefits.

Modify the format document to reflect reality.

Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
When computing a changed-path Bloom filter, we need to take the
files that changed from the diff computation and extract the parent
directories. That way, a directory pathspec such as "Documentation"
could match commits that change "Documentation/git.txt".

However, the current code does a poor job of this process. The paths
are added to a hashmap, but we do not check if an entry already
exists with that path. This can create many duplicate entries and
cause the filter to have a much larger length than it should. This
means that the filter is more sparse than intended, which helps the
false positive rate, but wastes a lot of space.

Properly use hashmap_get() before hashmap_add(). Also be sure to
include a comparison function so these can be matched correctly.

This has an effect on a test in t0095-bloom.sh. This makes sense,
there are ten changes inside "smallDir" so the total number of
paths in the filter should be 11. This would result in 11 * 10 bits
required, and with 8 bits per byte, this results in 14 bytes.

Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
As diff_tree_oid() computes a diff, it will terminate early if the
total number of changed paths is strictly larger than max_changes.
This includes the directories that changed, not just the file paths.
However, only the file paths are reflected in the resulting diff
queue's "nr" value.

Use the "num_changes" from diffopt to check if the diff terminated
early. This is incredibly important, as it can result in incorrect
filters! For example, the first commit in the Linux kernel repo
reports only 471 changes, but since these are nested inside several
directories they expand to 513 "real" changes, and in fact the
total list of changes is not reported. Thus, the computed filter
for this commit is incorrect.

Demonstrate the subtle difference by using one fewer file change
in the 'get bloom filter for commit with 513 changes' test. Before,
this edited 513 files inside "bigDir" which hit this inequality.
However, dropping the file count by one demonstrates how the
previous inequality was incorrect but the new one is correct.

Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: SZEDER Gábor <szeder.dev@gmail.com>
Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Rather than teaching only one operation, like 'git fetch', how to write
down throughput to traces, we can learn about a wide range of user
operations that may seem slow by adding tooling to the progress library
itself. Operations which display progress are likely to be slow-running
and the kind of thing we want to monitor for performance anyways. By
showing object counts and data transfer size, we should be able to
make some derived measurements to ensure operations are scaling the way
we expect.

Signed-off-by: Emily Shaffer <emilyshaffer@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Code cleanup.

* tb/shallow-cleanup:
  shallow: use struct 'shallow_lock' for additional safety
  shallow.h: document '{commit,rollback}_shallow_file'
  shallow: extract a header file for shallow-related functions
  commit: make 'commit_graft_pos' non-static
The object walk with object filter "--filter=tree:0" can now take
advantage of the pack bitmap when available.

* tb/bitmap-walk-with-tree-zero-filter:
  pack-bitmap: pass object filter to fill-in traversal
  pack-bitmap.c: support 'tree:0' filtering
  pack-bitmap.c: make object filtering functions generic
  list-objects-filter: treat NULL filter_options as "disabled"
Minor in-code comments and documentation updates around credential
API.

* cb/credential-doc-fixes:
  credential: document protocol updates
  credential: update gitcredentials documentation
  credential: correct order of parameters for credential_match
  credential: update description for credential_from_url_gently
Teach "am", "commit", "merge" and "rebase", when they are run with
the "--quiet" option, to pass "--quiet" down to "gc --auto".

* jc/auto-gc-quiet:
  auto-gc: pass --quiet down from am, commit, merge and rebase
  auto-gc: extract a reusable helper from "git fetch"
Random bits of FAQ.

* ss/faq-ignore:
  gitfaq: files in .gitignore are tracked
Random bits of FAQ.

* ss/faq-fetch-pull:
  gitfaq: fetching and pulling a repository
Instead of always building all branches at GitHub via Actions,
users can specify which branches to build.

* jk/ci-only-on-selected-branches:
  ci: allow per-branch config for GitHub Actions
Code clean-up.

* dd/bloom-sparse-fix:
  bloom: fix `make sparse` warning
Rewriting various parts of "git submodule" in C continues.

* ss/submodule-set-url-in-c:
  submodule: port subcommand 'set-url' from shell to C
The code to skip unmerged paths in the index when sparse checkout
is in use would have made out-of-bound access of the in-core index
when the last path was unmerged, which has been corrected.

* ds/sparse-updates-oob-access-fix:
  unpack-trees: avoid array out-of-bounds error
Serving a "git fetch" client over "git://" and "ssh://" protocols
using the on-wire protocol version 2 was buggy on the server end
when the client needs to make a follow-up request to
e.g. auto-follow tags.

* cc/upload-pack-v2-fetch-fix:
  upload-pack: clear filter_options for each v2 fetch command
Signed-off-by: Junio C Hamano <gitster@pobox.com>
"git bugreport" learned to report enabled hooks in the repository.

* es/bugreport-with-hooks:
  bugreport: collect list of populated hooks
"git bisect replay" had trouble with input files when they used
CRLF line ending, which has been corrected.

* cw/bisect-replay-with-dos:
  bisect: allow CRLF line endings in "git bisect replay" input
Doc update.

* jc/codingstyle-compare-with-null:
  CodingGuidelines: do not ==/!= compare with 0 or '\0' or NULL
"rebase -i" segfaulted when rearranging a sequence that has a
fix-up that applies another fix-up (which may or may not be a
fix-up of yet another step).

* js/rebase-autosquash-double-fixup-fix:
  rebase --autosquash: fix a potential segfault
"git p4" learned to recover from a (broken) state where a directory
and a file are recorded at the same path in the Perforce repository
the same way as their clients do.

* ao/p4-d-f-conflict-recover:
  git-p4: recover from inconsistent perforce history
"git fsck" ensures that the paths recorded in tree objects are
sorted and without duplicates, but it failed to notice a case where
a blob is followed by entries that sort before a tree with the same
name.  This has been corrected.

* rs/fsck-duplicate-names-in-trees:
  fsck: report non-consecutive duplicate names in trees
Code cleanup and typofixes

* ds/bloom-cleanup:
  completion: offer '--(no-)patch' among 'git log' options
  bloom: use num_changes not nr for limit detection
  bloom: de-duplicate directory entries
  Documentation: changed-path Bloom filters use byte words
  bloom: parse commit before computing filters
  test-bloom: fix usage typo
  bloom: fix whitespace around tab length
"git multi-pack-index repack" has been taught to honor some
repack.* configuration variables.

* sn/midx-repack-with-config:
  multi-pack-index: respect repack.packKeptObjects=false
  midx: teach "git multi-pack-index repack" honor "git repack" configurations
Test fix for a topic already in 'master' and meant for 'maint'.

* jt/t5500-unflake:
  t5500: count objects through stderr, not trace
Teach codepaths that show progress meter to also use the
start_progress() and the stop_progress() calls as a "region" to be
traced.

* es/trace-log-progress:
  trace2: log progress time and throughput
dscho and others added 27 commits May 15, 2020 13:36
…er/fscache_nfd

fscache: add not-found directory cache to fscache
…er/add_preload_fscache

add: use preload-index and fscache for performance
…xcludes_with_fscache

dir.c: make add_excludes aware of fscache during status
fetch-pack.c: enable fscache for stats under .git/objects
…t_flush

checkout.c: enable fscache for checkout again

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
…_index

Enable the filesystem cache (fscache) in refresh_index().
…-gfw

fscache: use FindFirstFileExW to avoid retrieving the short name
…ter-status-gfw

status: disable and free fscache at the end of the status command
…e-gfw

fscache: add GIT_TEST_FSCACHE support
…ter-add-gfw

At the end of the add command, disable and free the fscache
…ics-gfw

fscache: add fscache hit statistics
This brings substantial wins in performance because the FSCache is now
per-thread, being merged to the primary thread only at the end, so we do
not have to lock (except while merging).

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
…safe-enable-gfw

fscache: make fscache_enable() thread safe
…DirectoryFile-gfw

 fscache: teach fscache to use NtQueryDirectoryFile
When updating the skip-worktree bits in the index to align with new
values in a sparse-checkout file, Git scans the entire working
directory with lstat() calls. In a sparse-checkout, many of these
lstat() calls are for paths that do not exist.

Enable the fscache feature during this scan.

In a local test of a repo with ~2.2 million paths, updating the index
with `git read-tree -m -u HEAD` with a sparse-checkout file containing
only `/.gitattributes` improved from 2-3 minutes to 15-20 seconds.

More work could be done to stop running lstat() calls when recursing
into directories that are known to not exist.
We already avoid traversing NTFS junction points in `git clean -dfx`.
With this topic branch, we do that when the FSCache is enabled, too.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
This was pull request git-for-windows#1645 from ZCube/master

Support windows container.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
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>
This branch allows third-party tools to call `git status
--no-lock-index` to avoid lock contention with the interactive Git usage
of the actual human user.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
…ored-directory-gracefully

Phase out `--show-ignored-directory` gracefully
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>
Add a README.md for GitHub goodness.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
@dscho dscho merged commit b3299f3 into git-for-windows:master May 29, 2020
@dscho dscho deleted the rebase-to-v2.27.0-rc0 branch May 29, 2020 15:07
@dscho dscho added this to the v2.27.0 milestone May 29, 2020
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.