diff --git a/pom.xml b/pom.xml index 7e743c1..53271b9 100644 --- a/pom.xml +++ b/pom.xml @@ -13,8 +13,8 @@ Standard Maven wagon support for s3:// urls - 1.11.276 - 3.0.0 + 1.11.762 + 3.3.4 1.7.25 1.2.3 4.12 @@ -30,7 +30,7 @@ com.amazonaws - aws-java-sdk + aws-java-sdk-s3 ${amazonaws.version} diff --git a/src/main/java/com/github/platform/team/plugin/AmazonS3Wagon.java b/src/main/java/com/github/platform/team/plugin/AmazonS3Wagon.java index 31742be..bc15687 100644 --- a/src/main/java/com/github/platform/team/plugin/AmazonS3Wagon.java +++ b/src/main/java/com/github/platform/team/plugin/AmazonS3Wagon.java @@ -92,13 +92,9 @@ public AmazonS3Wagon() { this.baseDirectory = baseDirectory; } - private static ObjectMetadata getObjectMetadata(AmazonS3 amazonS3, String bucketName, String baseDirectory, - String resourceName) { - return amazonS3.getObjectMetadata(bucketName, getKey(baseDirectory, resourceName)); - } - private static String getKey(String baseDirectory, String resourceName) { - return String.format(KEY_FORMAT, baseDirectory, resourceName); + return String.format(KEY_FORMAT, baseDirectory, resourceName) + .replaceAll("/[^/]+/{1,}\\.\\./","/"); } private static List getResourceNames(ObjectListing objectListing, Pattern pattern) { @@ -185,7 +181,7 @@ protected void disconnectFromRepository() { @Override protected boolean doesRemoteResourceExist(String resourceName) { try { - getObjectMetadata(this.amazonS3, this.bucketName, this.baseDirectory, resourceName); + this.amazonS3.getObjectMetadata(this.bucketName, getKey(this.baseDirectory, resourceName)); return true; } catch (AmazonServiceException e) { return false; @@ -195,7 +191,7 @@ protected boolean doesRemoteResourceExist(String resourceName) { @Override protected boolean isRemoteResourceNewer(String resourceName, long timestamp) throws ResourceDoesNotExistException { try { - Date lastModified = getObjectMetadata(this.amazonS3, this.bucketName, this.baseDirectory, resourceName) + Date lastModified = this.amazonS3.getObjectMetadata(this.bucketName, getKey(this.baseDirectory, resourceName)) .getLastModified(); return lastModified == null || lastModified.getTime() > timestamp; } catch (AmazonServiceException e) { @@ -225,7 +221,6 @@ protected List listDirectory(String directory) throws ResourceDoesNotExi objectListing = this.amazonS3.listObjects(listObjectsRequest); directoryContents.addAll(getResourceNames(objectListing, pattern)); } - return directoryContents; } catch (AmazonServiceException e) { throw new ResourceDoesNotExistException(String.format("'%s' does not exist", directory), e); @@ -239,7 +234,6 @@ protected void getResource(String resourceName, File destination, TransferProgre OutputStream out = null; try { S3Object s3Object = this.amazonS3.getObject(this.bucketName, getKey(this.baseDirectory, resourceName)); - in = s3Object.getObjectContent(); out = new TransferProgressFileOutputStream(destination, transferProgress); @@ -271,7 +265,6 @@ protected void putResource(File source, String destination, TransferProgress tra objectMetadata.setSSEAlgorithm(ObjectMetadata.AES_256_SERVER_SIDE_ENCRYPTION); in = new TransferProgressFileInputStream(source, transferProgress); - this.amazonS3.putObject(new PutObjectRequest(this.bucketName, key, in, objectMetadata)); } catch (AmazonServiceException e) { throw new TransferFailedException(String.format("Cannot write file to '%s'", destination), e); diff --git a/src/main/java/com/github/platform/team/plugin/maven/AbstractWagon.java b/src/main/java/com/github/platform/team/plugin/maven/AbstractWagon.java index 69525a2..3ffb50a 100644 --- a/src/main/java/com/github/platform/team/plugin/maven/AbstractWagon.java +++ b/src/main/java/com/github/platform/team/plugin/maven/AbstractWagon.java @@ -239,7 +239,17 @@ public final void putDirectory(File sourceDirectory, String destinationDirectory File[] files = sourceDirectory.listFiles(); if (files != null) { for (File f : files) { - put(f, destinationDirectory + "/" + f.getName()); + String name; + if (destinationDirectory.equals("./")) { + name = f.getName(); + } else { + name = destinationDirectory + "/" + f.getName(); + } + if (f.isFile()) { + put(f, name); + } else if (f.isDirectory()) { + putDirectory(f, name); + } } } }