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

[DO NOT MERGE] prepare for vfs 2.23.0 #165

Merged
merged 89 commits into from
Aug 20, 2019

Conversation

dscho
Copy link
Member

@dscho dscho commented Jul 30, 2019

This PR is set up to prepare for v2.23.0: its target branch tracks git-for-windows#2276, rebasing VFS for Git's patches on top of it as frequently as possible.

The topic branch ahead-behind-and-serialized-status was partially applied upstream, as jh/status-aheadbehind:

The topic branches show-forced-updates and forced-updates-after-branch-list were applied upstream, as ds/fetch-disable-force-notice:

The topic branches adding trace2 regions were all squashed into a single topic branch: vfs-trace2.

The topic branch derrickstolee/midx-expire/ms made it into upstream as ds/midx-expire-repack:

Also, the fix to compile with GCC v9.x made it upstream: 8fc2610 was applied as 9dae4fe.

Finally, 2023a0c was dropped (reverted) via 050b8ff.

The full range-diff relative to vfs-2.22.0:

 1:  e930b847956 =  1:  2a45a4cec56 reset --stdin: trim carriage return from the paths
 2:  eebc20e89ed !  2:  ef26e2784e6 gvfs: start by adding the -gvfs suffix to the version
    @@ -11,8 +11,8 @@
      #!/bin/sh
      
      GVF=GIT-VERSION-FILE
    --DEF_VER=v2.22.0
    -+DEF_VER=v2.22.0.vfs.1.1
    +-DEF_VER=v2.23.0-rc0
    ++DEF_VER=v2.23.0-rc0.vfs.1.1
      
      LF='
      '
 3:  556f397fffc =  3:  faa459e3f8c gvfs: ensure that the version is based on a GVFS tag
 4:  c1660a48a08 =  4:  3bfe3aa54dc gvfs: add a GVFS-specific header file
 5:  144792a8241 !  5:  b0869438c0a gvfs: add the core.gvfs config setting
    @@ -38,9 +38,9 @@
      --- a/config.c
      +++ b/config.c
     @@
    - #include "utf8.h"
      #include "dir.h"
      #include "color.h"
    + #include "refs.h"
     +#include "gvfs.h"
      
      struct config_source {
 6:  06cecbb2c2f =  6:  dcbd7457aa7 gvfs: add the feature to skip writing the index' SHA-1
 7:  a20efb9e0ce =  7:  65efdb0204d gvfs: add the feature that blobs may be missing
 8:  504a085b46c =  8:  c59f67c5592 gvfs: prevent files to be deleted outside the sparse checkout
 9:  ff9989f89d9 =  9:  1b85dbcc9b1 gvfs: optionally skip reachability checks/upload pack during fetch
10:  0677b7547f7 = 10:  8e4dc6dcd44 gvfs: ensure all filters and EOL conversions are blocked
11:  033080ac411 = 11:  ab0759ea6cc Add a new run_hook_argv() function
12:  8e05a37fdf6 = 12:  6bc3c8ea597 gvfs: allow "virtualizing" objects
13:  330dd402628 = 13:  a007ea96036 Hydrate missing loose objects in check_and_freshen()
14:  256c87aa596 = 14:  7976dec394b Add support for read-object as a background process to retrieve missing objects
15:  7ad73566cbb = 15:  6dc99d86784 sha1_file: when writing objects, skip the read_object_hook
16:  0d3188aed4d = 16:  ef39ddffcf5 gvfs: add global command pre and post hook procs
17:  7ae4285340e = 17:  1b63957b4d0 Allow hooks to be run before setup_git_directory()
18:  24e07966f0f = 18:  0c349133e6b gvfs: introduce pre/post command hooks
19:  c0247353459 = 19:  0d218e461c0 t0400: verify that the hook is called correctly from a subdirectory
22:  48204a933af = 20:  0cc0e5d9d18 sparse-checkout: update files with a modify/delete conflict
23:  dab1bdac94e = 21:  0dda3a82d8b sparse-checkout: avoid writing entries with the skip-worktree bit
20:  bbac5405c30 = 22:  89fca0e7349 Pass PID of git process to hooks.
24:  b716c6fcb78 = 23:  7e8361fac74 Fix reset when using the sparse-checkout feature.
21:  515fb2ef257 = 24:  c3d4b0c52c1 pre-command: always respect core.hooksPath
25:  f63e5593bed = 25:  42e5766d159 Do not remove files outside the sparse-checkout
26:  f3633d21572 = 26:  01aba053027 gvfs: refactor loading the core.gvfs config value
27:  739c162901d = 27:  7a66066a216 cache-tree: remove use of strbuf_addf in update_one
28:  9bbfc662d34 = 28:  b0c88147c96 status: add status serialization mechanism
29:  90258dd6abb <  -:  ----------- status: add status.aheadbehind setting
30:  74abe74ba3c = 29:  c5d61c4e257 Teach ahead-behind and serialized status to play nicely together
31:  5ce9921f8c7 <  -:  ----------- status: add warning when a/b calculation takes too long for long/normal format
32:  1c772c53eb6 <  -:  ----------- status: ignore status.aheadbehind in porcelain formats
33:  9935532f4d4 = 30:  4af411a4505 status: serialize to path
34:  244a80a9b58 = 31:  9efeff19d70 status: reject deserialize in V2 and conflicts
35:  000c99d95f7 <  -:  ----------- fetch: Add --[no-]show-forced-updates argument
36:  9d1b32eafd8 <  -:  ----------- fetch: Warn about forced updates after branch list
37:  dba6f56f69e <  -:  ----------- push: add --[no-]show-forced-updates passthrough to fetch
38:  ba0012d1875 <  -:  ----------- fetch: add documentation for --[no-]show-forced-updates
39:  1c159ad53dd = 32:  af629373cfb Add virtual file system settings and hook proc
40:  8e19a288543 = 33:  cc6dfa428f1 Update the virtualfilesystem support
41:  3edccc3a58c = 34:  0a92474b599 virtualfilesystem: don't run the virtual file system hook if the index has been redirected
42:  45cfa011bae = 35:  fae341b0b4a virtualfilesystem: fix bug with symlinks being ignored
43:  d02066d1d69 = 36:  68e36471735 virtualfilesystem: check if directory is included
44:  c47e476957d = 37:  7c78dcc90a0 vfs: fix case where directories not handled correctly
45:  3c3c86cb2bf = 38:  6470110828e commit: add generation to pop_most_recent_commit()
46:  8e08fe123b6 = 39:  1914194e2ea status: fix rename reporting when using serialization cache
47:  018b9f01c13 = 40:  5c3c30ccdbb status: add comments for ahead_behind_flags in serialization
48:  9d2ae900e96 = 41:  e54e7f9f957 serialize-status: serialize global and repo-local exclude file metadata
49:  a50f13a74a1 = 42:  7c83db70818 status: deserialization wait
50:  cc8aeb22856 = 43:  6c9d46bfed8 rebase/stash: make post-command hook work again
51:  cb7747a5fc8 = 44:  40cceb04b8b fsck: use ERROR_MULTI_PACK_INDEX
52:  634c47f992e = 45:  28593a46e7f send-pack: do not check for sha1 file when GVFS_MISSING_OK set
53:  7d4a9276096 ! 46:  480ae80da9d gvfs: block unsupported commands when running in a GVFS repo
    @@ -137,9 +137,9 @@
      	{ "stripspace", cmd_stripspace },
     -	{ "submodule--helper", cmd_submodule__helper, RUN_SETUP | SUPPORT_SUPER_PREFIX | NO_PARSEOPT },
     +	{ "submodule--helper", cmd_submodule__helper, RUN_SETUP | SUPPORT_SUPER_PREFIX | NO_PARSEOPT | BLOCK_ON_GVFS_REPO },
    + 	{ "switch", cmd_switch, RUN_SETUP | NEED_WORK_TREE },
      	{ "symbolic-ref", cmd_symbolic_ref, RUN_SETUP },
      	{ "tag", cmd_tag, RUN_SETUP | DELAY_PAGER_CONFIG },
    - 	{ "unpack-file", cmd_unpack_file, RUN_SETUP | NO_PARSEOPT },
     @@
      	{ "verify-tag", cmd_verify_tag, RUN_SETUP },
      	{ "version", cmd_version },
54:  a3dce463fd1 = 47:  e95588218ff BRANCHES.md: Add explanation of branches and using forks
55:  d9fc1d176b8 = 48:  417a85b81a4 gvfs:trace2:data: add trace2 tracing around read_object_process
56:  f3670bb8cd2 = 49:  11869875fd7 gvfs:trace2:data: status deserialization information
57:  57ac4910f95 = 50:  23e3c084fdf gvfs:trace2:data: status serialization
58:  091250b9469 = 51:  3505ecaa146 gvfs:trace2:data: add vfs stats
59:  d4bf663ba52 = 52:  26e8cf8af16 trace2: refactor setting process starting time
60:  1dcb187f2f1 = 53:  65df2154a8c trace2:gvfs:experiment: clear_ce_flags_1
61:  2023a0c728d <  -:  ----------- trace2:gvfs:experiment: prime_cache_tree
62:  abfecf6dad1 = 54:  0c991090621 trace2:gvfs:experiment: traverse_trees
63:  3a9dae0a7e8 ! 55:  03e02d311c2 trace2:gvfs:experiment: report_tracking
    @@ -8,7 +8,7 @@
      --- a/builtin/checkout.c
      +++ b/builtin/checkout.c
     @@
    - 	remove_branch_state(the_repository);
    + 	remove_branch_state(the_repository, !opts->quiet);
      	strbuf_release(&msg);
      	if (!opts->quiet &&
     -	    (new_branch_info->path || (!opts->force_detach && !strcmp(new_branch_info->name, "HEAD"))))
80:  99d27031c1f = 56:  62e1f19b439 trace2:gvfs:experiment: read_cache: annotate thread usage in read-cache
81:  4e28740f033 = 57:  d4fb793705d trace2:gvfs:experiment: read-cache: time read/write of cache-tree extension
83:  16290c1d076 = 58:  38a7d7fc27f trace2:gvfs:experiment: add prime_cache_tree region
85:  4f1fe1bec92 = 59:  f4a33fdd470 trace2:gvfs:experiment: add region to apply_virtualfilesystem()
86:  39bcfc4c9bb = 60:  15426575c1b trace2:gvfs:experiment: add region around unpack_trees()
87:  1c2e3dc1429 = 61:  64ca0734df2 trace2:gvfs:experiment: add region to cache_tree_fully_valid()
88:  8d2815d660f ! 62:  200012b9312 trace2:gvfs:experiment: add unpack_entry() counter to unpack_trees() and report_tracking()
    @@ -8,13 +8,13 @@
      --- a/builtin/checkout.c
      +++ b/builtin/checkout.c
     @@
    - #include "submodule-config.h"
    - #include "submodule.h"
    - #include "advice.h"
    + #include "unpack-trees.h"
    + #include "wt-status.h"
    + #include "xdiff-interface.h"
     +#include "packfile.h"
      
    - static int checkout_optimize_new_branch;
    - 
    + static const char * const checkout_usage[] = {
    + 	N_("git checkout [<options>] <branch>"),
     @@
      	strbuf_release(&msg);
      	if (!opts->quiet &&
89:  7130ef05acb = 63:  fb50ae88dee trace2:gvfs:experiment: increase default event depth for unpack-tree data
90:  4ff78c2e612 = 64:  4a92a2aee28 trace2:gvfs:experiment: add data for check_updates() in unpack_trees()
91:  996733752e7 = 65:  f64e1ed2a5f Trace2:gvfs:experiment: capture more 'tracking' details
64:  54a6d821d49 = 66:  83eac6bda18 merge-recursive: avoid confusing logic in was_dirty()
65:  1b043b58d59 = 67:  2400bb619cf merge-recursive: add some defensive coding to was_dirty()
66:  8e20d94f736 = 68:  efa09adbda1 merge-recursive: teach was_dirty() about the virtualfilesystem
67:  322f9eb1ddd <  -:  ----------- repack: refactor pack deletion for future use
68:  6b2f120287e <  -:  ----------- Docs: rearrange subcommands for multi-pack-index
69:  276c1efc4d4 <  -:  ----------- multi-pack-index: prepare for 'expire' subcommand
70:  955c9497c0e <  -:  ----------- midx: simplify computation of pack name lengths
71:  6ed5be14d6c <  -:  ----------- midx: refactor permutation logic and pack sorting
72:  e6408b26c29 <  -:  ----------- multi-pack-index: implement 'expire' subcommand
73:  b500c21490d <  -:  ----------- multi-pack-index: prepare 'repack' subcommand
74:  1a5f9bcab6e <  -:  ----------- midx: implement midx_repack()
75:  298159366dc <  -:  ----------- multi-pack-index: test expire while adding packs
76:  7e6e0b63571 <  -:  ----------- midx: add test that 'expire' respects .keep files
77:  4ab0bc5a69b <  -:  ----------- t5319-multi-pack-index.sh: test batch size zero
79:  bebbc42e2aa = 69:  b3c5cdde649 status: deserialize with -uno does not print correct hint
78:  58ad01641f8 = 70:  855ed11ea17 backwards-compatibility: support the post-indexchanged hook
82:  050b8ff8049 <  -:  ----------- fixup! trace2:gvfs:experiment: prime_cache_tree
84:  8fc2610a158 <  -:  ----------- config: avoid calling `labs()` on too-large data type

(As you can see, there are currently 84 patches, i.e. non-merge commits, on top of Git for Windows in vfs-2.22.0, and only 70 in the candidate for vfs-2.23.0, meaning that we managed to upstream 10 patches (two patches were about trace2'ing prime_cache_tree() and then reverting it, so they don't count 😃.)

@dscho dscho changed the title [DO NOT MERGE] prepare for vfs 2.22.0 [DO NOT MERGE] prepare for vfs 2.23.0 Jul 30, 2019
@derrickstolee
Copy link
Collaborator

@dscho I think you forgot the 32 commits from ds/commit-graph-incremental that we merged into vfs-2.22.0 but were not in v2.22.0.windows.1. ;) They just were the identical commits from upstream, so they did not show up in your rebase.

@dscho
Copy link
Member Author

dscho commented Jul 30, 2019

I think you forgot the 32 commits from ds/commit-graph-incremental that we merged into vfs-2.22.0 but were not in v2.22.0.windows.1. ;) They just were the identical commits from upstream, so they did not show up in your rebase.

The command-line I used was: git range-diff --creation-factor=100 microsoft/vfs-2.23.0 microsoft/vfs-2.22.0 prepare-for-vfs-v2.23.0, and those 32 commits must have been excluded from that because they were identical ;-) Thanks for pointing that out!

Kevin Willford and others added 19 commits August 17, 2019 23:30
While using the reset --stdin feature on windows path added may have a
\r at the end of the path that wasn't getting removed so didn't match
the path in the index and wasn't reset.

Signed-off-by: Kevin Willford <kewillf@microsoft.com>
Signed-off-by: Saeed Noursalehi <sanoursa@microsoft.com>
Signed-off-by: Johannes Schindelin <johasc@microsoft.com>
This header file will accumulate GVFS-specific definitions.

Signed-off-by: Kevin Willford <kewillf@microsoft.com>
This does not do anything yet. The next patches will add various values
for that config setting that correspond to the various features
offered/required by GVFS.

Signed-off-by: Kevin Willford <kewillf@microsoft.com>
The two existing members of the run_hook*() family, run_hook_ve() and
run_hook_le(), are good for callers that know the precise number of
parameters already. Let's introduce a new sibling that takes an argv
array for callers that want to pass a variable number of parameters.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
This takes a substantial amount of time, and if the user is reasonably
sure that the files' integrity is not compromised, that time can be saved.

Git no longer verifies the SHA-1 by default, anyway.

Signed-off-by: Kevin Willford <kewillf@microsoft.com>
The idea is to allow blob objects to be missing from the local repository,
and to load them lazily on demand.

After discussing this idea on the mailing list, we will rename the feature
to "lazy clone" and work more on this.

Signed-off-by: Ben Peart <Ben.Peart@microsoft.com>
Signed-off-by: Kevin Willford <kewillf@microsoft.com>
Hydrate missing loose objects in check_and_freshen() when running
virtualized. Add test cases to verify read-object hook works when
running virtualized.

This hook is called in check_and_freshen() rather than
check_and_freshen_local() to make the hook work also with alternates.

Helped-by: Kevin Willford <kewillf@microsoft.com>
Signed-off-by: Ben Peart <Ben.Peart@microsoft.com>
Prevent the sparse checkout to delete files that were marked with
skip-worktree bit and are not in the sparse-checkout file.

This is because everything with the skip-worktree bit turned on is being
virtualized and will be removed with the change of HEAD.

There was only one failing test when running with these changes that was
checking to make sure the worktree narrows on checkout which was
expected since we would no longer be narrowing the worktree.

Signed-off-by: Kevin Willford <kewillf@microsoft.com>
…ng objects

This commit converts the existing read_object hook proc model for
downloading missing blobs to use a background process that is started
the first time git encounters a missing blob and stays running until git
exits.  Git and the read-object process communicate via stdin/stdout and
a versioned, capability negotiated interface as documented in
Documentation/technical/read-object-protocol.txt.  The advantage of this
over the previous hook proc is that it saves the overhead of spawning a
new hook process for every missing blob.

The model for the background process was refactored from the recent git
LFS work.  I refactored that code into a shared module (sub-process.c/h)
and then updated convert.c to consume the new library.  I then used the
same sub-process module when implementing the read-object background
process.

Signed-off-by: Ben Peart <Ben.Peart@microsoft.com>
While performing a fetch with a virtual file system we know that there
will be missing objects and we don't want to download them just because
of the reachability of the commits.  We also don't want to download a
pack file with commits, trees, and blobs since these will be downloaded
on demand.

This flag will skip the first connectivity check and by returning zero
will skip the upload pack. It will also skip the second connectivity
check but continue to update the branches to the latest commit ids.

Signed-off-by: Kevin Willford <kewillf@microsoft.com>
If we are going to write an object there is no use in calling
the read object hook to get an object from a potentially remote
source.  We would rather just write out the object and avoid the
potential round trip for an object that doesn't exist.

This change adds a flag to the check_and_freshen() and
freshen_loose_object() functions' signatures so that the hook
is bypassed when the functions are called before writing loose
objects. The check for a local object is still performed so we
don't overwrite something that has already been written to one
of the objects directories.

Based on a patch by Kevin Willford.

Signed-off-by: Johannes Schindelin <johasc@microsoft.com>
Ensure all filters and EOL conversions are blocked when running under
GVFS so that our projected file sizes will match the actual file size
when it is hydrated on the local machine.

Signed-off-by: Ben Peart <Ben.Peart@microsoft.com>
This adds hard-coded call to GVFS.hooks.exe before and after each Git
command runs.

To make sure that this is only called on repositories cloned with GVFS, we
test for the tell-tale .gvfs.

Signed-off-by: Ben Peart <Ben.Peart@microsoft.com>
The use case here is to allow usage statistics to be gathered by
running hooks before and after every hook, and to make that
configurable via hooks.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
GVFS Git introduced pre-command and post-command hooks, to gather usage
statistics and to be able to adjust the worktree if necessary.

As run_hooks() implicitly calls setup_git_directory(), and that
function does surprising things to the global state (sometimes even
changing the current working directory), it cannot be used here.

This commit introduces the pre-command/post-command hooks, based on
the previous patches that culminate in support for running hooks early,
i.e. before setup_git_directory() was called.

Signed-off-by: Ben Peart <Ben.Peart@microsoft.com>
jeffhostetler and others added 23 commits August 17, 2019 23:31
Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
gvfs: block unsupported commands when running in a GVFS repo
Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
BRANCHES.md: Add explanation of branches and using forks
Add trace2_thread_start() and trace2_thread_exit() events to the worker
threads used to read the index.  This gives per-thread perf data.

These workers were introduced in:
abb4bb8 read-cache: load cache extensions on a worker thread
77ff112 read-cache: load cache entries on worker threads

Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
…ension

Add regions around code to read and write the cache-tree extension
when the index is read or written.

This is an experiment and may be dropped in future releases if
we don't need it anymore.

This experiment demonstrates that it takes more time to parse and
deserialize the cache-tree extension than it does to read the
cache-entries.

Commits [1] and [2] spreads cache-entry reading across N-1 cores
and dedicates a single core to simultaneously read the index extensions.

Local testing (on my machine) shows that reading the cache-tree extension
takes ~0.28 seconds.  The 11 cache-entry threads take ~0.08 seconds.
The main thread is blocked for 0.15 to 0.20 seconds waiting for the
extension thread to finish.

Let's use this commit to gather some telemetry and confirm this.

My point is that improvements, such as index V5 which makes the
cache entries smaller, may improve performance, but the gains may
be limited because of this extension.  And that we may need to
look inside the cache-tree extension to truly improve do_read_index()
performance.

[1] abb4bb8 read-cache: load cache extensions on a worker thread
[2] 77ff112 read-cache: load cache entries on worker threads

Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
…and report_tracking()

Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
It took this developer more than a moment to verify that was_dirty()
really returns 0 (i.e. "false") if the file was not even tracked. In
other words, the `dirty` variable that was initialized to 1 (i.e.
"true") and then negated to be returned was not helping readability.

The same holds for the final return: rather than assigning the value to
return to `dirty` and then *immediately* returning that, we can simplify
it to a single statement.
Add data for the number of files created/overwritten and deleted during the checkout.

Give proper category name to all events in unpack-trees.c and eliminate "exp".

Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
It took this developer quite a good while to understand why the current
code cannot get a `NULL` returned by `index_file_exists()`. To
un-confuse readers (and future-proof the code), let's just be safe and
check before we dereference the returned pointer.
Update tracing around report_tracking() to use 'tracking' category
rather than 'exp' category.

Add ahead/behind results from stat_tracking_info().

Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
The idea of the virtual file system really is to tell Git to avoid
accessing certain paths. This fixes the case where a given path is not
yet included in the virtual file system and we are about to write a
conflicted version of it.
Includes gvfs-specific commits from PR#115
With the "--untracked-files=complete" option status computes a
superset of the untracked files.  We use this when writing the
status cache.  If subsequent deserialize commands ask for either
the complete set or one of the "no", "normal", or "all" subsets,
it can still use the cache file because of filtering in the
deserialize parser.

When running status with the "-uno" option, the long format
status would print a "(use -u to show untracked files)" hint.

When deserializing with the "-uno" option and using a cache computed
with "-ucomplete", the "nothing to commit, working tree clean" message
would be printed instead of the hint.

It was easy to miss because the correct hint message was printed
if the cache was rejected for any reason (and status did the full
fallback).

The "struct wt_status des" structure was initialized with the
content of the status cache (and thus defaulted to "complete").
This change sets "des.show_untracked_files" to the requested
subset from the command-line or config.  This allows the long
format to print the hint.

Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
The major work on merge-recursive.c that went into v2.21.0 necessitates
an adjustment to work well with VFSforGit's virtualfilesystem hook.
…cked-hint

status: deserialize with -uno does not print correct hint
When our patches to support that hook were upstreamed, the hook's name
was eliciting some reviewer suggestions, and it was renamed to
`post-index-change`. These patches (with the new name) made it into
v2.22.0.

However, VFSforGit users may very well have checkouts with that hook
installed under the original name.

To support this, let's just introduce a hack where we look a bit more
closely when we just failed to find the `post-index-change` hook, and
allow any `post-indexchanged` hook to run instead (if it exists).
@derrickstolee derrickstolee merged commit 50a7847 into vfs-2.23.0 Aug 20, 2019
@derrickstolee
Copy link
Collaborator

(Note, this got "merged" because I updated the vfs-2.23.0 branch to be equal to prepare-for-vfs-2.23.0.)

@derrickstolee derrickstolee deleted the prepare-for-vfs-v2.23.0 branch August 20, 2019 01:35
derrickstolee added a commit to microsoft/scalar that referenced this pull request Aug 20, 2019
See microsoft/git#165 for the details of the latest rebase.

This PR is an adaptation of microsoft/VFSForGit#1389.
derrickstolee added a commit to microsoft/VFSForGit that referenced this pull request Aug 22, 2019
See microsoft/git#165 for the rebase onto v2.23.0.windows.1.

This PR has a few reactions to that update:

A newline was dropped in a message. Remove it from our expectation in a test.
Rebase now has unpredictable extra line of whitespace sometimes. However, -q doesn't work in tandem with --merge, but using GIT_QUIET=true makes the output quiet on Windows. Still doesn't work on OSX for some reason, so also ignore the error output and focus on the end-result. Use git rev-parse HEAD^{tree} to ensure we got the same resulting working directory.
FileContentsShouldMatch() used to fail if both of the files didn't exist. Something changed in v2.23.0 such that a cherry-pick loses a file in both vanilla Git and VFS for Git, so the test started failing on that path. Relax the condition, since the files do match.
KnownGitCommands needs to include restore and switch, resolving #1463.
Includes the performance fix for git checkout -b from microsoft/git#183.
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.

None yet

7 participants