Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
365 commits
Select commit Hold shift + click to select a range
a916773
fsmonitor: add script for debugging and update script for tests
kewillford Nov 21, 2019
b407c07
trace2:gvfs:experiment: add region to apply_virtualfilesystem()
jeffhostetler Jul 16, 2019
d744a50
gvfs: block unsupported commands when running in a GVFS repo
benpeart Dec 6, 2018
76b2053
git.c: permit prune cmd in Scalar repos
mjcheetham Mar 13, 2025
3b7e478
backwards-compatibility: support the post-indexchanged hook
dscho May 28, 2019
b9e929c
status: disable deserialize when verbose output requested.
jeffhostetler Apr 11, 2020
6dfe362
trace2:gvfs:experiment: add region around unpack_trees()
jeffhostetler Jul 16, 2019
5293057
gvfs: allow overriding core.gvfs
derrickstolee Apr 15, 2020
af6ff28
worktree: remove special case GVFS cmd blocking
mjcheetham Mar 6, 2025
6aa05b5
gvfs: verify that the built-in FSMonitor is disabled
dscho Jun 18, 2021
7503d99
t7524: add test for verbose status deserialzation
jeffhostetler Apr 11, 2020
7554357
trace2:gvfs:experiment: add region to cache_tree_fully_valid()
jeffhostetler Jul 16, 2019
fe70f93
BRANCHES.md: Add explanation of branches and using forks
Jul 27, 2018
b51cffb
builtin/repack.c: emit warning when shared cache is present
mjcheetham Mar 26, 2025
32f6ed5
wt-status: add trace2 data for sparse-checkout percentage
jeffhostetler Jun 21, 2024
5aa1c05
deserialize-status: silently fallback if we cannot read cache file
jeffhostetler May 13, 2020
3fa557b
credential: set trace2_child_class for credential manager children
jeffhostetler Oct 3, 2019
bc332b6
sub-process: do not borrow cmd pointer from caller
jeffhostetler Sep 18, 2019
09086b7
sub-process: add subprocess_start_argv()
jeffhostetler Sep 18, 2019
fa9f21e
sha1-file: add function to update existing loose object cache
jeffhostetler Sep 24, 2019
26176b8
trace2:gvfs:experiment: add unpack_entry() counter to unpack_trees() …
jeffhostetler Jul 16, 2019
502918c
index-pack: avoid immediate object fetch while parsing packfile
dscho Apr 17, 2026
f09b67d
trace2:gvfs:experiment: increase default event depth for unpack-tree …
jeffhostetler Jul 25, 2019
fcb6c54
gvfs-helper: create tool to fetch objects using the GVFS Protocol
jeffhostetler Aug 13, 2019
65f6c35
trace2:gvfs:experiment: add data for check_updates() in unpack_trees()
jeffhostetler Jul 25, 2019
2db620a
sha1-file: create shared-cache directory if it doesn't exist
jeffhostetler Oct 7, 2019
11ffcc8
Trace2:gvfs:experiment: capture more 'tracking' details
jeffhostetler Jul 26, 2019
c5d6bc6
fixup! sha1-file: create shared-cache directory if it doesn't exist
dscho Sep 22, 2026
51f1386
gvfs-helper: better handling of network errors
jeffhostetler Oct 8, 2019
7f4a505
gvfs-helper-client: properly update loose cache with fetched OID
jeffhostetler Oct 8, 2019
aea7e33
gvfs-helper: V2 robust retry and throttling
jeffhostetler Oct 10, 2019
6780db4
gvfs-helper: expose gvfs/objects GET and POST semantics
jeffhostetler Oct 21, 2019
ca5a532
gvfs-helper: dramatically reduce progress noise
derrickstolee Oct 24, 2019
669cda6
gvfs-helper: handle pack-file after single POST request
derrickstolee Nov 11, 2019
57d89ba
test-gvfs-prococol, t5799: tests for gvfs-helper
jeffhostetler Oct 25, 2019
d0bbcdd
gvfs-helper: move result-list construction into install functions
jeffhostetler Nov 13, 2019
b6b3d0f
t5799: add support for POST to return either a loose object or packfile
jeffhostetler Nov 13, 2019
085879c
t5799: cleanup wc-l and grep-c lines
jeffhostetler Nov 13, 2019
1761118
gvfs-helper: verify loose objects after write
derrickstolee Sep 18, 2020
9e4d6d2
t7599: create corrupt blob test
jeffhostetler Sep 18, 2020
a366684
gvfs-helper: add prefetch support
jeffhostetler Nov 11, 2019
9081419
gvfs-helper: add prefetch .keep file for last packfile
jeffhostetler Nov 26, 2019
3525dc8
gvfs-helper: do one read in my_copy_fd_len_tail()
derrickstolee Dec 16, 2019
c49e061
gvfs-helper: move content-type warning for prefetch packs
derrickstolee Dec 16, 2019
da218cf
fetch: use gvfs-helper prefetch under config
derrickstolee Dec 17, 2019
5a0c9ce
gvfs-helper: better support for concurrent packfile fetches
jeffhostetler Dec 18, 2019
d35d1ad
remote-curl: do not call fetch-pack when using gvfs-helper
derrickstolee Feb 3, 2020
1c06ba8
t5799: explicitly test gvfs-helper --fallback and --no-fallback
jeffhostetler Jun 28, 2024
8a3a478
fetch: reprepare packs before checking connectivity
derrickstolee Mar 12, 2020
ae1b721
gvfs-helper: add --max-retries to prefetch verb
jeffhostetler Apr 12, 2023
8f1f114
gvfs-helper: don't fallback with new config
derrickstolee Jun 27, 2024
e6abb7b
gvfs-helper: retry when creating temp files
derrickstolee Dec 26, 2019
550d785
t5799: add tests to detect corrupt pack/idx files in prefetch
jeffhostetler Apr 13, 2023
cf79810
test-gvfs-protocol: add cache_http_503 to mayhem
jeffhostetler Jun 28, 2024
9074f57
sparse: avoid warnings about known cURL issues in gvfs-helper.c
derrickstolee Aug 3, 2021
824accb
gvfs-helper: ignore .idx files in prefetch multi-part responses
jeffhostetler Apr 13, 2023
b5cab59
t5799: add unit tests for new `gvfs.fallback` config setting
jeffhostetler Jun 28, 2024
15955cf
maintenance: care about gvfs.sharedCache config
derrickstolee Dec 15, 2020
9959362
scalar: implement a minimal JSON parser
dscho Apr 26, 2021
2afa625
scalar clone: support GVFS-enabled remote repositories
dscho Aug 24, 2021
a6fc155
.github/actions/akv-secret: add action to get secrets
mjcheetham Apr 1, 2025
bc5eb4b
test-gvfs-protocol: also serve smart protocol
dscho Apr 16, 2021
1cb5171
release: create initial Windows installer build workflow
dscho Apr 29, 2026
284e0a0
gvfs-helper: add the `endpoint` command
dscho Apr 26, 2021
3b76db4
help: special-case HOST_CPU `universal`
jeffhostetler Oct 17, 2023
1f84a71
dir_inside_of(): handle directory separators correctly
dscho May 14, 2021
0f618ed
release: add Mac OSX installer build
vdye Jul 16, 2021
e629027
scalar: disable authentication in unattended mode
dscho May 6, 2021
d52f6fb
release: build unsigned Ubuntu .deb package
vdye Jul 16, 2021
6a60f66
abspath: make strip_last_path_component() global
derrickstolee Oct 4, 2022
3abdd32
release: add signing step for .deb package
vdye Jul 16, 2021
59077f5
scalar: do initialize `gvfs.sharedCache`
dscho May 3, 2021
a4ca71e
release: create draft GitHub release with packages & installers
vdye Jul 16, 2021
6721b29
dist: archive HEAD instead of HEAD^{tree}
vdye Dec 2, 2021
db7bf8e
update-microsoft-git: create barebones builtin
derrickstolee Apr 29, 2021
87eff26
.github: reinstate ISSUE_TEMPLATE.md for microsoft/git
derrickstolee Mar 16, 2022
9531cdf
scalar diagnose: include shared cache info
dscho Jun 1, 2021
c04d0d7
Merge branch 'microsoft/vfs-2.35.0'
dscho Oct 7, 2021
e083895
Disable the `monitor-components` workflow in msft-git
dscho May 13, 2022
dd44bd0
build-git-installers: publish gpg public key
ldennington Oct 24, 2023
b280761
release: include GIT_BUILT_FROM_COMMIT in MacOS build
vdye Dec 2, 2021
3d22821
update-microsoft-git: Windows implementation
derrickstolee Apr 29, 2021
0ca8687
.github: update PULL_REQUEST_TEMPLATE.md
derrickstolee Mar 16, 2022
04149c4
scalar: only try GVFS protocol on https:// URLs
dscho Apr 28, 2021
959ec4c
Merge branch 'scalar'
dscho Aug 24, 2021
cb7ad0b
unpack-trees:virtualfilesystem: Improve efficiency of clear_ce_flags
neerajsi-msft2 Feb 6, 2021
0c2b041
.github: enable windows builds on microsoft fork
derrickstolee Mar 8, 2023
ad19277
release: continue pestering until user upgrades
derrickstolee Oct 6, 2021
fa4f8aa
release: remove the obsolete GitHub installer workflow
ldennington Aug 17, 2022
236dd62
update-microsoft-git: use brew on macOS
derrickstolee Apr 29, 2021
3d8b726
Adjust README.md for microsoft/git
May 4, 2021
e4e0016
scalar: verify that we can use a GVFS-enabled repository
dscho Apr 16, 2021
10ebb67
scalar: add the `cache-server` command
dscho Apr 23, 2021
161442e
scalar: add a test toggle to skip accessing the vsts/info endpoint
dscho May 12, 2021
70e8e5d
scalar: adjust documentation to the microsoft/git fork
dscho Jan 25, 2022
df33d6d
scalar: enable untracked cache unconditionally
derrickstolee Jun 21, 2021
dbef07a
scalar: parse `clone --no-fetch-commits-and-trees` for backwards comp…
dscho Aug 24, 2021
e53877a
scalar: make GVFS Protocol a forced choice
derrickstolee May 1, 2024
f963cdc
sparse-index: add ensure_full_index_with_reason()
derrickstolee Sep 30, 2024
89e87c5
sparse-checkout: add config to disable deleting dirs
derrickstolee Aug 22, 2021
ac5e537
add/rm: allow adding sparse entries when virtual
derrickstolee Jun 29, 2021
fab48c9
scalar: work around GVFS Protocol HTTP/2 failures
Copilot May 22, 2025
cedaeec
treewide: add reasons for expanding index
derrickstolee Sep 30, 2024
ecac8e8
diff: ignore sparse paths in diffstat
derrickstolee Jul 26, 2021
a506213
Merge pull request #392: add: allow adding sparse entries when virtual
derrickstolee Jul 1, 2021
42890de
scalar diagnose: accommodate Scalar's Functional Tests
dscho May 9, 2022
f70640d
gvfs-helper-client: clean up server process(es)
derrickstolee May 23, 2025
4a598f6
treewide: custom reasons for expanding index
derrickstolee Sep 30, 2024
3488094
repo-settings: enable sparse index by default
derrickstolee Jun 15, 2021
df8c2d8
Merge pull request #410: Sparse Index: latest integrations
derrickstolee Aug 24, 2021
555d92e
ci: run Scalar's Functional Tests
dscho Jun 8, 2021
0c955ee
Merge branch 'scalar-with-gvfs'
dscho May 3, 2021
7a1ee60
sparse-index: add macro for unaudited expansions
derrickstolee Sep 30, 2024
bae5811
TO-CHECK: t1092: use quiet mode for rebase tests
derrickstolee Oct 31, 2021
dcfb468
Merge pull request #414: Make sparse index the default
derrickstolee Aug 26, 2021
e79d611
scalar: upgrade to newest FSMonitor config setting
vdye Apr 5, 2022
dbafe40
Merge branch 'run-scalar-functional-tests'
dscho Nov 16, 2021
f13ff22
Docs: update sparse index plan with logging
derrickstolee Sep 30, 2024
75d5414
reset: fix mixed reset when using virtual filesystem
Mar 15, 2017
1b42e92
Merge pull request #432: sequencer: avoid progress when stderr is red…
derrickstolee Sep 23, 2021
4e56187
diff(sparse-index): verify with partially-sparse
ldennington Sep 10, 2021
32e5af4
stash: expand testing for `git stash -u`
vdye Sep 22, 2021
8353c45
Merge branch 'scalar-reconfigure'
dscho Jun 1, 2021
d1d4b71
Merge core VFS features
dscho Jun 11, 2018
edc1658
Merge advanced VFS-specific features
dscho Jun 11, 2018
2480a63
Permit `repack` command in Scalar clones (#732)
mjcheetham Mar 31, 2025
5c9a0dc
Merge virtualfilesystem hook
dscho Jun 11, 2018
4410791
Merge updates to serialized status
dscho Jun 11, 2018
5f6e3db
Merge trace2 experimental regions
jeffhostetler Apr 23, 2019
6ff10c5
Merge first wave of gvfs-helper feature
jeffhostetler Nov 14, 2019
6d00c92
Merge gvfs-helper prefetch feature
derrickstolee Dec 17, 2019
b83d578
Harden gvfs-helper to validate the packfiles in a multipart prefetch …
jeffhostetler Apr 17, 2023
82c8910
gvfs-helper: add gvfs.fallback and unit tests (#665)
dscho Jul 1, 2024
9907342
Merge pull request #301: Update 'git maintenance' to match upstream
derrickstolee Dec 15, 2020
c3be809
Merge pull request #315: unpack-trees:virtualfilesystem: Improve effi…
derrickstolee Feb 16, 2021
118b6bb
sparse-index: log failure to clear skip-worktree
derrickstolee Sep 30, 2024
fad318e
Merge pull request #494: reset: fix mixed reset when using virtual fi…
derrickstolee Apr 4, 2022
00edeb0
Merge branch 'adjust-g4w-workflows'
dscho May 13, 2022
713abdb
stash: use -f in checkout-index child process
derrickstolee Sep 30, 2024
698bd04
Merge pull request #419 from ldennington/sparse-index-diff
ldennington Sep 12, 2021
c294cec
Merge pull request #399 from vdye/feature/build-installers
vdye Jul 29, 2021
ffa770d
sparse-index: do not copy hashtables during expansion
derrickstolee Sep 27, 2024
1bfb087
Merge pull request #430 from vdye/sparse-index/clean
vdye Sep 23, 2021
d855291
Merge pull request #472 from vdye/ms/macos-build-options
vdye Dec 6, 2021
131a222
Fix rare segfault in sparse-index (#690)
dscho Oct 9, 2024
3003bd8
Merge pull request #329: Add `git update-microsoft-git`
derrickstolee Apr 30, 2021
b74aa97
TO-UPSTREAM: sub-process: avoid leaking `cmd`
dscho Dec 18, 2024
bfa1b21
Merge pull request #333: update microsoft/git README
derrickstolee May 17, 2021
0cc3de9
hooks: add custom post-command hook config
derrickstolee Mar 25, 2025
bf9f191
remote-curl: release filter options before re-setting them
dscho Dec 18, 2024
8278fd4
Merge pull request #371 from dscho/run-scalar-functional-tests-and-fi…
dscho Jun 9, 2021
54006fe
TO-UPSTREAM: Docs: fix asciidoc failures from short delimiters
derrickstolee Mar 25, 2025
84b8512
transport: release object filter options
dscho Dec 18, 2024
266c5a5
Merge branch 'sparse-index-stuff'
dscho Jun 17, 2022
699c357
hooks: make hook logic memory-leak free
derrickstolee Mar 25, 2025
5d6b49f
maintenance: add cache-local-objects maintenance task
mjcheetham Jan 14, 2025
9acea34
push: don't reuse deltas with path walk
derrickstolee Nov 16, 2024
ea2a633
Merge branch 'leak-fixes'
dscho Dec 18, 2024
7eba3af
t0401: test post-command for alias, version, typo
derrickstolee Nov 7, 2025
6dab639
scalar.c: add cache-local-objects task
mjcheetham Jan 23, 2025
a4c311c
pack-objects: don't reuse deltas with path walk (#707)
dscho Dec 19, 2024
8558aa6
hooks: better handle config without gitdir
derrickstolee Nov 7, 2025
3bc5663
maintenance: add new `cache-local-objects` maintenance task (#720)
mjcheetham Jan 31, 2025
677b777
gvfs-helper: skip collision check for loose objects
derrickstolee Jan 8, 2026
c77fe05
scalar: add run_git_argv
mjcheetham Dec 17, 2025
697bf5d
hooks: add custom post-command hook config (#736)
dscho Apr 7, 2025
9a5a7d8
gvfs-helper: emit advice on transient errors
derrickstolee Jan 8, 2026
7d67fa7
scalar: add --ref-format option to scalar clone
mjcheetham Dec 17, 2025
912ce4f
Merge branch 'codeql'
dscho Mar 21, 2025
6edf57e
gvfs-helper: avoid collision check for packfiles
derrickstolee Jan 8, 2026
0afa239
Add `--ref-format` option to scalar clone (port to `vfs-2.52.0`) (#832)
dscho Jan 8, 2026
93c166e
gvfs-helper: prevent and/or give advice on repeated downloads to shar…
dscho Jan 9, 2026
25778e2
t5799: update cache-server methods for multiple instances
derrickstolee Jan 17, 2026
c8341af
gvfs-helper: override cache server for prefetch
derrickstolee Jan 5, 2026
d8b669f
gvfs-helper: override cache server for get
derrickstolee Jan 5, 2026
2296011
gvfs-helper: override cache server for post
derrickstolee Jan 5, 2026
3a717d1
t5799: add test for all verb-specific cache-servers together
derrickstolee Jan 17, 2026
22f9441
lib-gvfs-helper: create helper script for protocol tests
derrickstolee Jan 18, 2026
8e807f3
t579*: split t5799 into several parts
derrickstolee Jan 18, 2026
8f24271
scalar: add --<verb>-cache-server-url options
derrickstolee Jan 23, 2026
d8ae2cf
Restore previous errno after post command hook
tyrielv Feb 10, 2026
c2556e6
gvfs-helper: add config to incrementally replace cache servers (#836)
derrickstolee Jan 22, 2026
876afc3
t9210: differentiate origin and cache servers
derrickstolee Jan 28, 2026
3d85443
Restore previous errno after post command hook (#860)
dscho Feb 10, 2026
e17bbfd
unpack-trees: skip lstats for deleted VFS entries in checkout
Mar 6, 2026
e8aae13
scalar: add --<verb>-cache-server-url options (#849)
dscho Feb 11, 2026
8073299
worktree: conditionally allow worktree on VFS-enabled repos
Mar 26, 2026
fce704b
gvfs-helper: create shared object cache if missing
derrickstolee Feb 12, 2026
1f725d7
gvfs-helper: send X-Session-Id headers
derrickstolee Mar 24, 2026
489cc04
unpack-trees: skip lstats for deleted VFS entries in checkout (#865)
dscho Mar 26, 2026
2d8b2e7
worktree: conditionally allow worktree on VFS-enabled repos (#868)
mjcheetham Mar 27, 2026
1631c47
azure-pipelines: add ESRP code signing
mjcheetham Apr 30, 2026
204ccf2
gvfs: add gvfs.sessionKey config
derrickstolee Mar 24, 2026
5cda52c
gvfs-helper: create shared object cache if missing (#861)
mjcheetham Mar 27, 2026
eb515d7
azure-pipelines: allow overriding Git version
mjcheetham May 15, 2026
a044a27
gvfs: clear DIE_IF_CORRUPT in streaming incore fallback
tyrielv Mar 27, 2026
92fcceb
gvfs-helper: emit X-Session-Id headers for requests (#862)
mjcheetham Mar 27, 2026
cff8a32
azure-pipelines: build, sign and stage the Linux Debian package
dscho Apr 30, 2026
334fb47
worktree remove: use GVFS_SUPPORTS_WORKTREES for skip-clean-check gate
tyrielv Mar 30, 2026
7d7cfbe
gvfs: clear DIE_IF_CORRUPT in streaming incore fallback (#873)
dscho Mar 28, 2026
bac85b6
azure-pipelines: add signed macOS ARM64 releases
dscho Apr 30, 2026
ef7f7fd
ci: add new VFS for Git functional tests workflow
mjcheetham Mar 30, 2026
f63fc52
worktree remove: use gvfs_config_is_set for skip-clean-check gate (#875)
mjcheetham Apr 2, 2026
de16895
azure-pipelines: build, sign and stage the Windows installer
mjcheetham May 1, 2026
08cd50f
azure-pipelines: add stub release pipeline for Azure
mjcheetham Apr 17, 2026
d83c6e7
Add VFS for Git functional tests workflow (#874)
mjcheetham Apr 2, 2026
3051db2
azure-pipelines: enable on tag push, default ESRP and GitHub release on
dscho May 8, 2026
50951a5
gvfs-helper: separate packfile extraction from indexing
derrickstolee Apr 7, 2026
f2e175d
blame: add blame.renames, blame.renameThreshold, blame.renameLimit
Apr 20, 2026
4793e5f
diff: add renameThreshold configuration option
tyrielv Apr 8, 2026
16d0371
azure-pipelines: add stub release pipeline for Azure (#886)
mjcheetham Apr 17, 2026
36f0c21
release: binskim for Windows
mjcheetham May 21, 2026
e20ff86
gvfs-helper: run prefetch index-pack in parallel
derrickstolee Apr 7, 2026
09868a7
blame: add blame.rename* configuration (#894)
dscho Apr 22, 2026
1e33109
diff: add renameThreshold configuration option (#878)
dscho Apr 20, 2026
e26f975
release: suppress unfixable binskim findings
mjcheetham May 28, 2026
244d595
gvfs-helper: add gvfs.prefetchThreads config for parallel prefetch
derrickstolee Apr 21, 2026
8d2bbde
Synchronize `vfs-2.54.0` with `vfs-2.53.0` (`git blame` changes) (#896)
dscho Apr 27, 2026
1ac3713
binskim: add baseline
microsoft-github-policy-service[bot] May 29, 2026
43c3c7a
scalar: Install prefetch packfiles in parallel (#876)
dscho Apr 28, 2026
7b3aa78
checkout: preserve skip-worktree for virtual filesystem paths
tyrielv May 14, 2026
47e53ba
azure-pipelines: migrate installer release pipeline from GitHub Actio…
dscho May 19, 2026
77390de
checkout: preserve skip-worktree for virtual filesystem paths (forwar…
dscho May 27, 2026
f0a9340
release-homebrew: add a hand-run script to replace the workflow
dscho Jul 7, 2026
428f04e
ci(vfs): install the GCC-compatible Rust target before building
dscho Jun 11, 2026
6f360f9
release-vfsforgit: add hand-run script to supersede the workflow
dscho Jul 7, 2026
5a089ba
.github: add release-winget.sh to open winget-pkgs PR
dscho Jul 7, 2026
9b99ba8
trace2: tolerate failed timestamp formatting
derrickstolee Jul 13, 2026
723c7da
Replace release workflows with scripts (v2.55 version) (#953)
dscho Jul 9, 2026
846d5de
reset --mixed: clear skip-worktree for all changed entries in VFS mode
tyrielv Jun 11, 2026
55742f8
[2.55.0] fixup! gvfs: add global command pre and post hook procs (#956)
dscho Jul 15, 2026
36faa37
send-pack: add gvfs.negativeRefCheck to skip missing negatives
derrickstolee Jul 24, 2026
948aae1
reset --mixed: clear skip-worktree for all changed entries in VFS mod…
dscho Jul 23, 2026
6fd9369
scalar: add --[no-]prefetch option
derrickstolee Aug 19, 2026
74d7f80
odb: scan all sources' packfiles before loose objects
tyrielv Aug 7, 2026
33521f5
send-pack: add gvfs.negativeRefCheck to skip missing negatives (#967)
dscho Jul 27, 2026
a8aab29
scalar: request for commit via POST
derrickstolee Aug 20, 2026
4a540ef
odb: scan all sources' packfiles before loose objects (#975)
dscho Aug 10, 2026
1564439
scalar: add --[no-]prefetch (#979)
derrickstolee Aug 26, 2026
919a530
odb: warn when ignoring unusable alternates
dscho Sep 17, 2026
7bf7e90
ci: avoid vcpkg telemetry contention during MSBuild
dscho Sep 18, 2026
5ae7fad
gvfs-helper: add gvfs.postThreads config option
derrickstolee Aug 24, 2026
a3273f7
rust: honor the active MinGW prefix when invoking Cargo
dscho Sep 18, 2026
2b87ce6
http: factor reusable curl handle preparation
derrickstolee Sep 4, 2026
92bfd44
cmake: default the Windows runtime prefix to UCRT64
dscho Sep 18, 2026
dc15f86
gvfs-helper: parallelize POST object requests
derrickstolee Sep 4, 2026
e86ce06
gvfs-helper: preserve POST failure handling in parallel mode
derrickstolee Sep 4, 2026
bc00162
t5798: test parallel POST object requests
derrickstolee Sep 4, 2026
eefe24c
t5798: test parallel POST failure handling
derrickstolee Sep 4, 2026
3906f0e
gvfs-helper: parallelize POST requests (#980)
dscho Sep 21, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
106 changes: 106 additions & 0 deletions .azure-pipelines/esrp/sign.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
# Reusable step template for ESRP code signing via EsrpCodeSigning@6.
#
# For macOS, ESRP requires files to be submitted as a zip archive.
# Set 'useArchive: true' to automatically handle the
# copy → zip → sign → extract cycle. For Windows/Linux where ESRP
# can sign files directly in a folder, leave it as false (default).
#
parameters:
- name: displayName
type: string
- name: folderPath
type: string
- name: pattern
type: string
- name: inlineOperation
type: string
# When true, matching files are copied to a staging dir, zipped,
# signed, and extracted back to folderPath.
- name: useArchive
type: boolean
default: false
# ESRP connection parameters (defaults use pipeline variables)
- name: connectedServiceName
type: string
default: $(esrpAppConnectionName)
- name: appRegistrationClientId
type: string
default: $(esrpClientId)
- name: appRegistrationTenantId
type: string
default: $(esrpTenantId)
- name: authAkvName
type: string
default: $(esrpKeyVaultName)
- name: authSignCertName
type: string
default: $(esrpSignReqCertName)
- name: serviceEndpointUrl
type: string
default: $(esrpEndpointUrl)

steps:
- ${{ if eq(parameters.useArchive, true) }}:
- task: DeleteFiles@1
displayName: 'Clean staging dir for ${{ parameters.displayName }}'
inputs:
SourceFolder: '$(Agent.TempDirectory)/esrp-staging'
Contents: '*'
RemoveSourceFolder: true
- task: CopyFiles@2
displayName: 'Collect files for ${{ parameters.displayName }}'
inputs:
SourceFolder: '${{ parameters.folderPath }}'
Contents: '${{ parameters.pattern }}'
TargetFolder: '$(Agent.TempDirectory)/esrp-staging/contents'
- task: ArchiveFiles@2
displayName: 'Archive files for ${{ parameters.displayName }}'
inputs:
rootFolderOrFile: '$(Agent.TempDirectory)/esrp-staging/contents'
includeRootFolder: false
archiveType: zip
archiveFile: '$(Agent.TempDirectory)/esrp-staging/archive.zip'
- task: EsrpCodeSigning@6
displayName: '${{ parameters.displayName }}'
inputs:
connectedServiceName: '${{ parameters.connectedServiceName }}'
useMSIAuthentication: true
appRegistrationClientId: '${{ parameters.appRegistrationClientId }}'
appRegistrationTenantId: '${{ parameters.appRegistrationTenantId }}'
authAkvName: '${{ parameters.authAkvName }}'
authSignCertName: '${{ parameters.authSignCertName }}'
serviceEndpointUrl: '${{ parameters.serviceEndpointUrl }}'
folderPath: '$(Agent.TempDirectory)/esrp-staging'
pattern: 'archive.zip'
useMinimatch: true
signConfigType: inlineSignParams
inlineOperation: ${{ parameters.inlineOperation }}
- task: ExtractFiles@1
displayName: 'Extract signed files for ${{ parameters.displayName }}'
inputs:
archiveFilePatterns: '$(Agent.TempDirectory)/esrp-staging/archive.zip'
destinationFolder: '${{ parameters.folderPath }}'
overwriteExistingFiles: true
- task: DeleteFiles@1
displayName: 'Clean up staging dir for ${{ parameters.displayName }}'
condition: always()
inputs:
SourceFolder: '$(Agent.TempDirectory)/esrp-staging'
Contents: '*'
RemoveSourceFolder: true
- ${{ else }}:
- task: EsrpCodeSigning@6
displayName: '${{ parameters.displayName }}'
inputs:
connectedServiceName: '${{ parameters.connectedServiceName }}'
useMSIAuthentication: true
appRegistrationClientId: '${{ parameters.appRegistrationClientId }}'
appRegistrationTenantId: '${{ parameters.appRegistrationTenantId }}'
authAkvName: '${{ parameters.authAkvName }}'
authSignCertName: '${{ parameters.authSignCertName }}'
serviceEndpointUrl: '${{ parameters.serviceEndpointUrl }}'
folderPath: '${{ parameters.folderPath }}'
pattern: '${{ parameters.pattern }}'
useMinimatch: true
signConfigType: inlineSignParams
inlineOperation: ${{ parameters.inlineOperation }}
173 changes: 173 additions & 0 deletions .azure-pipelines/esrp/windows/esrpsign.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,173 @@
#!/bin/bash
#
# Sign Windows files using the ESRP client (Authenticode).
# Usage: esrpsign.sh <file1> [file2 ...]
#
# Required environment variables:
# ESRP_TOOL - Path to ESRPClient.exe
# ESRP_AUTH - Path to the ESRP auth JSON file
# SYSTEM_ACCESSTOKEN - ADO system access token (OAuth bearer)
#
# Optional environment variables:
# ESRP_KEYCODE - Signing key code (default: CP-231522)
#
# The script generates the auth and input JSON files and sets the
# following ESRP client environment variables automatically:
# ESRP_AUTH_CONFIG - Path to the auth JSON file
# ESRP_POLICY_CONFIG - Path to the policy JSON file
# ESRP_SESSION_CONFIG - Not set; ESRP client defaults are used
#
set -euo pipefail

if [ $# -lt 1 ]; then
echo "usage: esrpsign.sh <file> [file ...]" >&2
exit 1
fi

if [ -z "${ESRP_TOOL:-}" ]; then
echo "error: ESRP_TOOL environment variable must be set" >&2
exit 1
fi
if [ -z "${ESRP_AUTH:-}" ]; then
echo "error: ESRP_AUTH environment variable must be set" >&2
exit 1
fi
if [ -z "${SYSTEM_ACCESSTOKEN:-}" ]; then
echo "error: SYSTEM_ACCESSTOKEN environment variable must be set" >&2
exit 1
fi

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
. "$SCRIPT_DIR/../../scripts/windows/utils.sh"

# Check for overriden key code, otherwise use default (Microsoft Third-Party/OSS)
ESRP_KEYCODE="${ESRP_KEYCODE:-CP-231522}"

# Create work dir and resolve its Windows path by cd-ing into it.
WORK_DIR="$(mktemp -d)"
WORK_DIR_WIN="$(cd "$WORK_DIR" && pwd -W | sed 's|/|\\|g')"

echo "==> ESRP signing tool: $ESRP_TOOL"
echo "==> Working directory: $WORK_DIR"

if [ ! -f "$ESRP_TOOL" ]; then
echo "error: ESRPClient.exe not found at $ESRP_TOOL" >&2
exit 1
fi

# Build the SignRequestFiles JSON array
echo "==> Preparing files for signing ($# file(s))..."
files_json=""
for file in "$@"; do
if [ ! -f "$file" ]; then
echo "error: file not found: $file" >&2
exit 1
fi

abs_path="$(cd "$(dirname "$file")" && pwd)/$(basename "$file")"
win_path="$(to_windows_path "$abs_path")"
# Escape backslashes for JSON
win_path_escaped="${win_path//\\/\\\\}"
echo " - $win_path"

if [ -n "$files_json" ]; then
files_json+=","
fi
files_json+="
{
\"SourceLocation\": \"$win_path_escaped\",
\"DestinationLocation\": \"$win_path_escaped\"
}"
done

# Generate the input JSON
input_json="$WORK_DIR/input.json"
output_json="$WORK_DIR/output.json"

echo "==> Generating input JSON: $input_json"
cat > "$input_json" <<-EOF
{
"Version": "1.0.0",
"SignBatches": [
{
"SourceLocationType": "UNC",
"DestinationLocationType": "UNC",
"SignRequestFiles": [$files_json
],
"SigningInfo": {
"Operations": [
{
"KeyCode": "$ESRP_KEYCODE",
"OperationCode": "SigntoolSign",
"ToolName": "sign",
"ToolVersion": "1.0",
"Parameters": {
"OpusName": "Microsoft",
"OpusInfo": "https://www.microsoft.com",
"FileDigest": "/fd SHA256",
"PageHash": "/NPH",
"TimeStamp": "/tr \"http://rfc3161.gtm.corp.microsoft.com/TSS/HttpTspServer\" /td sha256"
}
},
{
"KeyCode": "$ESRP_KEYCODE",
"OperationCode": "SigntoolVerify",
"ToolName": "sign",
"ToolVersion": "1.0",
"Parameters": {}
}
]
}
}
]
}
EOF

# Generate policy JSON
echo "==> Generating policy JSON..."
policy_json="$WORK_DIR/policy.json"
cat > "$policy_json" <<-EOF
{
"Version": "1.0.0",
"Intent": "ProductRelease",
"ContentType": "Binaries",
"ContentOrigin": "1stParty",
"ProductState": "Current",
"Audience": "ExternalBroad"
}
EOF

# Use auth JSON from ESRP_AUTH
export ESRP_AUTH_CONFIG="$(to_windows_path "$ESRP_AUTH")"
export ESRP_POLICY_CONFIG="$WORK_DIR_WIN\\policy.json"

# The ADO system access token is referenced in the auth JSON via the environment
# variable - export this so the ESRP client can pick it up when it runs.
export SYSTEM_ACCESSTOKEN

# Print generated JSON files for debugging
echo "==> Auth JSON:"
cat "$ESRP_AUTH"
echo ""
echo "==> Policy JSON:"
cat "$policy_json"
echo ""
echo "==> Input JSON:"
cat "$input_json"
echo ""

# Sign the files
esrp_tool_win="$(to_windows_path "$ESRP_TOOL")"
input_json_win="$WORK_DIR_WIN\\input.json"
output_json_win="$WORK_DIR_WIN\\output.json"

echo "==> ESRP_AUTH_CONFIG=$ESRP_AUTH_CONFIG"
echo "==> ESRP_POLICY_CONFIG=$ESRP_POLICY_CONFIG"
echo "==> Running: $esrp_tool_win sign -i $input_json_win -o $output_json_win"
"$esrp_tool_win" sign \
-i "$input_json_win" \
-o "$output_json_win"

echo "==> Signing complete."
echo "==> Output JSON:"
cat "$output_json"
69 changes: 69 additions & 0 deletions .azure-pipelines/esrp/windows/setup.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
parameters:
- name: serviceConnectionName
type: string
- name: esrpClientId
type: string
- name: keyVaultName
type: string
- name: signCertName
type: string

steps:
- task: EsrpClientTool@5
name: esrpinstall
displayName: 'Install ESRP client'
- task: AzureCLI@2
displayName: 'Set up ESRP environment'
inputs:
azureSubscription: ${{ parameters.serviceConnectionName }}
addSpnToEnvironment: true
scriptType: ps
scriptLocation: inlineScript
inlineScript: |
# Resolve ESRP client tool path (passed via env to avoid PS subexpression issues)
$esrpTool = "$env:ESRPCLIENT_TOOLPATH\$env:ESRPCLIENT_TOOLNAME"
if (-not (Test-Path $esrpTool)) { Write-Error "ESRPClient.exe not found at $esrpTool"; exit 1 }
Write-Host "Found ESRP client: $esrpTool"
Write-Host "##vso[task.setvariable variable=ESRP_TOOL]$esrpTool"

# Derive the service connection GUID from the ENDPOINT_URL_* env vars
# that the agent emits for the bound connection. Filter out the
# built-in SystemVssConnection which is always present.
$scId = (Get-ChildItem env:ENDPOINT_URL_*).Name `
-replace '^ENDPOINT_URL_','' |
Where-Object { $_ -ne 'SYSTEMVSSCONNECTION' }
if (-not $scId) { Write-Error "Could not derive service connection GUID"; exit 1 }
Write-Host "Resolved service connection GUID: $scId"

# servicePrincipalId and tenantId are provided by addSpnToEnvironment
$authJson = @{
Version = "1.0.0"
AuthenticationType = "AAD_MSI_WIF"
EsrpClientId = "${{ parameters.esrpClientId }}"
ClientId = $env:servicePrincipalId
TenantId = $env:tenantId
AADAuthorityBaseUri = "https://login.microsoftonline.com/"
FederatedTokenData = @{
JobId = "$(System.JobId)"
PlanId = "$(System.PlanId)"
ProjectId = "$(System.TeamProjectId)"
Hub = "$(System.HostType)"
Uri = "$(System.CollectionUri)"
ServiceConnectionId = $scId
SystemAccessToken = "SYSTEM_ACCESSTOKEN"
}
RequestSigningCert = @{
GetCertFromKeyVault = $true
KeyVaultName = "${{ parameters.keyVaultName }}"
KeyVaultCertName = "${{ parameters.signCertName }}"
}
} | ConvertTo-Json -Depth 4

$authPath = "$(Agent.TempDirectory)\esrp-auth.json"
$authJson | Set-Content -Path $authPath -Encoding UTF8
Write-Host "Generated ESRP auth JSON: $authPath"
Write-Host "##vso[task.setvariable variable=ESRP_AUTH]$authPath"
env:
SYSTEM_ACCESSTOKEN: $(System.AccessToken)
ESRPCLIENT_TOOLPATH: $(esrpinstall.esrpclient.toolpath)
ESRPCLIENT_TOOLNAME: $(esrpinstall.esrpclient.toolname)
1 change: 1 addition & 0 deletions .azure-pipelines/patches/.gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
*.patch whitespace=-trailing-space,-blank-at-eof
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
diff --git a/installer/install.iss b/installer/install.iss
index 70787b7..137f660 100644
--- a/installer/install.iss
+++ b/installer/install.iss
@@ -65,7 +65,7 @@ SignTool=signtool
; Installer-related
AllowNoIcons=yes
AppName={#APP_NAME}
-AppPublisher=The Git Development Community
+AppPublisher=The Git Client Team at Microsoft
AppPublisherURL={#APP_URL}
AppSupportURL={#APP_CONTACT_URL}
AppVersion={#APP_VERSION}
Loading
Loading