-
Notifications
You must be signed in to change notification settings - Fork 97
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Rebase to v2.45.0 #644
Rebase to v2.45.0 #644
Conversation
4b1e399
to
550ec75
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks, @dscho!
Ah yes. The version format fix... |
550ec75
to
4824feb
Compare
Range-diff relative to -rc0
I used the opportunity to fold these two into 79d186f: |
@dscho was the rebase clean through the version number change as you had hoped? |
Yup! |
We already have a directory where we store files intended for use by multiple test scripts. The same directory is a better home for the test-binary-*.png files than t/. Signed-off-by: Johannes Schindelin <[email protected]>
On Windows, symbolic links have a type: a "file symlink" must point at a file, and a "directory symlink" must point at a directory. If the type of symlink does not match its target, it doesn't work. Git does not record the type of symlink in the index or in a tree. On checkout it'll guess the type, which only works if the target exists at the time the symlink is created. This may often not be the case, for example when the link points at a directory inside a submodule. By specifying `symlink=file` or `symlink=dir` the user can specify what type of symlink Git should create, so Git doesn't have to rely on unreliable heuristics. Signed-off-by: Bert Belder <[email protected]> Signed-off-by: Johannes Schindelin <[email protected]>
The idea is to allow running the test suite on MinGit with BusyBox installed in /mingw64/bin/sh.exe. In that case, we will want to exclude sort & find (and other Unix utilities) from being bundled. Signed-off-by: Johannes Schindelin <[email protected]>
To verify that the symlink is resolved correctly, we use the fact that `git.exe` is a native Win32 program, and that `git.exe config -f <path>` therefore uses the native symlink resolution. Signed-off-by: Bert Belder <[email protected]> Signed-off-by: Johannes Schindelin <[email protected]>
BusyBox-w32 is a true Win32 application, i.e. it does not come with a POSIX emulation layer. That also means that it does *not* use the Unix convention of separating the entries in the PATH variable using colons, but semicolons. However, there are also BusyBox ports to Windows which use a POSIX emulation layer such as Cygwin's or MSYS2's runtime, i.e. using colons as PATH separators. As a tell-tale, let's use the presence of semicolons in the PATH variable: on Unix, it is highly unlikely that it contains semicolons, and on Windows (without POSIX emulation), it is virtually guaranteed, as everybody should have both $SYSTEMROOT and $SYSTEMROOT/system32 in their PATH. Signed-off-by: Johannes Schindelin <[email protected]>
Traditionally, Git for Windows' SDK uses Bash as its default shell. However, other Unix shells are available, too. Most notably, the Win32 port of BusyBox comes with `ash` whose `pwd` command already prints Windows paths as Git for Windows wants them, while there is not even a `builtin` command. Therefore, let's be careful not to override `pwd` unless we know that the `builtin` command is available. Signed-off-by: Johannes Schindelin <[email protected]>
The -W option is only understood by MSYS2 Bash's pwd command. We already make sure to override `pwd` by `builtin pwd -W` for MINGW, so let's not double the effort here. This will also help when switching the shell to another one (such as BusyBox' ash) whose pwd does *not* understand the -W option. Signed-off-by: Johannes Schindelin <[email protected]>
When running with BusyBox, we will want to avoid calling executables on the PATH that are implemented in BusyBox itself. Signed-off-by: Johannes Schindelin <[email protected]>
At some stage, t5003-archive-zip wants to add a file that is not ASCII. To that end, it uses /bin/sh. But that file may actually not exist (it is too easy to forget that not all the world is Unix/Linux...)! Besides, we already have perfectly fine binary files intended for use solely by the tests. So let's use one of them instead. Signed-off-by: Johannes Schindelin <[email protected]>
While it may seem super convenient to some old Unix hands to simpy require Perl to be available when running the test suite, this is a major hassle on Windows, where we want to verify that Perl is not, actually, required in a NO_PERL build. As a super ugly workaround, we "install" a script into /usr/bin/perl reading like this: #!/bin/sh # We'd much rather avoid requiring Perl altogether when testing # an installed Git. Oh well, that's why we cannot have nice # things. exec c:/git-sdk-64/usr/bin/perl.exe "$@" The problem with that is that BusyBox assumes that the #! line in a script refers to an executable, not to a script. So when it encounters the line #!/usr/bin/perl in t5532's proxy-get-cmd, it barfs. Let's help this situation by simply executing the Perl script with the "interpreter" specified explicitly. Signed-off-by: Johannes Schindelin <[email protected]>
When t5605 tries to verify that files are hardlinked (or that they are not), it uses the `-links` option of the `find` utility. BusyBox' implementation does not support that option, and BusyBox-w32's lstat() does not even report the number of hard links correctly (for performance reasons). So let's just switch to a different method that actually works on Windows. Signed-off-by: Johannes Schindelin <[email protected]>
Git for Windows uses MSYS2's Bash to run the test suite, which comes with benefits but also at a heavy price: on the plus side, MSYS2's POSIX emulation layer allows us to continue pretending that we are on a Unix system, e.g. use Unix paths instead of Windows ones, yet this is bought at a rather noticeable performance penalty. There *are* some more native ports of Unix shells out there, though, most notably BusyBox-w32's ash. These native ports do not use any POSIX emulation layer (or at most a *very* thin one, choosing to avoid features such as fork() that are expensive to emulate on Windows), and they use native Windows paths (usually with forward slashes instead of backslashes, which is perfectly legal in almost all use cases). And here comes the problem: with a $PWD looking like, say, C:/git-sdk-64/usr/src/git/t/trash directory.t5813-proto-disable-ssh Git's test scripts get quite a bit confused, as their assumptions have been shattered. Not only does this path contain a colon (oh no!), it also does not start with a slash. This is a problem e.g. when constructing a URL as t5813 does it: ssh://remote$PWD. Not only is it impossible to separate the "host" from the path with a $PWD as above, even prefixing $PWD by a slash won't work, as /C:/git-sdk-64/... is not a valid path. As a workaround, detect when $PWD does not start with a slash on Windows, and simply strip the drive prefix, using an obscure feature of Windows paths: if an absolute Windows path starts with a slash, it is implicitly prefixed by the drive prefix of the current directory. As we are talking about the current directory here, anyway, that strategy works. Signed-off-by: Johannes Schindelin <[email protected]>
On Windows, the current working directory is pretty much guaranteed to contain a colon. If we feed that path to CVS, it mistakes it for a separator between host and port, though. This has not been a problem so far because Git for Windows uses MSYS2's Bash using a POSIX emulation layer that also pretends that the current directory is a Unix path (at least as long as we're in a shell script). However, that is rather limiting, as Git for Windows also explores other ports of other Unix shells. One of those is BusyBox-w32's ash, which is a native port (i.e. *not* using any POSIX emulation layer, and certainly not emulating Unix paths). So let's just detect if there is a colon in $PWD and punt in that case. Signed-off-by: Johannes Schindelin <[email protected]>
The TerminateProcess() function does not actually leave the child processes any chance to perform any cleanup operations. This is bad insofar as Git itself expects its signal handlers to run. A symptom is e.g. a left-behind .lock file that would not be left behind if the same operation was run, say, on Linux. To remedy this situation, we use an obscure trick: we inject a thread into the process that needs to be killed and to let that thread run the ExitProcess() function with the desired exit status. Thanks J Wyman for describing this trick. The advantage is that the ExitProcess() function lets the atexit handlers run. While this is still different from what Git expects (i.e. running a signal handler), in practice Git sets up signal handlers and atexit handlers that call the same code to clean up after itself. In case that the gentle method to terminate the process failed, we still fall back to calling TerminateProcess(), but in that case we now also make sure that processes spawned by the spawned process are terminated; TerminateProcess() does not give the spawned process a chance to do so itself. Please note that this change only affects how Git for Windows tries to terminate processes spawned by Git's own executables. Third-party software that *calls* Git and wants to terminate it *still* need to make sure to imitate this gentle method, otherwise this patch will not have any effect. Signed-off-by: Johannes Schindelin <[email protected]>
The Makefile target `install-mingit-test-artifacts` simply copies stuff and things directly into a MinGit directory, including an init.bat script to set everything up so that the tests can be run in a cmd window. Sadly, Git's test suite still relies on a Perl interpreter even if compiled with NO_PERL=YesPlease. We punt for now, installing a small script into /usr/bin/perl that hands off to an existing Perl of a Git for Windows SDK. Signed-off-by: Johannes Schindelin <[email protected]>
The Windows Subsystem for Linux (WSL) version 2 allows to use `chmod` on NTFS volumes provided that they are mounted with metadata enabled (see https://devblogs.microsoft.com/commandline/chmod-chown-wsl-improvements/ for details), for example: $ chmod 0755 /mnt/d/test/a.sh In order to facilitate better collaboration between the Windows version of Git and the WSL version of Git, we can make the Windows version of Git also support reading and writing NTFS file modes in a manner compatible with WSL. Since this slightly slows down operations where lots of files are created (such as an initial checkout), this feature is only enabled when `core.WSLCompat` is set to true. Note that you also have to set `core.fileMode=true` in repositories that have been initialized without enabling WSL compatibility. There are several ways to enable metadata loading for NTFS volumes in WSL, one of which is to modify `/etc/wsl.conf` by adding: ``` [automount] enabled = true options = "metadata,umask=027,fmask=117" ``` And reboot WSL. It can also be enabled temporarily by this incantation: $ sudo umount /mnt/c && sudo mount -t drvfs C: /mnt/c -o metadata,uid=1000,gid=1000,umask=22,fmask=111 It's important to note that this modification is compatible with, but does not depend on WSL. The helper functions in this commit can operate independently and functions normally on devices where WSL is not installed or properly configured. Signed-off-by: xungeng li <[email protected]> Signed-off-by: Johannes Schindelin <[email protected]>
Rather than using private IFTTT Applets that send mails to this maintainer whenever a new version of a Git for Windows component was released, let's use the power of GitHub workflows to make this process publicly visible. This workflow monitors the Atom/RSS feeds, and opens a ticket whenever a new version was released. Note: Bash sometimes releases multiple patched versions within a few minutes of each other (i.e. 5.1p1 through 5.1p4, 5.0p15 and 5.0p16). The MSYS2 runtime also has a similar system. We can address those patches as a group, so we shouldn't get multiple issues about them. Note further: We're not acting on newlib releases, OpenSSL alphas, Perl release candidates or non-stable Perl releases. There's no need to open issues about them. Co-authored-by: Matthias Aßhauer <[email protected]> Signed-off-by: Johannes Schindelin <[email protected]>
Implement workflow to create GitHub release with attached `git` installers
Fixes for MacOS release build & build options
This adds a new builtin, `git update-microsoft-git`, that executes the platform-specific upgrade steps to get the latest version of `microsoft-git`. On Windows, this means running `git update-git-for-windows` which was updated to use the `microsoft/git` releases page, when appropriate. See #321 for details. On macOS, this means running a sequence of `brew` commands. These are adapted from the `UpgradeVerb` in `microsoft/scalar`, with an important simplification: we don't need to differentiate between the `scalar` and `scalar-azrepos` cask.
Signed-off-by: Derrick Stolee <[email protected]>
…x-built-in-fsmonitor Fix the built-in FSMonitor, and run Scalar's Functional Tests as part of the automated builds
This is random stuff that probably all got upstream in the meantime.
When scripts or background maintenance wish to perform HTTP(S) requests, there is a risk that our stored credentials might be invalid. At the moment, this causes the credential helper to ping the user and block the process. Even if the credential helper does not ping the user, Git falls back to the 'askpass' method, which includes a direct ping to the user via the terminal. Even setting the 'core.askPass' config as something like 'echo' will causes Git to fallback to a terminal prompt. It uses git_terminal_prompt(), which finds the terminal from the environment and ignores whether stdin has been redirected. This can also block the process awaiting input. Create a new config option to prevent user interaction, favoring a failure to a blocked process. The chosen name, 'credential.interactive', is taken from the config option used by Git Credential Manager to already avoid user interactivity, so there is already one credential helper that integrates with this option. However, older versions of Git Credential Manager also accepted other string values, including 'auto', 'never', and 'always'. The modern use is to use a boolean value, but we should still be careful that some users could have these non-booleans. Further, we should respect 'never' the same as 'false'. This is respected by the implementation and test, but not mentioned in the documentation. The implementation for the Git interactions takes place within credential_getpass(). The method prototype is modified to return an 'int' instead of 'void'. This allows us to detect that no attempt was made to fill the given credential, changing the single caller slightly. Also, a new trace2 region is added around the interactive portion of the credential request. This provides a way to measure the amount of time spent in that region for commands that _are_ interactive. It also makes a conventient way to test that the config option works with 'test_region'. Signed-off-by: Derrick Stolee <[email protected]>
At the moment, some background jobs are getting blocked on credentials during the 'prefetch' task. This leads to other tasks, such as incremental repacks, getting blocked. Further, if a user manages to fix their credentials, then they still need to cancel the background process before their background maintenance can continue working. Update the background schedules for our four scheduler integrations to include these config options via '-c' options: * 'credential.interactive=false' will stop Git and some credential helpers from prompting in the UI (assuming the '-c' parameters are carried through and respected by GCM). * 'core.askPass=true' will replace the text fallback for a username and password into the 'true' command, which will return a success in its exit code, but Git will treat the empty string returned as an invalid password and move on. We can do some testing that the credentials are passed, at least in the systemd case due to writing the service files. Signed-off-by: Derrick Stolee <[email protected]> Signed-off-by: Johannes Schindelin <[email protected]>
Add test case to demonstrate that `git index-pack -o <idx-path> pack-path` fails if <idx-path> does not end in ".idx" when `--rev-index` is enabled. In e37d0b8 (builtin/index-pack.c: write reverse indexes, 2021-01-25) we learned to create `.rev` reverse indexes in addition to `.idx` index files. The `.rev` file pathname is constructed by replacing the suffix on the `.idx` file. The code assumes a hard-coded "idx" suffix. In a8dd7e0 (config: enable `pack.writeReverseIndex` by default, 2023-04-12) reverse indexes were enabled by default. If the `-o <idx-path>` argument is used, the index file may have a different suffix. This causes an error when it tries to create the reverse index pathname. The test here demonstrates the failure. (The test forces `--rev-index` to avoid interaction with `GIT_TEST_NO_WRITE_REV_INDEX` during CI runs.) Signed-off-by: Jeff Hostetler <[email protected]>
In ac8acb4 (sparse-index: complete partial expansion, 2022-05-23), 'expand_index()' was updated to expand the index to a given pathspec. However, the 'path_matches_pattern_list()' method used to facilitate this has the side effect of initializing or updating the index hash variables ('name_hash', 'dir_hash', and 'name_hash_initialized'). This operation is performed on 'istate', though, not 'full'; as a result, the initialized hashes are later overwritten when copied from 'full'. To ensure the correct hashes are in 'istate' after the index expansion, change the arg used in 'path_matches_pattern_list()' from 'istate' to 'full'. Note that this does not fully solve the problem. If 'istate' does not have an initialized 'name_hash' when its contents are copied to 'full', initialized hashes will be copied back into 'istate' but 'name_hash_initialized' will be 0. Therefore, we also need to copy 'full->name_hash_initialized' back to 'istate' after the index expansion is complete. Signed-off-by: Victoria Dye <[email protected]>
Teach index-pack to silently omit the reverse index if the index file does not have the standard ".idx" suffix. In e37d0b8 (builtin/index-pack.c: write reverse indexes, 2021-01-25) we learned to create `.rev` reverse indexes in addition to `.idx` index files. The `.rev` file pathname is constructed by replacing the suffix on the `.idx` file. The code assumes a hard-coded "idx" suffix. In a8dd7e0 (config: enable `pack.writeReverseIndex` by default, 2023-04-12) reverse indexes were enabled by default. If the `-o <idx-path>` argument is used, the index file may have a different suffix. This causes an error when it tries to create the reverse index pathname. Since we do not know why the user requested a non-standard suffix for the index, we cannot guess what the proper corresponding suffix should be for the reverse index. So we disable it. The t5300 test has been updated to verify that we no longer error out and that the .rev file is not created. TODO We could warn the user that we skipped it (perhaps only if they TODO explicitly requested `--rev-index` on the command line). TODO TODO Ideally, we should add an `--rev-index-path=<path>` argument TODO or change `--rev-index` to take a pathname. TODO TODO I'll leave these questions for a future series. Signed-off-by: Jeff Hostetler <[email protected]>
The 'scalar reconfigure' command is intended to update registered repos with the latest settings available. However, up to now we were not reregistering the repos with background maintenance. In particular, this meant that the background maintenance schedule would not be updated if there are improvements between versions. Be sure to register repos for maintenance during the reconfigure step. Signed-off-by: Derrick Stolee <[email protected]>
Add a test verifying that sparse-checkout (with and without sparse index enabled) treat untracked files & directories correctly when changing sparse patterns. Specifically, it ensures that 'git sparse-checkout set' * deletes empty directories outside the sparse cone * does _not_ delete untracked files outside the sparse cone Signed-off-by: Victoria Dye <[email protected]>
Cherry-pick rev-index fixes from v2.41.0.vfs.0.5 into v2.42.0.*
4824feb
to
b68812e
Compare
Range-diff relative to v2.45.0-rc1
|
Range-diff relative to vfs-2.44.0
189: abd7968 = 1: dfb63a6 for-each-repo: optionally keep going on an error
190: 1ae1155 = 2: d70b66b maintenance: running maintenance should not stop on errors
1: 08acea8 = 3: 291baa1 reset --stdin: trim carriage return from the paths
2: a75168a < -: ----------- gvfs: start by adding the -gvfs suffix to the version
-: ----------- > 4: 7171e5c Identify microsoft/git via a distinct version suffix
3: 1db481c = 5: 45448ec gvfs: ensure that the version is based on a GVFS tag
4: 7cc11e5 = 6: 3f492fa gvfs: add a GVFS-specific header file
5: 656515f = 7: 75ddd14 gvfs: add the core.gvfs config setting
6: 2ad35f3 ! 8: 0dec18a gvfs: add the feature to skip writing the index' SHA-1
7: 69804bb = 9: 8b5f8b6 gvfs: add the feature that blobs may be missing
8: 08e1394 = 10: d2756a0 gvfs: prevent files to be deleted outside the sparse checkout
9: 8f94806 = 11: d2d9185 gvfs: optionally skip reachability checks/upload pack during fetch
10: 425f60c = 12: cc89974 gvfs: ensure all filters and EOL conversions are blocked
11: 1809338 ! 13: 01ec987 gvfs: allow "virtualizing" objects
12: 6829117 ! 14: 77ececa Hydrate missing loose objects in check_and_freshen()
13: 41d24c3 ! 15: 1ebd6a6 sha1_file: when writing objects, skip the read_object_hook
14: c10e77d ! 16: 8daad9f gvfs: add global command pre and post hook procs
15: 5a78b0c = 17: 3cf79a7 t0400: verify that the hook is called correctly from a subdirectory
16: bcbcbb1 = 18: da90d91 Pass PID of git process to hooks.
17: 2135705 = 19: 5567a3e pre-command: always respect core.hooksPath
18: 8173d74 = 20: 2fa2c0c sparse-checkout: update files with a modify/delete conflict
19: 5cf5793 = 21: e94543d sparse-checkout: avoid writing entries with the skip-worktree bit
20: 9fea45a = 22: 43b4268 Do not remove files outside the sparse-checkout
21: 203814b = 23: 7804aff send-pack: do not check for sha1 file when GVFS_MISSING_OK set
22: 9f0e5f9 = 24: 26b3cbc cache-tree: remove use of strbuf_addf in update_one
23: d724e71 ! 25: 6b2941f gvfs: block unsupported commands when running in a GVFS repo
24: 40bf6bd = 26: eb1a110 worktree: allow in Scalar repositories
25: a202667 = 27: e56fd83 gvfs: allow overriding core.gvfs
26: 12b6663 = 28: 143f6c8 BRANCHES.md: Add explanation of branches and using forks
27: 81dc570 ! 29: 8530efe Add virtual file system settings and hook proc
28: 8c1e2c8 = 30: d2859b2 virtualfilesystem: don't run the virtual file system hook if the index has been redirected
29: 456cdb5 = 31: 69e43b2 virtualfilesystem: check if directory is included
30: 3e677ad = 32: 6707a3b backwards-compatibility: support the post-indexchanged hook
31: 9e26884 = 33: 0da573b gvfs: verify that the built-in FSMonitor is disabled
32: a3f9c23 ! 34: cdad578 status: add status serialization mechanism
33: afa8244 = 35: 21ab719 Teach ahead-behind and serialized status to play nicely together
34: b9a54bf = 36: 01dd8aa status: serialize to path
35: 9adbd52 = 37: 1ca8d3d status: reject deserialize in V2 and conflicts
36: 3f92ef4 = 38: 0d42119 serialize-status: serialize global and repo-local exclude file metadata
37: 3533ff3 ! 39: 2110517 status: deserialization wait
38: 4f0dc95 = 40: cf81231 merge-recursive: avoid confusing logic in was_dirty()
39: a6513c4 = 41: 6393c9e merge-recursive: add some defensive coding to was_dirty()
40: 6207355 = 42: 2ea6a15 merge-recursive: teach was_dirty() about the virtualfilesystem
41: f37bdd5 = 43: 0164495 status: deserialize with -uno does not print correct hint
42: 25c3e0b = 44: 7f27df8 fsmonitor: check CE_FSMONITOR_VALID in ce_uptodate
43: d23c6d3 = 45: b2289c3 fsmonitor: add script for debugging and update script for tests
44: 7788fa9 = 46: 178f355 status: disable deserialize when verbose output requested.
45: da3a063 = 47: 645bcd7 t7524: add test for verbose status deserialzation
46: bc53d52 = 48: 81c16ea deserialize-status: silently fallback if we cannot read cache file
47: cbd5040 ! 49: 67c0345 gvfs:trace2:data: add trace2 tracing around read_object_process
48: e77727e = 50: 99d7bb0 gvfs:trace2:data: status deserialization information
49: 69bc46a = 51: 4066c3a gvfs:trace2:data: status serialization
50: 375bcec = 52: fea657c gvfs:trace2:data: add vfs stats
51: 6c017b4 = 53: 2b6aec5 trace2: refactor setting process starting time
52: 50541e7 = 54: 648829b trace2:gvfs:experiment: clear_ce_flags_1
53: e84e9bb ! 55: 27d8220 trace2:gvfs:experiment: report_tracking
54: 7d83388 = 56: 0965bf1 trace2:gvfs:experiment: read_cache: annotate thread usage in read-cache
55: 2e92c18 = 57: 36ae2c4 trace2:gvfs:experiment: read-cache: time read/write of cache-tree extension
56: f9a546e = 58: a4aa7f8 trace2:gvfs:experiment: add region to apply_virtualfilesystem()
57: 8a09e08 = 59: b5e088c trace2:gvfs:experiment: add region around unpack_trees()
58: 2424bb0 = 60: faaefd9 trace2:gvfs:experiment: add region to cache_tree_fully_valid()
59: dfa422c ! 61: b96ee3c trace2:gvfs:experiment: add unpack_entry() counter to unpack_trees() and report_tracking()
60: d9fbd93 = 62: 34bed83 trace2:gvfs:experiment: increase default event depth for unpack-tree data
61: ee1ef57 = 63: da2922f trace2:gvfs:experiment: add data for check_updates() in unpack_trees()
62: 41c5b12 ! 64: 6e7cb09 Trace2:gvfs:experiment: capture more 'tracking' details
63: 49870a5 = 65: f7ea389 credential: set trace2_child_class for credential manager children
64: f6fca70 = 66: 4607e7a sub-process: do not borrow cmd pointer from caller
65: 327886f = 67: 39242d3 sub-process: add subprocess_start_argv()
66: 154bddb = 68: e7e2aa1 sha1-file: add function to update existing loose object cache
67: 99bb46e = 69: 67419c8 packfile: add install_packed_git_and_mru()
68: 1095cd4 = 70: 00ebc76 index-pack: avoid immediate object fetch while parsing packfile
69: 5c54630 ! 71: af90c33 gvfs-helper: create tool to fetch objects using the GVFS Protocol
70: f3dc228 = 72: 83b2721 sha1-file: create shared-cache directory if it doesn't exist
71: 73a6cc3 = 73: 2339e36 gvfs-helper: better handling of network errors
72: ca24fc3 = 74: c1ae8f0 gvfs-helper-client: properly update loose cache with fetched OID
73: 0f79deb = 75: 8606223 gvfs-helper: V2 robust retry and throttling
74: a5e5dee = 76: 5840ca3 gvfs-helper: expose gvfs/objects GET and POST semantics
75: 08fc2ee = 77: dcc1811 gvfs-helper: dramatically reduce progress noise
76: c503dd5 = 78: 6b467dd gvfs-helper-client.h: define struct object_id
77: 531ffc5 = 79: 623b1ab gvfs-helper: handle pack-file after single POST request
114: 6895430 ! 80: a111d41 git_config_set_multivar_in_file_gently(): add a lock timeout
115: 955384e = 81: 53002f5 scalar: set the config write-lock timeout to 150ms
116: 50b32c9 = 82: 9c869b3 scalar: add docs from microsoft/scalar
117: 93ca048 = 83: 28554ba scalar (Windows): use forward slashes as directory separators
118: ddd637c = 84: fcb838e scalar: add retry logic to run_git()
119: 9904172 = 85: 437450c scalar: support the
config
command for backwards compatibility146: 5f9ba58 ! 86: dafb3e6 sequencer: avoid progress when stderr is redirected
78: ca192b7 ! 87: f5169aa test-gvfs-prococol, t5799: tests for gvfs-helper
79: 1f34846 = 88: e6c58df gvfs-helper: move result-list construction into install functions
80: 1528d92 = 89: 35e19ad t5799: add support for POST to return either a loose object or packfile
81: 03298f9 = 90: 05c140b t5799: cleanup wc-l and grep-c lines
82: 08188f9 = 91: 08ad8fb gvfs-helper: verify loose objects after write
83: 6a55d77 = 92: 50af98e t7599: create corrupt blob test
84: 05c4105 ! 93: cd5322f gvfs-helper: add prefetch support
85: 328ac49 = 94: d812d69 gvfs-helper: add prefetch .keep file for last packfile
86: 3bd3ff1 = 95: 32a4133 gvfs-helper: do one read in my_copy_fd_len_tail()
87: 85b6d44 = 96: f2c635d gvfs-helper: move content-type warning for prefetch packs
88: f71d334 = 97: 396a02c fetch: use gvfs-helper prefetch under config
89: f752421 = 98: d80e642 gvfs-helper: better support for concurrent packfile fetches
90: 0f68cb6 = 99: 6313f62 remote-curl: do not call fetch-pack when using gvfs-helper
91: d356ff2 = 100: 3dede70 fetch: reprepare packs before checking connectivity
92: 0dac5bb = 101: e944259 gvfs-helper: retry when creating temp files
93: 2129426 = 102: 31397ce sparse: avoid warnings about known cURL issues in gvfs-helper.c
94: 14738b6 = 103: caf7b64 gvfs-helper: add --max-retries to prefetch verb
97: ac61687 = 104: fc76147 maintenance: care about gvfs.sharedCache config
95: 1865729 = 105: faf4191 t5799: add tests to detect corrupt pack/idx files in prefetch
98: 76cd2f0 ! 106: f53a6c6 unpack-trees:virtualfilesystem: Improve efficiency of clear_ce_flags
96: 4243dfc = 107: bd1078c gvfs-helper: ignore .idx files in prefetch multi-part responses
99: d3cc952 = 108: ac6e2e2 homebrew: add GitHub workflow to release Cask
100: baa69bf = 109: 0bd8f07 Adding winget workflows
101: 1445711 = 110: 4e4074a Disable the
monitor-components
workflow in msft-git102: 0c9f22e = 111: 291652c .github: enable windows builds on microsoft fork
103: 5a3a699 = 112: fcb9098 release: create initial Windows installer build workflow
104: a751ad0 = 113: 9cd2a8f help: special-case HOST_CPU
universal
105: 55fe1c4 = 114: a820f95 release: add Mac OSX installer build
106: 1015e36 = 115: a71ecee release: build unsigned Ubuntu .deb package
107: 5c21313 = 116: 121afe8 release: add signing step for .deb package
149: 3d95968 ! 117: bb505f1 release: create draft GitHub release with packages & installers
@@ .github/workflows/build-git-installers.yml: jobs: + - create-linux-artifacts + - create-macos-artifacts + - windows_artifacts ++ - prereqs + if: | + success() || + (needs.create-linux-artifacts.result == 'skipped' &&
150: 7acf5f5 ! 118: aa56c24 build-git-installers: publish gpg public key
151: 6cd4ad4 = 119: 4bc3c28 release: continue pestering until user upgrades
152: 0035b9f = 120: 18ca753 Makefile: allow specifying GIT_BUILT_FROM_COMMIT
153: 7db2e99 = 121: faeb084 dist: archive HEAD instead of HEAD^{tree}
154: 9e989ee = 122: a4900ea release: include GIT_BUILT_FROM_COMMIT in MacOS build
155: 23dd028 ! 123: 6ee0e1b release: add installer validation
108: 6ceeebe = 124: c5bc89e update-microsoft-git: create barebones builtin
109: 9fa2c36 = 125: 6a313e3 update-microsoft-git: Windows implementation
110: eeb8fb8 = 126: 7ee86e2 update-microsoft-git: use brew on macOS
111: 6f05ba9 = 127: c189a2d .github: update ISSUE_TEMPLATE.md for microsoft/git
112: c7a8331 = 128: b86f2a6 .github: update PULL_REQUEST_TEMPLATE.md
113: 61747ce = 129: 900486f Adjust README.md for microsoft/git
120: 453d4eb = 130: c20c2d1 scalar: implement a minimal JSON parser
121: a56de78 = 131: f786b08 scalar clone: support GVFS-enabled remote repositories
122: 9cc3bf9 = 132: c1ff0e8 test-gvfs-protocol: also serve smart protocol
123: 107a31f = 133: dc2db9d gvfs-helper: add the
endpoint
command124: 8708a4b = 134: a021409 dir_inside_of(): handle directory separators correctly
125: bc239e7 = 135: 6d47434 scalar: disable authentication in unattended mode
126: 20105da = 136: f216aba scalar: do initialize
gvfs.sharedCache
127: 6ec6b87 = 137: 0dff686 scalar diagnose: include shared cache info
128: 80f9ccf = 138: aa25821 scalar: only try GVFS protocol on https:// URLs
129: 894fd6f ! 139: 050b3f3 scalar: verify that we can use a GVFS-enabled repository
130: de5319c = 140: a18b560 scalar: add the
cache-server
command131: 7aaefa9 = 141: 3b173a2 scalar: add a test toggle to skip accessing the vsts/info endpoint
132: 2e09e47 = 142: cdb1a6a scalar: adjust documentation to the microsoft/git fork
133: 728bf67 = 143: cef9988 scalar: enable untracked cache unconditionally
134: 7386dd1 = 144: b5d3fb5 scalar: parse
clone --no-fetch-commits-and-trees
for backwards compatibility135: 03accb7 = 145: d555913 scalar diagnose: accommodate Scalar's Functional Tests
136: e960ac0 = 146: 38eb66b ci: run Scalar's Functional Tests
137: 99b9b65 = 147: 32051ef scalar: upgrade to newest FSMonitor config setting
138: f80613f = 148: 743c169 abspath: make strip_last_path_component() global
139: e0cbc01 = 149: a75677e scalar: .scalarCache should live above enlistment
140: ab0c7de = 150: f007b7b add/rm: allow adding sparse entries when virtual
141: 8577cb1 = 151: 1c03d59 sparse-checkout: add config to disable deleting dirs
142: ee5b0c3 = 152: 2c89c1a diff: ignore sparse paths in diffstat
143: e4ec64e = 153: 31952c7 repo-settings: enable sparse index by default
144: 12f176c = 154: 8fc11dd diff(sparse-index): verify with partially-sparse
145: 914a993 = 155: f81dd61 stash: expand testing for
git stash -u
147: ffd7346 = 156: acfcf9e sparse: add vfs-specific precautions
148: a74960e = 157: 9373631 reset: fix mixed reset when using virtual filesystem
156: c8fe603 = 158: 4bb7a11 credential: add new interactive config option
157: a7642ea ! 159: 2ab2fe0 maintenance: add custom config to background jobs
158: f1896c9 = 160: ead3d37 scalar: configure maintenance during 'reconfigure'
159: 3fba5cb = 161: bc9254f t5300: confirm failure of git index-pack when non-idx suffix requested
160: ea013ed = 162: 6f85e26 index-pack: disable rev-index if index file has non .idx suffix
161: 57a9598 = 163: e728546 sparse-index.c: fix use of index hashes in expand_index
162: 187c9b0 = 164: 0460408 t1092: add test for untracked files and directories
163: e35106f (upstream: b316552) < -: ----------- name-hash: add index_dir_find()
164: 15e25b5 (upstream: 32ca706) < -: ----------- t7527: add case-insensitve test for FSMonitor
165: ac5f796 (upstream: e5da3dd) < -: ----------- fsmonitor: refactor refresh callback on directory events
166: 64c9b50 (upstream: 7a15a62) < -: ----------- fsmonitor: clarify handling of directory events in callback helper
167: 7c8609c (upstream: 8687c2b) < -: ----------- fsmonitor: refactor refresh callback for non-directory events
168: f4e4019 (upstream: 3e4ffda) < -: ----------- dir: create untracked_cache_invalidate_trimmed_path()
169: 5fdd6fb (upstream: 48f4cd7) < -: ----------- fsmonitor: refactor untracked-cache invalidation
170: 9628e45 (upstream: 7c97174) < -: ----------- fsmonitor: move untracked-cache invalidation into helper functions
171: c3c49b4 (upstream: a524820) < -: ----------- fsmonitor: return invalidated cache-entry count on directory event
172: 8e9dfb8 (upstream: 558d146) < -: ----------- fsmonitor: remove custom loop from non-directory path handler
173: 405d568 (upstream: 9e34e56) < -: ----------- fsmonitor: return invalidated cache-entry count on non-directory event
174: 428ed9d (upstream: 84d441f) < -: ----------- fsmonitor: trace the new invalidated cache-entry count
175: 3357ac3 (upstream: b0dba50) < -: ----------- fsmonitor: refactor bit invalidation in refresh callback
176: b1b11c1 (upstream: 29c139c) < -: ----------- fsmonitor: support case-insensitive events
177: 4e9f006 (upstream: 0c1c3c8) < -: ----------- t0211: demonstrate missing 'def_param' events for certain commands
178: cc026b2 (upstream: 520cf66) < -: ----------- trace2: avoid emitting 'def_param' set more than once
179: 910c853 (upstream: 6111252) < -: ----------- trace2: emit 'def_param' set with 'cmd_name' event
180: e7269ad < -: ----------- fixup! release: add installer validation
181: 00bb8b3 < -: ----------- fixup! release: create draft GitHub release with packages & installers
182: 94a7088 = 165: effbcff macos-installer/Makefile: debug dump linkage of build targets
183: 1e44a0f = 166: 3b72420 workflow/build-git-installer: use OS supplied libcurl
184: 3242311 (upstream: 3242311) < -: ----------- http: reset POSTFIELDSIZE when clearing curl handle
185: c28ee09 (upstream: c28ee09) < -: ----------- INSTALL: bump libcurl version to 7.21.3
186: 92a209b (upstream: 92a209b) < -: ----------- remote-curl: add Transfer-Encoding header only for older curl
187: 6aabf8c < -: ----------- fixup! Add virtual file system settings and hook proc
188: fd1d5e1 (upstream: 199f44c) < -: ----------- builtin/clone: allow remote helpers to detect repo
The big non-obvious change is this:
157: a7642ea ! 159: 2ab2fe0 maintenance: add custom config to background jobs
That's because I moved the
for-each-repo
fix to the root of the branch thicket, and what merge conflicts were formerly resolved in 86c0809 are now folded into the actual conflicting commit.There's also this, which is due to
test_i18ngrep
having retired:129: 894fd6f ! 139: 050b3f3 scalar: verify that we can use a GVFS-enabled repository
Finally, this change is needed to make the
-reftable
CI jobs happy:78: ca192b7 ! 87: f5169aa test-gvfs-prococol, t5799: tests for gvfs-helper