Skip to content

Rebase to Git v2.28.0-rc0#2742

Merged
dscho merged 592 commits into
git-for-windows:mainfrom
dscho:rebase-to-v2.28.0-rc0
Jul 15, 2020
Merged

Rebase to Git v2.28.0-rc0#2742
dscho merged 592 commits into
git-for-windows:mainfrom
dscho:rebase-to-v2.28.0-rc0

Conversation

@dscho
Copy link
Copy Markdown
Member

@dscho dscho commented Jul 10, 2020

The usual pre-release PR to benefit from the PR builds.

gitster and others added 30 commits July 6, 2020 22:09
"git difftool" has trouble dealing with paths added to the index
with the intent-to-add bit.

* js/diff-files-i-t-a-fix-for-difftool:
  difftool -d: ensure that intent-to-add files are handled correctly
  diff-files --raw: show correct post-image of intent-to-add files
"git fast-export --anonymize" learned to take customized mapping to
allow its users to tweak its output more usable for debugging.

* jk/fast-export-anonym-alt:
  fast-export: use local array to store anonymized oid
  fast-export: anonymize "master" refname
  fast-export: allow seeding the anonymized mapping
  fast-export: add a "data" callback parameter to anonymize_str()
  fast-export: move global "idents" anonymize hashmap into function
  fast-export: use a flex array to store anonymized entries
  fast-export: stop storing lengths in anonymized hashmaps
  fast-export: tighten anonymize_mem() interface to handle only strings
  fast-export: store anonymized oids as hex strings
  fast-export: use xmemdupz() for anonymizing oids
  t9351: derive anonymized tree checks from original repo
The effort to avoid using test_must_fail on non-git command continues.

* dl/test-must-fail-fixes-5:
  lib-submodule-update: pass 'test_must_fail' as an argument
  lib-submodule-update: prepend "git" to $command
  lib-submodule-update: consolidate --recurse-submodules
  lib-submodule-update: add space after function name
Code cleanup.

* es/worktree-code-cleanup:
  worktree: avoid dead-code in conditional
Signed-off-by: Junio C Hamano <gitster@pobox.com>
In symdiff_prepare(), we iterate over the set of parsed objects to pick
out any symmetric differences, including the left, right, and base
elements. We assign the results into pointers in a "struct symdiff", and
then complain if we didn't find a base, like so:

    sym->left = rev->pending.objects[lpos].name;
    sym->right = rev->pending.objects[rpos].name;
    sym->base = rev->pending.objects[basepos].name;
    if (basecount == 0)
            die(_("%s...%s: no merge base"), sym->left, sym->right);

But the least lines are backwards. If basecount is 0, then basepos will
be -1, and we will access memory outside of the pending array. This
isn't usually that big a deal, since we don't do anything besides a
single pointer-sized read before exiting anyway, but it does violate the
C standard, and of course memory-checking tools like ASan complain.

Let's put the basecount check first. Note that we haveto split it from
the other assignments, since the die() relies on sym->left and
sym->right having been assigned (this isn't strictly necessary, but is
easier to read than dereferencing the pending array again).

Reported-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Since 37b9dca (shallow.c: use '{commit,rollback}_shallow_file',
2020-04-22), Git knows how to reset stat-validity checks for the
$GIT_DIR/shallow file, allowing it to change between a shallow and
non-shallow state in the same process (e.g., in the case of 'git fetch
--unshallow').

However, when $GIT_DIR/shallow changes, Git does not alter or remove any
grafts (nor substituted parents) in memory.

This comes up in a "git fetch --unshallow" with fetch.writeCommitGraph
set to true. Ordinarily in a shallow repository (and before 37b9dca,
even in this case), commit_graph_compatible() would return false,
indicating that the repository should not be used to write a
commit-graphs (since commit-graph files cannot represent a shallow
history). But since 37b9dca, in an --unshallow operation that check
succeeds.

Thus even though the repository isn't shallow any longer (that is, we
have all of the objects), the in-core representation of those objects
still has munged parents at the shallow boundaries.  When the
commit-graph write proceeds, we use the incorrect parentage, producing
wrong results.

There are two ways for a user to work around this: either (1) set
'fetch.writeCommitGraph' to 'false', or (2) drop the commit-graph after
unshallowing.

One way to fix this would be to reset the parsed object pool entirely
(flushing the cache and thus preventing subsequent reads from modifying
their parents) after unshallowing. That would produce a problem when
callers have a now-stale reference to the old pool, and so this patch
implements a different approach. Instead, attach a new bit to the pool,
'substituted_parent', which indicates if the repository *ever* stored a
commit which had its parents modified (i.e., the shallow boundary
prior to unshallowing).

