From 914e320ac6db23f7461dd997022d7799d0a4794d Mon Sep 17 00:00:00 2001 From: Ivan Frade Date: Wed, 9 Oct 2019 16:40:17 -0700 Subject: [PATCH] ProtocolV2Parser: Introduce advertise sideband-all option The flag enabling sideband-all is used in two places: in UploadPack for advertisement and in the protocol parser to read it from the request. This leds to problems in distributed deployments where the two requests of a fetch can go to different servers with different configurations. Use the existing allowsidebandall to accept the sideband-all request (and respond to it) and introduce a new "advertisesidebandall" to toggle the advertising of the feature. Change-Id: I892d541bc3f321606c89bad1d333b079dce6b5fa Signed-off-by: Ivan Frade --- .../org/eclipse/jgit/transport/UploadPackTest.java | 7 +++++-- .../org/eclipse/jgit/transport/TransferConfig.java | 14 +++++++++++++- .../src/org/eclipse/jgit/transport/UploadPack.java | 2 +- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/UploadPackTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/UploadPackTest.java index 2f370d8c5..6d53555e9 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/UploadPackTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/UploadPackTest.java @@ -501,8 +501,11 @@ public void testV2CapabilitiesRefInWantNotAdvertisedIfUnallowed() throws Excepti } @Test - public void testV2CapabilitiesAllowSidebandAll() throws Exception { - checkAdvertisedIfAllowed("uploadpack", "allowsidebandall", "sideband-all"); + public void testV2CapabilitiesAdvertiseSidebandAll() throws Exception { + server.getConfig().setBoolean("uploadpack", null, "allowsidebandall", + true); + checkAdvertisedIfAllowed("uploadpack", "advertisesidebandall", + "sideband-all"); checkUnadvertisedIfUnallowed("sideband-all"); } diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/TransferConfig.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/TransferConfig.java index 758d74c3f..100b433e0 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/TransferConfig.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/TransferConfig.java @@ -132,6 +132,7 @@ static ProtocolVersion parse(@Nullable String name) { private final boolean allowReachableSha1InWant; private final boolean allowFilter; private final boolean allowSidebandAll; + private final boolean advertiseSidebandAll; final @Nullable ProtocolVersion protocolVersion; final String[] hideRefs; @@ -213,6 +214,8 @@ public TransferConfig(Config rc) { hideRefs = rc.getStringList("uploadpack", null, "hiderefs"); allowSidebandAll = rc.getBoolean( "uploadpack", "allowsidebandall", false); + advertiseSidebandAll = rc.getBoolean("uploadpack", + "advertisesidebandall", false); } /** @@ -295,13 +298,22 @@ public boolean isAllowRefInWant() { } /** - * @return true if clients are allowed to specify a "sideband-all" line + * @return true if the server accepts sideband-all requests (see + * {{@link #isAdvertiseSidebandAll()} for the advertisement) * @since 5.5 */ public boolean isAllowSidebandAll() { return allowSidebandAll; } + /** + * @return true to advertise sideband all to the clients + * @since 5.6 + */ + public boolean isAdvertiseSidebandAll() { + return advertiseSidebandAll && allowSidebandAll; + } + /** * Get {@link org.eclipse.jgit.transport.RefFilter} respecting configured * hidden refs. diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/UploadPack.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/UploadPack.java index 6f0e66e6d..5bee1ce9a 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/UploadPack.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/UploadPack.java @@ -1325,7 +1325,7 @@ private List getV2CapabilityAdvertisement() { caps.add(COMMAND_FETCH + '=' + (transferConfig.isAllowFilter() ? OPTION_FILTER + ' ' : "") + (advertiseRefInWant ? CAPABILITY_REF_IN_WANT + ' ' : "") - + (transferConfig.isAllowSidebandAll() + + (transferConfig.isAdvertiseSidebandAll() ? OPTION_SIDEBAND_ALL + ' ' : "") + (cachedPackUriProvider != null ? "packfile-uris " : "")