Skip to content

Conversation

@dscho
Copy link
Member

@dscho dscho commented Oct 28, 2025

This updates Microsoft Git to Git for Windows v2.51.2.

Ben Peart and others added 30 commits October 28, 2025 13:14
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 <[email protected]>
Signed-off-by: Ben Peart <[email protected]>
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.

2021-10-30: Recent movement of find_hook() to hook.c required moving these
changes out of run-command.c to hook.c.

Signed-off-by: Ben Peart <[email protected]>
Signed-off-by: Johannes Schindelin <[email protected]>
Suggested by Ben Peart.

Signed-off-by: Johannes Schindelin <[email protected]>
Verify that the core.hooksPath configuration is repsected by the
pre-command hook. Original regression test was written by
Alejandro Pauly.

Signed-off-by: Matthew John Cheetham <[email protected]>
When using the sparse-checkout feature, the file might not be on disk
because the skip-worktree bit is on. This used to be a bug in the
(hence deleted) `recursive` strategy. Let's ensure that this bug does
not resurface.

Signed-off-by: Kevin Willford <[email protected]>
Signed-off-by: Johannes Schindelin <[email protected]>
The 'git worktree' command was marked as BLOCK_ON_GVFS_REPO because it
does not interact well with the virtual filesystem of VFS for Git. When
a Scalar clone uses the GVFS protocol, it enables the
GVFS_BLOCK_COMMANDS flag, since commands like 'git gc' do not work well
with the GVFS protocol.

However, 'git worktree' works just fine with the GVFS protocol since it
isn't doing anything special. It copies the sparse-checkout from the
current worktree, so it does not have performance issues.

This is a highly requested option.

The solution is to stop using the BLOCK_ON_GVFS_REPO option and instead
add a special-case check in cmd_worktree() specifically for a particular
bit of the 'core_gvfs' global variable (loaded by very early config
reading) that corresponds to the virtual filesystem. The bit that most
closely resembled this behavior was non-obviously named, but does
provide a signal that we are in a Scalar clone and not a VFS for Git
clone. The error message is copied from git.c, so it will have the same
output as before if a user runs this in a VFS for Git clone.

Signed-off-by: Derrick Stolee <[email protected]>
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 <[email protected]>
When using the sparse-checkout feature git should not write to the working
directory for files with the skip-worktree bit on.  With the skip-worktree
bit on the file may or may not be in the working directory and if it is
not we don't want or need to create it by calling checkout_entry.

There are two callers of checkout_target.  Both of which check that the
file does not exist before calling checkout_target.  load_current which
make a call to lstat right before calling checkout_target and
check_preimage which will only run checkout_taret it stat_ret is less than
zero.  It sets stat_ret to zero and only if !stat->cached will it lstat
the file and set stat_ret to something other than zero.

This patch checks if skip-worktree bit is on in checkout_target and just
returns so that the entry doesn't not end up in the working directory.
This is so that apply will not create a file in the working directory,
then update the index but not keep the working directory up to date with
the changes that happened in the index.

Signed-off-by: Kevin Willford <[email protected]>
As of 9e59b38 (object-file: emit corruption errors when detected,
2022-12-14), Git will loudly complain about corrupt objects.

That is fine, as long as the idea isn't to re-download locally-corrupted
objects. But that's exactly what we want to do in VFS for Git via the
`read-object` hook, as per the `GitCorruptObjectTests` code
added in microsoft/VFSForGit@2db0c030eb25 (New
features: [...] -  GVFS can now recover from corrupted git object files
[...] , 2018-02-16).

So let's support precisely that, and add a regression test that ensures
that re-downloading corrupt objects via the `read-object` hook works.

While at it, avoid the XOR operator to flip the bits, when we actually
want to make sure that they are turned off: Use the AND-NOT operator for
that purpose.

Helped-by: Matthew John Cheetham <[email protected]>
Helped-by: Derrick Stolee <[email protected]>
Signed-off-by: Johannes Schindelin <[email protected]>
String formatting can be a performance issue when there are
hundreds of thousands of trees.

Change to stop using the strbuf_addf and just add the strings
or characters individually.

There are a limited number of modes so added a switch for the
known ones and a default case if something comes through that
are not a known one for git.

In one scenario regarding a huge worktree, this reduces the
time required for a `git checkout <branch>` from 44 seconds
to 38 seconds, i.e. it is a non-negligible performance
improvement.

Signed-off-by: Kevin Willford <[email protected]>
The following commands and options are not currently supported when working
in a GVFS repo.  Add code to detect and block these commands from executing.

1) fsck
2) gc
4) prune
5) repack
6) submodule
8) update-index --split-index
9) update-index --index-version (other than 4)
10) update-index --[no-]skip-worktree
11) worktree

