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 gs...@apache.org on 2007/10/21 19:09:01 UTC
svn commit: r586936 - in /incubator/ivy/core/trunk:
src/java/org/apache/ivy/core/sort/ModuleDescriptorSorter.java
src/java/org/apache/ivy/core/sort/ModuleInSort.java
test/java/org/apache/ivy/core/sort/SortTest.java
Author: gscokart
Date: Sun Oct 21 12:09:00 2007
New Revision: 586936
URL: http://svn.apache.org/viewvc?rev=586936&view=rev
Log:
Remove infinite loop in some case of circular dependencies (IVY-624)
Modified:
incubator/ivy/core/trunk/src/java/org/apache/ivy/core/sort/ModuleDescriptorSorter.java
incubator/ivy/core/trunk/src/java/org/apache/ivy/core/sort/ModuleInSort.java
incubator/ivy/core/trunk/test/java/org/apache/ivy/core/sort/SortTest.java
Modified: incubator/ivy/core/trunk/src/java/org/apache/ivy/core/sort/ModuleDescriptorSorter.java
URL: http://svn.apache.org/viewvc/incubator/ivy/core/trunk/src/java/org/apache/ivy/core/sort/ModuleDescriptorSorter.java?rev=586936&r1=586935&r2=586936&view=diff
==============================================================================
--- incubator/ivy/core/trunk/src/java/org/apache/ivy/core/sort/ModuleDescriptorSorter.java (original)
+++ incubator/ivy/core/trunk/src/java/org/apache/ivy/core/sort/ModuleDescriptorSorter.java Sun Oct 21 12:09:00 2007
@@ -83,7 +83,7 @@
private void sortModuleDescriptorsHelp(ModuleInSort current, ModuleInSort caller)
throws CircularDependencyException {
// if already sorted return
- if (current.isSorted()) {
+ if (current.isProcessed()) {
return;
}
if (current.checkLoop(caller, circularDepStrategy)) {
Modified: incubator/ivy/core/trunk/src/java/org/apache/ivy/core/sort/ModuleInSort.java
URL: http://svn.apache.org/viewvc/incubator/ivy/core/trunk/src/java/org/apache/ivy/core/sort/ModuleInSort.java?rev=586936&r1=586935&r2=586936&view=diff
==============================================================================
--- incubator/ivy/core/trunk/src/java/org/apache/ivy/core/sort/ModuleInSort.java (original)
+++ incubator/ivy/core/trunk/src/java/org/apache/ivy/core/sort/ModuleInSort.java Sun Oct 21 12:09:00 2007
@@ -65,6 +65,7 @@
return isLoopIntermediateElement;
}
+ /** This ModuleInSort has been placed on the sorted list */
public boolean isSorted() {
if (isSorted) {
Message.debug("Module descriptor already sorted : "
@@ -75,6 +76,21 @@
}
}
+ /** This ModuleInSort has already been analyzed. It is either already added
+ * to the sorted list, either it is included in a loop and will be added
+ * when the root of the loop will be added to the list.
+ */
+ public boolean isProcessed() {
+ if (isSorted || isLoopIntermediateElement) {
+ Message.debug("Module descriptor is processed : "
+ + module.getModuleRevisionId().toString());
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+
public void setCaller(ModuleInSort caller) {
this.caller = caller;
}
Modified: incubator/ivy/core/trunk/test/java/org/apache/ivy/core/sort/SortTest.java
URL: http://svn.apache.org/viewvc/incubator/ivy/core/trunk/test/java/org/apache/ivy/core/sort/SortTest.java?rev=586936&r1=586935&r2=586936&view=diff
==============================================================================
--- incubator/ivy/core/trunk/test/java/org/apache/ivy/core/sort/SortTest.java (original)
+++ incubator/ivy/core/trunk/test/java/org/apache/ivy/core/sort/SortTest.java Sun Oct 21 12:09:00 2007
@@ -17,6 +17,7 @@
*/
package org.apache.ivy.core.sort;
+import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
@@ -32,6 +33,7 @@
import org.apache.ivy.core.module.descriptor.DependencyDescriptor;
import org.apache.ivy.core.module.descriptor.ModuleDescriptor;
import org.apache.ivy.core.module.id.ModuleRevisionId;
+import org.apache.ivy.core.report.ResolveReport;
import org.apache.ivy.plugins.circular.CircularDependencyHelper;
import org.apache.ivy.plugins.circular.CircularDependencyStrategy;
import org.apache.ivy.plugins.circular.WarnCircularDependencyStrategy;
@@ -130,6 +132,19 @@
}
}
+ //Test IVY-624
+ public void testCircularDependencyInfiniteLoop() throws Exception {
+ addDependency(md1, "md2", "rev2");
+ addDependency(md1, "md3", "rev3");
+ addDependency(md2, "md3", "rev3");
+ addDependency(md3, "md4", "rev4");
+ addDependency(md4, "md1", "rev1");
+ addDependency(md4, "md2", "rev2");
+ List toSort = Arrays.asList(new Object[] {md1, md2, md3, md4});
+ sortEngine.sortModuleDescriptors(toSort, nonMatchReporter);
+ //If it ends, it's ok.
+ }
+
/**
* In case of Circular dependency a warning is generated.
*/