This bit needs to be sticky because all reads subsequent to modifying a
commit's parents are unreliable when unshallowing. Modify the check in
'commit_graph_compatible' to take this bit into account, and correctly
avoid generating commit-graphs in this case, thus solving the bug.

Helped-by: Derrick Stolee <dstolee@microsoft.com>
Helped-by: Jonathan Nieder <jrnieder@gmail.com>
Reported-by: Jay Conrod <jayconrod@google.com>
Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
The fetch.writeCommitGraph feature makes fetches write out a commit
graph file for the newly downloaded pack on fetch.  This improves the
performance of various commands that would perform a revision walk and
eventually ought to be the default for everyone.  To prepare for that
future, it's enabled by default for users that set
feature.experimental=true to experience such future defaults.

Alas, for --unshallow fetches from a shallow clone it runs into a
snag: by the time Git has fetched the new objects and is writing a
commit graph, it has performed a revision walk and r->parsed_objects
contains information about the shallow boundary from *before* the
fetch.  The commit graph writing code is careful to avoid writing a
commit graph file in shallow repositories, but the new state is not
shallow, and the result is that from that point on, commands like "git
log" make use of a newly written commit graph file representing a
fictional history with the old shallow boundary.

We could fix this by making the commit graph writing code more careful
to avoid writing a commit graph that could have used any grafts or
shallow state, but it is possible that there are other pieces of
mutated state that fetch's commit graph writing code may be relying
on.  So disable it in the feature.experimental configuration.

Google developers have been running in this configuration (by setting
fetch.writeCommitGraph=false in the system config) to work around this
bug since it was discovered in April.  Once the fix lands, we'll
enable fetch.writeCommitGraph=true again to give it some early testing
before rolling out to a wider audience.

In other words:

- this patch only affects behavior with feature.experimental=true

- it makes feature.experimental match the configuration Google has
  been using for the last few months, meaning it would leave users in
  a better tested state than without it

- this should improve testing for other features guarded by
  feature.experimental, by making feature.experimental safer to use

Reported-by: Jay Conrod <jayconrod@google.com>
Helped-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
In 11179eb ("entry.c: check if file exists after checkout",
2017-10-05) we started checking the result of the lstat() call done
after writing a file, to avoid writing garbage to the corresponding
cache entry. However, the code skips calling lstat() if it's possible
to use fstat() when it still has the file descriptor open. And when
calling fstat() we don't do the same error checking. To fix that, let
the callers of fstat_output() know when fstat() fails. In this case,
write_entry() will try to use lstat() and properly report an error if
that fails as well.

