Author: maartenc
Date: Fri Oct 23 22:09:20 2009
New Revision: 829259
URL: http://svn.apache.org/viewvc?rev=829259&view=rev
Log:
FIX: IvyNodeEviction.cleanEvicted has bad comparison logic (IVY-1118)
Modified:
ant/ivy/core/trunk/CHANGES.txt
ant/ivy/core/trunk/src/java/org/apache/ivy/core/resolve/ResolveEngine.java
Modified: ant/ivy/core/trunk/CHANGES.txt
URL:
http://svn.apache.org/viewvc/ant/ivy/core/trunk/CHANGES.txt?rev=829259&r1=829258&r2=829259&view=diff
==============================================================================
--- ant/ivy/core/trunk/CHANGES.txt (original)
+++ ant/ivy/core/trunk/CHANGES.txt Fri Oct 23 22:09:20 2009
@@ -97,6 +97,7 @@
- IMPROVEMENT: Trace a message when a property file referenced from the
settings doesn't exixts (IVY-1074)
- IMPROVEMENT: use defaultconf in combination with defaultconfmapping
(IVY-1135) (thanks to Jon Schneider)
+- FIX: IvyNodeEviction.cleanEvicted has bad comparison logic (IVY-1118)
- FIX: ChainResolver doesn't pass the specified 'checkmodified' attribute to
the cache (IVY-1133)
- FIX: Ivy couldn't handle maven POMs that depend on theirselves
- FIX: SearchEngine.listModules returns MRID without extra attributes
(IVY-1128) (thanks to Michael Scheetz)
Modified:
ant/ivy/core/trunk/src/java/org/apache/ivy/core/resolve/ResolveEngine.java
URL:
http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/core/resolve/ResolveEngine.java?rev=829259&r1=829258&r2=829259&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/core/resolve/ResolveEngine.java
(original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/core/resolve/ResolveEngine.java
Fri Oct 23 22:09:20 2009
@@ -70,6 +70,8 @@
import org.apache.ivy.util.Message;
import org.apache.ivy.util.filter.Filter;
+import sun.security.krb5.internal.ccache.ar;
+
/**
* The resolve engine which is the core of the dependency resolution mechanism
used in Ivy. It
* features several resolve methods, some very simple, like {...@link
#resolve(File)} and
@@ -338,48 +340,133 @@
.toArray(new Artifact[report.getArtifacts().size()])));
long totalSize = 0;
- for (int i = 0; i < dependencies.length; i++) {
- checkInterrupted();
- // download artifacts required in all asked configurations
- if (!dependencies[i].isCompletelyEvicted() &&
!dependencies[i].hasProblem()
- && dependencies[i].getModuleRevision() != null) {
- DependencyResolver resolver =
dependencies[i].getModuleRevision()
- .getArtifactResolver();
- Artifact[] selectedArtifacts =
dependencies[i].getSelectedArtifacts(artifactFilter);
- DownloadReport dReport = resolver.download(selectedArtifacts,
options);
- ArtifactDownloadReport[] adrs = dReport.getArtifactsReports();
- for (int j = 0; j < adrs.length; j++) {
- if (adrs[j].getDownloadStatus() == DownloadStatus.FAILED) {
- if
(adrs[j].getArtifact().getExtraAttribute("ivy:merged") != null) {
- Message.warn("\tmerged artifact not found: " +
adrs[j].getArtifact()
- + ". It was required in "
- +
adrs[j].getArtifact().getExtraAttribute("ivy:merged"));
- } else {
- Message.warn("\t" + adrs[j]);
- resolver.reportFailure(adrs[j].getArtifact());
+
+ List deps = Collections.synchronizedList(new
ArrayList(Arrays.asList(dependencies)));
+
+ DownloadThread t1 = new DownloadThread(deps, report, artifactFilter,
options);
+ DownloadThread t2 = new DownloadThread(deps, report, artifactFilter,
options);
+ DownloadThread t3 = new DownloadThread(deps, report, artifactFilter,
options);
+ DownloadThread t4 = new DownloadThread(deps, report, artifactFilter,
options);
+ DownloadThread t5 = new DownloadThread(deps, report, artifactFilter,
options);
+
+ t1.start();
+ t2.start();
+ t3.start();
+ t4.start();
+ t5.start();
+
+ while (t1.isAlive() || t2.isAlive() || t3.isAlive() || t4.isAlive() ||
t5.isAlive()) {
+ // wait for all threads to finish
+ }
+
+// for (int i = 0; i < dependencies.length; i++) {
+// checkInterrupted();
+// // download artifacts required in all asked configurations
+// if (!dependencies[i].isCompletelyEvicted() &&
!dependencies[i].hasProblem()
+// && dependencies[i].getModuleRevision() != null) {
+// DependencyResolver resolver =
dependencies[i].getModuleRevision()
+// .getArtifactResolver();
+// Artifact[] selectedArtifacts =
dependencies[i].getSelectedArtifacts(artifactFilter);
+// DownloadReport dReport =
resolver.download(selectedArtifacts, options);
+// ArtifactDownloadReport[] adrs =
dReport.getArtifactsReports();
+// for (int j = 0; j < adrs.length; j++) {
+// if (adrs[j].getDownloadStatus() ==
DownloadStatus.FAILED) {
+// if
(adrs[j].getArtifact().getExtraAttribute("ivy:merged") != null) {
+// Message.warn("\tmerged artifact not found: " +
adrs[j].getArtifact()
+// + ". It was required in "
+// +
adrs[j].getArtifact().getExtraAttribute("ivy:merged"));
+// } else {
+// Message.warn("\t" + adrs[j]);
+// resolver.reportFailure(adrs[j].getArtifact());
+// }
+// } else if (adrs[j].getDownloadStatus() ==
DownloadStatus.SUCCESSFUL) {
+// totalSize += adrs[j].getSize();
+// }
+// }
+// // update concerned reports
+// String[] dconfs =
dependencies[i].getRootModuleConfigurations();
+// for (int j = 0; j < dconfs.length; j++) {
+// // the report itself is responsible to take into account
only
+// // artifacts required in its corresponding configuration
+// // (as described by the Dependency object)
+// if (dependencies[i].isEvicted(dconfs[j])
+// || dependencies[i].isBlacklisted(dconfs[j])) {
+//
report.getConfigurationReport(dconfs[j]).addDependency(dependencies[i]);
+// } else {
+//
report.getConfigurationReport(dconfs[j]).addDependency(dependencies[i],
+// dReport);
+// }
+// }
+// }
+// }
+ report.setDownloadTime(System.currentTimeMillis() - start);
+ report.setDownloadSize(totalSize);
+ }
+
+ private static class DownloadThread extends Thread {
+
+ private List artifactsToDownload;
+ private ResolveReport report;
+ private Filter artifactFilter;
+ private DownloadOptions options;
+
+ private boolean finished;
+
+ public DownloadThread(List artifactsToDownload, ResolveReport report,
Filter artifactFilter, DownloadOptions options) {
+ this.artifactsToDownload = artifactsToDownload;
+ this.report = report;
+ this.artifactFilter = artifactFilter;
+ this.options = options;
+ }
+
+ public void run() {
+ while (!artifactsToDownload.isEmpty()) {
+ IvyNode dependency = (IvyNode) artifactsToDownload.remove(0);
+
+// System.out.println(Thread.currentThread() + "downloading " +
dependency);
+
+ if (!dependency.isCompletelyEvicted() &&
!dependency.hasProblem()
+ && dependency.getModuleRevision() != null) {
+ System.out.println(Thread.currentThread() + "downloading "
+ dependency);
+ DependencyResolver resolver =
dependency.getModuleRevision()
+ .getArtifactResolver();
+ Artifact[] selectedArtifacts =
dependency.getSelectedArtifacts(artifactFilter);
+ DownloadReport dReport =
resolver.download(selectedArtifacts, options);
+ ArtifactDownloadReport[] adrs =
dReport.getArtifactsReports();
+ for (int j = 0; j < adrs.length; j++) {
+ System.out.println(adrs[j]);
+ if (adrs[j].getDownloadStatus() ==
DownloadStatus.FAILED) {
+ if
(adrs[j].getArtifact().getExtraAttribute("ivy:merged") != null) {
+ Message.warn("\tmerged artifact not found: " +
adrs[j].getArtifact()
+ + ". It was required in "
+ +
adrs[j].getArtifact().getExtraAttribute("ivy:merged"));
+ } else {
+ Message.warn("\t" + adrs[j]);
+ resolver.reportFailure(adrs[j].getArtifact());
+ }
+ } else if (adrs[j].getDownloadStatus() ==
DownloadStatus.SUCCESSFUL) {
+// totalSize += adrs[j].getSize();
}
- } else if (adrs[j].getDownloadStatus() ==
DownloadStatus.SUCCESSFUL) {
- totalSize += adrs[j].getSize();
}
- }
- // update concerned reports
- String[] dconfs =
dependencies[i].getRootModuleConfigurations();
- for (int j = 0; j < dconfs.length; j++) {
- // the report itself is responsible to take into account
only
- // artifacts required in its corresponding configuration
- // (as described by the Dependency object)
- if (dependencies[i].isEvicted(dconfs[j])
- || dependencies[i].isBlacklisted(dconfs[j])) {
-
report.getConfigurationReport(dconfs[j]).addDependency(dependencies[i]);
- } else {
-
report.getConfigurationReport(dconfs[j]).addDependency(dependencies[i],
- dReport);
+ // update concerned reports
+ String[] dconfs = dependency.getRootModuleConfigurations();
+ for (int j = 0; j < dconfs.length; j++) {
+ // the report itself is responsible to take into
account only
+ // artifacts required in its corresponding
configuration
+ // (as described by the Dependency object)
+ if (dependency.isEvicted(dconfs[j])
+ || dependency.isBlacklisted(dconfs[j])) {
+
report.getConfigurationReport(dconfs[j]).addDependency(dependency);
+ } else {
+
report.getConfigurationReport(dconfs[j]).addDependency(dependency,
+ dReport);
+ }
}
}
+
+
}
}
- report.setDownloadTime(System.currentTimeMillis() - start);
- report.setDownloadSize(totalSize);
}
/**