Bug 442576 - Allow to disable WebDav support Automatically disabled WebDAV mode when detecting a repository manager
Project: http://git-wip-us.apache.org/repos/asf/maven-aether/repo Commit: http://git-wip-us.apache.org/repos/asf/maven-aether/commit/9440b371 Tree: http://git-wip-us.apache.org/repos/asf/maven-aether/tree/9440b371 Diff: http://git-wip-us.apache.org/repos/asf/maven-aether/diff/9440b371 Branch: refs/heads/master Commit: 9440b371a669b8c0d21ba235858a792b83ca22ce Parents: cd3cb86 Author: Benjamin Bentmann <bentm...@sonatype.com> Authored: Sat Aug 30 21:50:53 2014 +0200 Committer: Benjamin Bentmann <bentm...@sonatype.com> Committed: Sat Aug 30 21:50:53 2014 +0200 ---------------------------------------------------------------------- .../aether/transport/http/HttpTransporter.java | 10 +++++- .../transport/http/HttpTransporterTest.java | 34 ++++++++++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/maven-aether/blob/9440b371/aether-transport-http/src/main/java/org/eclipse/aether/transport/http/HttpTransporter.java ---------------------------------------------------------------------- diff --git a/aether-transport-http/src/main/java/org/eclipse/aether/transport/http/HttpTransporter.java b/aether-transport-http/src/main/java/org/eclipse/aether/transport/http/HttpTransporter.java index a801373..5ac9b8f 100644 --- a/aether-transport-http/src/main/java/org/eclipse/aether/transport/http/HttpTransporter.java +++ b/aether-transport-http/src/main/java/org/eclipse/aether/transport/http/HttpTransporter.java @@ -338,7 +338,15 @@ final class HttpTransporter private boolean isWebDav( HttpResponse response ) { - return response.containsHeader( HttpHeaders.DAV ); + return response.containsHeader( HttpHeaders.DAV ) && !isWebDavOptional( response ); + } + + private boolean isWebDavOptional( HttpResponse response ) + { + Header header = response.getFirstHeader( HttpHeaders.SERVER ); + String server = ( header != null ) ? header.getValue() : null; + // repository managers don't need webdav mode and work fine with straight puts + return server != null && ( server.startsWith( "Artifactory/" ) || server.startsWith( "Nexus/" ) ); } private void mkdirs( URI uri, SharingHttpContext context ) http://git-wip-us.apache.org/repos/asf/maven-aether/blob/9440b371/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpTransporterTest.java ---------------------------------------------------------------------- diff --git a/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpTransporterTest.java b/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpTransporterTest.java index 14ec31e..0ebe893 100644 --- a/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpTransporterTest.java +++ b/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpTransporterTest.java @@ -851,6 +851,40 @@ public class HttpTransporterTest } @Test + public void testPut_WebDavOptional_AutomaticallyDisabled_Artifactory() + throws Exception + { + testPut_WebDavOptional_AutomaticallyDisabled( "Artifactory/3.3.0" ); + } + + @Test + public void testPut_WebDavOptional_AutomaticallyDisabled_Nexus() + throws Exception + { + testPut_WebDavOptional_AutomaticallyDisabled( "Nexus/2.9.0-02" ); + } + + private void testPut_WebDavOptional_AutomaticallyDisabled( String server ) + throws Exception + { + httpServer.setServer( server ); + httpServer.setWebDav( HttpServer.WebDav.OPTIONAL ); + RecordingTransportListener listener = new RecordingTransportListener(); + PutTask task = + new PutTask( URI.create( "repo/dir1/dir2/file.txt" ) ).setListener( listener ).setDataString( "upload" ); + transporter.put( task ); + assertEquals( 0, listener.dataOffset ); + assertEquals( 6, listener.dataLength ); + assertEquals( 1, listener.startedCount ); + assertTrue( "Count: " + listener.progressedCount, listener.progressedCount > 0 ); + assertEquals( "upload", TestFileUtils.readString( new File( repoDir, "dir1/dir2/file.txt" ) ) ); + + assertEquals( httpServer.getLogEntries().toString(), 2, httpServer.getLogEntries().size() ); + assertEquals( "OPTIONS", httpServer.getLogEntries().get( 0 ).method ); + assertEquals( "PUT", httpServer.getLogEntries().get( 1 ).method ); + } + + @Test public void testPut_FileHandleLeak() throws Exception {