Signed-off-by: Matheus Tavares <matheus.bernardino@usp.br>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
We don't give a "::" for the list separator, but just a single ":". This
ends up rendering literally, "--apply: Use applying strategies ...". As
a follow-on error, the list continuation, "+", also ends up rendering
literally (because we don't have a list).

This was introduced in 52eb738 ("rebase: add an --am option",
2020-02-15) and survived the rename in 10cdb9f ("rebase: rename the
two primary rebase backends", 2020-02-15).

Signed-off-by: Martin Ågren <martin.agren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Doc/usage update.

* cc/cat-file-usage-update:
  cat-file: add missing [=<format>] to usage/synopsis
The command line completion support (in contrib/) used to be
prepared to work with "set -u" but recent changes got a bit more
sloppy.  This has been corrected.

* vs/completion-with-set-u:
  completion: nounset mode fixes
…master

"git send-email --in-reply-to=<msg>" did not use the In-Reply-To:
header with the value given from the command line, and let it be
overridden by the value on In-Reply-To: header in the messages
being sent out (if exists).

* ra/send-email-in-reply-to-from-command-line-wins:
  send-email: restore --in-reply-to superseding behavior
"git log -Lx,y:path --before=date" lost track of where the range
should be because it didn't take the changes made by the youngest
commits that are omitted from the output into account.

* rs/line-log-until:
  revision: disable min_age optimization with line-log
Recent update to "git diff" meant as a code clean-up introduced a
bug in its error handling code, which has been corrected.

* ct/diff-with-merge-base-clarification:
  diff: check for merge bases before assigning sym->base
When "fetch.writeCommitGraph" configuration is set in a shallow
repository and a fetch moves the shallow boundary, we wrote out
broken commit-graph files that do not match the reality, which has
been corrected.

* tb/fix-persistent-shallow:
  commit.c: don't persist substituted parents when unshallowing
…into master

"fetch.writeCommitGraph" was enabled when "feature.experimental" is
asked for, but it was found to be a bit too risky even for bold
folks in its current shape.  The configuration has been ejected, at
least for now, from the "experimental" feature set.

* jn/eject-fetch-write-commit-graph-out-of-experimental:
  experimental: default to fetch.writeCommitGraph=false
Typofix.

* ma/rebase-doc-typofix:
  git-rebase.txt: fix description list separator
"git checkout" failed to catch an error from fstat() after updating
a path in the working tree.

* mt/entry-fstat-fallback-fix:
  entry: check for fstat() errors after checkout
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit starts the rebase of ee0d665 to ada126b
This happens only when the corresponding commits are not exported in
the current fast-export run. This can happen either when the relevant
commit is already marked, or when the commit is explicitly marked
as UNINTERESTING with a negative ref by another argument.

This breaks fast-export basec remote helpers.

Signed-off-by: Sverre Rabbelier <srabbelier@gmail.com>
[PT: ensure we add an additional element to the argv array]

Signed-off-by: Sverre Rabbelier <srabbelier@gmail.com>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Sverre Rabbelier <srabbelier@gmail.com>
After importing anything with fast-import, we should always let the
garbage collector do its job, since the objects are written to disk
inefficiently.

This brings down an initial import of http://selenic.com/hg from about
230 megabytes to about 14.

In the future, we may want to make this configurable on a per-remote
basis, or maybe teach fast-import about it in the first place.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
On Windows, there are several categories of absolute paths. One such
category starts with a backslash and is implicitly relative to the
drive associated with the current working directory. Example:

	c:
	git clone https://github.com/git-for-windows/git \G4W

should clone into C:\G4W.

There is currently a problem with that, in that mingw_mktemp() does not
expect the _wmktemp() function to prefix the absolute path with the
drive prefix, and as a consequence, the resulting path does not fit into
the originally-passed string buffer. The symptom is a "Result too large"
error.

Reported by Juan Carlos Arevalo Baeza.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
MinGit for Windows comes without `gzip` bundled inside, git-archive uses
`gzip -cn` to compress tar files but for this to work, gzip needs to be
present on the host system.

In the next commit, we will change the gzip compression so that we no
longer spawn `gzip` but let zlib perform the compression in the same
process instead.

In preparation for this, we consolidate all the block writes into a
single function.

This closes git-for-windows#1970

Signed-off-by: Rohit Ashiwal <rohit.ashiwal265@gmail.com>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Teach register_rename_src() to see if new file pair
can simply be appended to the rename_src[] array before
performing the binary search to find the proper insertion
point.

This is a performance optimization.  This routine is called
during run_diff_files in status and the caller is iterating
over the sorted index, so we should expect to be able to
append in the normal case.  The existing insert logic is
preserved so we don't have to assume that, but simply take
advantage of it if possible.

Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
When specifying an absolute path without a drive prefix, we convert that
path internally. Let's make sure that we handle that case properly, too
;-)

This fixes the command

	git clone https://github.com/git-for-windows/git \G4W

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
On Windows, an absolute POSIX path needs to be turned into a Windows
one.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
dscho and others added 26 commits July 10, 2020 14:25
…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>
mingw: lstat: compute correct size for symlinks
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>
In git-for-windows#2637, we fixed a bug
where symbolic links' target path sizes were recorded incorrectly in the
index. The downside of this fix was that every user with tracked
symbolic links in their checkouts would see them as modified in `git
status`, but not in `git diff`, and only a `git add <path>` (or `git add
-u`) would "fix" this.

Let's do better than that: we can detect that situation and simply
pretend that a symbolic link with a known bad size (or a size that just
happens to be that bad size, a _very_ unlikely scenario because it would
overflow our buffers due to the trailing NUL byte) means that it needs
to be re-checked as if we had just checked it out.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
In git-for-windows#2637, we fixed a bug
where symbolic links' target path sizes were recorded incorrectly in the
index.

However, we did so only in `mingw_lstat()` but not in `fscache_lstat()`.
Meaning: in code paths where the FSCache feature is enabled, Git _still_
got the wrong idea if the symbolic link target's length.

Let's fix this.

Note: as the FSCache feature reads in whole swaths of directory entries
in batch mode, even if metadata for only one of them might be required,
we save the expensive `CreateFile()` call that is required to compute
the symbolic link target's length to the `fscache_lstat()` call.

This fixes git-for-windows#2653.

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

mingw: special-case index entries for symlinks with buggy size
…e-addon-for-#2637

Fix `lstat()`'s `st_size` computation for symbolic links when FSCache is in effect
As of Git for Windows v2.27.0, there is an option to use Windows'
newly-introduced Pseudo Console support. When running an interactive add
operation with this support enabled, Git will receive CR/LF line
endings.

Therefore, let's not pretend that we are expecting Unix line endings.

This fixes git-for-windows#2729

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
In preparation for eventually switching over to `main`, let's
synchronize the historical and the designated future main branch.

This follows the excellent advice from
https://github.com/chancancode/branch-rename/#gradual-migration

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
This change enhances `git commit --cleanup=scissors` by detecting
scissors lines ending in either LF (UNIX-style) or CR/LF (DOS-style).

Regression tests are included to specifically test for trailing
comments after a CR/LF-terminated scissors line.

Signed-off-by: Luke Bonanomi <lbonanomi@gmail.com>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
git often requests `strbuf_realpath(path + "/.git")`, where "./git" does
not yet exist on disk.

This causes the following to happen:
1. `mingw_strbuf_realpath()` fails
2. Non-mingw `strbuf_realpath()` does the work
3. Result of `strbuf_realpath()` is slightly different, for example it
   will not normalize the case of disk/folder names
4. `needs_work_tree_config()` becomes confused by these differences
5. clone adds `core.worktree` setting

This in turn causes various problems, for example:
1. Repository folder can no longer be renamed/moved without breaking it
2. Using the repository on WSL (Windows Subsystem for Linux) doesn't
   work, because it has windows-style path saved

This fixes git-for-windows#2569

Co-Authored-By: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Alexandr Miloslavskiy <alexandr.miloslavskiy@syntevo.com>
git add -i: handle CR/LF line endings in the interactive input
Rationalize line endings for scissors-cleanup
…win)_clone_adds_worktree

