Enable git wire protocol version 2 on server side per default

Bug: 563145
Change-Id: Id5030c2b85466da0a8ccf3d78ae78df16d64ffc5
Signed-off-by: David Ostrovsky <david@ostrovsky.org>
This commit is contained in:
David Ostrovsky 2020-05-19 07:17:24 +02:00 committed by Thomas Wolf
parent 0853a2410f
commit d9143287b7
3 changed files with 22 additions and 15 deletions

View File

@ -38,7 +38,6 @@
import org.eclipse.jgit.junit.TestRepository; import org.eclipse.jgit.junit.TestRepository;
import org.eclipse.jgit.junit.http.AccessEvent; import org.eclipse.jgit.junit.http.AccessEvent;
import org.eclipse.jgit.junit.http.AppServer; import org.eclipse.jgit.junit.http.AppServer;
import org.eclipse.jgit.lib.ConfigConstants;
import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.lib.Constants;
import org.eclipse.jgit.lib.Ref; import org.eclipse.jgit.lib.Ref;
import org.eclipse.jgit.lib.RefUpdate; import org.eclipse.jgit.lib.RefUpdate;
@ -50,7 +49,6 @@
import org.eclipse.jgit.transport.PacketLineIn; import org.eclipse.jgit.transport.PacketLineIn;
import org.eclipse.jgit.transport.PacketLineOut; import org.eclipse.jgit.transport.PacketLineOut;
import org.eclipse.jgit.transport.Transport; import org.eclipse.jgit.transport.Transport;
import org.eclipse.jgit.transport.TransferConfig;
import org.eclipse.jgit.transport.URIish; import org.eclipse.jgit.transport.URIish;
import org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider; import org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider;
import org.eclipse.jgit.transport.http.HttpConnection; import org.eclipse.jgit.transport.http.HttpConnection;
@ -326,7 +324,22 @@ public void testListRemoteWithoutLocalRepository() throws Exception {
} }
@Test @Test
public void testHttpClientWantsV2ButServerNotConfigured() throws Exception { public void testHttpClientWantsV2AndServerNotConfigured() throws Exception {
String url = smartAuthNoneURI.toString() + "/info/refs?service=git-upload-pack";
HttpConnection c = HttpTransport.getConnectionFactory()
.create(new URL(url));
c.setRequestMethod("GET");
c.setRequestProperty("Git-Protocol", "version=2");
assertEquals(200, c.getResponseCode());
PacketLineIn pckIn = new PacketLineIn(c.getInputStream());
assertThat(pckIn.readString(), is("version 2"));
}
@Test
public void testHttpServerConfiguredToV0() throws Exception {
remoteRepository.getRepository().getConfig().setInt(
"protocol", null, "version", 0);
String url = smartAuthNoneURI.toString() + "/info/refs?service=git-upload-pack"; String url = smartAuthNoneURI.toString() + "/info/refs?service=git-upload-pack";
HttpConnection c = HttpTransport.getConnectionFactory() HttpConnection c = HttpTransport.getConnectionFactory()
.create(new URL(url)); .create(new URL(url));
@ -344,11 +357,6 @@ public void testHttpClientWantsV2ButServerNotConfigured() throws Exception {
@Test @Test
public void testV2HttpFirstResponse() throws Exception { public void testV2HttpFirstResponse() throws Exception {
remoteRepository.getRepository().getConfig().setString(
ConfigConstants.CONFIG_PROTOCOL_SECTION, null,
ConfigConstants.CONFIG_KEY_VERSION,
TransferConfig.ProtocolVersion.V2.version());
String url = smartAuthNoneURI.toString() + "/info/refs?service=git-upload-pack"; String url = smartAuthNoneURI.toString() + "/info/refs?service=git-upload-pack";
HttpConnection c = HttpTransport.getConnectionFactory() HttpConnection c = HttpTransport.getConnectionFactory()
.create(new URL(url)); .create(new URL(url));
@ -368,11 +376,6 @@ public void testV2HttpFirstResponse() throws Exception {
@Test @Test
public void testV2HttpSubsequentResponse() throws Exception { public void testV2HttpSubsequentResponse() throws Exception {
remoteRepository.getRepository().getConfig().setString(
ConfigConstants.CONFIG_PROTOCOL_SECTION, null,
ConfigConstants.CONFIG_KEY_VERSION,
TransferConfig.ProtocolVersion.V2.version());
String url = smartAuthNoneURI.toString() + "/git-upload-pack"; String url = smartAuthNoneURI.toString() + "/git-upload-pack";
HttpConnection c = HttpTransport.getConnectionFactory() HttpConnection c = HttpTransport.getConnectionFactory()
.create(new URL(url)); .create(new URL(url));

View File

@ -1333,6 +1333,8 @@ public void testFetch_RefsUnreadableOnUpload() throws Exception {
new DfsRepositoryDescription(repoName)); new DfsRepositoryDescription(repoName));
final TestRepository<Repository> repo = new TestRepository<>( final TestRepository<Repository> repo = new TestRepository<>(
badRefsRepo); badRefsRepo);
badRefsRepo.getConfig().setInt("protocol", null, "version",
enableProtocolV2 ? 2 : 0);
ServletContextHandler app = noRefServer.addContext("/git"); ServletContextHandler app = noRefServer.addContext("/git");
GitServlet gs = new GitServlet(); GitServlet gs = new GitServlet();
@ -1362,7 +1364,8 @@ public void testFetch_RefsUnreadableOnUpload() throws Exception {
Collections.<ObjectId> emptySet()); Collections.<ObjectId> emptySet());
fail("Successfully served ref with value " + c.getRef(master)); fail("Successfully served ref with value " + c.getRef(master));
} catch (TransportException err) { } catch (TransportException err) {
assertEquals("Internal server error", err.getMessage()); assertTrue("Unexpected exception message " + err.getMessage(),
err.getMessage().contains("Internal server error"));
} }
} finally { } finally {
noRefServer.tearDown(); noRefServer.tearDown();

View File

@ -723,7 +723,8 @@ public void setCachedPackUriProvider(@Nullable CachedPackUriProvider p) {
} }
private boolean useProtocolV2() { private boolean useProtocolV2() {
return ProtocolVersion.V2.equals(transferConfig.protocolVersion) return (transferConfig.protocolVersion == null
|| ProtocolVersion.V2.equals(transferConfig.protocolVersion))
&& clientRequestedV2; && clientRequestedV2;
} }