Signed-off-by: Ben Peart <[email protected]>
Signed-off-by: Johannes Schindelin <[email protected]>
In earlier versions of `microsoft/git`, we found a user who had set
`core.gvfs = false` in their global config. This should not have been
necessary, but it also should not have caused a problem. However, it
did.

The reason was that `gvfs_load_config_value()` was called from
`config.c` when reading config key/value pairs from all the config
files. The local config should override the global config, and this is
done by `config.c` reading the global config first then reading the
local config. However, our logic only allowed writing the `core_gvfs`
variable once.

In v2.51.0, we had to adapt to upstream changes that changed way the
`core.gvfs` config value is read, and the special handling is no longer
necessary, yet we still want the test case that ensures that this bug
does not experience a regression.

Signed-off-by: Derrick Stolee <[email protected]>
Signed-off-by: Johannes Schindelin <[email protected]>
Add the ability to block built-in commands based on if the `core.gvfs`
setting has the `GVFS_USE_VIRTUAL_FILESYSTEM` bit set. This allows us
to selectively block commands that use the GVFS protocol, but don't use
VFS for Git (for example repos cloned via `scalar clone` against Azure
DevOps).

Signed-off-by: Matthew John Cheetham <[email protected]>
Loosen the blocking of the `repack` command from all "GVFS repos" (those
that have `core.gvfs` set) to only those that actually use the virtual
file system (VFS for Git only). This allows for `repack` to be used in
Scalar clones.

Signed-off-by: Matthew John Cheetham <[email protected]>
Loosen the blocking of the `fsck` command from all "GVFS repos" (those
that have `core.gvfs` set) to only those that actually use the virtual
file system (VFS for Git only). This allows for `fsck` to be used in
Scalar clones.

Signed-off-by: Matthew John Cheetham <[email protected]>
Loosen the blocking of the `prune` command from all "GVFS repos" (those
that have `core.gvfs` set) to only those that actually use the virtual
file system (VFS for Git only). This allows for `prune` to be used in
Scalar clones.

Signed-off-by: Matthew John Cheetham <[email protected]>
Replace the special casing of the `worktree` command being blocked on
VFS-enabled repos with the new `BLOCK_ON_VFS_ENABLED` flag.

Signed-off-by: Matthew John Cheetham <[email protected]>
Emit a warning message when the `gvfs.sharedCache` option is set that
the `repack` command will not perform repacking on the shared cache.

In the future we can teach `repack` to operate on the shared cache, at
which point we can drop this commit.

Signed-off-by: Matthew John Cheetham <[email protected]>
On index load, clear/set the skip worktree bits based on the virtual
file system data. Use virtual file system data to update skip-worktree
bit in unpack-trees. Use virtual file system data to exclude files and
folders not explicitly requested.

Update 2022-04-05: disable the "present-despite-SKIP_WORKTREE" file removal
behavior when 'core.virtualfilesystem' is enabled.

Signed-off-by: Ben Peart <[email protected]>
…x has been redirected

Fixes #13

Some git commands spawn helpers and redirect the index to a different
location.  These include "difftool -d" and the sequencer
(i.e. `git rebase -i`, `git cherry-pick` and `git revert`) and others.
In those instances we don't want to update their temporary index with
our virtualization data.

Helped-by: Johannes Schindelin <[email protected]>
Signed-off-by: Ben Peart <[email protected]>
Add check to see if a directory is included in the virtualfilesystem
before checking the directory hashmap.  This allows a directory entry
like foo/ to find all untracked files in subdirectories.
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).
When using a virtual file system layer, the FSMonitor does not make
sense.

Signed-off-by: Johannes Schindelin <[email protected]>
When sparse-checkout is enabled, add the sparse-checkout percentage to
the Trace2 data stream.  This number was already computed and printed
on the console in the "You are in a sparse checkout..." message.  It
would be helpful to log it too for performance monitoring.

Signed-off-by: Jeff Hostetler <[email protected]>
Teach STATUS to optionally serialize the results of a
status computation to a file.

Teach STATUS to optionally read an existing serialization
file and simply print the results, rather than actually
scanning.

This is intended for immediate status results on extremely
large repos and assumes the use of a service/daemon to
maintain a fresh current status snapshot.

2021-10-30: packet_read() changed its prototype in ec9a37d (pkt-line.[ch]:
remove unused packet_read_line_buf(), 2021-10-14).

2021-10-30: sscanf() now does an extra check that "%d" goes into an "int"
and complains about "uint32_t". Replacing with "%u" fixes the compile-time
error.

2021-10-30: string_list_init() was removed by abf897b (string-list.[ch]:
remove string_list_init() compatibility function, 2021-09-28), so we need to
initialize manually.