Fix problem where clone adds core.worktree due to path case differences
@dscho
Copy link
Copy Markdown
Member Author

dscho commented Jul 10, 2020

Range-diff:

   1:  e4f64f598b9b =   1:  1e7353e4ee06 t9350: point out that refs are not updated correctly
   2:  46a42b84d77f =   2:  a4194111cb23 transport-helper: add trailing --
   3:  e0f7a7bbdd23 =   3:  545fd88d920e remote-helper: check helper status after import/export
   9:  ac8397fc6143 =   4:  16754ca5e858 Always auto-gc after calling a fast-import transport
   4:  2c3e49b9efbe =   5:  acd556ca88fc mingw: demonstrate a problem with certain absolute paths
   5:  eb711c55bb91 =   6:  30aa0704a031 archive: replace write_or_die() calls with write_block_or_die()
  10:  0ac22cffe96a =   7:  e45751270cbc diffcore-rename: speed up register_rename_src
  11:  fcc2bd33baba =   8:  f57a021b6cb9 mingw: allow absolute paths without drive prefix
  12:  09cde77e4785 =   9:  c30d697901a4 mingw: handle absolute paths in expand_user_path()
  13:  83257ebda261 =  10:  564c95caa546 archive: avoid spawning `gzip`
  14:  77c257d814bf =  11:  63d0657cd6c5 mingw: change core.fsyncObjectFiles = 1 by default
   6:  c869c2840a5a =  12:  6240e70f3914 gitk: prevent overly long command lines
   7:  1cc0e031df24 =  13:  1eb16874ce3d clean: do not traverse mount points
  15:  e690af3b3b92 =  14:  b0d386988740 gitk: Escape file paths before piping to git log
  16:  f42ffd79c61f =  15:  5532a9be8ebc clean: remove mount points when possible
  17:  dc9a66b26cb3 =  16:  57f43a5559c6 config.mak.uname: PCRE1 cleanup
  19:  976677ac677a =  17:  6033e518572b mingw: move Git for Windows' system config where users expect it
   8:  b11f94ba22e4 =  18:  ffc1722abcaa vcpkg_install: detect lack of Git
  22:  938bd1d15361 =  19:  ed8268d2ee32 config: normalize the path of the system gitconfig
  18:  dad1b69548e9 =  20:  aadf81b4f89d vcpkg_install: add comment regarding slow network connections
  25:  43f50ec43cfb =  21:  05cacbafd704 mingw: include the Python parts in the build
  26:  45b8dfebb82a =  22:  00ad703153bf Config option to disable side-band-64k for transport
  27:  ddc5443eae18 =  23:  237c01d16173 mingw: make sure `errno` is set correctly when socket operations fail
  20:  49efbd7fd7bc =  24:  de99081116c3 mingw: demonstrate a `git add` issue with NTFS junctions
  21:  6bc4a0dd6e28 =  25:  ee8274f353bd mingw: ensure valid CTYPE
  23:  b1653d23d4c5 =  26:  66be58452988 strbuf_realpath(): use platform-dependent API if available
  24:  36591346afdd =  27:  8f1d8a3f0718 mingw: allow `git.exe` to be used instead of the "Git wrapper"
  28:  7b7f0f383548 =  28:  6d35088d04f8 mingw: do resolve symlinks in `getcwd()`
  29:  917095c3a53d =  29:  a50d8fc143f7 mingw: fix fatal error working on mapped network drives on Windows
  30:  c7afd5be4d93 =  30:  c5b0e45a18ed clink.pl: fix MSVC compile script to handle libcurl-d.lib
  31:  b2da22b46dc9 =  31:  f6cb84546bcc mingw: implement a platform-specific `strbuf_realpath()`
  37:  0171b2940ffc =  32:  90c907270c59 vcxproj: unclash project directories with build outputs
  38:  b4ab070facca =  33:  307d6424d471 t5505/t5516: allow running without `.git/branches/` in the templates
  32:  a20ba9a6236c =  34:  2a750d799ffe tests: exercise the RUNTIME_PREFIX feature
  33:  cf5f95159736 =  35:  853878b5a925 credential.c: fix credential reading with regards to CR/LF
  34:  48fd3d8bd71b =  36:  800f2816e914 http: use new "best effort" strategy for Secure Channel revoke checking
  35:  b5c4b1ab2e23 =  37:  4e365f78734f [fix] Gitk fails to open on a bare Git repository on Windows
  36:  e26c53bf6eee =  38:  37827d395d95 mingw: improve performance of mingw_unlink()
  39:  642ba620469c =  39:  188f2244e50f t5505/t5516: fix white-space around redirectors
  40:  98016f602640 =  40:  b65aededef7e git-gui: provide question helper for retry fallback on Windows
  41:  a3b1444e576f =  41:  6ecf4d0c2360 git gui: set GIT_ASKPASS=git-gui--askpass if not set yet
  47:  ede0443ab3bc =  42:  f58fd40ec258 respect core.hooksPath, falling back to .git/hooks
  42:  e6dbf15b2ddf =  43:  fcb44872bf68 gitk: Unicode file name support
  43:  c3d0c25214ff =  44:  28b4b7027bd6 git-gui--askyesno: fix funny text wrapping
  44:  4d3293b6e9bc =  45:  68c9c0522b46 gitk: Use an external icon file on Windows
  45:  65e86bf53e9e =  46:  0945c77a8a74 git-gui--askyesno: allow overriding the window title
  46:  9f0210662371 =  47:  3dd1c7c8363c gitk: fix arrow keys in input fields with Tcl/Tk >= 8.6
  48:  d0d2626367e1 =  48:  a2c16f01384e git-gui--askyesno (mingw): use Git for Windows' icon, if available
  49:  e81e14d23752 =  49:  e5b9e0df7bc3 gitk: make the "list references" default window width wider
  59:  4c0efee9aace =  50:  f758db7d9428 Allow `add -p` and `add -i` with a large number of files
  61:  f046dcd1788b =  51:  1e91fc405baf t3701: verify that we can add *lots* of files interactively
  50:  ee104b96bb83 =  52:  42f2c23ab856 Win32: make FILETIME conversion functions public
  51:  8524b8279cb0 =  53:  34e5a8c37de7 Win32: dirent.c: Move opendir down
  52:  07a8c0a22eb5 =  54:  5ac639096058 mingw: make the dirent implementation pluggable
  53:  85390a5bb6c0 =  55:  9c5f3fe8a02e Win32: make the lstat implementation pluggable
  54:  aca8b17a1e7d =  56:  e2c9916e792f add infrastructure for read-only file system level caches
  55:  0e99f43590b2 =  57:  1f19fe1202ec mingw: add a cache below mingw's lstat and dirent implementations
  56:  d128dd4b0b8e =  58:  20da315e2b07 fscache: load directories only once
  57:  4c731c940065 =  59:  cb8185c5f3ff fscache: add key for GIT_TRACE_FSCACHE
  58:  a22c50cf920b =  60:  7e56403ff27b fscache: remember not-found directories
  60:  8fa7520368b7 =  61:  6ec8028bd486 fscache: add a test for the dir-not-found optimization
  62:  87b585816a92 =  62:  cda9e9dbce6e add: use preload-index and fscache for performance
  63:  fe318db27d3c =  63:  bd1ded03b330 dir.c: make add_excludes aware of fscache during status
  64:  9c5bb0dde13f =  64:  d6c5b0d4eea6 fscache: make fscache_enabled() public
  65:  69cd473dc0fa =  65:  a5591cd81c68 dir.c: regression fix for add_excludes with fscache
  66:  3b77336696fe =  66:  6fdc593fa6b7 fetch-pack.c: enable fscache for stats under .git/objects
  67:  d8f4dee9f425 =  67:  4630b80af0e2 checkout.c: enable fscache for checkout again
  68:  71a73b575d79 =  68:  edb4041ba62d Enable the filesystem cache (fscache) in refresh_index().
  69:  60990e36c18c =  69:  7ebc7bbf15ce fscache: use FindFirstFileExW to avoid retrieving the short name
  70:  7f622c6f49a5 =  70:  9e4736e4989f status: disable and free fscache at the end of the status command
  71:  569d59d4940b =  71:  2bc4ac0f5222 fscache: add GIT_TEST_FSCACHE support
  72:  296be8bdc99e =  72:  952973e3f7e2 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.
  73:  2ad2bb93baba =  73:  241ffbbcce9d fscache: add fscache hit statistics
  74:  ae6d1fadeaa8 =  74:  e57c68039039 mem_pool: add GIT_TRACE_MEMPOOL support
  75:  6377e551d210 =  75:  616c41a429c5 fscache: fscache takes an initial size
  76:  2179d8ebab0e =  76:  0788ce0facb6 fscache: update fscache to be thread specific instead of global
  77:  5b530192d56e =  77:  c028f01d0371 fscache: teach fscache to use mempool
  78:  6a5f1b1f7b90 =  78:  4cc18cd6f71c fscache: make fscache_enable() thread safe
  79:  26e92b74fa82 =  79:  4d2da9071a31 fscache: teach fscache to use NtQueryDirectoryFile
  80:  a6ad314bca0c =  80:  3252f22be788 unpack-trees: enable fscache for sparse-checkout
  81:  7bf567628be7 =  81:  d96b9645c91c fscache: remember the reparse tag for each entry
  82:  e8262a3880d2 =  82:  d27fce1345e2 fscache: implement an FSCache-aware is_mount_point()
  83:  c62d6ef52ce9 !  83:  b902048e9d67 clean: make use of FSCache
    @@ builtin/clean.c: int cmd_clean(int argc, const char **argv, const char *prefix)
      		die(_("index file corrupt"));
     +	enable_fscache(active_nr);
      
    - 	if (!ignored)
    - 		setup_standard_excludes(&dir);
    + 	pl = add_pattern_list(&dir, EXC_CMDL, "--exclude option");
    + 	for (i = 0; i < exclude_list.nr; i++)
     @@ builtin/clean.c: int cmd_clean(int argc, const char **argv, const char *prefix)
      		}
      	}
  84:  54f66b9d05fe =  84:  e129a290b2cf pack-objects (mingw): demonstrate a segmentation fault with large deltas
  85:  ebf92b7448bb =  85:  4407376c5ae6 mingw: support long paths
  86:  9d7faffe34b9 =  86:  0def528f203d Win32: fix 'lstat("dir/")' with long paths
  87:  764bc4e8d378 !  87:  ecf3a34629e3 mingw: ensure that core.longPaths is handled *always*
    @@ builtin/rev-parse.c: static int cmd_parseopt(int argc, const char **argv, const
     
      ## builtin/show-index.c ##
     @@
    - #include "builtin.h"
      #include "cache.h"
      #include "pack.h"
    + #include "parse-options.h"
     +#include "config.h"
      
    - static const char show_index_usage[] =
    - "git show-index";
    + static const char *const show_index_usage[] = {
    + 	"git show-index [--object-format=<hash-algorithm>]",
     @@ builtin/show-index.c: int cmd_show_index(int argc, const char **argv, const char *prefix)
    + 		OPT_END()
    + 	};
      
    - 	if (argc != 1)
    - 		usage(show_index_usage);
     +	git_config(git_default_config, NULL);
    - 	if (fread(top_index, 2 * 4, 1, stdin) != 1)
    - 		die("unable to read header");
    - 	if (top_index[0] == htonl(PACK_IDX_SIGNATURE)) {
    + 	argc = parse_options(argc, argv, prefix, show_index_options, show_index_usage, 0);
    + 
    + 	if (hash_name) {
     
      ## builtin/show-ref.c ##
     @@
  88:  56a6fb7f5b0d =  88:  cdebb76751df mingw: Support `git_terminal_prompt` with more terminals
  89:  f8128062816e =  89:  72d5d3d837de compat/terminal.c: only use the Windows console if bash 'read -r' fails
  90:  0ad4bcb88ef4 =  90:  611ebc7029fd mingw (git_terminal_prompt): do fall back to CONIN$/CONOUT$ method
  91:  a1be23ca72e6 =  91:  98930a83b1b4 Unbreak interactive GPG prompt upon signing
  92:  045b952e5c4f =  92:  c3a4f79fa69c mingw: disable t9020
  93:  49745f77285b =  93:  68f62ec44bbb strbuf_readlink: don't call readlink twice if hint is the exact link size
  94:  7f3c53a31309 !  94:  4bfb89c21698 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_fd(struct strbuf *sb, int fd)
    - 	return sb->len ? write(fd, sb->buf, sb->len) : 0;
    +@@ strbuf.c: ssize_t strbuf_write(struct strbuf *sb, FILE *f)
    + 	return sb->len ? fwrite(sb->buf, 1, sb->len, f) : 0;
      }
      
     -#define STRBUF_MAXLINK (2*PATH_MAX)
  95:  c8e3ceab6971 =  95:  cf718164e56f lockfile.c: use is_dir_sep() instead of hardcoded '/' checks
  96:  31a833134b3b =  96:  d4dd9ccd0420 Win32: don't call GetFileAttributes twice in mingw_lstat()
  97:  13509868ee55 =  97:  e17275172d91 Win32: implement stat() with symlink support
  98:  3ee05ca26a8b =  98:  9f541505ead4 Win32: remove separate do_lstat() function
  99:  9237487450f1 =  99:  1dbcc91f9da5 Win32: let mingw_lstat() error early upon problems with reparse points
 100:  efe9bc0cf5a5 = 100:  11841cbea88e mingw: teach fscache and dirent about symlinks
 101:  181e463cc1fa = 101:  64124e1140f6 Win32: lstat(): return adequate stat.st_size for symlinks
 102:  a4f5623191f0 = 102:  2983f3998c90 Win32: factor out retry logic
 103:  378fe88560b4 = 103:  054bbb6223ac Win32: change default of 'core.symlinks' to false
 104:  207dd780846c = 104:  073cb99d5812 Win32: add symlink-specific error codes
 105:  3b27e1f18567 = 105:  010f7af90934 Win32: mingw_unlink: support symlinks to directories
 106:  8149ebe34a6a = 106:  cf5d422c83ac Win32: mingw_rename: support renaming symlinks
 107:  98b6b87b8fc2 = 107:  cbd792d3b6e4 Win32: mingw_chdir: change to symlink-resolved directory
 108:  a1ce9f4d077c = 108:  5b75583afc71 Win32: implement readlink()
 109:  dd57ef167f05 = 109:  1cc99533c152 Win32: implement basic symlink() functionality (file symlinks only)
 110:  eb984b007560 = 110:  005176f15119 Win32: symlink: add support for symlinks to directories
 111:  f33384710ff9 = 111:  d52c7c08b4e0 mingw: try to create symlinks without elevated permissions
 112:  1c64572d1af5 = 112:  5d2654b2a50e mingw: emulate stat() a little more faithfully
 126:  8d0567f4aa58 = 113:  eec5a2e29692 mingw: introduce code to detect whether we're inside a Windows container
 128:  b4ac051b30e6 = 114:  b6e8f6b6dc56 mingw: when running in a Windows container, try to rename() harder
 130:  392744a90134 = 115:  42940e4c2db7 mingw: move the file_attr_to_st_mode() function definition
 132:  a98ad18cd617 = 116:  65018e30614b mingw: Windows Docker volumes are *not* symbolic links
 113:  393ff5031d14 = 117:  9210a4ed07fa Win32: symlink: move phantom symlink creation to a separate function
 114:  85b5b3b1b03a = 118:  6c66065dd5e6 Introduce helper to create symlinks that knows about index_state
 115:  d248026a06bc = 119:  90a669f9b00e mingw: allow to specify the symlink type in .gitattributes
 116:  d4073163eefd = 120:  b2e2db2d58af Win32: symlink: add test for `symlink` attribute
 117:  445006954a4a = 121:  863a7d8a67d2 transport-helper: prefer Git's builtins over dashed form
 118:  13ac636c298a = 122:  66b14225d66b mingw: explicitly specify with which cmd to prefix the cmdline
 119:  bb733c8363d3 = 123:  e1250d621fbb mingw: when path_lookup() failed, try BusyBox
 154:  3681d27b6fc4 = 124:  5e78e92addd5 mingw: lstat: compute correct size for symlinks
 120:  2e339a327d8b = 125:  c2a7c0ff9900 test-lib: avoid unnecessary Perl invocation
 121:  fc5d0f09e981 = 126:  16b5713637e3 tests: replace mingw_test_cmp with a helper in C
 122:  b89a83909c77 = 127:  1cf726541660 test-tool: learn to act as a drop-in replacement for `iconv`
 123:  d01c0b0cdfc6 = 128:  bd47a32545d9 tests(mingw): if `iconv` is unavailable, use `test-helper --iconv`
 124:  505f7e6f628b = 129:  0c255e6d6137 tests: use t/diff-lib/* consistently
 125:  a4edfa1b8cd8 = 130:  91b22f7527c1 gitattributes: mark .png files as binary
 127:  1d5e2f1f7254 = 131:  044b867a5275 tests: move test PNGs into t/diff-lib/
 129:  1301d6f22718 = 132:  a04663f1381b tests: only override sort & find if there are usable ones in /usr/bin/
 131:  26b5bdf2e120 = 133:  1d3a3bea5ec1 tests: use the correct path separator with BusyBox
 133:  c3fcdaa85b96 = 134:  1dd4aaa5ecf9 mingw: only use Bash-ism `builtin pwd -W` when available
 134:  73662d163658 = 135:  c28386af7e7a tests (mingw): remove Bash-specific pwd option
 135:  3f0e49ce7efe = 136:  6b8baa9eb978 test-lib: add BUSYBOX prerequisite
 136:  e4dcbcbaa485 = 137:  9bffc03c895c t0021: use Windows path when appropriate
 137:  bfa1d0a1d8b2 = 138:  809072a503d2 t5003: use binary file from t/diff-lib/
 138:  c0ed785cea9b = 139:  67444773cc23 t5532: workaround for BusyBox on Windows
 139:  1f499ef97987 = 140:  c8728e124277 t5605: special-case hardlink test for BusyBox-w32
 140:  8c8493c61c42 = 141:  aa5f27b65ad4 t5813: allow for $PWD to be a Windows path
 142:  7c2d4b386a02 = 142:  cc8160c8244b t9200: skip tests when $PWD contains a colon
 145:  8437430f0c60 = 143:  c05eec6e664d mingw: add a Makefile target to copy test artifacts
 141:  fb13cac38cdb = 144:  485dfcc9572e status: carry the --no-lock-index option for backwards-compatibility
 143:  d81816e40c15 = 145:  d58fe8527f83 mingw: kill child processes in a gentler way
 144:  e42d68bd2d8d = 146:  95d4082e95df status: reinstate --show-ignored-directory as a deprecated option
 146:  7310cd90bd81 = 147:  cb26c8904ac2 mingw: really handle SIGINT
 155:  6ddf97a43fd6 = 148:  44f29e4fc5cc status: verify that --show-ignored-directory prints a warning
 156:  872bff637ed1 = 149:  5438f8d8c62f reset: reinstate support for the deprecated --stdin option
 147:  7e9decd0a44c = 150:  c92a716d01da Modify the Code of Conduct for Git for Windows
 148:  9c99fb213e75 = 151:  adfdb7bef014 CONTRIBUTING.md: add guide for first-time contributors
 149:  91beb154f6a4 = 152:  981b9c05a9c0 README.md: Add a Windows-specific preamble
 150:  38d0f6ab8b74 = 153:  299b99742676 Add an issue template
 151:  d2b75ac64be9 = 154:  6facc8541381 Modify the GitHub Pull Request template (to reflect Git for Windows)
 152:  0a32b325427d = 155:  6375bb68a808 .github: Add configuration for the Sentiment Bot
 153:  9da5406dc90d = 156:  5d08827dcb47 Document how $HOME is set on Windows
 157:  cb25a3c36d8a = 157:  70e339083cf7 SECURITY.md: document Git for Windows' policies
-158:  8422b5e2070c (upstream: bb0e43d8a1ae) <   -:  ------------ msvc: fix "REG_STARTEND" issue
 159:  b24ae6b81991 = 158:  d393fecfef69 mingw: special-case index entries for symlinks with buggy size
 160:  aeb92543162d = 159:  11b58b714027 fscache: compute correct symlink size in `lstat()`
 161:  3c88881ab77a ! 160:  9c87b90d1a82 Mirror master and main
    @@ .github/workflows/mirror-master-and-main.yml (new)
     +    runs-on: ubuntu-latest
     +    steps:
     +      - name: Partial clone
    -+        run: git clone --bare --depth=100 --single-branch --filter=blob:none ${{ github.event.repository.html_url }} .
    ++        env:
    ++          ref: ${{ github.event.ref }}
    ++        run: git clone --bare --depth=100 --single-branch --branch ${ref#refs/heads/} --filter=blob:none ${{ github.event.repository.html_url }} .
     +      - name: Push
     +        run: |
     +          git config http.https://github.com/.extraheader "Authorization: Basic $(echo -n x-access-token:${{ github.token }} | base64 --wrap=0)"
-162:  a98b073ae2b9 <   -:  ------------ fixup! Mirror master and main
 163:  912269f2229a = 161:  0b2682c33f08 git add -i: handle CR/LF line endings in the interactive input
 164:  d508f45ebfed = 162:  c1021da8d255 commit: accept "scissors" with CR/LF line endings
 165:  7598cfd0cc1b = 163:  37f9146345a4 mingw_strbuf_realpath(): handle case of non existent last path component
-166:  fed6a08a5aad (upstream: feea6946a5b7) <   -:  ------------ diff-files: treat "i-t-a" files as "not-in-index"
-167:  bc65d8424a4e (upstream: 85953a318734) <   -:  ------------ diff-files --raw: show correct post-image of intent-to-add files
-168:  0c87084539f5 (upstream: 3080c5098049) <   -:  ------------ difftool -d: ensure that intent-to-add files are handled correctly

@dscho dscho merged commit 3d77973 into git-for-windows:main Jul 15, 2020
@dscho dscho deleted the rebase-to-v2.28.0-rc0 branch July 15, 2020 21:38
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.