Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
402 commits
Select commit Hold shift + click to select a range
ac213e8
gvfs-helper: don't fallback with new config
derrickstolee Jun 27, 2024
4b79ebd
release: add signing step for .deb package
vdye Jul 16, 2021
0345e3d
gvfs-helper: retry when creating temp files
derrickstolee Dec 26, 2019
fa1f95e
t5799: add tests to detect corrupt pack/idx files in prefetch
jeffhostetler Apr 13, 2023
7d4b3e4
test-gvfs-protocol: add cache_http_503 to mayhem
jeffhostetler Jun 28, 2024
9635063
Disable the `monitor-components` workflow in msft-git
dscho May 13, 2022
f63ae5f
release: create draft GitHub release with packages & installers
vdye Jul 16, 2021
f1d13cd
sparse: avoid warnings about known cURL issues in gvfs-helper.c
derrickstolee Aug 3, 2021
2b46f7f
gvfs-helper: ignore .idx files in prefetch multi-part responses
jeffhostetler Apr 13, 2023
6e16f06
t5799: add unit tests for new `gvfs.fallback` config setting
jeffhostetler Jun 28, 2024
8fb7122
maintenance: care about gvfs.sharedCache config
derrickstolee Dec 15, 2020
c20909f
unpack-trees:virtualfilesystem: Improve efficiency of clear_ce_flags
neerajsi-msft2 Feb 6, 2021
b6781df
.github: enable windows builds on microsoft fork
derrickstolee Mar 8, 2023
9b17135
scalar: set the config write-lock timeout to 150ms
dscho May 18, 2021
4125b90
scalar: set the config write-lock timeout to 150ms
dscho May 18, 2021
d8d699f
scalar: upgrade the config lock timeout setting automagically
dscho Sep 16, 2026
20cbcf3
config: (handle and) warn about deprecated lock timeout setting
dscho Sep 16, 2026
14d54bc
scalar: add docs from microsoft/scalar
derrickstolee Jun 16, 2021
7d3877b
Merge branch 'scalar-gentler-config-locking'
dscho May 19, 2021
eccde5e
Merge branch 'scalar-extra-docs'
dscho Nov 16, 2021
e4a1a0c
scalar (Windows): use forward slashes as directory separators
dscho May 10, 2022
7d1e542
dist: archive HEAD instead of HEAD^{tree}
vdye Dec 2, 2021
147e2e3
update-microsoft-git: create barebones builtin
derrickstolee Apr 29, 2021
836da02
.github: reinstate ISSUE_TEMPLATE.md for microsoft/git
derrickstolee Mar 16, 2022
77ea16f
scalar: add retry logic to run_git()
derrickstolee Jun 17, 2021
ee5e4a3
build-git-installers: publish gpg public key
ldennington Oct 24, 2023
0396a95
release: include GIT_BUILT_FROM_COMMIT in MacOS build
vdye Dec 2, 2021
d24cb6c
update-microsoft-git: Windows implementation
derrickstolee Apr 29, 2021
dc3c0b8
.github: update PULL_REQUEST_TEMPLATE.md
derrickstolee Mar 16, 2022
ee0fbf7
scalar: support the `config` command for backwards compatibility
dscho May 27, 2021
c058b48
release: continue pestering until user upgrades
derrickstolee Oct 6, 2021
ed7926d
release: add installer validation
ldennington Aug 17, 2022
b94d93c
update-microsoft-git: use brew on macOS
derrickstolee Apr 29, 2021
aad3450
Adjust README.md for microsoft/git
May 4, 2021
6850a2b
scalar: implement a minimal JSON parser
dscho Apr 26, 2021
2964490
scalar clone: support GVFS-enabled remote repositories
dscho Aug 24, 2021
463c035
test-gvfs-protocol: also serve smart protocol
dscho Apr 16, 2021
d127c85
gvfs-helper: add the `endpoint` command
dscho Apr 26, 2021
7233259
dir_inside_of(): handle directory separators correctly
dscho May 14, 2021
b2e9e44
scalar: disable authentication in unattended mode
dscho May 6, 2021
18cfb0f
abspath: make strip_last_path_component() global
derrickstolee Oct 4, 2022
a50efcd
scalar: do initialize `gvfs.sharedCache`
dscho May 3, 2021
dd89765
scalar diagnose: include shared cache info
dscho Jun 1, 2021
f93f7a0
scalar: only try GVFS protocol on https:// URLs
dscho Apr 28, 2021
2bc8102
scalar: verify that we can use a GVFS-enabled repository
dscho Apr 16, 2021
900da33
scalar: add the `cache-server` command
dscho Apr 23, 2021
bb26b66
scalar: add a test toggle to skip accessing the vsts/info endpoint
dscho May 12, 2021
9ab517b
scalar: adjust documentation to the microsoft/git fork
dscho Jan 25, 2022
cba7a66
scalar: enable untracked cache unconditionally
derrickstolee Jun 21, 2021
fb5402a
scalar: parse `clone --no-fetch-commits-and-trees` for backwards comp…
dscho Aug 24, 2021
7606c3c
scalar: make GVFS Protocol a forced choice
derrickstolee May 1, 2024
95b727f
scalar: work around GVFS Protocol HTTP/2 failures
Copilot May 22, 2025
51f092c
Merge branch 'microsoft/vfs-2.35.0'
dscho Oct 7, 2021
e0f4138
scalar diagnose: accommodate Scalar's Functional Tests
dscho May 9, 2022
14fd7fa
gvfs-helper-client: clean up server process(es)
derrickstolee May 23, 2025
1e62a45
Merge branch 'scalar'
dscho Aug 24, 2021
f66ff9f
ci: run Scalar's Functional Tests
dscho Jun 8, 2021
ee9f3f9
Merge branch 'scalar-with-gvfs'
dscho May 3, 2021
000acf6
scalar: upgrade to newest FSMonitor config setting
vdye Apr 5, 2022
8286c6b
Merge branch 'run-scalar-functional-tests'
dscho Nov 16, 2021
70bc42a
sparse-checkout: add config to disable deleting dirs
derrickstolee Aug 22, 2021
42ad261
add/rm: allow adding sparse entries when virtual
derrickstolee Jun 29, 2021
0a778d1
Merge branch 'scalar-reconfigure'
dscho Jun 1, 2021
8e70595
diff: ignore sparse paths in diffstat
derrickstolee Jul 26, 2021
3272bec
Merge pull request #392: add: allow adding sparse entries when virtual
derrickstolee Jul 1, 2021
8cbf278
sparse-index: add ensure_full_index_with_reason()
derrickstolee Sep 30, 2024
a1e616c
repo-settings: enable sparse index by default
derrickstolee Jun 15, 2021
196c94e
Merge pull request #410: Sparse Index: latest integrations
derrickstolee Aug 24, 2021
f1d1ff8
treewide: add reasons for expanding index
derrickstolee Sep 30, 2024
dc9772d
TO-CHECK: t1092: use quiet mode for rebase tests
derrickstolee Oct 31, 2021
7336823
TO-UPSTREAM: sequencer: avoid progress when stderr is redirected
derrickstolee Sep 23, 2021
cf85ef8
Merge pull request #414: Make sparse index the default
derrickstolee Aug 26, 2021
dbff646
treewide: custom reasons for expanding index
derrickstolee Sep 30, 2024
cc48611
reset: fix mixed reset when using virtual filesystem
Mar 15, 2017
bf04d7e
Merge pull request #432: sequencer: avoid progress when stderr is red…
derrickstolee Sep 23, 2021
d826a42
diff(sparse-index): verify with partially-sparse
ldennington Sep 10, 2021
d69540d
stash: expand testing for `git stash -u`
vdye Sep 22, 2021
a81bdec
Merge core VFS features
dscho Jun 11, 2018
f6c15fa
Merge advanced VFS-specific features
dscho Jun 11, 2018
ac73315
sparse-index: add macro for unaudited expansions
derrickstolee Sep 30, 2024
53d0d93
Permit `repack` command in Scalar clones (#732)
mjcheetham Mar 31, 2025
cfa950a
Docs: update sparse index plan with logging
derrickstolee Sep 30, 2024
bc9e125
Merge virtualfilesystem hook
dscho Jun 11, 2018
86ab498
sparse-index: log failure to clear skip-worktree
derrickstolee Sep 30, 2024
f3a65c1
Merge pull request #494: reset: fix mixed reset when using virtual fi…
derrickstolee Apr 4, 2022
de69a52
Merge updates to serialized status
dscho Jun 11, 2018
dceb582
stash: use -f in checkout-index child process
derrickstolee Sep 30, 2024
0a7780f
Merge pull request #419 from ldennington/sparse-index-diff
ldennington Sep 12, 2021
3540789
Merge trace2 experimental regions
jeffhostetler Apr 23, 2019
c67d25b
sparse-index: do not copy hashtables during expansion
derrickstolee Sep 27, 2024
c45574c
Merge pull request #430 from vdye/sparse-index/clean
vdye Sep 23, 2021
2da895f
Merge first wave of gvfs-helper feature
jeffhostetler Nov 14, 2019
937d34e
Fix rare segfault in sparse-index (#690)
dscho Oct 9, 2024
b617ebb
Merge gvfs-helper prefetch feature
derrickstolee Dec 17, 2019
682dab7
Harden gvfs-helper to validate the packfiles in a multipart prefetch …
jeffhostetler Apr 17, 2023
a08b74f
gvfs-helper: add gvfs.fallback and unit tests (#665)
dscho Jul 1, 2024
4628cbc
Merge pull request #301: Update 'git maintenance' to match upstream
derrickstolee Dec 15, 2020
0d95a0b
Merge pull request #315: unpack-trees:virtualfilesystem: Improve effi…
derrickstolee Feb 16, 2021
6e2c7ac
Merge branch 'adjust-g4w-workflows'
dscho May 13, 2022
20d8690
Merge pull request #399 from vdye/feature/build-installers
vdye Jul 29, 2021
5555ad0
Merge pull request #472 from vdye/ms/macos-build-options
vdye Dec 6, 2021
7512c9d
Merge pull request #329: Add `git update-microsoft-git`
derrickstolee Apr 30, 2021
7012abf
TO-UPSTREAM: sub-process: avoid leaking `cmd`
dscho Dec 18, 2024
abb9c50
Merge pull request #333: update microsoft/git README
derrickstolee May 17, 2021
e8b7250
remote-curl: release filter options before re-setting them
dscho Dec 18, 2024
1590dbb
Merge pull request #371 from dscho/run-scalar-functional-tests-and-fi…
dscho Jun 9, 2021
73a1480
transport: release object filter options
dscho Dec 18, 2024
579262f
Merge branch 'sparse-index-stuff'
dscho Jun 17, 2022
2280091
push: don't reuse deltas with path walk
derrickstolee Nov 16, 2024
88a64f7
Merge branch 'leak-fixes'
dscho Dec 18, 2024
d91895f
t7900-maintenance.sh: reset config between tests
mjcheetham Jan 22, 2025
deddffd
pack-objects: don't reuse deltas with path walk (#707)
dscho Dec 19, 2024
7de23a8
hooks: add custom post-command hook config
derrickstolee Mar 25, 2025
ad973bf
TO-UPSTREAM: Docs: fix asciidoc failures from short delimiters
derrickstolee Mar 25, 2025
a43ad11
hooks: make hook logic memory-leak free
derrickstolee Mar 25, 2025
c524933
maintenance: add cache-local-objects maintenance task
mjcheetham Jan 14, 2025
5f1ad26
t0401: test post-command for alias, version, typo
derrickstolee Nov 7, 2025
1bd9f7b
scalar.c: add cache-local-objects task
mjcheetham Jan 23, 2025
3398e22
hooks: better handle config without gitdir
derrickstolee Nov 7, 2025
54b983c
maintenance: add new `cache-local-objects` maintenance task (#720)
mjcheetham Jan 31, 2025
6a50415
scalar: add run_git_argv
mjcheetham Dec 17, 2025
804b1ea
hooks: add custom post-command hook config (#736)
dscho Apr 7, 2025
b4c4303
scalar: add --ref-format option to scalar clone
mjcheetham Dec 17, 2025
08f5312
Merge branch 'codeql'
dscho Mar 21, 2025
abbb985
Add `--ref-format` option to scalar clone (port to `vfs-2.52.0`) (#832)
dscho Jan 8, 2026
32c58ca
t5799: update cache-server methods for multiple instances
derrickstolee Jan 17, 2026
af377eb
gvfs-helper: override cache server for prefetch
derrickstolee Jan 5, 2026
7699e5f
gvfs-helper: override cache server for get
derrickstolee Jan 5, 2026
8426311
gvfs-helper: override cache server for post
derrickstolee Jan 5, 2026
649def5
gvfs-helper: skip collision check for loose objects
derrickstolee Jan 8, 2026
114380f
t5799: add test for all verb-specific cache-servers together
derrickstolee Jan 17, 2026
598439a
gvfs-helper: emit advice on transient errors
derrickstolee Jan 8, 2026
ee608e4
lib-gvfs-helper: create helper script for protocol tests
derrickstolee Jan 18, 2026
46035f6
gvfs-helper: avoid collision check for packfiles
derrickstolee Jan 8, 2026
2e4c327
t579*: split t5799 into several parts
derrickstolee Jan 18, 2026
5841f40
gvfs-helper: prevent and/or give advice on repeated downloads to shar…
dscho Jan 9, 2026
403c82c
scalar: add --<verb>-cache-server-url options
derrickstolee Jan 23, 2026
10225f2
Restore previous errno after post command hook
tyrielv Feb 10, 2026
9f33d8b
gvfs-helper: add config to incrementally replace cache servers (#836)
derrickstolee Jan 22, 2026
2ba71ba
t9210: differentiate origin and cache servers
derrickstolee Jan 28, 2026
f91c201
Restore previous errno after post command hook (#860)
dscho Feb 10, 2026
64e750d
unpack-trees: skip lstats for deleted VFS entries in checkout
Mar 6, 2026
6722f08
scalar: add --<verb>-cache-server-url options (#849)
dscho Feb 11, 2026
681489b
worktree: conditionally allow worktree on VFS-enabled repos
Mar 26, 2026
5afbf3c
gvfs-helper: send X-Session-Id headers
derrickstolee Mar 24, 2026
1879e07
gvfs-helper: create shared object cache if missing
derrickstolee Feb 12, 2026
d69a699
unpack-trees: skip lstats for deleted VFS entries in checkout (#865)
dscho Mar 26, 2026
b470f95
worktree: conditionally allow worktree on VFS-enabled repos (#868)
mjcheetham Mar 27, 2026
c743eb9
gvfs: add gvfs.sessionKey config
derrickstolee Mar 24, 2026
7a8e09c
gvfs-helper: create shared object cache if missing (#861)
mjcheetham Mar 27, 2026
1be7f3f
gvfs: clear DIE_IF_CORRUPT in streaming incore fallback
tyrielv Mar 27, 2026
b36e72d
gvfs-helper: emit X-Session-Id headers for requests (#862)
mjcheetham Mar 27, 2026
d6fd0da
worktree remove: use GVFS_SUPPORTS_WORKTREES for skip-clean-check gate
tyrielv Mar 30, 2026
c46c05a
gvfs: clear DIE_IF_CORRUPT in streaming incore fallback (#873)
dscho Mar 28, 2026
222cf6e
ci: add new VFS for Git functional tests workflow
mjcheetham Mar 30, 2026
74b7a3c
worktree remove: use gvfs_config_is_set for skip-clean-check gate (#875)
mjcheetham Apr 2, 2026
a90d0de
azure-pipelines: add stub release pipeline for Azure
mjcheetham Apr 17, 2026
ba5f8e7
Add VFS for Git functional tests workflow (#874)
mjcheetham Apr 2, 2026
8604b8a
gvfs-helper: separate packfile extraction from indexing
derrickstolee Apr 7, 2026
628f9e4
blame: add blame.renames, blame.renameThreshold, blame.renameLimit
Apr 20, 2026
d0cc02e
diff: add renameThreshold configuration option
tyrielv Apr 8, 2026
1c987f2
azure-pipelines: add stub release pipeline for Azure (#886)
mjcheetham Apr 17, 2026
e84e216
gvfs-helper: run prefetch index-pack in parallel
derrickstolee Apr 7, 2026
3936e1f
blame: add blame.rename* configuration (#894)
dscho Apr 22, 2026
59b8d0b
diff: add renameThreshold configuration option (#878)
dscho Apr 20, 2026
272427b
gvfs-helper: add gvfs.prefetchThreads config for parallel prefetch
derrickstolee Apr 21, 2026
76750cb
azure-pipelines: add ESRP code signing
mjcheetham Apr 30, 2026
e9a4eee
azure-pipelines: allow overriding Git version
mjcheetham May 15, 2026
6566b84
azure-pipelines: build, sign and stage the Linux Debian package
dscho Apr 30, 2026
1b3c09d
azure-pipelines: build, sign, notarize and stage the macOS installer
dscho Apr 30, 2026
b641226
azure-pipelines: build, sign and stage the Windows installer
mjcheetham May 1, 2026
7e87917
azure-pipelines: enable on tag push, default ESRP and GitHub release on
dscho May 8, 2026
f78bbe2
release: binskim for Windows
mjcheetham May 21, 2026
77fe339
release: suppress unfixable binskim findings
mjcheetham May 28, 2026
fa860d2
Synchronize `vfs-2.54.0` with `vfs-2.53.0` (`git blame` changes) (#896)
dscho Apr 27, 2026
543ce26
binskim: add baseline
microsoft-github-policy-service[bot] May 29, 2026
c409a2c
scalar: Install prefetch packfiles in parallel (#876)
dscho Apr 28, 2026
2b27981
checkout: preserve skip-worktree for virtual filesystem paths
tyrielv May 14, 2026
8c98be8
azure-pipelines: migrate installer release pipeline from GitHub Actio…
dscho May 19, 2026
0057d2b
release-homebrew: add a hand-run script to replace the workflow
dscho Jul 7, 2026
42b747b
checkout: preserve skip-worktree for virtual filesystem paths (forwar…
dscho May 27, 2026
4b1a1d9
release-vfsforgit: add hand-run script to supersede the workflow
dscho Jul 7, 2026
d15d223
rust: pick a GCC-compatible Cargo target under MSYS2/MinGW
dscho Jun 11, 2026
9d733d5
.github: add release-winget.sh to open winget-pkgs PR
dscho Jul 7, 2026
f40f886
ci(vfs): install the GCC-compatible Rust target before building
dscho Jun 11, 2026
466e832
trace2: tolerate failed timestamp formatting
derrickstolee Jul 13, 2026
dc23b87
Replace release workflows with scripts (v2.55 version) (#953)
dscho Jul 9, 2026
7a4be8b
reset --mixed: clear skip-worktree for all changed entries in VFS mode
tyrielv Jun 11, 2026
a855649
[2.55.0] fixup! gvfs: add global command pre and post hook procs (#956)
dscho Jul 15, 2026
e7bccf1
send-pack: add gvfs.negativeRefCheck to skip missing negatives
derrickstolee Jul 24, 2026
4af7d81
reset --mixed: clear skip-worktree for all changed entries in VFS mod…
dscho Jul 23, 2026
07316d5
odb: scan all sources' packfiles before loose objects
tyrielv Aug 7, 2026
5dc3d49
send-pack: add gvfs.negativeRefCheck to skip missing negatives (#967)
dscho Jul 27, 2026
7cb6723
scalar: add --[no-]prefetch option
derrickstolee Aug 19, 2026
af74b96
scalar: request for commit via POST
derrickstolee Aug 20, 2026
f8d4478
odb: scan all sources' packfiles before loose objects (#975)
dscho Aug 10, 2026
a40f01b
scalar: add --[no-]prefetch (#979)
derrickstolee Aug 26, 2026
6de80bf
fixup! worktree: conditionally allow worktree on VFS-enabled repos
dscho Sep 16, 2026
46f567a
fixup! sha1_file: when writing objects, skip the read_object_hook
dscho Sep 16, 2026
fb1da04
fixup! unpack-trees: skip lstats for deleted VFS entries in checkout
dscho Sep 16, 2026
baeb6aa
fixup! checkout: preserve skip-worktree for virtual filesystem paths
dscho Sep 16, 2026
6da0c97
fixup! reset --mixed: clear skip-worktree for all changed entries in …
dscho Sep 16, 2026
e4ac158
fixup! t579*: split t5799 into several parts
dscho Sep 16, 2026
5965033
fixup! t7524: add test for verbose status deserialzation
dscho Sep 16, 2026
7d36be0
fixup! blame: add blame.renames, blame.renameThreshold, blame.renameL…
dscho Sep 16, 2026
c63f39b
fixup! scalar: add --[no-]prefetch option
dscho Sep 16, 2026
0aa8767
fixup! scalar: verify that we can use a GVFS-enabled repository
dscho Sep 16, 2026
7ef3ab7
fixup! scalar: add the `cache-server` command
dscho Sep 16, 2026
2ccdea0
fixup! survey: show some commits/trees/blobs histograms
dscho Sep 16, 2026
ad1572e
fixup! scalar: do initialize `gvfs.sharedCache`
dscho Sep 16, 2026
6a1a166
fixup! test-gvfs-prococol, t5799: tests for gvfs-helper
dscho Sep 16, 2026
f854b6c
fixup! maintenance: care about gvfs.sharedCache config
dscho Sep 16, 2026
897587b
fixup! t7900-maintenance.sh: reset config between tests
dscho Sep 16, 2026
8e73ba3
fixup! maintenance: add cache-local-objects maintenance task
dscho Sep 16, 2026
4d79c29
fixup! ci: run Scalar's Functional Tests
dscho Sep 17, 2026
a1a6011
fixup! survey: add --no-name-rev option
dscho Sep 17, 2026
ad22a46
fixup! ci(dockerized): do show the result of failing tests again
dscho Sep 17, 2026
addc9da
fixup! ci: add new VFS for Git functional tests workflow
dscho Sep 17, 2026
2ae8370
fixup! ci: run Scalar's Functional Tests
dscho Sep 17, 2026
963a514
fixup! ci: add new VFS for Git functional tests workflow
dscho Sep 17, 2026
6a76efe
odb: warn when ignoring unusable alternates
dscho Sep 17, 2026
2bb39a0
ci: avoid vcpkg telemetry contention during MSBuild
dscho Sep 18, 2026
c27053f
fixup! azure-pipelines: build, sign and stage the Windows installer
dscho Sep 18, 2026
503c10a
fixup! release: create initial Windows installer build workflow
dscho Sep 18, 2026
bd24980
fixup! Add a GitHub workflow to verify that Git/Scalar work in Nano S…
dscho Sep 18, 2026
93d2241
rust: honor the active MinGW prefix when invoking Cargo
dscho Sep 18, 2026
d68c2ec
cmake: default the Windows runtime prefix to UCRT64
dscho Sep 18, 2026
c026eac
fixup! mingw: allow `git.exe` to be used instead of the "Git wrapper"
dscho Sep 18, 2026
f9c24b3
fixup! Add an AGENTS.md file to help with AI-assisted debugging/devel…
dscho Sep 18, 2026
e2d2637
fixup! azure-pipelines: build, sign, notarize and stage the macOS ins…
dscho Sep 18, 2026
4fbbdf0
fixup! release: add Mac OSX installer build
dscho Sep 18, 2026
12d1fad
gvfs-helper: add gvfs.postThreads config option
derrickstolee Aug 24, 2026
a6dc828
http: factor reusable curl handle preparation
derrickstolee Sep 4, 2026
f9e26b8
gvfs-helper: parallelize POST object requests
derrickstolee Sep 4, 2026
5c27d89
gvfs-helper: preserve POST failure handling in parallel mode
derrickstolee Sep 4, 2026
8c3ee7a
t5798: test parallel POST object requests
derrickstolee Sep 4, 2026
8d10550
t5798: test parallel POST failure handling
derrickstolee Sep 4, 2026
9690a9f
fixup! t5798: test parallel POST failure handling
dscho Sep 18, 2026
10e3f2a
fixup! t5798: test parallel POST failure handling
dscho Sep 18, 2026
137b3c8
gvfs-helper: parallelize POST requests (#980)
dscho Sep 21, 2026
b70c193
amend! release: add installer validation
dscho Sep 21, 2026
97d9fe3
amend! azure-pipelines: build, sign, notarize and stage the macOS ins…
dscho Sep 21, 2026
a9e398d
fixup! gvfs-helper: create tool to fetch objects using the GVFS Protocol
dscho Sep 21, 2026
6350869
fixup! scalar: upgrade the config lock timeout setting automagically
dscho Sep 21, 2026
9844ec1
fixup! config: (handle and) warn about deprecated lock timeout setting
dscho Sep 21, 2026
d542e7c
fixup! survey: turn into a thin shim over `git repo structure`
dscho Sep 21, 2026
8d43f91
fixup! gvfs-helper: create tool to fetch objects using the GVFS Protocol
dscho Sep 22, 2026
37a0468
fixup! gvfs-helper: create tool to fetch objects using the GVFS Protocol
dscho Sep 22, 2026
d8ec745
fixup! gvfs-helper: create tool to fetch objects using the GVFS Protocol
dscho Sep 22, 2026
6d69130
fixup! gvfs-helper: create tool to fetch objects using the GVFS Protocol
dscho Sep 22, 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