ant-notifications mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From maart...@apache.org
Subject svn commit: r1163390 - in /ant/ivy/core/trunk: ./ src/java/org/apache/ivy/plugins/conflict/ test/java/org/apache/ivy/core/resolve/ test/repositories/IVY-1233/ test/repositories/IVY-1233/test/ test/repositories/IVY-1233/test/a/ test/repositories/IVY-123...
Date Tue, 30 Aug 2011 21:15:04 GMT
Author: maartenc
Date: Tue Aug 30 21:15:03 2011
New Revision: 1163390

URL: http://svn.apache.org/viewvc?rev=1163390&view=rev
Log:
FIX: Infinite loop in latest-compatible conflict manager (IVY-1233) (thanks to Payam Hekmat)

Added:
    ant/ivy/core/trunk/test/repositories/IVY-1233/
    ant/ivy/core/trunk/test/repositories/IVY-1233/ivy.xml
    ant/ivy/core/trunk/test/repositories/IVY-1233/ivysettings.xml
    ant/ivy/core/trunk/test/repositories/IVY-1233/test/
    ant/ivy/core/trunk/test/repositories/IVY-1233/test/a/
    ant/ivy/core/trunk/test/repositories/IVY-1233/test/a/1.0/
    ant/ivy/core/trunk/test/repositories/IVY-1233/test/a/1.0/ivy.xml
    ant/ivy/core/trunk/test/repositories/IVY-1233/test/a/1.1/
    ant/ivy/core/trunk/test/repositories/IVY-1233/test/a/1.1/ivy.xml
    ant/ivy/core/trunk/test/repositories/IVY-1233/test/b/
    ant/ivy/core/trunk/test/repositories/IVY-1233/test/b/2.0/
    ant/ivy/core/trunk/test/repositories/IVY-1233/test/b/2.0/ivy.xml
    ant/ivy/core/trunk/test/repositories/IVY-1233/test/b/2.1/
    ant/ivy/core/trunk/test/repositories/IVY-1233/test/b/2.1/ivy.xml
    ant/ivy/core/trunk/test/repositories/IVY-1233/test/c/
    ant/ivy/core/trunk/test/repositories/IVY-1233/test/c/3.0/
    ant/ivy/core/trunk/test/repositories/IVY-1233/test/c/3.0/ivy.xml
    ant/ivy/core/trunk/test/repositories/IVY-1233/test/c/3.1/
    ant/ivy/core/trunk/test/repositories/IVY-1233/test/c/3.1/ivy.xml
Modified:
    ant/ivy/core/trunk/CHANGES.txt
    ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/conflict/LatestCompatibleConflictManager.java
    ant/ivy/core/trunk/test/java/org/apache/ivy/core/resolve/ResolveTest.java

Modified: ant/ivy/core/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/CHANGES.txt?rev=1163390&r1=1163389&r2=1163390&view=diff
==============================================================================
--- ant/ivy/core/trunk/CHANGES.txt (original)
+++ ant/ivy/core/trunk/CHANGES.txt Tue Aug 30 21:15:03 2011
@@ -52,6 +52,7 @@ for detailed view of each issue, please 
 	Ben Hale
 	Peter Hayes
 	Scott Hebert
+	Payam Hekmat
 	Achim Huegen
 	Matt Inger
 	Anders Jacobsson
@@ -136,6 +137,7 @@ for detailed view of each issue, please 
 - IMPROVEMENT: ivy:retrieve can now convert 'dotted'-organisation names into a directory
tree.
 - IMPROVEMENT: ivy:retrieve now accepts a nested mapper type.
 
+- FIX: Infinite loop in latest-compatible conflict manager (IVY-1233) (thanks to Payam Hekmat)
 - FIX: extends section of ivy.xml info does not replace variable in location tag (IVY-1287)
