Repository: ant-ivy Updated Branches: refs/heads/master dcaacf4ca -> 1a36ae09d
FIX: Local conflict manager didn't handle deeper conflicts in transitive dependencies (IVY-1404) Project: http://git-wip-us.apache.org/repos/asf/ant-ivy/repo Commit: http://git-wip-us.apache.org/repos/asf/ant-ivy/commit/585a7021 Tree: http://git-wip-us.apache.org/repos/asf/ant-ivy/tree/585a7021 Diff: http://git-wip-us.apache.org/repos/asf/ant-ivy/diff/585a7021 Branch: refs/heads/master Commit: 585a702138f1cc87df3b41509cc42ad34b6acd62 Parents: d0f7f36 Author: Maarten Coene <maart...@apache.org> Authored: Wed Jul 12 10:05:15 2017 +0200 Committer: Maarten Coene <maart...@apache.org> Committed: Wed Jul 12 10:05:15 2017 +0200 ---------------------------------------------------------------------- asciidoc/release-notes.adoc | 1 + .../apache/ivy/core/resolve/ResolveEngine.java | 19 ++++++++++++- .../apache/ivy/core/resolve/ResolveTest.java | 21 ++++++++++++++ .../repositories/1/IVY-1404/M1/ivys/ivy-1.0.xml | 30 ++++++++++++++++++++ .../repositories/1/IVY-1404/M2/ivys/ivy-1.0.xml | 30 ++++++++++++++++++++ .../repositories/1/IVY-1404/M3/ivys/ivy-1.0.xml | 29 +++++++++++++++++++ .../repositories/1/IVY-1404/M4/ivys/ivy-1.0.xml | 29 +++++++++++++++++++ 7 files changed, 158 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/585a7021/asciidoc/release-notes.adoc ---------------------------------------------------------------------- diff --git a/asciidoc/release-notes.adoc b/asciidoc/release-notes.adoc index a3a52ab..c2b7962 100644 --- a/asciidoc/release-notes.adoc +++ b/asciidoc/release-notes.adoc @@ -50,6 +50,7 @@ http://issues.apache.org/jira/browse/ivy List of changes since Ivy 2.4.0: +- FIX: Local conflict manager didn't handle deeper conflicts in transitive dependencies (link:https://issues.apache.org/jira/browse/IVY-1404[IVY-1404]) - FIX: Made the maven 'test' configuration public so we can use the test-jar as dependency (link:https://issues.apache.org/jira/browse/IVY-1444[IVY-1444]) - FIX: NullPointerException in dependencytree with no dependencies (link:https://issues.apache.org/jira/browse/IVY-1539[IVY-1539]) - FIX: checkIfChanged is not settable attribute for checkdepsupdate ant task (link:https://issues.apache.org/jira/browse/IVY-1549[IVY-1549]) http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/585a7021/src/java/org/apache/ivy/core/resolve/ResolveEngine.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/ivy/core/resolve/ResolveEngine.java b/src/java/org/apache/ivy/core/resolve/ResolveEngine.java index 8356f16..4258424 100644 --- a/src/java/org/apache/ivy/core/resolve/ResolveEngine.java +++ b/src/java/org/apache/ivy/core/resolve/ResolveEngine.java @@ -923,7 +923,24 @@ public class ResolveEngine { Collection<IvyNode> conflicts = computeConflicts(node, ancestor, conf, toevict, resolvedNodes); - ConflictManager conflictManager = ancestor.getNode().getConflictManager(node.getModuleId()); + ConflictManager conflictManager = null; + for (VisitNode current : ancestor.getPath()) { + ModuleDescriptor descriptor = current.getNode().getDescriptor(); + if (descriptor == null) { + throw new IllegalStateException( + "impossible to get conflict manager when data has not been loaded. IvyNode = " + + current.getNode()); + } + + conflictManager = descriptor.getConflictManager(node.getModuleId()); + if (conflictManager != null) { + break; + } + } + + if (conflictManager == null) { + conflictManager = settings.getConflictManager(node.getModuleId()); + } Collection<IvyNode> resolved = resolveConflicts(node, ancestor, conflicts, conflictManager); http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/585a7021/test/java/org/apache/ivy/core/resolve/ResolveTest.java ---------------------------------------------------------------------- diff --git a/test/java/org/apache/ivy/core/resolve/ResolveTest.java b/test/java/org/apache/ivy/core/resolve/ResolveTest.java index 1bddd54..43d3cf4 100644 --- a/test/java/org/apache/ivy/core/resolve/ResolveTest.java +++ b/test/java/org/apache/ivy/core/resolve/ResolveTest.java @@ -410,6 +410,27 @@ public class ResolveTest { } @Test + public void testResolveWithConflictManagerDefinedAtHigherLevel() throws Exception { + // test case for IVY-1404 + // #M1;1.0 -> #M2;1.0 + // #M1;2.0 -> {#M2;1.0 #M3;1.0} + // #M2;1.0 -> org1#mod1.2;1.1 + // #M3;1.0 -> org1#mod1.2;2.0 + // #M1;1.0 has conflict manager: <conflict org="org1" module="mod1.2" rev="1.1,2.0" /> + + ResolveReport report = ivy.resolve(new File( + "test/repositories/1/IVY-1404/M1/ivys/ivy-1.0.xml"), + getResolveOptions(new String[] {"*"})); + assertFalse(report.hasError()); + + ArtifactDownloadReport[] adrs = report.getConfigurationReport("default") + .getDownloadedArtifactsReports(); + assertEquals(2, adrs.length); + assertEquals("1.1", adrs[0].getArtifact().getId().getRevision()); + assertEquals("2.0", adrs[1].getArtifact().getId().getRevision()); + } + + @Test public void testResolveRequiresDescriptor() throws Exception { // mod1.1 depends on mod1.2, mod1.2 has no ivy file Ivy ivy = new Ivy(); http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/585a7021/test/repositories/1/IVY-1404/M1/ivys/ivy-1.0.xml ---------------------------------------------------------------------- diff --git a/test/repositories/1/IVY-1404/M1/ivys/ivy-1.0.xml b/test/repositories/1/IVY-1404/M1/ivys/ivy-1.0.xml new file mode 100644 index 0000000..b4202c6 --- /dev/null +++ b/test/repositories/1/IVY-1404/M1/ivys/ivy-1.0.xml @@ -0,0 +1,30 @@ +<!-- + 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="IVY-1404" + module="M1" + revision="1.0" + status="release" + /> + <publications /> + <dependencies> + <dependency name="M2" rev="1.0"/> + <conflict org="org1" module="mod1.2" rev="1.1,2.0" /> + </dependencies> +</ivy-module> http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/585a7021/test/repositories/1/IVY-1404/M2/ivys/ivy-1.0.xml ---------------------------------------------------------------------- diff --git a/test/repositories/1/IVY-1404/M2/ivys/ivy-1.0.xml b/test/repositories/1/IVY-1404/M2/ivys/ivy-1.0.xml new file mode 100644 index 0000000..eae28e6 --- /dev/null +++ b/test/repositories/1/IVY-1404/M2/ivys/ivy-1.0.xml @@ -0,0 +1,30 @@ +<!-- + 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="IVY-1404" + module="M2" + revision="1.0" + status="release" + /> + <publications /> + <dependencies> + <dependency name="M3" rev="1.0"/> + <dependency name="M4" rev="1.0"/> + </dependencies> +</ivy-module> http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/585a7021/test/repositories/1/IVY-1404/M3/ivys/ivy-1.0.xml ---------------------------------------------------------------------- diff --git a/test/repositories/1/IVY-1404/M3/ivys/ivy-1.0.xml b/test/repositories/1/IVY-1404/M3/ivys/ivy-1.0.xml new file mode 100644 index 0000000..5c20629 --- /dev/null +++ b/test/repositories/1/IVY-1404/M3/ivys/ivy-1.0.xml @@ -0,0 +1,29 @@ +<!-- + 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="IVY-1404" + module="M3" + revision="1.0" + status="release" + /> + <publications /> + <dependencies> + <dependency org="org1" name="mod1.2" rev="1.1"/> + </dependencies> +</ivy-module> http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/585a7021/test/repositories/1/IVY-1404/M4/ivys/ivy-1.0.xml ---------------------------------------------------------------------- diff --git a/test/repositories/1/IVY-1404/M4/ivys/ivy-1.0.xml b/test/repositories/1/IVY-1404/M4/ivys/ivy-1.0.xml new file mode 100644 index 0000000..aa7d7b0 --- /dev/null +++ b/test/repositories/1/IVY-1404/M4/ivys/ivy-1.0.xml @@ -0,0 +1,29 @@ +<!-- + 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="IVY-1404" + module="M4" + revision="1.0" + status="release" + /> + <publications /> + <dependencies> + <dependency org="org1" name="mod1.2" rev="2.0"/> + </dependencies> +</ivy-module>