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