(thanks to Jean-Louis Boudart)
 - FIX: Valid Path does not work for Filesystem Resolver (IVY-1268)
 - FIX: quiet="true" does not surpress download 'dots' on packager resolver (IVY-1269)

Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/conflict/LatestCompatibleConflictManager.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/conflict/LatestCompatibleConflictManager.java?rev=1163390&r1=1163389&r2=1163390&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/conflict/LatestCompatibleConflictManager.java
(original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/conflict/LatestCompatibleConflictManager.java
Tue Aug 30 21:15:03 2011
@@ -188,7 +188,7 @@ public class LatestCompatibleConflictMan
         Stack callerStack = new Stack();
         callerStack.push(evicted);
         final Collection toBlacklist = blackListIncompatibleCaller(
-            settings.getVersionMatcher(), parent, selected, evicted, callerStack); 
+            settings.getVersionMatcher(), parent, selected, evicted, callerStack, false);

         if (toBlacklist != null) {
             final StringBuffer blacklisted = new StringBuffer();
             for (Iterator iterator = toBlacklist.iterator(); iterator.hasNext();) {
@@ -215,6 +215,29 @@ public class LatestCompatibleConflictMan
         }
     }
 
+    private boolean handleIncompatibleCaller(Stack callerStack, IvyNode node, IvyNode callerNode,
+            IvyNode conflictParent, IvyNode selectedNode, IvyNode evictedNode,
+            Collection blacklisted, VersionMatcher versionMatcher, boolean dynamicCaller)
{
+        if (callerStack.subList(0, callerStack.size() - 1).contains(node)) {
+            // circular dependency found and handled: the current top of the stack (node)
+            // was already contained in the rest of the stack, the circle is closed, nothing
+            // else to do
+            return true;
+        } else {
+            callerStack.push(callerNode);
+            Collection sub = blackListIncompatibleCaller(versionMatcher, conflictParent,
+                selectedNode, evictedNode, callerStack, dynamicCaller);
+            callerStack.pop();
+            if (sub == null) {
+                // propagate the fact that a path with unblacklistable caller has been found
+                return false;
+            } else {
+                blacklisted.addAll(sub);
+                return true;
+            }
+        }
+    }
+
     /**
      * Tries to blacklist exactly one version for all callers paths.
      * 
@@ -234,7 +257,8 @@ public class LatestCompatibleConflictMan
     private Collection/*<IvyNodeBlacklist>*/ blackListIncompatibleCaller(
             VersionMatcher versionMatcher,
             IvyNode conflictParent, IvyNode selectedNode, IvyNode evictedNode, 
-            Stack/*<IvyNode>*/ callerStack) {
+            Stack/*<IvyNode>*/ callerStack,
+            boolean dynamicCaller) {
         Collection/*<IvyNodeBlacklist>*/ blacklisted = new ArrayList/*<IvyNodeBlacklist>*/();
         IvyNode node = (IvyNode) callerStack.peek();
         String rootModuleConf = conflictParent.getData().getReport().getConfiguration();
@@ -245,28 +269,19 @@ public class LatestCompatibleConflictMan
                 continue;
             }
             if (versionMatcher.isDynamic(callers[i].getAskedDependencyId(node.getData())))
{
-                blacklisted.add(new IvyNodeBlacklist(
-                    conflictParent, selectedNode, evictedNode, node, rootModuleConf));
-            } else {
-                if (callerStack.subList(0, callerStack.size() - 1).contains(node)) {
-                    // circular dependency found and handled: the current top of the stack
(node)
-                    // was already contained in the rest of the stack, the circle is closed,
nothing
-                    // else to do
-                } else {
-                    callerStack.push(callerNode);
-                    Collection sub = blackListIncompatibleCaller(
-                        versionMatcher, conflictParent, selectedNode, evictedNode, callerStack);
-                    callerStack.pop();
-                    if (sub == null) {
-                        // propagate the fact that a path with unblacklistable caller has
been found
-                        return null;
-                    } else {
-                        blacklisted.addAll(sub);
-                    }
+                blacklisted.add(new IvyNodeBlacklist(conflictParent, selectedNode, evictedNode,
+                        node, rootModuleConf));
+                if (node.isEvicted(rootModuleConf)
+                        && !handleIncompatibleCaller(callerStack, node, callerNode,
conflictParent,
+                            selectedNode, evictedNode, blacklisted, versionMatcher, true))
{
+                    return null;
                 }
+            } else if(!handleIncompatibleCaller(callerStack, node, callerNode, conflictParent,
+                    selectedNode, evictedNode, blacklisted, versionMatcher, false)) {
+                return null;
             }
         }
