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()))) {