Skip to content

Commit 45fda45

Browse files
Copilotdschoderrickstolee
committed
scalar: work around GVFS Protocol HTTP/2 failures
Work around failures when using the GVFS Protocol with Azure DevOps URLs (dev.azure.com and *.visualstudio.com) due to incomplete HTTP/2 support on the server side. Configure http.<url>.version=HTTP/1.1 for these remotes when setting up or reconfiguring a Scalar enlistment. This ensures that Scalar and GVFS continue to function correctly with Azure-hosted repositories, without affecting other remotes. This fixes #752 Co-authored-by: Johannes Schindelin <[email protected]> Co-authored-by: Derrick Stolee <[email protected]> Signed-off-by: Derrick Stolee <[email protected]> Signed-off-by: Johannes Schindelin <[email protected]>
1 parent baeb576 commit 45fda45

File tree

2 files changed

+57
-2
lines changed

2 files changed

+57
-2
lines changed

scalar.c

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,33 @@ static int set_recommended_config(int reconfigure)
214214
fsmonitor.key, fsmonitor.value);
215215
}
216216

217+
/*
218+
* Set HTTP/1.1 for Azure DevOps URLs
219+
* We check for dev.azure.com/ and .visualstudio.com/ patterns
220+
* which are sufficient to identify ADO URLs (including formats like
221+
* https://[email protected]/...)
222+
*/
223+
if (!repo_config_get_string(the_repository, "remote.origin.url", &value)) {
224+
if (starts_with(value, "https://dev.azure.com/") ||
225+
strstr(value, "@dev.azure.com/") ||
226+
strstr(value, ".visualstudio.com/")) {
227+
struct strbuf key = STRBUF_INIT;
228+
strbuf_addf(&key, "http.%s.version", value);
229+
FREE_AND_NULL(value);
230+
231+
if (reconfigure || repo_config_get_string(the_repository, key.buf, &value)) {
232+
trace2_data_string("scalar", the_repository, key.buf, "created");
233+
if (repo_config_set_gently(the_repository, key.buf, "HTTP/1.1") < 0) {
234+
strbuf_release(&key);
235+
return error(_("could not configure %s=%s"),
236+
key.buf, "HTTP/1.1");
237+
}
238+
}
239+
strbuf_release(&key);
240+
}
241+
FREE_AND_NULL(value);
242+
}
243+
217244
/*
218245
* The `log.excludeDecoration` setting is special because it allows
219246
* for multiple values.
@@ -866,7 +893,7 @@ static int cmd_clone(int argc, const char **argv)
866893
/* Is --[no-]gvfs-protocol unspecified? Infer from url. */
867894
if (gvfs_protocol < 0) {
868895
if (cache_server_url ||
869-
strstr(url, "dev.azure.com") ||
896+
strstr(url, "dev.azure.com/") ||
870897
strstr(url, "visualstudio.com"))
871898
gvfs_protocol = 1;
872899
else
@@ -883,7 +910,7 @@ static int cmd_clone(int argc, const char **argv)
883910
cache_server_url = default_cache_server_url;
884911
if (set_config("core.useGVFSHelper=true") ||
885912
set_config("core.gvfs=150") ||
886-
set_config("http.version=HTTP/1.1")) {
913+
set_config("http.%s.version=HTTP/1.1", url)) {
887914
res = error(_("could not turn on GVFS helper"));
888915
goto cleanup;
889916
}

t/t9210-scalar.sh

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,29 @@ test_expect_success 'scalar reconfigure --all with detached HEADs' '
269269
done
270270
'
271271

272+
test_expect_success 'verify http.<url>.version=HTTP/1.1 for ADO URLs' '
273+
test_when_finished rm -rf test-http-url-config &&
274+
275+
# Create a test repository
276+
git init test-http-url-config &&
277+
278+
# Test both URL types
279+
for url in "https://[email protected]/test/project/_git/repo" \
280+
"https://contoso.visualstudio.com/project/_git/repo"
281+
do
282+
# Set URL as remote
283+
git -C test-http-url-config config set remote.origin.url "$url" &&
284+
285+
# Run scalar reconfigure
286+
scalar reconfigure test-http-url-config &&
287+
288+
# Verify URL-specific HTTP version setting
289+
git -C test-http-url-config config "http.$url.version" >actual &&
290+
echo "HTTP/1.1" >expect &&
291+
test_cmp expect actual || return 1
292+
done
293+
'
294+
272295
test_expect_success '`reconfigure -a` removes stale config entries' '
273296
git init stale/src &&
274297
scalar register stale &&
@@ -408,6 +431,11 @@ test_expect_success '`scalar clone` with GVFS-enabled server' '
408431
git -C using-gvfs/src config gvfs.sharedCache >actual &&
409432
test_cmp expect actual &&
410433
434+
: verify that URL-specific HTTP version setting is configured for GVFS URLs in clone &&
435+
git -C using-gvfs/src config "http.http://$HOST_PORT/.version" >actual &&
436+
echo "HTTP/1.1" >expect &&
437+
test_cmp expect actual &&
438+
411439
second=$(git rev-parse --verify second:second.t) &&
412440
(
413441
cd using-gvfs/src &&

0 commit comments

Comments
 (0)