-        if (blacklisted.isEmpty() 
+        if (!dynamicCaller && blacklisted.isEmpty() 
                 && !callerStack.subList(0, callerStack.size() - 1).contains(node))
{
             return null;
         }

Modified: ant/ivy/core/trunk/test/java/org/apache/ivy/core/resolve/ResolveTest.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/java/org/apache/ivy/core/resolve/ResolveTest.java?rev=1163390&r1=1163389&r2=1163390&view=diff
==============================================================================
--- ant/ivy/core/trunk/test/java/org/apache/ivy/core/resolve/ResolveTest.java (original)
+++ ant/ivy/core/trunk/test/java/org/apache/ivy/core/resolve/ResolveTest.java Tue Aug 30 21:15:03
2011
@@ -3365,6 +3365,21 @@ public class ResolveTest extends TestCas
         assertTrue(getArchiveFileInCache("myorg", "modB", "1.0", "modB-A", "jar", "jar").exists());
     }
 
+    public void testIVY1233() throws Exception {
+        Ivy ivy = new Ivy();
+        ivy.configure(new File("test/repositories/IVY-1233/ivysettings.xml"));
+        ivy.getSettings().setDefaultCache(cache);
+
+        ResolveReport rr = ivy.resolve(new File("test/repositories/IVY-1233/ivy.xml").toURI().toURL(),
+            getResolveOptions(new String[] {"*"}));
+        ConfigurationResolveReport crr = rr.getConfigurationReport("default");
+        Set modRevIds = crr.getModuleRevisionIds();
+        assertEquals(3, modRevIds.size());
+        assertTrue(modRevIds.contains(ModuleRevisionId.newInstance("test", "a", "1.0")));
+        assertTrue(modRevIds.contains(ModuleRevisionId.newInstance("test", "b", "2.0")));
+        assertTrue(modRevIds.contains(ModuleRevisionId.newInstance("test", "c", "3.0")));
+    }
+
     public void testIVY999() throws Exception {
         Ivy ivy = new Ivy();
         ivy.configure(new File("test/repositories/IVY-999/ivysettings.xml"));

Added: ant/ivy/core/trunk/test/repositories/IVY-1233/ivy.xml
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/repositories/IVY-1233/ivy.xml?rev=1163390&view=auto
==============================================================================
--- ant/ivy/core/trunk/test/repositories/IVY-1233/ivy.xml (added)
+++ ant/ivy/core/trunk/test/repositories/IVY-1233/ivy.xml Tue Aug 30 21:15:03 2011
@@ -0,0 +1,27 @@
+<!--
+   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.    
+-->
+<ivy-module version="2.0">
+	<info organisation="test" module="test" />
+	<dependencies>
+		<dependency org="test" name="a" rev="1.+" />
+		<dependency org="test" name="b" rev="2.+" />
+		<dependency org="test" name="c" rev="3.+" />
+	</dependencies>
+</ivy-module>
+

Added: ant/ivy/core/trunk/test/repositories/IVY-1233/ivysettings.xml
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/repositories/IVY-1233/ivysettings.xml?rev=1163390&view=auto
==============================================================================
--- ant/ivy/core/trunk/test/repositories/IVY-1233/ivysettings.xml (added)
+++ ant/ivy/core/trunk/test/repositories/IVY-1233/ivysettings.xml Tue Aug 30 21:15:03 2011
@@ -0,0 +1,27 @@
+<!--
+   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.
+-->
+<ivysettings>
+    <settings defaultResolver="test" defaultConflictManager="latest-compatible"/>
+    <resolvers>
+        <filesystem name="test">
+            <ivy pattern="${ivy.settings.dir}/[organisation]/[module]/[revision]/ivy.xml"
/>
+            <artifact pattern="${ivy.settings.dir}/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
/>
+        </filesystem>
+    </resolvers>
+</ivysettings>

Added: ant/ivy/core/trunk/test/repositories/IVY-1233/test/a/1.0/ivy.xml
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/repositories/IVY-1233/test/a/1.0/ivy.xml?rev=1163390&view=auto
==============================================================================
--- ant/ivy/core/trunk/test/repositories/IVY-1233/test/a/1.0/ivy.xml (added)
+++ ant/ivy/core/trunk/test/repositories/IVY-1233/test/a/1.0/ivy.xml Tue Aug 30 21:15:03 2011
@@ -0,0 +1,23 @@
+<!--
+   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.    
+-->
+<ivy-module version="2.0">
+	<info organisation="test" module="a" revision="1.0" publication="20100702134716" />
+	<publications />
+	<dependencies />
+</ivy-module>
\ No newline at end of file

Added: ant/ivy/core/trunk/test/repositories/IVY-1233/test/a/1.1/ivy.xml
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/repositories/IVY-1233/test/a/1.1/ivy.xml?rev=1163390&view=auto
==============================================================================
--- ant/ivy/core/trunk/test/repositories/IVY-1233/test/a/1.1/ivy.xml (added)
+++ ant/ivy/core/trunk/test/repositories/IVY-1233/test/a/1.1/ivy.xml Tue Aug 30 21:15:03 2011
@@ -0,0 +1,23 @@
+<!--
+   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.    
+-->
+<ivy-module version="2.0">
+	<info organisation="test" module="a" revision="1.1" publication="20100702134716" />
+	<publications />
+	<dependencies />
+</ivy-module>
\ No newline at end of file

Added: ant/ivy/core/trunk/test/repositories/IVY-1233/test/b/2.0/ivy.xml
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/repositories/IVY-1233/test/b/2.0/ivy.xml?rev=1163390&view=auto
==============================================================================
--- ant/ivy/core/trunk/test/repositories/IVY-1233/test/b/2.0/ivy.xml (added)
+++ ant/ivy/core/trunk/test/repositories/IVY-1233/test/b/2.0/ivy.xml Tue Aug 30 21:15:03 2011
@@ -0,0 +1,25 @@
+<!--
+   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.    
+-->
+<ivy-module version="2.0">
+	<info organisation="test" module="b" revision="2.0" publication="20100702134716" />
+	<publications />
+	<dependencies>
+		<dependency org="test" name="a" rev="1.0" />
+	</dependencies>
+</ivy-module>
\ No newline at end of file

Added: ant/ivy/core/trunk/test/repositories/IVY-1233/test/b/2.1/ivy.xml
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/repositories/IVY-1233/test/b/2.1/ivy.xml?rev=1163390&view=auto
==============================================================================
--- ant/ivy/core/trunk/test/repositories/IVY-1233/test/b/2.1/ivy.xml (added)
+++ ant/ivy/core/trunk/test/repositories/IVY-1233/test/b/2.1/ivy.xml Tue Aug 30 21:15:03 2011
@@ -0,0 +1,25 @@
+<!--
+   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.    
+-->
+<ivy-module version="2.0">
+	<info organisation="test" module="b" revision="2.1" publication="20100702134716" />
+	<publications />
+	<dependencies>
+		<dependency org="test" name="a" rev="1.0" />
+	</dependencies>
+</ivy-module>
\ No newline at end of file

Added: ant/ivy/core/trunk/test/repositories/IVY-1233/test/c/3.0/ivy.xml
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/repositories/IVY-1233/test/c/3.0/ivy.xml?rev=1163390&view=auto
==============================================================================
--- ant/ivy/core/trunk/test/repositories/IVY-1233/test/c/3.0/ivy.xml (added)
+++ ant/ivy/core/trunk/test/repositories/IVY-1233/test/c/3.0/ivy.xml Tue Aug 30 21:15:03 2011
@@ -0,0 +1,26 @@
+<!--
+   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.    
+-->
+<ivy-module version="2.0">
+	<info organisation="test" module="c" revision="3.0" publication="20100702134716" />
+	<publications />
+	<dependencies>
+		<dependency org="test" name="a" rev="1.0" />
+		<dependency org="test" name="b" rev="2.0" />
+	</dependencies>
+</ivy-module>
\ No newline at end of file

Added: ant/ivy/core/trunk/test/repositories/IVY-1233/test/c/3.1/ivy.xml
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/repositories/IVY-1233/test/c/3.1/ivy.xml?rev=1163390&view=auto
==============================================================================
--- ant/ivy/core/trunk/test/repositories/IVY-1233/test/c/3.1/ivy.xml (added)
+++ ant/ivy/core/trunk/test/repositories/IVY-1233/test/c/3.1/ivy.xml Tue Aug 30 21:15:03 2011
@@ -0,0 +1,26 @@
+<!--
+   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.    
+-->
+<ivy-module version="2.0">
+	<info organisation="test" module="c" revision="3.1" publication="20100702134716" />
+	<publications />
+	<dependencies>
+		<dependency org="test" name="a" rev="[1.1,1.2]" />
+		<dependency org="test" name="b" rev="2.1" />
+	</dependencies>
+</ivy-module>
\ No newline at end of file



Mime
View raw message