You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ivy-commits@incubator.apache.org by xa...@apache.org on 2007/03/30 07:01:08 UTC
svn commit: r523965 - in /incubator/ivy/core/trunk: ./
src/java/org/apache/ivy/core/ src/java/org/apache/ivy/plugins/resolver/
src/java/org/apache/ivy/plugins/resolver/util/
test/java/org/apache/ivy/plugins/resolver/ test/java/org/apache/ivy/util/
Author: xavier
Date: Fri Mar 30 00:01:06 2007
New Revision: 523965
URL: http://svn.apache.org/viewvc?view=rev&rev=523965
Log:
FIX: Invalid error report with m2compatible resolver (IVY-456)
Added:
incubator/ivy/core/trunk/test/java/org/apache/ivy/util/MockMessageImpl.java
Modified:
incubator/ivy/core/trunk/CHANGES.txt
incubator/ivy/core/trunk/src/java/org/apache/ivy/core/IvyContext.java
incubator/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/AbstractResourceResolver.java
incubator/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/BasicResolver.java
incubator/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/CacheResolver.java
incubator/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/IBiblioResolver.java
incubator/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/RepositoryResolver.java
incubator/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/util/ResolverHelper.java
incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/resolver/IBiblioResolverTest.java
Modified: incubator/ivy/core/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/incubator/ivy/core/trunk/CHANGES.txt?view=diff&rev=523965&r1=523964&r2=523965
==============================================================================
--- incubator/ivy/core/trunk/CHANGES.txt (original)
+++ incubator/ivy/core/trunk/CHANGES.txt Fri Mar 30 00:01:06 2007
@@ -58,6 +58,7 @@
- IMPROVE: New "modules in use" section in console report at the end of resolve (IVY-373) (thanks to John Wiliams)
- IMPROVE: Generated XML reports now contains more information about the resolved module (IVY-446)
+- FIX: Invalid error report with m2compatible resolver (IVY-456)
- FIX: IvyPostResolve Task doesn't use specified cache for the resolve (IVY-453)
- FIX: XmlModuleDescriptorWriterTest not working with Java 6 (IVY-374)
- FIX: Conflict managers ignored, when assigned to modules in Ivy configuration (setting, ivyconf.xml) (IVY-448)
Modified: incubator/ivy/core/trunk/src/java/org/apache/ivy/core/IvyContext.java
URL: http://svn.apache.org/viewvc/incubator/ivy/core/trunk/src/java/org/apache/ivy/core/IvyContext.java?view=diff&rev=523965&r1=523964&r2=523965
==============================================================================
--- incubator/ivy/core/trunk/src/java/org/apache/ivy/core/IvyContext.java (original)
+++ incubator/ivy/core/trunk/src/java/org/apache/ivy/core/IvyContext.java Fri Mar 30 00:01:06 2007
@@ -21,12 +21,14 @@
import java.lang.ref.WeakReference;
import java.util.HashMap;
import java.util.Map;
+import java.util.Stack;
import org.apache.ivy.Ivy;
import org.apache.ivy.core.cache.CacheManager;
import org.apache.ivy.core.event.EventManager;
import org.apache.ivy.core.settings.IvySettings;
import org.apache.ivy.plugins.circular.CircularDependencyStrategy;
+import org.apache.ivy.plugins.resolver.DependencyResolver;
import org.apache.ivy.util.MessageImpl;
@@ -49,11 +51,13 @@
private WeakReference _ivy = new WeakReference(null);
private File _cache;
private MessageImpl _messageImpl;
+ private Stack _resolver = new Stack(); // Stack(DependencyResolver)
private Map _contextMap = new HashMap();
private Thread _operatingThread;
+
public static IvyContext getContext() {
IvyContext cur = (IvyContext)_current.get();
@@ -153,6 +157,18 @@
public void checkInterrupted() {
getIvy().checkInterrupted();
+ }
+
+ public DependencyResolver getResolver() {
+ return (DependencyResolver) _resolver.peek();
+ }
+
+ public void pushResolver(DependencyResolver resolver) {
+ _resolver.push(resolver);
+ }
+
+ public void popResolver() {
+ _resolver.pop();
}
// should be better to use context to store this kind of information, but not yet ready to do so...
Modified: incubator/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/AbstractResourceResolver.java
URL: http://svn.apache.org/viewvc/incubator/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/AbstractResourceResolver.java?view=diff&rev=523965&r1=523964&r2=523965
==============================================================================
--- incubator/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/AbstractResourceResolver.java (original)
+++ incubator/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/AbstractResourceResolver.java Fri Mar 30 00:01:06 2007
@@ -116,15 +116,18 @@
Date date) {
ResolvedResource found = null;
List sorted = strategy.sort(rress);
+ List rejected = new ArrayList();
for (ListIterator iter = sorted.listIterator(sorted.size()); iter.hasPrevious();) {
ResolvedResource rres = (ResolvedResource) iter.previous();
if ((date != null && rres.getLastModified() > date.getTime())) {
- Message.debug("\t"+name+": too young: "+rres);
+ Message.verbose("\t"+name+": too young: "+rres);
+ rejected.add(rres.getRevision()+" ("+rres.getLastModified()+")");
continue;
}
ModuleRevisionId foundMrid = ModuleRevisionId.newInstance(mrid, rres.getRevision());
if (!versionMatcher.accept(mrid, foundMrid)) {
Message.debug("\t"+name+": rejected by version matcher: "+rres);
+ rejected.add(rres.getRevision());
continue;
}
if (versionMatcher.needModuleDescriptor(mrid, foundMrid)) {
@@ -132,9 +135,11 @@
ModuleDescriptor md = ((MDResolvedResource)r).getResolvedModuleRevision().getDescriptor();
if (md.isDefault()) {
Message.debug("\t"+name+": default md rejected by version matcher requiring module descriptor: "+rres);
+ rejected.add(rres.getRevision()+" (MD)");
continue;
} else if (!versionMatcher.accept(mrid, md)) {
Message.debug("\t"+name+": md rejected by version matcher: "+rres);
+ rejected.add(rres.getRevision()+" (MD)");
continue;
} else {
found = r;
@@ -146,73 +151,77 @@
if (found != null) {
if (!found.getResource().exists()) {
Message.debug("\t"+name+": resource not reachable for "+mrid+": res="+found.getResource());
+ logAttempt(found.getResource().toString());
continue;
}
break;
}
}
+ if (found == null && !rejected.isEmpty()) {
+ logAttempt(rejected.toString());
+ }
return found;
}
- /**
- * Output message to log indicating what have been done to look for an artifact which
- * has finally not been found
- *
- * @param artifact the artifact which has not been found
- */
- protected void logIvyNotFound(ModuleRevisionId mrid) {
- if (isM2compatible()) {
- mrid = convertM2IdForResourceSearch(mrid);
- }
- Artifact artifact = DefaultArtifact.newIvyArtifact(mrid, null);
- logMdNotFound(mrid, artifact);
- }
-
- protected void logMdNotFound(ModuleRevisionId mrid, Artifact artifact) {
- String revisionToken = mrid.getRevision().startsWith("latest.")?"[any "+mrid.getRevision().substring("latest.".length())+"]":"["+mrid.getRevision()+"]";
- Artifact latestArtifact = new DefaultArtifact(ModuleRevisionId.newInstance(mrid, revisionToken), null, artifact.getName(), artifact.getType(), artifact.getExt(), artifact.getExtraAttributes());
- if (_ivyPatterns.isEmpty()) {
- logIvyAttempt("no ivy pattern => no attempt to find module descriptor file for "+mrid);
- } else {
- for (Iterator iter = _ivyPatterns.iterator(); iter.hasNext();) {
- String pattern = (String)iter.next();
- String resolvedFileName = IvyPatternHelper.substitute(pattern, artifact);
- logIvyAttempt(resolvedFileName);
- if (getSettings().getVersionMatcher().isDynamic(mrid)) {
- resolvedFileName = IvyPatternHelper.substitute(pattern, latestArtifact);
- logIvyAttempt(resolvedFileName);
- }
- }
- }
- }
+// /**
+// * Output message to log indicating what have been done to look for an artifact which
+// * has finally not been found
+// *
+// * @param artifact the artifact which has not been found
+// */
+// protected void logIvyNotFound(ModuleRevisionId mrid) {
+// if (isM2compatible()) {
+// mrid = convertM2IdForResourceSearch(mrid);
+// }
+// Artifact artifact = DefaultArtifact.newIvyArtifact(mrid, null);
+// logMdNotFound(mrid, artifact);
+// }
+//
+// protected void logMdNotFound(ModuleRevisionId mrid, Artifact artifact) {
+// String revisionToken = mrid.getRevision().startsWith("latest.")?"[any "+mrid.getRevision().substring("latest.".length())+"]":"["+mrid.getRevision()+"]";
+// Artifact latestArtifact = new DefaultArtifact(ModuleRevisionId.newInstance(mrid, revisionToken), null, artifact.getName(), artifact.getType(), artifact.getExt(), artifact.getExtraAttributes());
+// if (_ivyPatterns.isEmpty()) {
+// logIvyAttempt("no ivy pattern => no attempt to find module descriptor file for "+mrid);
+// } else {
+// for (Iterator iter = _ivyPatterns.iterator(); iter.hasNext();) {
+// String pattern = (String)iter.next();
+// String resolvedFileName = IvyPatternHelper.substitute(pattern, artifact);
+// logIvyAttempt(resolvedFileName);
+// if (getSettings().getVersionMatcher().isDynamic(mrid)) {
+// resolvedFileName = IvyPatternHelper.substitute(pattern, latestArtifact);
+// logIvyAttempt(resolvedFileName);
+// }
+// }
+// }
+// }
- /**
- * Output message to log indicating what have been done to look for an artifact which
- * has finally not been found
- *
- * @param artifact the artifact which has not been found
- */
- protected void logArtifactNotFound(Artifact artifact) {
- if (_artifactPatterns.isEmpty()) {
- if (artifact.getUrl() == null) {
- logArtifactAttempt(artifact, "no artifact pattern => no attempt to find artifact "+artifact);
- }
- }
- Artifact used = artifact;
- if (isM2compatible()) {
- used = DefaultArtifact.cloneWithAnotherMrid(artifact, convertM2IdForResourceSearch(artifact.getModuleRevisionId()));
- }
-
- for (Iterator iter = _artifactPatterns.iterator(); iter.hasNext();) {
- String pattern = (String)iter.next();
- String resolvedFileName = IvyPatternHelper.substitute(pattern, used);
- logArtifactAttempt(artifact, resolvedFileName);
- }
- if (used.getUrl() != null) {
- logArtifactAttempt(artifact, used.getUrl().toString());
- }
- }
+// /**
+// * Output message to log indicating what have been done to look for an artifact which
+// * has finally not been found
+// *
+// * @param artifact the artifact which has not been found
+// */
+// protected void logArtifactNotFound(Artifact artifact) {
+// if (_artifactPatterns.isEmpty()) {
+// if (artifact.getUrl() == null) {
+// logArtifactAttempt(artifact, "no artifact pattern => no attempt to find artifact "+artifact);
+// }
+// }
+// Artifact used = artifact;
+// if (isM2compatible()) {
+// used = DefaultArtifact.cloneWithAnotherMrid(artifact, convertM2IdForResourceSearch(artifact.getModuleRevisionId()));
+// }
+//
+// for (Iterator iter = _artifactPatterns.iterator(); iter.hasNext();) {
+// String pattern = (String)iter.next();
+// String resolvedFileName = IvyPatternHelper.substitute(pattern, used);
+// logArtifactAttempt(artifact, resolvedFileName);
+// }
+// if (used.getUrl() != null) {
+// logArtifactAttempt(artifact, used.getUrl().toString());
+// }
+// }
protected Collection findNames(Map tokenValues, String token) {
Collection names = new HashSet();
Modified: incubator/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/BasicResolver.java
URL: http://svn.apache.org/viewvc/incubator/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/BasicResolver.java?view=diff&rev=523965&r1=523964&r2=523965
==============================================================================
--- incubator/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/BasicResolver.java (original)
+++ incubator/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/BasicResolver.java Fri Mar 30 00:01:06 2007
@@ -33,6 +33,7 @@
import java.util.ListIterator;
import java.util.Map;
+import org.apache.ivy.core.IvyContext;
import org.apache.ivy.core.IvyPatternHelper;
import org.apache.ivy.core.cache.ArtifactOrigin;
import org.apache.ivy.core.cache.CacheManager;
@@ -99,7 +100,7 @@
private String _checksums = null;
private URLRepository _extartifactrep = new URLRepository(); // used only to download external artifacts
-
+
public BasicResolver() {
_workspaceName = HostUtil.getLocalHostName();
}
@@ -143,202 +144,204 @@
}
public ResolvedModuleRevision getDependency(DependencyDescriptor dd, ResolveData data) throws ParseException {
- DependencyDescriptor systemDd = dd;
- dd = fromSystem(dd);
-
- clearIvyAttempts();
- boolean downloaded = false;
- boolean searched = false;
- ModuleRevisionId mrid = dd.getDependencyRevisionId();
- // check revision
- int index = mrid.getRevision().indexOf("@");
- if (index != -1 && !mrid.getRevision().substring(index+1).equals(_workspaceName)) {
- Message.verbose("\t"+getName()+": unhandled revision => "+mrid.getRevision());
- return null;
- }
-
- boolean isDynamic = getSettings().getVersionMatcher().isDynamic(mrid);
- if (isDynamic && !acceptLatest()) {
- Message.error("dynamic revisions not handled by "+getClass().getName()+". impossible to resolve "+mrid);
- return null;
- }
-
- boolean isChangingRevision = getChangingMatcher().matches(mrid.getRevision());
- boolean isChangingDependency = isChangingRevision || dd.isChanging();
-
- // if we do not have to check modified and if the revision is exact and not changing,
- // we first search for it in cache
- ResolvedModuleRevision cachedRmr = null;
- boolean checkedCache = false;
- if (!isDynamic && !isCheckmodified() && !isChangingDependency) {
- cachedRmr = findModuleInCache(data, mrid);
- checkedCache = true;
- if (cachedRmr != null) {
- if (cachedRmr.getDescriptor().isDefault() && cachedRmr.getResolver() != this) {
- Message.verbose("\t"+getName()+": found revision in cache: "+mrid+" (resolved by "+cachedRmr.getResolver().getName()+"): but it's a default one, maybe we can find a better one");
- } else {
- Message.verbose("\t"+getName()+": revision in cache: "+mrid);
- return toSystem(cachedRmr);
- }
- }
- }
- checkInterrupted();
- URL cachedIvyURL = null;
- ResolvedResource ivyRef = findIvyFileRef(dd, data);
- checkInterrupted();
- searched = true;
-
- // get module descriptor
- ModuleDescriptorParser parser;
- ModuleDescriptor md;
- ModuleDescriptor systemMd = null;
- if (ivyRef == null) {
- if (!isAllownomd()) {
- Message.verbose("\t"+getName()+": no ivy file found for "+mrid);
- logIvyNotFound(mrid);
- return null;
- }
- parser = XmlModuleDescriptorParser.getInstance();
- md = DefaultModuleDescriptor.newDefaultInstance(mrid, dd.getAllDependencyArtifactsIncludes());
- ResolvedResource artifactRef = findFirstArtifactRef(md, dd, data);
- checkInterrupted();
- if (artifactRef == null) {
- Message.verbose("\t"+getName()+": no ivy file nor artifact found for "+mrid);
- logIvyNotFound(mrid);
- String[] conf = md.getConfigurationsNames();
- for (int i = 0; i < conf.length; i++) {
- Artifact[] artifacts = md.getArtifacts(conf[i]);
- for (int j = 0; j < artifacts.length; j++) {
- logArtifactNotFound(artifacts[j]);
- }
- }
- if (!checkedCache) {
- cachedRmr = findModuleInCache(data, mrid);
- }
- if (cachedRmr != null) {
- Message.verbose("\t"+getName()+": revision in cache: "+mrid);
- return toSystem(cachedRmr);
- }
- return null;
- } else {
- long lastModified = artifactRef.getLastModified();
- if (lastModified != 0 && md instanceof DefaultModuleDescriptor) {
- ((DefaultModuleDescriptor) md).setLastModified(lastModified);
- }
- Message.verbose("\t"+getName()+": no ivy file found for "+mrid+": using default data");
- logIvyNotFound(mrid);
- if (isDynamic) {
- md.setResolvedModuleRevisionId(ModuleRevisionId.newInstance(mrid, artifactRef.getRevision()));
- }
- }
- } else {
- ResolvedModuleRevision rmr = null;
- if (ivyRef instanceof MDResolvedResource) {
- rmr = ((MDResolvedResource)ivyRef).getResolvedModuleRevision();
- }
- if (rmr == null) {
- rmr = parse(ivyRef, dd, data);
- if (rmr == null) {
- return null;
- }
- }
- if (!rmr.isDownloaded()) {
- return toSystem(rmr);
- } else {
- md = rmr.getDescriptor();
- parser = ModuleDescriptorParserRegistry.getInstance().getParser(ivyRef.getResource());
- cachedIvyURL = rmr.getLocalMDUrl();
-
- // check descriptor data is in sync with resource revision and names
- systemMd = toSystem(md);
- if (_checkconsistency) {
- checkDescriptorConsistency(mrid, md, ivyRef);
- checkDescriptorConsistency(systemDd.getDependencyRevisionId(), systemMd, ivyRef);
- } else {
- if (md instanceof DefaultModuleDescriptor) {
- String revision = getRevision(ivyRef, mrid, md);
- ((DefaultModuleDescriptor)md).setModuleRevisionId(ModuleRevisionId.newInstance(mrid, revision));
- } else {
- Message.warn("consistency disabled with instance of non DefaultModuleDescriptor... module info can't be updated, so consistency check will be done");
- checkDescriptorConsistency(mrid, md, ivyRef);
- checkDescriptorConsistency(systemDd.getDependencyRevisionId(), systemMd, ivyRef);
- }
- }
- }
- }
-
- if (systemMd == null) {
- systemMd = toSystem(md);
- }
-
- // resolve revision
- ModuleRevisionId resolvedMrid = mrid;
- if (isDynamic) {
- resolvedMrid = md.getResolvedModuleRevisionId();
- if (resolvedMrid.getRevision() == null || resolvedMrid.getRevision().length() == 0) {
- if (ivyRef.getRevision() == null || ivyRef.getRevision().length() == 0) {
- resolvedMrid = ModuleRevisionId.newInstance(resolvedMrid, "working@"+getName());
- } else {
- resolvedMrid = ModuleRevisionId.newInstance(resolvedMrid, ivyRef.getRevision());
- }
- }
- Message.verbose("\t\t["+resolvedMrid.getRevision()+"] "+mrid.getModuleId());
- }
- md.setResolvedModuleRevisionId(resolvedMrid);
- systemMd.setResolvedModuleRevisionId(toSystem(resolvedMrid)); // keep system md in sync with md
-
- // check module descriptor revision
- if (!getSettings().getVersionMatcher().accept(mrid, md)) {
- Message.info("\t"+getName()+": unacceptable revision => was="+md.getModuleRevisionId().getRevision()+" required="+mrid.getRevision());
- return null;
- }
-
-
- // resolve and check publication date
- if (data.getDate() != null) {
- long pubDate = getPublicationDate(md, dd, data);
- if (pubDate > data.getDate().getTime()) {
- Message.info("\t"+getName()+": unacceptable publication date => was="+new Date(pubDate)+" required="+data.getDate());
- return null;
- } else if (pubDate == -1) {
- Message.info("\t"+getName()+": impossible to guess publication date: artifact missing for "+mrid);
- return null;
- }
- md.setResolvedPublicationDate(new Date(pubDate));
- systemMd.setResolvedPublicationDate(new Date(pubDate)); // keep system md in sync with md
- }
-
- try {
- File ivyFile = data.getCacheManager().getIvyFileInCache(systemMd.getResolvedModuleRevisionId());
- if (ivyRef == null) {
- // a basic ivy file is written containing default data
- XmlModuleDescriptorWriter.write(systemMd, ivyFile);
- } else {
- if (md instanceof DefaultModuleDescriptor) {
- DefaultModuleDescriptor dmd = (DefaultModuleDescriptor)md;
- if (data.getSettings().logNotConvertedExclusionRule() && dmd.isNamespaceUseful()) {
- Message.warn("the module descriptor "+ivyRef.getResource()+" has information which can't be converted into the system namespace. It will require the availability of the namespace '"+getNamespace().getName()+"' to be fully usable.");
- }
- }
- // copy and update ivy file from source to cache
- parser.toIvyFile(cachedIvyURL.openStream(), ivyRef.getResource(), ivyFile, systemMd);
- long repLastModified = ivyRef.getLastModified();
- if (repLastModified > 0) {
- ivyFile.setLastModified(repLastModified);
- }
- }
- } catch (Exception e) {
- if (ivyRef == null) {
- Message.warn("impossible to create ivy file in cache for module : " + resolvedMrid);
- } else {
- e.printStackTrace();
- Message.warn("impossible to copy ivy file to cache : "+ivyRef.getResource());
- }
- }
-
- data.getCacheManager().saveResolver(systemMd, getName());
- data.getCacheManager().saveArtResolver(systemMd, getName());
- return new DefaultModuleRevision(this, this, systemMd, searched, downloaded, cachedIvyURL);
+ IvyContext.getContext().pushResolver(this);
+ try {
+ DependencyDescriptor systemDd = dd;
+ dd = fromSystem(dd);
+
+ clearIvyAttempts();
+ clearArtifactAttempts();
+ boolean downloaded = false;
+ boolean searched = false;
+ ModuleRevisionId mrid = dd.getDependencyRevisionId();
+ // check revision
+ int index = mrid.getRevision().indexOf("@");
+ if (index != -1 && !mrid.getRevision().substring(index+1).equals(_workspaceName)) {
+ Message.verbose("\t"+getName()+": unhandled revision => "+mrid.getRevision());
+ return null;
+ }
+
+ boolean isDynamic = getSettings().getVersionMatcher().isDynamic(mrid);
+ if (isDynamic && !acceptLatest()) {
+ Message.error("dynamic revisions not handled by "+getClass().getName()+". impossible to resolve "+mrid);
+ return null;
+ }
+
+ boolean isChangingRevision = getChangingMatcher().matches(mrid.getRevision());
+ boolean isChangingDependency = isChangingRevision || dd.isChanging();
+
+ // if we do not have to check modified and if the revision is exact and not changing,
+ // we first search for it in cache
+ ResolvedModuleRevision cachedRmr = null;
+ boolean checkedCache = false;
+ if (!isDynamic && !isCheckmodified() && !isChangingDependency) {
+ cachedRmr = findModuleInCache(data, mrid);
+ checkedCache = true;
+ if (cachedRmr != null) {
+ if (cachedRmr.getDescriptor().isDefault() && cachedRmr.getResolver() != this) {
+ Message.verbose("\t"+getName()+": found revision in cache: "+mrid+" (resolved by "+cachedRmr.getResolver().getName()+"): but it's a default one, maybe we can find a better one");
+ } else {
+ Message.verbose("\t"+getName()+": revision in cache: "+mrid);
+ return toSystem(cachedRmr);
+ }
+ }
+ }
+ checkInterrupted();
+ URL cachedIvyURL = null;
+ ResolvedResource ivyRef = findIvyFileRef(dd, data);
+ checkInterrupted();
+ searched = true;
+
+ // get module descriptor
+ ModuleDescriptorParser parser;
+ ModuleDescriptor md;
+ ModuleDescriptor systemMd = null;
+ if (ivyRef == null) {
+ if (!isAllownomd()) {
+ Message.verbose("\t"+getName()+": no ivy file found for "+mrid);
+ return null;
+ }
+ parser = XmlModuleDescriptorParser.getInstance();
+ md = DefaultModuleDescriptor.newDefaultInstance(mrid, dd.getAllDependencyArtifactsIncludes());
+ ResolvedResource artifactRef = findFirstArtifactRef(md, dd, data);
+ checkInterrupted();
+ if (artifactRef == null) {
+ Message.verbose("\t"+getName()+": no ivy file nor artifact found for "+mrid);
+ String[] conf = md.getConfigurationsNames();
+ for (int i = 0; i < conf.length; i++) {
+ Artifact[] artifacts = md.getArtifacts(conf[i]);
+ for (int j = 0; j < artifacts.length; j++) {
+ }
+ }
+ if (!checkedCache) {
+ cachedRmr = findModuleInCache(data, mrid);
+ }
+ if (cachedRmr != null) {
+ Message.verbose("\t"+getName()+": revision in cache: "+mrid);
+ return toSystem(cachedRmr);
+ }
+ return null;
+ } else {
+ long lastModified = artifactRef.getLastModified();
+ if (lastModified != 0 && md instanceof DefaultModuleDescriptor) {
+ ((DefaultModuleDescriptor) md).setLastModified(lastModified);
+ }
+ Message.verbose("\t"+getName()+": no ivy file found for "+mrid+": using default data");
+ if (isDynamic) {
+ md.setResolvedModuleRevisionId(ModuleRevisionId.newInstance(mrid, artifactRef.getRevision()));
+ }
+ }
+ } else {
+ ResolvedModuleRevision rmr = null;
+ if (ivyRef instanceof MDResolvedResource) {
+ rmr = ((MDResolvedResource)ivyRef).getResolvedModuleRevision();
+ }
+ if (rmr == null) {
+ rmr = parse(ivyRef, dd, data);
+ if (rmr == null) {
+ return null;
+ }
+ }
+ if (!rmr.isDownloaded()) {
+ return toSystem(rmr);
+ } else {
+ md = rmr.getDescriptor();
+ parser = ModuleDescriptorParserRegistry.getInstance().getParser(ivyRef.getResource());
+ cachedIvyURL = rmr.getLocalMDUrl();
+
+ // check descriptor data is in sync with resource revision and names
+ systemMd = toSystem(md);
+ if (_checkconsistency) {
+ checkDescriptorConsistency(mrid, md, ivyRef);
+ checkDescriptorConsistency(systemDd.getDependencyRevisionId(), systemMd, ivyRef);
+ } else {
+ if (md instanceof DefaultModuleDescriptor) {
+ String revision = getRevision(ivyRef, mrid, md);
+ ((DefaultModuleDescriptor)md).setModuleRevisionId(ModuleRevisionId.newInstance(mrid, revision));
+ } else {
+ Message.warn("consistency disabled with instance of non DefaultModuleDescriptor... module info can't be updated, so consistency check will be done");
+ checkDescriptorConsistency(mrid, md, ivyRef);
+ checkDescriptorConsistency(systemDd.getDependencyRevisionId(), systemMd, ivyRef);
+ }
+ }
+ }
+ }
+
+ if (systemMd == null) {
+ systemMd = toSystem(md);
+ }
+
+ // resolve revision
+ ModuleRevisionId resolvedMrid = mrid;
+ if (isDynamic) {
+ resolvedMrid = md.getResolvedModuleRevisionId();
+ if (resolvedMrid.getRevision() == null || resolvedMrid.getRevision().length() == 0) {
+ if (ivyRef.getRevision() == null || ivyRef.getRevision().length() == 0) {
+ resolvedMrid = ModuleRevisionId.newInstance(resolvedMrid, "working@"+getName());
+ } else {
+ resolvedMrid = ModuleRevisionId.newInstance(resolvedMrid, ivyRef.getRevision());
+ }
+ }
+ Message.verbose("\t\t["+resolvedMrid.getRevision()+"] "+mrid.getModuleId());
+ }
+ md.setResolvedModuleRevisionId(resolvedMrid);
+ systemMd.setResolvedModuleRevisionId(toSystem(resolvedMrid)); // keep system md in sync with md
+
+ // check module descriptor revision
+ if (!getSettings().getVersionMatcher().accept(mrid, md)) {
+ Message.info("\t"+getName()+": unacceptable revision => was="+md.getModuleRevisionId().getRevision()+" required="+mrid.getRevision());
+ return null;
+ }
+
+
+ // resolve and check publication date
+ if (data.getDate() != null) {
+ long pubDate = getPublicationDate(md, dd, data);
+ if (pubDate > data.getDate().getTime()) {
+ Message.info("\t"+getName()+": unacceptable publication date => was="+new Date(pubDate)+" required="+data.getDate());
+ return null;
+ } else if (pubDate == -1) {
+ Message.info("\t"+getName()+": impossible to guess publication date: artifact missing for "+mrid);
+ return null;
+ }
+ md.setResolvedPublicationDate(new Date(pubDate));
+ systemMd.setResolvedPublicationDate(new Date(pubDate)); // keep system md in sync with md
+ }
+
+ try {
+ File ivyFile = data.getCacheManager().getIvyFileInCache(systemMd.getResolvedModuleRevisionId());
+ if (ivyRef == null) {
+ // a basic ivy file is written containing default data
+ XmlModuleDescriptorWriter.write(systemMd, ivyFile);
+ } else {
+ if (md instanceof DefaultModuleDescriptor) {
+ DefaultModuleDescriptor dmd = (DefaultModuleDescriptor)md;
+ if (data.getSettings().logNotConvertedExclusionRule() && dmd.isNamespaceUseful()) {
+ Message.warn("the module descriptor "+ivyRef.getResource()+" has information which can't be converted into the system namespace. It will require the availability of the namespace '"+getNamespace().getName()+"' to be fully usable.");
+ }
+ }
+ // copy and update ivy file from source to cache
+ parser.toIvyFile(cachedIvyURL.openStream(), ivyRef.getResource(), ivyFile, systemMd);
+ long repLastModified = ivyRef.getLastModified();
+ if (repLastModified > 0) {
+ ivyFile.setLastModified(repLastModified);
+ }
+ }
+ } catch (Exception e) {
+ if (ivyRef == null) {
+ Message.warn("impossible to create ivy file in cache for module : " + resolvedMrid);
+ } else {
+ e.printStackTrace();
+ Message.warn("impossible to copy ivy file to cache : "+ivyRef.getResource());
+ }
+ }
+
+ data.getCacheManager().saveResolver(systemMd, getName());
+ data.getCacheManager().saveArtResolver(systemMd, getName());
+ return new DefaultModuleRevision(this, this, systemMd, searched, downloaded, cachedIvyURL);
+ } finally {
+ IvyContext.getContext().popResolver();
+ }
}
private String getRevision(ResolvedResource ivyRef, ModuleRevisionId askedMrid, ModuleDescriptor md) throws ParseException {
@@ -605,30 +608,44 @@
Message.verbose("\t\ttried "+attempt);
}
+ protected static void logAttempt(String attempt) {
+ DependencyResolver resolver = IvyContext.getContext().getResolver();
+ if (resolver instanceof BasicResolver) {
+ Artifact currentArtifact = (Artifact) IvyContext.getContext().get(resolver.getName()+".artifact");
+ if (currentArtifact != null) {
+ ((BasicResolver) resolver).logArtifactAttempt(currentArtifact, attempt);
+ } else {
+ ((BasicResolver) resolver).logIvyAttempt(attempt);
+ }
+ }
+ }
+
public void reportFailure() {
+ Message.warn("==== "+getName()+": tried");
for (ListIterator iter = _ivyattempts.listIterator(); iter.hasNext();) {
String m = (String)iter.next();
- Message.warn("\t\t"+getName()+": tried "+m);
+ Message.warn(" "+m);
}
for (Iterator iter = _artattempts.keySet().iterator(); iter.hasNext();) {
Artifact art = (Artifact)iter.next();
List attempts = (List)_artattempts.get(art);
if (attempts != null) {
- Message.warn("\t\t"+getName()+": tried artifact "+art+":");
+ Message.warn(" -- artifact "+art+":");
for (ListIterator iterator = attempts.listIterator(); iterator.hasNext();) {
String m = (String)iterator.next();
- Message.warn("\t\t\t"+m);
+ Message.warn(" "+m);
}
}
}
}
public void reportFailure(Artifact art) {
+ Message.warn("==== "+getName()+": tried");
List attempts = (List)_artattempts.get(art);
if (attempts != null) {
for (ListIterator iter = attempts.listIterator(); iter.hasNext();) {
String m = (String)iter.next();
- Message.warn("\t\t"+getName()+": tried "+m);
+ Message.warn(" "+m);
}
}
}
@@ -638,107 +655,111 @@
}
public DownloadReport download(Artifact[] artifacts, DownloadOptions options) {
- CacheManager cacheManager = options.getCacheManager();
- EventManager eventManager = options.getEventManager();
-
- boolean useOrigin = options.isUseOrigin();
-
- clearArtifactAttempts();
- DownloadReport dr = new DownloadReport();
- for (int i = 0; i < artifacts.length; i++) {
- final ArtifactDownloadReport adr = new ArtifactDownloadReport(artifacts[i]);
- dr.addArtifactReport(adr);
- if (eventManager != null) {
- eventManager.fireIvyEvent(new NeedArtifactEvent(this, artifacts[i]));
- }
- ArtifactOrigin origin = cacheManager.getSavedArtifactOrigin(artifacts[i]);
- // if we can use origin file, we just ask ivy for the file in cache, and it will return
- // the original one if possible. If we are not in useOrigin mode, we use the getArchivePath
- // method which always return a path in the actual cache
- File archiveFile = cacheManager.getArchiveFileInCache(artifacts[i], origin, options.isUseOrigin());
-
- if (archiveFile.exists()) {
- Message.verbose("\t[NOT REQUIRED] "+artifacts[i]);
- adr.setDownloadStatus(DownloadStatus.NO);
- adr.setSize(archiveFile.length());
- adr.setArtifactOrigin(origin);
- } else {
- Artifact artifact = fromSystem(artifacts[i]);
- if (!artifact.equals(artifacts[i])) {
- Message.verbose("\t"+getName()+"looking for artifact "+artifact+ " (is "+artifacts[i]+" in system namespace)");
- }
- long start = System.currentTimeMillis();
- try {
- ResolvedResource artifactRef = getArtifactRef(artifact, null);
- if (artifactRef != null) {
- origin = new ArtifactOrigin(artifactRef.getResource().isLocal(), artifactRef.getResource().getName());
- if (useOrigin && artifactRef.getResource().isLocal()) {
- Message.verbose("\t[NOT REQUIRED] "+artifacts[i]);
- cacheManager.saveArtifactOrigin(artifacts[i], origin);
- archiveFile = cacheManager.getArchiveFileInCache(artifacts[i], origin);
- adr.setDownloadStatus(DownloadStatus.NO);
- adr.setSize(archiveFile.length());
- adr.setArtifactOrigin(origin);
- } else {
- // refresh archive file now that we better now its origin
- archiveFile = cacheManager.getArchiveFileInCache(artifacts[i], origin, useOrigin);
- if (ResourceHelper.equals(artifactRef.getResource(),
- archiveFile)) {
- Message.error("invalid configuration for resolver '"+getName()+"': pointing artifacts to ivy cache is forbidden !");
- return null;
- }
- Message.info("downloading "+artifactRef.getResource()+" ...");
- if (eventManager != null) {
- eventManager.fireIvyEvent(new StartArtifactDownloadEvent(this, artifacts[i], origin));
- }
-
- File tmp = cacheManager.getArchiveFileInCache(
- new DefaultArtifact(
- artifacts[i].getModuleRevisionId(),
- artifacts[i].getPublicationDate(),
- artifacts[i].getName(),
- artifacts[i].getType(),
- artifacts[i].getExt()+".part",
- artifacts[i].getExtraAttributes()),
- origin, useOrigin);
-
- // deal with artifact with url special case
- if (artifactRef.getResource().getName().equals(String.valueOf(artifacts[i].getUrl()))) {
- Message.verbose("\t"+getName()+": downloading "+artifactRef.getResource().getName());
- Message.debug("\t\tto "+tmp);
- if (tmp.getParentFile() != null) {
- tmp.getParentFile().mkdirs();
- }
- _extartifactrep.get(artifactRef.getResource().getName(), tmp);
- adr.setSize(tmp.length());
- } else {
- adr.setSize(getAndCheck(artifactRef.getResource(), tmp));
- }
- if (!tmp.renameTo(archiveFile)) {
- Message.warn("\t[FAILED ] "+artifacts[i]+" impossible to move temp file to definitive one ("+(System.currentTimeMillis()-start)+"ms)");
- adr.setDownloadStatus(DownloadStatus.FAILED);
- } else {
- cacheManager.saveArtifactOrigin(artifacts[i], origin);
- Message.info("\t[SUCCESSFUL ] "+artifacts[i]+" ("+(System.currentTimeMillis()-start)+"ms)");
- adr.setDownloadStatus(DownloadStatus.SUCCESSFUL);
- adr.setArtifactOrigin(origin);
- }
- }
- } else {
- logArtifactNotFound(artifacts[i]);
- adr.setDownloadStatus(DownloadStatus.FAILED);
- }
- } catch (Exception ex) {
- Message.warn("\t[FAILED ] "+artifacts[i]+" : "+ex.getMessage()+" ("+(System.currentTimeMillis()-start)+"ms)");
- adr.setDownloadStatus(DownloadStatus.FAILED);
- }
- checkInterrupted();
- }
- if (eventManager != null) {
- eventManager.fireIvyEvent(new EndArtifactDownloadEvent(this, artifacts[i], adr, archiveFile));
- }
- }
- return dr;
+ IvyContext.getContext().pushResolver(this);
+ try {
+ CacheManager cacheManager = options.getCacheManager();
+ EventManager eventManager = options.getEventManager();
+
+ boolean useOrigin = options.isUseOrigin();
+
+ clearArtifactAttempts();
+ DownloadReport dr = new DownloadReport();
+ for (int i = 0; i < artifacts.length; i++) {
+ final ArtifactDownloadReport adr = new ArtifactDownloadReport(artifacts[i]);
+ dr.addArtifactReport(adr);
+ if (eventManager != null) {
+ eventManager.fireIvyEvent(new NeedArtifactEvent(this, artifacts[i]));
+ }
+ ArtifactOrigin origin = cacheManager.getSavedArtifactOrigin(artifacts[i]);
+ // if we can use origin file, we just ask ivy for the file in cache, and it will return
+ // the original one if possible. If we are not in useOrigin mode, we use the getArchivePath
+ // method which always return a path in the actual cache
+ File archiveFile = cacheManager.getArchiveFileInCache(artifacts[i], origin, options.isUseOrigin());
+
+ if (archiveFile.exists()) {
+ Message.verbose("\t[NOT REQUIRED] "+artifacts[i]);
+ adr.setDownloadStatus(DownloadStatus.NO);
+ adr.setSize(archiveFile.length());
+ adr.setArtifactOrigin(origin);
+ } else {
+ Artifact artifact = fromSystem(artifacts[i]);
+ if (!artifact.equals(artifacts[i])) {
+ Message.verbose("\t"+getName()+"looking for artifact "+artifact+ " (is "+artifacts[i]+" in system namespace)");
+ }
+ long start = System.currentTimeMillis();
+ try {
+ ResolvedResource artifactRef = getArtifactRef(artifact, null);
+ if (artifactRef != null) {
+ origin = new ArtifactOrigin(artifactRef.getResource().isLocal(), artifactRef.getResource().getName());
+ if (useOrigin && artifactRef.getResource().isLocal()) {
+ Message.verbose("\t[NOT REQUIRED] "+artifacts[i]);
+ cacheManager.saveArtifactOrigin(artifacts[i], origin);
+ archiveFile = cacheManager.getArchiveFileInCache(artifacts[i], origin);
+ adr.setDownloadStatus(DownloadStatus.NO);
+ adr.setSize(archiveFile.length());
+ adr.setArtifactOrigin(origin);
+ } else {
+ // refresh archive file now that we better now its origin
+ archiveFile = cacheManager.getArchiveFileInCache(artifacts[i], origin, useOrigin);
+ if (ResourceHelper.equals(artifactRef.getResource(),
+ archiveFile)) {
+ Message.error("invalid configuration for resolver '"+getName()+"': pointing artifacts to ivy cache is forbidden !");
+ return null;
+ }
+ Message.info("downloading "+artifactRef.getResource()+" ...");
+ if (eventManager != null) {
+ eventManager.fireIvyEvent(new StartArtifactDownloadEvent(this, artifacts[i], origin));
+ }
+
+ File tmp = cacheManager.getArchiveFileInCache(
+ new DefaultArtifact(
+ artifacts[i].getModuleRevisionId(),
+ artifacts[i].getPublicationDate(),
+ artifacts[i].getName(),
+ artifacts[i].getType(),
+ artifacts[i].getExt()+".part",
+ artifacts[i].getExtraAttributes()),
+ origin, useOrigin);
+
+ // deal with artifact with url special case
+ if (artifactRef.getResource().getName().equals(String.valueOf(artifacts[i].getUrl()))) {
+ Message.verbose("\t"+getName()+": downloading "+artifactRef.getResource().getName());
+ Message.debug("\t\tto "+tmp);
+ if (tmp.getParentFile() != null) {
+ tmp.getParentFile().mkdirs();
+ }
+ _extartifactrep.get(artifactRef.getResource().getName(), tmp);
+ adr.setSize(tmp.length());
+ } else {
+ adr.setSize(getAndCheck(artifactRef.getResource(), tmp));
+ }
+ if (!tmp.renameTo(archiveFile)) {
+ Message.warn("\t[FAILED ] "+artifacts[i]+" impossible to move temp file to definitive one ("+(System.currentTimeMillis()-start)+"ms)");
+ adr.setDownloadStatus(DownloadStatus.FAILED);
+ } else {
+ cacheManager.saveArtifactOrigin(artifacts[i], origin);
+ Message.info("\t[SUCCESSFUL ] "+artifacts[i]+" ("+(System.currentTimeMillis()-start)+"ms)");
+ adr.setDownloadStatus(DownloadStatus.SUCCESSFUL);
+ adr.setArtifactOrigin(origin);
+ }
+ }
+ } else {
+ adr.setDownloadStatus(DownloadStatus.FAILED);
+ }
+ } catch (Exception ex) {
+ Message.warn("\t[FAILED ] "+artifacts[i]+" : "+ex.getMessage()+" ("+(System.currentTimeMillis()-start)+"ms)");
+ adr.setDownloadStatus(DownloadStatus.FAILED);
+ }
+ checkInterrupted();
+ }
+ if (eventManager != null) {
+ eventManager.fireIvyEvent(new EndArtifactDownloadEvent(this, artifacts[i], adr, archiveFile));
+ }
+ }
+ return dr;
+ } finally {
+ IvyContext.getContext().popResolver();
+ }
}
protected void clearArtifactAttempts() {
@@ -874,22 +895,24 @@
protected ResolvedResource getArtifactRef(Artifact artifact, Date date) {
- ResolvedResource ret = findArtifactRef(artifact, date);
- if (ret == null && artifact.getUrl() != null) {
- URL url = artifact.getUrl();
- Message.verbose("\tusing url for "+artifact+": "+url);
- ret = new ResolvedResource(new URLResource(url), artifact.getModuleRevisionId().getRevision());
- }
- return ret;
+ IvyContext.getContext().set(getName()+".artifact", artifact);
+ try {
+ ResolvedResource ret = findArtifactRef(artifact, date);
+ if (ret == null && artifact.getUrl() != null) {
+ URL url = artifact.getUrl();
+ Message.verbose("\tusing url for "+artifact+": "+url);
+ logArtifactAttempt(artifact, url.toExternalForm());
+ ret = new ResolvedResource(new URLResource(url), artifact.getModuleRevisionId().getRevision());
+ }
+ return ret;
+ } finally {
+ IvyContext.getContext().set(getName()+".artifact", null);
+ }
}
protected abstract ResolvedResource findArtifactRef(Artifact artifact, Date date);
protected abstract long get(Resource resource, File dest) throws IOException;
-
- protected abstract void logIvyNotFound(ModuleRevisionId mrid);
-
- protected abstract void logArtifactNotFound(Artifact artifact);
public boolean isCheckconsistency() {
return _checkconsistency;
Modified: incubator/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/CacheResolver.java
URL: http://svn.apache.org/viewvc/incubator/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/CacheResolver.java?view=diff&rev=523965&r1=523964&r2=523965
==============================================================================
--- incubator/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/CacheResolver.java (original)
+++ incubator/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/CacheResolver.java Fri Mar 30 00:01:06 2007
@@ -21,8 +21,10 @@
import java.io.IOException;
import java.text.ParseException;
import java.util.Collections;
+import java.util.Date;
import org.apache.ivy.core.module.descriptor.Artifact;
+import org.apache.ivy.core.module.descriptor.DefaultArtifact;
import org.apache.ivy.core.module.descriptor.DependencyDescriptor;
import org.apache.ivy.core.module.id.ModuleRevisionId;
import org.apache.ivy.core.report.ArtifactDownloadReport;
@@ -66,6 +68,7 @@
Message.verbose("\t"+getName()+": revision in cache: "+mrid);
return rmr;
} else {
+ logIvyAttempt(data.getCacheManager().getArchiveFileInCache(DefaultArtifact.newIvyArtifact(mrid, new Date())).getAbsolutePath());
Message.verbose("\t"+getName()+": no ivy file in cache found for "+mrid);
return null;
}
@@ -110,7 +113,7 @@
adr.setDownloadStatus(DownloadStatus.NO);
adr.setSize(archiveFile.length());
} else {
- logArtifactNotFound(artifacts[i]);
+ logArtifactAttempt(artifacts[i], archiveFile.getAbsolutePath());
adr.setDownloadStatus(DownloadStatus.FAILED);
}
}
Modified: incubator/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/IBiblioResolver.java
URL: http://svn.apache.org/viewvc/incubator/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/IBiblioResolver.java?view=diff&rev=523965&r1=523964&r2=523965
==============================================================================
--- incubator/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/IBiblioResolver.java (original)
+++ incubator/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/IBiblioResolver.java Fri Mar 30 00:01:06 2007
@@ -68,13 +68,6 @@
return null;
}
}
-
- protected void logIvyNotFound(ModuleRevisionId mrid) {
- if (isM2compatible() && isUsepoms()) {
- Artifact artifact = DefaultArtifact.newPomArtifact(mrid, null);
- logMdNotFound(mrid, artifact);
- }
- }
public void setM2compatible(boolean m2compatible) {
super.setM2compatible(m2compatible);
Modified: incubator/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/RepositoryResolver.java
URL: http://svn.apache.org/viewvc/incubator/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/RepositoryResolver.java?view=diff&rev=523965&r1=523964&r2=523965
==============================================================================
--- incubator/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/RepositoryResolver.java (original)
+++ incubator/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/RepositoryResolver.java Fri Mar 30 00:01:06 2007
@@ -88,6 +88,7 @@
if (!versionMatcher.isDynamic(mrid) || alwaysCheckExactRevision) {
String resourceName = IvyPatternHelper.substitute(pattern, mrid, artifact);
Message.debug("\t trying "+resourceName);
+ logAttempt(resourceName);
Resource res = repository.getResource(resourceName);
boolean reachable = res.exists();
if (reachable) {
@@ -117,6 +118,11 @@
String pattern,
Artifact artifact,
Date date) {
+ logAttempt(IvyPatternHelper.substitute(pattern,
+ ModuleRevisionId.newInstance(
+ mrid,
+ IvyPatternHelper.getTokenString(IvyPatternHelper.REVISION_KEY)),
+ artifact));
ResolvedResource[] rress = ResolverHelper.findAll(repository, mrid, pattern, artifact);
if (rress == null) {
Message.debug("\t"+name+": unable to list resources for "+mrid+": pattern="+pattern);
Modified: incubator/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/util/ResolverHelper.java
URL: http://svn.apache.org/viewvc/incubator/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/util/ResolverHelper.java?view=diff&rev=523965&r1=523964&r2=523965
==============================================================================
--- incubator/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/util/ResolverHelper.java (original)
+++ incubator/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/util/ResolverHelper.java Fri Mar 30 00:01:06 2007
@@ -85,7 +85,8 @@
return null;
}
} catch (Exception e) {
- Message.warn("problem while listing resources in "+root+" with "+rep+": "+e.getClass()+" "+e.getMessage());
+ Message.warn("problem while listing resources in "+root+" with "+rep+":");
+ Message.warn(" "+e.getClass().getName()+" "+e.getMessage());
return null;
}
}
@@ -113,7 +114,8 @@
return null;
}
} catch (Exception e) {
- Message.warn("problem while listing resources in "+parent+" with "+rep+": "+e.getClass()+" "+e.getMessage());
+ Message.warn("problem while listing resources in "+parent+" with "+rep+":");
+ Message.warn(" "+e.getClass().getName()+" "+e.getMessage());
return null;
}
}
Modified: incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/resolver/IBiblioResolverTest.java
URL: http://svn.apache.org/viewvc/incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/resolver/IBiblioResolverTest.java?view=diff&rev=523965&r1=523964&r2=523965
==============================================================================
--- incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/resolver/IBiblioResolverTest.java (original)
+++ incubator/ivy/core/trunk/test/java/org/apache/ivy/plugins/resolver/IBiblioResolverTest.java Fri Mar 30 00:01:06 2007
@@ -18,6 +18,7 @@
package org.apache.ivy.plugins.resolver;
import java.io.File;
+import java.text.ParseException;
import java.util.List;
import junit.framework.TestCase;
@@ -40,6 +41,8 @@
import org.apache.ivy.core.settings.IvySettings;
import org.apache.ivy.core.sort.SortEngine;
import org.apache.ivy.plugins.matcher.ExactPatternMatcher;
+import org.apache.ivy.util.Message;
+import org.apache.ivy.util.MockMessageImpl;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.taskdefs.Delete;
@@ -176,6 +179,25 @@
assertEquals(artifact, ar.getArtifact());
assertEquals(DownloadStatus.NO, ar.getDownloadStatus());
+ }
+
+ public void testErrorReport() throws Exception {
+ IBiblioResolver resolver = new IBiblioResolver();
+ resolver.setRoot("http://unknown.host.comx/");
+ resolver.setName("test");
+ resolver.setM2compatible(true);
+ resolver.setSettings(_settings);
+ assertEquals("test", resolver.getName());
+
+ MockMessageImpl mockMessageImpl = new MockMessageImpl();
+ Message.setImpl(mockMessageImpl);
+
+ ModuleRevisionId mrid = ModuleRevisionId.newInstance("org.apache", "commons-fileupload", "1.0");
+ ResolvedModuleRevision rmr = resolver.getDependency(new DefaultDependencyDescriptor(mrid, false), _data);
+ assertNull(rmr);
+
+ mockMessageImpl.assertLogContains("tried http://unknown.host.comx/org/apache/commons-fileupload/1.0/commons-fileupload-1.0.pom");
+ mockMessageImpl.assertLogContains("tried http://unknown.host.comx/org/apache/commons-fileupload/1.0/commons-fileupload-1.0.jar");
}
public void testIBiblioArtifacts() throws Exception {
Added: incubator/ivy/core/trunk/test/java/org/apache/ivy/util/MockMessageImpl.java
URL: http://svn.apache.org/viewvc/incubator/ivy/core/trunk/test/java/org/apache/ivy/util/MockMessageImpl.java?view=auto&rev=523965
==============================================================================
--- incubator/ivy/core/trunk/test/java/org/apache/ivy/util/MockMessageImpl.java (added)
+++ incubator/ivy/core/trunk/test/java/org/apache/ivy/util/MockMessageImpl.java Fri Mar 30 00:01:06 2007
@@ -0,0 +1,92 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.ivy.util;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import junit.framework.AssertionFailedError;
+
+public class MockMessageImpl implements MessageImpl {
+
+ private List _endProgress = new ArrayList();
+ private List _logs = new ArrayList();
+ private List _rawLogs = new ArrayList();
+ private int _progressCalls;
+
+ public void endProgress(String msg) {
+ _endProgress .add(msg);
+ }
+
+ public void log(String msg, int level) {
+ _logs.add(level+" "+msg);
+ }
+
+ public void progress() {
+ _progressCalls++;
+ }
+
+ public void rawlog(String msg, int level) {
+ _rawLogs.add(level+" "+msg);
+ }
+
+ public List getEndProgress() {
+ return _endProgress;
+ }
+
+ public List getLogs() {
+ return _logs;
+ }
+
+ public int getProgressCalls() {
+ return _progressCalls;
+ }
+
+ public List getRawLogs() {
+ return _rawLogs;
+ }
+
+ public void clear() {
+ _logs.clear();
+ _rawLogs.clear();
+ _endProgress.clear();
+ _progressCalls = 0;
+ }
+
+ public void assertLogContains(String message) {
+ for (Iterator iter = _logs.iterator(); iter.hasNext();) {
+ String log = (String) iter.next();
+ if (log.indexOf(message) != -1) {
+ return;
+ }
+ }
+ throw new AssertionFailedError("logs do not contain expected message: expected='"+message+"' logs='"+join(_logs)+"'" );
+
+ }
+
+ private String join(List logs) {
+ StringBuffer sb = new StringBuffer();
+ for (Iterator iter = logs.iterator(); iter.hasNext();) {
+ String log = (String) iter.next();
+ sb.append(log).append("\n");
+ }
+ return sb.toString();
+ }
+
+}