Signed-off-by: Jeff Hostetler <[email protected]>
Signed-off-by: Derrick Stolee <[email protected]>
dscho added 13 commits October 28, 2025 13:21
As pointed out by CodeQL, `lookup_commit()` can return NULL.

Signed-off-by: Johannes Schindelin <[email protected]>
The code is a bit too hard to reason about for CodeQL to figure out
whether the `fill_commit_graph_info()`  function is at all called after
`write_commit_graph()` returns (and hence whether `topo_levels` goes out
of context before it is used again).

The Git project insists that this is correct (and does not want to make
the code more obviously correct), so let's silence CodeQL's complaints
in this instance.

Signed-off-by: Johannes Schindelin <[email protected]>
…oes NUL-terminate correctly

Signed-off-by: Johannes Schindelin <[email protected]>
Let's exclude GitWeb from being scanned; It is not distributed by us.

Signed-off-by: Johannes Schindelin <[email protected]>
Some fixes in `clar`, pointed out by CodeQL.

Signed-off-by: Johannes Schindelin <[email protected]>
A few places where CodeQL thinks that variables might be uninitialized.

Signed-off-by: Johannes Schindelin <[email protected]>
These patches implement some defensive programming to address complaints
some static analyzers might have.

Signed-off-by: Johannes Schindelin <[email protected]>
CodeQL pointed out a couple of issues, which are addressed in this patch
series.

Signed-off-by: Johannes Schindelin <[email protected]>
This patch series has been long in the making, ever since Johannes
Nicolai and myself spiked this in November/December 2020.

Signed-off-by: Johannes Schindelin <[email protected]>
This patch series has been long in the making, ever since Johannes
Nicolai and myself spiked this in November/December 2020.

Signed-off-by: Johannes Schindelin <[email protected]>
@dscho dscho requested a review from mjcheetham October 28, 2025 12:44
@dscho dscho self-assigned this Oct 28, 2025
@dscho
Copy link
Member Author

dscho commented Oct 28, 2025

