In continuation of commit 7131e1c028e0035de548c6b37e1e8c9624417440, make sure the...
authorJaikiran Pai <jaikiran@apache.org>
Sun, 19 Aug 2018 14:32:35 +0000 (20:02 +0530)
committerJaikiran Pai <jaikiran@apache.org>
Sun, 19 Aug 2018 14:34:01 +0000 (20:04 +0530)
src/java/org/apache/ivy/core/cache/ArtifactOrigin.java
src/java/org/apache/ivy/core/cache/DefaultRepositoryCacheManager.java

index e65a683..e2a5d47 100644 (file)
@@ -20,6 +20,9 @@ package org.apache.ivy.core.cache;
 import org.apache.ivy.core.module.descriptor.Artifact;
 import org.apache.ivy.util.Checks;
 
+import java.net.MalformedURLException;
+import java.net.URL;
+
 /**
  * This class contains information about the origin of an artifact.
  *
@@ -110,6 +113,23 @@ public class ArtifactOrigin {
         this.location = location;
     }
 
+    // the "location" of an ArtifactOrigin is expected to be URL. However,
+    // in certain versions of Ivy we used to save just the path as the location
+    // instead of the URL form. Here we try and read it as a URL. If it can be
+    // read as a URL, we return the URL#getPath. However, if it can't be read
+    // as a URL, then considering backward compatibility, we treat the "location"
+    // as a path and return it back.
+    String getLocationPath() {
+        if (this.location == null) {
+            return null;
+        }
+        try {
+            return new URL(this.location).getPath();
+        } catch (MalformedURLException e) {
+            return this.location;
+        }
+    }
+
     /**
      * Return the artifact that this location is pointing at.
      *
index 91257b0..1eb562f 100644 (file)
@@ -384,7 +384,7 @@ public class DefaultRepositoryCacheManager implements RepositoryCacheManager, Iv
     public File getArchiveFileInCache(Artifact artifact, ArtifactOrigin origin) {
         File archive = new File(getRepositoryCacheRoot(), getArchivePathInCache(artifact, origin));
         if (!archive.exists() && !ArtifactOrigin.isUnknown(origin) && origin.isLocal()) {
-            File original = Checks.checkAbsolute(origin.getLocation(), artifact
+            File original = Checks.checkAbsolute(origin.getLocationPath(), artifact
                     + " origin location");
             if (original.exists()) {
                 return original;
@@ -406,7 +406,7 @@ public class DefaultRepositoryCacheManager implements RepositoryCacheManager, Iv
      */
     private File getArchiveFileInCache(Artifact artifact, ArtifactOrigin origin, boolean useOrigin) {
         if (useOrigin && !ArtifactOrigin.isUnknown(origin) && origin.isLocal()) {
-            return Checks.checkAbsolute(origin.getLocation(), artifact + " origin location");
+            return Checks.checkAbsolute(origin.getLocationPath(), artifact + " origin location");
         }
         return new File(getRepositoryCacheRoot(), getArchivePathInCache(artifact, origin));
     }