Index: test/java/org/apache/ivy/resolver/ChainResolverTest.java
===================================================================
--- test/java/org/apache/ivy/resolver/ChainResolverTest.java (revision 499713)
+++ test/java/org/apache/ivy/resolver/ChainResolverTest.java (working copy)
@@ -348,6 +348,7 @@
chain.setName("chain");
chain.setIvy(_ivy);
chain.setReturnFirst(true);
+ chain.setCheckmodified(true);
// no pattern for first resolver: will not find the module
resolver = new FileSystemResolver();
Index: .classpath
===================================================================
--- .classpath (revision 499713)
+++ .classpath (working copy)
@@ -3,12 +3,21 @@
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
Index: src/java/org/apache/ivy/conf/ivyconf-default-chain.xml
===================================================================
--- src/java/org/apache/ivy/conf/ivyconf-default-chain.xml (revision 499713)
+++ src/java/org/apache/ivy/conf/ivyconf-default-chain.xml (working copy)
@@ -1,6 +1,6 @@
-
+
Index: src/java/org/apache/ivy/resolver/ChainResolver.java
===================================================================
--- src/java/org/apache/ivy/resolver/ChainResolver.java (revision 499713)
+++ src/java/org/apache/ivy/resolver/ChainResolver.java (working copy)
@@ -32,6 +32,7 @@
import org.apache.ivy.DependencyResolver;
import org.apache.ivy.Ivy;
import org.apache.ivy.LatestStrategy;
+import org.apache.ivy.ModuleRevisionId;
import org.apache.ivy.ResolveData;
import org.apache.ivy.ResolvedModuleRevision;
import org.apache.ivy.report.ArtifactDownloadReport;
@@ -65,6 +66,7 @@
private boolean _returnFirst = false;
private List _chain = new ArrayList();
private boolean _dual;
+ private Boolean _checkmodified = null;
public void add(DependencyResolver resolver) {
_chain.add(resolver);
@@ -76,10 +78,27 @@
List errors = new ArrayList();
+ ResolvedModuleRevision mr = null;
+
+ ModuleRevisionId mrid = dd.getDependencyRevisionId();
+
+ boolean isDynamic = getIvy().getVersionMatcher().isDynamic(mrid);
+
+ boolean isChangingRevision = getChangingMatcher().matches(mrid.getRevision());
+ boolean isChangingDependency = isChangingRevision || dd.isChanging();
+
+ if (!isDynamic && !isCheckmodified() && !isChangingDependency) {
+ Message.verbose("chain " + getName() + ": not dynamic, not check modified and not changing. Checking cache for: "+mrid);
+ mr = findModuleInCache(data, mrid, true);
+ if (mr != null) {
+ Message.verbose("chain " + getName() + ": module revision found in cache: "+mrid);
+ return resolvedRevision(mr);
+ }
+ }
+
for (Iterator iter = _chain.iterator(); iter.hasNext();) {
DependencyResolver resolver = (DependencyResolver) iter.next();
LatestStrategy oldLatest = setLatestIfRequired(resolver, getLatestStrategy());
- ResolvedModuleRevision mr = null;
try {
mr = resolver.getDependency(dd, data);
} catch (Exception ex) {
@@ -282,4 +301,26 @@
return _dual;
}
+ /**
+ * True if this resolver should check lastmodified date to know if ivy files are up to date.
+ * @return
+ */
+ public boolean isCheckmodified() {
+ if (_checkmodified == null) {
+ if (getIvy() != null) {
+ String check = getIvy().getVariable("ivy.resolver.default.check.modified");
+ return check != null ? Boolean.valueOf(check).booleanValue() : false;
+ } else {
+ return false;
+ }
+ } else {
+ return _checkmodified.booleanValue();
+ }
+ }
+
+
+ public void setCheckmodified(boolean check) {
+ _checkmodified = Boolean.valueOf(check);
+ }
+
}
Index: src/java/org/apache/ivy/resolver/AbstractResolver.java
===================================================================
--- src/java/org/apache/ivy/resolver/AbstractResolver.java (revision 499713)
+++ src/java/org/apache/ivy/resolver/AbstractResolver.java (working copy)
@@ -261,11 +261,15 @@
}
protected ResolvedModuleRevision findModuleInCache(ResolveData data, ModuleRevisionId mrid) {
+ return findModuleInCache(data, mrid, false);
+ }
+
+ protected ResolvedModuleRevision findModuleInCache(ResolveData data, ModuleRevisionId mrid, boolean anyResolver) {
ResolvedModuleRevision moduleFromCache = data.getIvy().findModuleInCache(toSystem(mrid), data.getCache(), doValidate(data));
if (moduleFromCache == null) {
return null;
}
- if ((getName() == null ?
+ if (anyResolver || (getName() == null ?
moduleFromCache.getResolver().getName() == null :
moduleFromCache.getResolver() == null ? false :
getName().equals(moduleFromCache.getResolver().getName()))) {