diff --git a/doc/release-notes.html b/doc/release-notes.html
index 0c349947..3c514c0b 100644
--- a/doc/release-notes.html
+++ b/doc/release-notes.html
@@ -62,6 +62,7 @@ List of changes since Ivy 2.4.0:
- FIX: PomModuleDescriptorParser should parse licenses from parent POM (IVY-1526) (Thanks to Jaikiran Pai)
- FIX: dynamic revisions are not cached per resolver (IVY-1430) (Thanks to Stephen Haberman)
- FIX: Dependencies failed using branch attribute (and extra attributes) (IVY-1141) (Thanks to Stephen Haberman)
+- FIX: useCacheOnly should allow lookup of changing dependencies in cache (IVY-1515) (Thanks to Ilya)
- IMPROVEMENT: Optimization: limit the revision numbers scanned if revision prefix is specified (Thanks to Ernestas Vaiciukevičius)
@@ -141,6 +142,7 @@ Here is the list of people who have contributed source code and documentation up
Scott Hebert
Payam Hekmat
Achim Huegen
+Ilya
Matt Inger
Anders Jacobsson
Anders Janmyr
diff --git a/src/java/org/apache/ivy/core/cache/CacheMetadataOptions.java b/src/java/org/apache/ivy/core/cache/CacheMetadataOptions.java
index a1c77b48..8f827c49 100644
--- a/src/java/org/apache/ivy/core/cache/CacheMetadataOptions.java
+++ b/src/java/org/apache/ivy/core/cache/CacheMetadataOptions.java
@@ -32,6 +32,8 @@ public class CacheMetadataOptions extends CacheDownloadOptions {
private boolean checkTTL = true;
+ private boolean useCacheOnly = false;
+
public Namespace getNamespace() {
return namespace;
}
@@ -85,4 +87,13 @@ public class CacheMetadataOptions extends CacheDownloadOptions {
public boolean isCheckTTL() {
return checkTTL;
}
+
+ public CacheMetadataOptions setUseCacheOnly(boolean useCacheOnly) {
+ this.useCacheOnly = useCacheOnly;
+ return this;
+ }
+
+ public boolean isUseCacheOnly() {
+ return useCacheOnly;
+ }
}
diff --git a/src/java/org/apache/ivy/core/cache/DefaultRepositoryCacheManager.java b/src/java/org/apache/ivy/core/cache/DefaultRepositoryCacheManager.java
index f6b22069..d6f33b75 100644
--- a/src/java/org/apache/ivy/core/cache/DefaultRepositoryCacheManager.java
+++ b/src/java/org/apache/ivy/core/cache/DefaultRepositoryCacheManager.java
@@ -686,7 +686,7 @@ public class DefaultRepositoryCacheManager implements RepositoryCacheManager, Iv
Message.verbose("don't use cache for " + mrid + ": checkModified=true");
return null;
}
- if (isChanging(dd, requestedRevisionId, options)) {
+ if (!options.isUseCacheOnly() && isChanging(dd, requestedRevisionId, options)) {
Message.verbose("don't use cache for " + mrid + ": changing=true");
return null;
}
diff --git a/src/java/org/apache/ivy/plugins/resolver/AbstractResolver.java b/src/java/org/apache/ivy/plugins/resolver/AbstractResolver.java
index ef422d4d..7c5af9e4 100644
--- a/src/java/org/apache/ivy/plugins/resolver/AbstractResolver.java
+++ b/src/java/org/apache/ivy/plugins/resolver/AbstractResolver.java
@@ -435,6 +435,7 @@ public abstract class AbstractResolver implements DependencyResolver, HasLatestS
.setCheckmodified(
data.getOptions().isUseCacheOnly() ? Boolean.FALSE : checkmodified)
.setValidate(doValidate(data)).setNamespace(getNamespace())
+ .setUseCacheOnly(data.getOptions().isUseCacheOnly())
.setForce(data.getOptions().isRefresh())
.setListener(getDownloadListener(getDownloadOptions(data.getOptions())));
}
diff --git a/test/java/org/apache/ivy/core/resolve/ResolveTest.java b/test/java/org/apache/ivy/core/resolve/ResolveTest.java
index 234e4696..7f734d42 100644
--- a/test/java/org/apache/ivy/core/resolve/ResolveTest.java
+++ b/test/java/org/apache/ivy/core/resolve/ResolveTest.java
@@ -5599,6 +5599,27 @@ public class ResolveTest extends TestCase {
assertFalse(report.hasError());
}
+ public void testUseCacheOnlyWithChanging() throws Exception {
+ ResolveOptions option = getResolveOptions(new String[] {"*"});
+ option.setValidate(false);
+
+ ivy.getSettings().setDefaultUseOrigin(true);
+
+ URL url = new File("test/repositories/1/usecacheonly/mod4/ivys/ivy-1.0.xml").toURI()
+ .toURL();
+
+ // normal resolve, the file goes in the cache
+ ResolveReport report = ivy.resolve(url, option);
+ assertFalse(report.hasError());
+
+ option.setUseCacheOnly(true);
+
+ // use cache only, hit the cache
+ report = ivy.resolve(url, option);
+ assertFalse(report.hasError());
+
+ }
+
public void testUnpack() throws Exception {
ResolveOptions options = getResolveOptions(new String[] {"*"});
diff --git a/test/repositories/1/usecacheonly/mod4/ivys/ivy-1.0.xml b/test/repositories/1/usecacheonly/mod4/ivys/ivy-1.0.xml
new file mode 100644
index 00000000..233e65e0
--- /dev/null
+++ b/test/repositories/1/usecacheonly/mod4/ivys/ivy-1.0.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/test/repositories/1/usecacheonly/mod4/jars/mod4-1.0.jar b/test/repositories/1/usecacheonly/mod4/jars/mod4-1.0.jar
new file mode 100644
index 00000000..945c9b46
--- /dev/null
+++ b/test/repositories/1/usecacheonly/mod4/jars/mod4-1.0.jar
@@ -0,0 +1 @@
+.
\ No newline at end of file
diff --git a/test/repositories/1/usecacheonly/mod5/ivys/ivy-1.0.0-SNAPSHOT.xml b/test/repositories/1/usecacheonly/mod5/ivys/ivy-1.0.0-SNAPSHOT.xml
new file mode 100644
index 00000000..16e04157
--- /dev/null
+++ b/test/repositories/1/usecacheonly/mod5/ivys/ivy-1.0.0-SNAPSHOT.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
diff --git a/test/repositories/1/usecacheonly/mod5/jars/mod5-1.0.0-SNAPSHOT.jar b/test/repositories/1/usecacheonly/mod5/jars/mod5-1.0.0-SNAPSHOT.jar
new file mode 100644
index 00000000..945c9b46
--- /dev/null
+++ b/test/repositories/1/usecacheonly/mod5/jars/mod5-1.0.0-SNAPSHOT.jar
@@ -0,0 +1 @@
+.
\ No newline at end of file