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);
     }
 
     /**


Reply via email to