Range-diff relative to vfs-2.51.1
  • 6: 1484c6c = 1: 613dc55 survey: calculate more stats on refs

  • 1: 12dfbf9 = 2: 9af360d sparse-index.c: fix use of index hashes in expand_index

  • 2: bb322c7 = 3: 4b471d0 t5300: confirm failure of git index-pack when non-idx suffix requested

  • 7: c1f8560 = 4: 706b915 survey: show some commits/trees/blobs histograms

  • 3: d3b9f9a = 5: fade4ed t: remove advice from some tests

  • 4: 6b4bf80 = 6: 4b212ce t1092: add test for untracked files and directories

  • 5: 1a604fc = 7: 8dee356 index-pack: disable rev-index if index file has non .idx suffix

  • 10: 9b23b30 = 8: 19e8a70 trace2: prefetch value of GIT_TRACE2_DST_DEBUG at startup

  • 8: c9f1a26 = 9: b125ef9 survey: add vector of largest objects for various scaling dimensions

  • 9: 1731a38 = 10: 27b651d survey: add pathname of blob or tree to large_item_vec

  • 11: eead915 = 11: 28b15ce survey: add commit-oid to large_item detail

  • 12: 283f844 = 12: 484369b survey: add commit name-rev lookup to each large_item

  • 13: ad06724 = 13: 5e04eca survey: add --no-name-rev option

  • 14: f1b608c = 14: 49bc502 survey: started TODO list at bottom of source file

  • 15: 10e1b5d = 15: af5e4c9 survey: expanded TODO list at the bottom of the source file

  • 16: c225c01 = 16: 0e2f4b8 survey: expanded TODO with more notes

  • 17: c9c09d1 = 17: 9288341 reset --stdin: trim carriage return from the paths

  • 18: 030da49 ! 18: ae13ea5 Identify microsoft/git via a distinct version suffix

    @@ Commit message
      ## GIT-VERSION-GEN ##
     @@
      
    - DEF_VER=v2.51.1
    + DEF_VER=v2.51.2
      
     +# Identify microsoft/git via a distinct version suffix
     +DEF_VER=$DEF_VER.vfs.0.0
  • 19: 2914941 = 19: 04e051a gvfs: ensure that the version is based on a GVFS tag

  • 20: ac5f6d6 = 20: 3b80de8 gvfs: add a GVFS-specific header file

  • 21: c9dac08 = 21: 9c5f740 gvfs: add the core.gvfs config setting

  • 22: 4a1a067 = 22: f9eea6a gvfs: add the feature to skip writing the index' SHA-1

  • 23: 05a5aab = 23: 5b59aad gvfs: add the feature that blobs may be missing

  • 24: c342e0b = 24: 48d3376 gvfs: prevent files to be deleted outside the sparse checkout

  • 25: 4dd4444 = 25: 5f31231 gvfs: optionally skip reachability checks/upload pack during fetch

  • 26: 8fada6e = 26: 5043864 gvfs: ensure all filters and EOL conversions are blocked

  • 27: cb42bd5 = 27: 9c932db gvfs: allow "virtualizing" objects

  • 28: 73fb8af = 28: 0c1a8ac Hydrate missing loose objects in check_and_freshen()

  • 29: 9bebe8f = 29: 9780730 sha1_file: when writing objects, skip the read_object_hook

  • 30: 2716d90 = 30: 9befb64 gvfs: add global command pre and post hook procs

  • 31: ae148ec = 31: 7dc4725 t0400: verify that the hook is called correctly from a subdirectory

  • 32: b378722 = 32: ebccdf0 t0400: verify core.hooksPath is respected by pre-command

  • 33: b64c400 = 33: 43d458c Pass PID of git process to hooks.

  • 34: 1f93e86 = 34: 0f2f180 sparse-checkout: make sure to update files with a modify/delete conflict

  • 35: 711237c = 35: 6ded9ec worktree: allow in Scalar repositories

  • 36: f942dab = 36: 7473ad3 sparse-checkout: avoid writing entries with the skip-worktree bit

  • 37: db29c1d = 37: 2203791 Do not remove files outside the sparse-checkout

  • 38: 835ec69 = 38: 215708f send-pack: do not check for sha1 file when GVFS_MISSING_OK set

  • 39: 4b85889 = 39: 3146ead gvfs: allow corrupt objects to be re-downloaded

  • 40: 766312f = 40: 92f52b0 cache-tree: remove use of strbuf_addf in update_one

  • 41: e0629a1 = 41: 6c57fb7 gvfs: block unsupported commands when running in a GVFS repo

  • 42: 9ddff12 = 42: 1f50360 gvfs: allow overriding core.gvfs

  • 43: 5c7ab92 = 43: 2c25e77 BRANCHES.md: Add explanation of branches and using forks

  • 44: 7429f9b = 44: 14a92fa git.c: add VFS enabled cmd blocking

  • 45: 06717d5 = 45: a34b3f1 git.c: permit repack cmd in Scalar repos

  • 46: 36c2358 = 46: 65ff52a git.c: permit fsck cmd in Scalar repos

  • 47: 8265735 = 47: 25ce0e4 git.c: permit prune cmd in Scalar repos

  • 48: ecfc8f6 = 48: 12c1a9b worktree: remove special case GVFS cmd blocking

  • 53: 277b059 = 49: f6d522e builtin/repack.c: emit warning when shared cache is present

  • 49: a3328e8 = 50: bc8c920 Add virtual file system settings and hook proc

  • 50: 5cc055c = 51: 6aa5d01 virtualfilesystem: don't run the virtual file system hook if the index has been redirected

  • 51: 063c89e = 52: 22e4912 virtualfilesystem: check if directory is included

  • 52: 9f02e60 = 53: 38772b3 backwards-compatibility: support the post-indexchanged hook

  • 54: 505e1b9 = 54: d33bb15 gvfs: verify that the built-in FSMonitor is disabled

  • 55: eea3547 = 55: 3516924 wt-status: add trace2 data for sparse-checkout percentage

  • 56: cf481a8 = 56: da83c75 status: add status serialization mechanism

  • 57: f9dc1eb = 57: e1c8388 Teach ahead-behind and serialized status to play nicely together

  • 58: fb6d0fa = 58: 14241f2 status: serialize to path

  • 59: fedfb7f = 59: 0b8acde status: reject deserialize in V2 and conflicts

  • 60: a3abe6d = 60: f52611d serialize-status: serialize global and repo-local exclude file metadata

  • 61: 0bc9d5c = 61: 0d8a629 status: deserialization wait

  • 62: 8fa2cbc = 62: c366d5e status: deserialize with -uno does not print correct hint

  • 63: 819a038 = 63: fe1ae60 fsmonitor: check CE_FSMONITOR_VALID in ce_uptodate

  • 64: 3f5a72b = 64: 8510d49 fsmonitor: add script for debugging and update script for tests

  • 65: 72726f7 = 65: 260b8b0 status: disable deserialize when verbose output requested.

  • 66: 2910d75 = 66: e4dec19 t7524: add test for verbose status deserialzation

  • 67: f3cafd6 = 67: c964f1d deserialize-status: silently fallback if we cannot read cache file

  • 68: 893efbf = 68: b4bedf4 gvfs:trace2:data: add trace2 tracing around read_object_process

  • 69: c883ec2 = 69: 84669cd gvfs:trace2:data: status deserialization information

  • 70: e0f54bd = 70: c61d00d gvfs:trace2:data: status serialization

  • 71: 922c332 = 71: 33cafaa gvfs:trace2:data: add vfs stats

  • 72: 0a87f6d = 72: 677dfd2 trace2: refactor setting process starting time

  • 73: 897f249 = 73: 17154f3 trace2:gvfs:experiment: clear_ce_flags_1

  • 74: 1947e0c = 74: e2c2073 trace2:gvfs:experiment: report_tracking

  • 75: c27d62e = 75: 374f305 trace2:gvfs:experiment: read_cache: annotate thread usage in read-cache

  • 76: f8473a1 = 76: 19383da trace2:gvfs:experiment: read-cache: time read/write of cache-tree extension

  • 77: d953d88 = 77: ffbec3b trace2:gvfs:experiment: add region to apply_virtualfilesystem()

  • 78: 4118c60 = 78: 381465f trace2:gvfs:experiment: add region around unpack_trees()

  • 79: e746515 = 79: 8526c78 trace2:gvfs:experiment: add region to cache_tree_fully_valid()

  • 80: 2a135b9 = 80: 328ac86 trace2:gvfs:experiment: add unpack_entry() counter to unpack_trees() and report_tracking()

  • 81: bfdd3ea = 81: ce655c3 trace2:gvfs:experiment: increase default event depth for unpack-tree data

  • 82: 8929a1e = 82: 33cc355 trace2:gvfs:experiment: add data for check_updates() in unpack_trees()

  • 83: 17b2ed6 = 83: 57837d1 Trace2:gvfs:experiment: capture more 'tracking' details

  • 84: b548870 = 84: d087b8d credential: set trace2_child_class for credential manager children

  • 85: a2f150b = 85: f368e91 sub-process: do not borrow cmd pointer from caller

  • 86: 8ea854d = 86: 3340ce0 sub-process: add subprocess_start_argv()

  • 87: 3d8b9e8 = 87: 90ba532 sha1-file: add function to update existing loose object cache

  • 88: ec20cc1 = 88: b0a3c67 packfile: add install_packed_git_and_mru()

  • 89: 701ddaa = 89: 95f8a98 index-pack: avoid immediate object fetch while parsing packfile

  • 90: 2a92a2b = 90: 22fb7b0 gvfs-helper: create tool to fetch objects using the GVFS Protocol

  • 91: cb9e0b6 = 91: 5e1149f sha1-file: create shared-cache directory if it doesn't exist

  • 92: 20e8b31 = 92: 6847778 gvfs-helper: better handling of network errors

  • 93: 73beff2 = 93: 7bd5218 gvfs-helper-client: properly update loose cache with fetched OID

  • 94: f05f6f4 = 94: 723e522 gvfs-helper: V2 robust retry and throttling

  • 95: 41e572d = 95: c25e5be gvfs-helper: expose gvfs/objects GET and POST semantics

  • 96: 77194ac = 96: 9789c54 gvfs-helper: dramatically reduce progress noise

  • 97: 66ebb9d = 97: 402e36a gvfs-helper: handle pack-file after single POST request

  • 98: b9af928 = 98: c0d7574 test-gvfs-prococol, t5799: tests for gvfs-helper

  • 99: 455103b = 99: 68bb1d0 gvfs-helper: move result-list construction into install functions

  • 139: 7f11d48 = 100: 44144e6 t5799: add support for POST to return either a loose object or packfile

  • 140: f76e806 = 101: 97cd392 t5799: cleanup wc-l and grep-c lines

  • 141: 75ef613 = 102: 0836e09 gvfs-helper: verify loose objects after write

  • 142: ae7e6bd = 103: 598be7c t7599: create corrupt blob test

  • 143: cbab2dd = 104: 0ec6290 gvfs-helper: add prefetch support

  • 144: 70e2a56 = 105: b1511e7 gvfs-helper: add prefetch .keep file for last packfile

  • 145: e4eb3fb = 106: 8e41e13 gvfs-helper: do one read in my_copy_fd_len_tail()

  • 146: a70f1a0 = 107: 1c34b67 gvfs-helper: move content-type warning for prefetch packs

  • 147: 5c71d78 = 108: def51d9 fetch: use gvfs-helper prefetch under config

  • 148: d774e33 = 109: c49ca1b gvfs-helper: better support for concurrent packfile fetches

  • 149: ad5b700 = 110: 51d1406 remote-curl: do not call fetch-pack when using gvfs-helper

  • 150: 4f0c34c = 111: 2a8d156 fetch: reprepare packs before checking connectivity

  • 151: 6cc75ba = 112: 3e8a60d gvfs-helper: retry when creating temp files

  • 152: 4348168 = 113: 3967098 sparse: avoid warnings about known cURL issues in gvfs-helper.c

  • 153: 818b0a6 = 114: e3aa0dd gvfs-helper: add --max-retries to prefetch verb

  • 154: 24dfd70 = 115: a69fbe7 t5799: add tests to detect corrupt pack/idx files in prefetch

  • 155: 54416d9 = 116: b458577 gvfs-helper: ignore .idx files in prefetch multi-part responses

  • 156: fb99416 = 117: c93f5e4 t5799: explicitly test gvfs-helper --fallback and --no-fallback

  • 157: c7eac21 = 118: 0d240f1 gvfs-helper: don't fallback with new config

  • 159: 01ad36c = 119: 20fd8aa test-gvfs-protocol: add cache_http_503 to mayhem

  • 158: 475ef90 = 120: 3dc543b maintenance: care about gvfs.sharedCache config

  • 160: f98901c = 121: 650132a unpack-trees:virtualfilesystem: Improve efficiency of clear_ce_flags

  • 162: d77b9ed ! 122: 77b743c homebrew: add GitHub workflow to release Cask

    @@ .github/workflows/release-homebrew.yml (new)
     +        sed s/^/result=/ <token >>$GITHUB_OUTPUT &&
     +        rm token
     +    - name: Update scalar Cask
    -+      uses: mjcheetham/[email protected]
    ++      uses: mjcheetham/[email protected]
     +      with:
     +        token: ${{ steps.token.outputs.result }}
     +        tap: microsoft/git
  • 161: c4ce7d3 = 123: a5ad374 t5799: add unit tests for new gvfs.fallback config setting

  • 163: af6c9f1 ! 124: 1482654 Adding winget workflows

    @@ .github/workflows/release-winget.yml (new)
     +
     +          # Submit the manifest to the winget-pkgs repository
     +          $manifestDirectory = "$PWD\manifests\m\Microsoft\Git\$version"
    ++          Write-Host -NoNewLine "::notice::Submitting ${env:TAG_NAME} to winget... "
     +          .\wingetcreate.exe submit -t "$(Get-Content token.txt)" $manifestDirectory
     +        shell: powershell
  • 164: d006226 = 125: 842ebbd Disable the monitor-components workflow in msft-git

  • 165: cf6de4f = 126: f2bd50c .github: enable windows builds on microsoft fork

  • 166: edd1b4f = 127: c210181 .github/actions/akv-secret: add action to get secrets

  • 167: 14dbd9f = 128: 5ffae8c release: create initial Windows installer build workflow

  • 168: e608427 = 129: 5bf7166 release: create initial Windows installer build workflow

  • 169: acfe2fc = 130: 41a0286 help: special-case HOST_CPU universal

  • 170: 747a9c2 = 131: 0f21624 release: add Mac OSX installer build

  • 171: 49461e7 = 132: 0c24464 release: build unsigned Ubuntu .deb package

  • 172: a3d5c0c = 133: c376199 release: add signing step for .deb package

  • 173: 934f1cc = 134: e1a9171 release: create draft GitHub release with packages & installers

  • 174: 9becca0 = 135: 28b94c1 build-git-installers: publish gpg public key

  • 175: 6810978 = 136: f8db349 release: continue pestering until user upgrades

  • 176: b866ed7 = 137: 3ea57ae dist: archive HEAD instead of HEAD^{tree}

  • 178: 7386ac3 = 138: 05b7e59 release: include GIT_BUILT_FROM_COMMIT in MacOS build

  • 177: 96c8f85 = 139: 9adcb93 update-microsoft-git: create barebones builtin

  • 180: c203a6f = 140: 418795e release: add installer validation

  • 179: eaf364a = 141: 6a5b75f update-microsoft-git: Windows implementation

  • 181: 12ccfa3 = 142: fa26644 update-microsoft-git: use brew on macOS

  • 182: 448e336 = 143: 660db67 .github: reinstate ISSUE_TEMPLATE.md for microsoft/git

  • 183: 16dd9e2 = 144: 5466c79 .github: update PULL_REQUEST_TEMPLATE.md

  • 184: d3900eb = 145: 944c77b Adjust README.md for microsoft/git

  • 100: e9eafd3 = 146: b165ade git_config_set_multivar_in_file_gently(): add a lock timeout

  • 101: d6f17b4 = 147: aca1d33 scalar: set the config write-lock timeout to 150ms

  • 102: 9a16d21 = 148: 2d21c9a scalar: add docs from microsoft/scalar

  • 103: b94d7e5 = 149: 11061c1 scalar (Windows): use forward slashes as directory separators

  • 104: a31091c = 150: da7a432 scalar: add retry logic to run_git()

  • 105: 7af71f1 = 151: a2c7681 scalar: support the config command for backwards compatibility

  • 185: 9f1538c = 152: 6b0db5b scalar: implement a minimal JSON parser

  • 186: a202889 = 153: 7b9dbba scalar clone: support GVFS-enabled remote repositories

  • 187: ffbf051 = 154: 2884a66 test-gvfs-protocol: also serve smart protocol

  • 188: 3e221e5 = 155: b477623 gvfs-helper: add the endpoint command

  • 189: 32c61eb = 156: 63719bd dir_inside_of(): handle directory separators correctly

  • 190: eea7ccc = 157: f5e7f8c scalar: disable authentication in unattended mode

  • 191: 0c96401 = 158: 4b71896 abspath: make strip_last_path_component() global

  • 192: a2b207f = 159: 5a21d17 scalar: do initialize gvfs.sharedCache

  • 193: 1e7b136 = 160: 0bf671f scalar diagnose: include shared cache info

  • 194: 77a9b65 = 161: d4ea55f scalar: only try GVFS protocol on https:// URLs

  • 195: 609bbd3 = 162: d478fd1 scalar: verify that we can use a GVFS-enabled repository

  • 196: 02c6507 = 163: c490b6d scalar: add the cache-server command

  • 197: 20ba7a4 = 164: 47fcc09 scalar: add a test toggle to skip accessing the vsts/info endpoint

  • 198: 279c4cc = 165: 1f26a1a scalar: adjust documentation to the microsoft/git fork

  • 199: f99ca9c = 166: cf00b21 scalar: enable untracked cache unconditionally

  • 200: 6129c4d = 167: 0ac8844 scalar: parse clone --no-fetch-commits-and-trees for backwards compatibility

  • 201: 5afd2a7 = 168: a033fb3 scalar: make GVFS Protocol a forced choice

  • 202: 64df7cd = 169: 300f709 scalar: work around GVFS Protocol HTTP/2 failures

  • 203: 9f5b83f = 170: bd508d1 gvfs-helper-client: clean up server process(es)

  • 204: 6487b77 = 171: f32f859 scalar diagnose: accommodate Scalar's Functional Tests

  • 205: b7021e3 = 172: fb9c305 ci: run Scalar's Functional Tests

  • 206: e8011dc = 173: 697a572 scalar: upgrade to newest FSMonitor config setting

  • 207: 39bb28f = 174: 7c9daa8 add/rm: allow adding sparse entries when virtual

  • 208: f957c31 = 175: 52ae66e sparse-checkout: add config to disable deleting dirs

  • 209: f044e6b = 176: 6f81c66 diff: ignore sparse paths in diffstat

  • 210: fbb0259 = 177: 67395bb repo-settings: enable sparse index by default

  • 106: 3babd4a = 178: 340570a TO-UPSTREAM: sequencer: avoid progress when stderr is redirected

  • 211: 7d3e549 = 179: 90a9fc5 TO-CHECK: t1092: use quiet mode for rebase tests

  • 212: 154322a = 180: 44d3621 reset: fix mixed reset when using virtual filesystem

  • 213: 29d30d0 = 181: e208699 diff(sparse-index): verify with partially-sparse

  • 214: db227a7 = 182: 7c764a4 stash: expand testing for git stash -u

  • 215: d7d517a = 183: ea5e996 sparse-index: add ensure_full_index_with_reason()

  • 216: 6996f9a = 184: 0e43a58 treewide: add reasons for expanding index

  • 217: b6b8609 = 185: acb842c treewide: custom reasons for expanding index

  • 218: a2dfb18 = 186: 36d82ad sparse-index: add macro for unaudited expansions

  • 219: afbc877 = 187: c8bd7fc Docs: update sparse index plan with logging

  • 220: 3203a24 = 188: 60ec5b0 sparse-index: log failure to clear skip-worktree

  • 221: 41c85bf = 189: c1c48da stash: use -f in checkout-index child process

  • 222: e553a21 = 190: a5c0065 sparse-index: do not copy hashtables during expansion

  • 225: 380c386 = 191: fd487c4 TO-UPSTREAM: sub-process: avoid leaking cmd

  • 226: 78c44fc = 192: 4596ced remote-curl: release filter options before re-setting them

  • 227: 05723fe = 193: ff39c74 transport: release object filter options

  • 228: d075959 = 194: 465ae5f push: don't reuse deltas with path walk

  • 229: e61f903 = 195: d929602 t7900-maintenance.sh: reset config between tests

  • 230: 5299ffc = 196: 2ff614f maintenance: add cache-local-objects maintenance task

  • 231: bd8dd4d = 197: 9df2478 scalar.c: add cache-local-objects task

  • 232: e909d5f = 198: 0c39915 hooks: add custom post-command hook config

  • 233: e478c20 = 199: ed72d57 TO-UPSTREAM: Docs: fix asciidoc failures from short delimiters

  • 234: c7efb74 = 200: ec39e77 hooks: make hook logic memory-leak free

  • 107: c3278c0 = 201: 5c37e2b clar: pass a string for a %s format placeholder

  • 110: 235e82f = 202: 4af4501 clar(clar__assert_equal): do in-bounds check before accessing element

  • 108: 31f44c4 = 203: 58a4dc2 cat_one_file(): make it easy to see that the size variable is initialized

  • 112: fcee331 = 204: 531f358 clar(clar_summary_testsuite): avoid thread-unsafe localtime()

  • 113: 88f66d6 = 205: d6c1426 revision: defensive programming

  • 114: 803d18e = 206: da819f9 get_parent(): defensive programming

  • 109: cd69594 = 207: a705f7d fsck: avoid using an uninitialized variable

  • 115: bfd67d0 = 208: 5cee0f4 fetch-pack: defensive programming

  • 111: 8a7cc1d = 209: 46f0d90 load_revindex_from_disk(): avoid accessing uninitialized data

  • 116: 3b1f728 = 210: 341b8f2 unparse_commit(): defensive programming

  • 118: bc9dcbe = 211: 8c5e94f load_pack_mtimes_file(): avoid accessing uninitialized data

  • 117: ff9fd73 = 212: cc453f8 verify_commit_graph(): defensive programming

  • 119: 90d4b59 = 213: b29a99e stash: defensive programming

  • 120: 44f9588 = 214: 0ca5dab stash: defensive programming

  • 121: 17979de = 215: 69a1205 push: defensive programming

  • 122: 33802a8 = 216: d3a2987 fetch: defensive programming

  • 125: cf30419 = 217: 2996ff9 fetch: silence a CodeQL alert about a local variable's address' use after release

  • 123: 7e5241f = 218: 54a85b1 describe: defensive programming

  • 126: 33b3aff = 219: d2bf023 submodule: check return value of submodule_from_path()

  • 124: 07c9ac9 = 220: c4d4b13 inherit_tracking(): defensive programming

  • 129: 5fa0b74 = 221: fcaeba7 codeql: run static analysis as part of CI builds

  • 131: db8ac1f = 222: 30cb8a2 codeql: publish the sarif file as build artifact

  • 132: e9ba1f0 = 223: db02191 codeql: disable a couple of non-critical queries for now

  • 127: c0278b4 = 224: ee2812a test-tool repository: check return value of lookup_commit()

  • 133: 416e307 = 225: 8a9e4e0 date: help CodeQL understand that there are no leap-year issues here

  • 128: f8bff64 = 226: 8533dae shallow: handle missing shallow commits gracefully

  • 134: 40543e1 = 227: b5d5c17 help: help CodeQL understand that consuming envvars is okay here

  • 130: 1935c02 = 228: b883c8b commit-graph: suppress warning about using a stale stack addresses

  • 135: d857192 = 229: 9736752 ctype: help CodeQL understand that sane_istest() does not access array past end

  • 136: e083721 = 230: 8ad449b ctype: accommodate for CodeQL misinterpreting the z in mallocz()

  • 137: 38427e5 = 231: f171166 strbuf_read: help with CodeQL misunderstanding that strbuf_read() does NUL-terminate correctly

  • 138: dcf0dbb = 232: 205c573 codeql: also check JavaScript code

  • 223: c4b7238 < -: ------------ TO-DROP: bogus left-over from 'sparse-checkout: make 'clean' clear more files'

  • 224: a4ebd45 < -: ------------ TO-DROP: left-over from 'sparse-checkout: mark 'clean' as experimental'

  • 235: 85374fe < -: ------------ TO-DROP: t5309: create failing test for 'git index-pack'

  • 236: 289f7ca < -: ------------ fixup! TO-DROP: t5309: create failing test for 'git index-pack'

  • 237: fb57ea9 < -: ------------ fixup! TO-DROP: left-over from 'sparse-checkout: mark 'clean' as experimental'

  • 238: cdb99b8 < -: ------------ fixup! TO-DROP: bogus left-over from 'sparse-checkout: make 'clean' clear more files'

  • 239: 9cfba65 < -: ------------ fixup! Adding winget workflows

  • 240: b7d34aa < -: ------------ fixup! homebrew: add GitHub workflow to release Cask

@dscho dscho merged commit 0c68e84 into vfs-2.51.2 Oct 30, 2025
200 of 202 checks passed
@dscho dscho deleted the tentative/vfs-2.51.2 branch October 30, 2025 07:46
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.