Repository: ant-ivy Updated Branches: refs/heads/master 77868bf77 -> 83fcd3e1e
Make fixdeps correctly handles transitive dependencies whose revision declaration have to be âkeptâ Project: http://git-wip-us.apache.org/repos/asf/ant-ivy/repo Commit: http://git-wip-us.apache.org/repos/asf/ant-ivy/commit/83fcd3e1 Tree: http://git-wip-us.apache.org/repos/asf/ant-ivy/tree/83fcd3e1 Diff: http://git-wip-us.apache.org/repos/asf/ant-ivy/diff/83fcd3e1 Branch: refs/heads/master Commit: 83fcd3e1e220b9f3aacc63aeb4da0a898684dd0b Parents: 77868bf Author: Nicolas Lalevée <[email protected]> Authored: Thu Jan 22 22:50:59 2015 +0100 Committer: Nicolas Lalevée <[email protected]> Committed: Thu Jan 22 22:50:59 2015 +0100 ---------------------------------------------------------------------- doc/release-notes.html | 1 + .../apache/ivy/core/report/ResolveReport.java | 65 ++++++-------------- .../ivy/core/report/ResolveReportTest.java | 55 +++++++++++------ .../repositories/1/org2/mod2.9/ivys/ivy-0.6.xml | 32 ++++++++++ 4 files changed, 90 insertions(+), 63 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/83fcd3e1/doc/release-notes.html ---------------------------------------------------------------------- diff --git a/doc/release-notes.html b/doc/release-notes.html index babddfd..48c5fe4 100644 --- a/doc/release-notes.html +++ b/doc/release-notes.html @@ -58,6 +58,7 @@ http://issues.apache.org/jira/browse/ivy List of changes since Ivy 2.4.0: - FIX: ArrayIndexOutOfBoundsException when using a p2 repository for dependencies (IVY-1504) +- FIX: fixdeps remove transitive 'kept' dependencies - IMPROVEMENT: Optimization: limit the revision numbers scanned if revision prefix is specified (Thanks to Ernestas Vaiciukevičius) http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/83fcd3e1/src/java/org/apache/ivy/core/report/ResolveReport.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/ivy/core/report/ResolveReport.java b/src/java/org/apache/ivy/core/report/ResolveReport.java index 70fa04b..f2d5499 100644 --- a/src/java/org/apache/ivy/core/report/ResolveReport.java +++ b/src/java/org/apache/ivy/core/report/ResolveReport.java @@ -35,7 +35,6 @@ import org.apache.ivy.core.module.descriptor.Artifact; import org.apache.ivy.core.module.descriptor.Configuration; import org.apache.ivy.core.module.descriptor.DefaultDependencyDescriptor; import org.apache.ivy.core.module.descriptor.DefaultModuleDescriptor; -import org.apache.ivy.core.module.descriptor.DependencyDescriptor; import org.apache.ivy.core.module.descriptor.ModuleDescriptor; import org.apache.ivy.core.module.id.ModuleId; import org.apache.ivy.core.module.id.ModuleRevisionId; @@ -386,55 +385,31 @@ public class ResolveReport { } } - // add dependency we want to keep from the original module descriptor - if (midToKeep != null && !midToKeep.isEmpty()) { - DependencyDescriptor[] deps = md.getDependencies(); - for (int i = 0; i < deps.length; i++) { - if (midToKeep.contains(deps[i].getDependencyId())) { - DefaultDependencyDescriptor dep = new DefaultDependencyDescriptor(fixedmd, - deps[i].getDependencyRevisionId(), true, false, false); - List<String> confs = Arrays.asList(deps[i].getModuleConfigurations()); - if (confs.size() == 1 && confs.get(0).equals("*")) { - confs = resolvedConfs; - } - for (String conf : confs) { - String[] extendedConfs = getExtendingConfs(conf); - String[] depConfs = deps[i].getDependencyConfigurations(conf); - for (String extendedConf : extendedConfs) { - if (resolvedConfs.contains(extendedConf)) { - for (String depConf : depConfs) { - dep.addDependencyConfiguration(extendedConf, depConf); - } - } - } - } - fixedmd.addDependency(dep); - } - } - } - // add resolved dependencies - for (int i = 0; i < dependencies.size(); i++) { - IvyNode node = dependencies.get(i); - if (midToKeep != null && midToKeep.contains(node.getModuleId())) { - continue; + for (IvyNode dep : dependencies) { + ModuleRevisionId depMrid; + boolean force; + if (midToKeep != null && midToKeep.contains(dep.getModuleId())) { + depMrid = dep.getId(); + force = false; + } else { + depMrid = dep.getResolvedId(); + force = true; } - String[] rootConfs = node.getRootModuleConfigurations(); - for (int j = 0; j < rootConfs.length; j++) { - if (node.isEvicted(rootConfs[j])) { + DefaultDependencyDescriptor dd = new DefaultDependencyDescriptor(fixedmd, depMrid, + force, false, false); + boolean evicted = true; + for (String rootConf : dep.getRootModuleConfigurations()) { + if (dep.isEvicted(rootConf)) { continue; } - if (node.getAllArtifacts().length == 0) { - // no artifact: it was probably useful transitively, hence it is useless here - break; - } - DefaultDependencyDescriptor dep = new DefaultDependencyDescriptor(fixedmd, - node.getResolvedId(), true, false, false); - String[] targetConfs = node.getConfigurations(rootConfs[j]); - for (int k = 0; k < targetConfs.length; k++) { - dep.addDependencyConfiguration(rootConfs[j], targetConfs[k]); + evicted = false; + for (String targetConf : dep.getConfigurations(rootConf)) { + dd.addDependencyConfiguration(rootConf, targetConf); } - fixedmd.addDependency(dep); + } + if (!evicted) { + fixedmd.addDependency(dd); } } http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/83fcd3e1/test/java/org/apache/ivy/core/report/ResolveReportTest.java ---------------------------------------------------------------------- diff --git a/test/java/org/apache/ivy/core/report/ResolveReportTest.java b/test/java/org/apache/ivy/core/report/ResolveReportTest.java index 16d0a3b..5f70e5a 100644 --- a/test/java/org/apache/ivy/core/report/ResolveReportTest.java +++ b/test/java/org/apache/ivy/core/report/ResolveReportTest.java @@ -20,7 +20,6 @@ package org.apache.ivy.core.report; import java.io.File; import java.util.Arrays; -import junit.framework.AssertionFailedError; import junit.framework.TestCase; import org.apache.ivy.Ivy; @@ -146,15 +145,15 @@ public class ResolveReportTest extends TestCase { assertEquals(Arrays.asList(new String[] {"default", "extension"}), Arrays.asList(fixedMd.getConfigurationsNames())); - assertEquals(4, fixedMd.getDependencies().length); + assertEquals(2, fixedMd.getDependencies().length); checkFixedMdDependency(fixedMd.getDependencies()[0], "org6", "mod6.1", "0.4", "extension", new String[] {"extension", "default"}); - checkFixedMdDependency(fixedMd.getDependencies()[1], "org6", "mod6.1", "0.4", "default", + checkFixedMdDependency(fixedMd.getDependencies()[0], "org6", "mod6.1", "0.4", "default", new String[] {"extension", "default"}); - checkFixedMdDependency(fixedMd.getDependencies()[2], "org1", "mod1.2", "2.0", "extension", + checkFixedMdDependency(fixedMd.getDependencies()[1], "org1", "mod1.2", "2.0", "extension", new String[] {"default"}); - checkFixedMdDependency(fixedMd.getDependencies()[3], "org1", "mod1.2", "2.0", "default", + checkFixedMdDependency(fixedMd.getDependencies()[1], "org1", "mod1.2", "2.0", "default", new String[] {"default"}); } @@ -172,19 +171,12 @@ public class ResolveReportTest extends TestCase { assertEquals(Arrays.asList(new String[] {"default", "compile"}), Arrays.asList(fixedMd.getConfigurationsNames())); - assertEquals(2, fixedMd.getDependencies().length); + assertEquals(1, fixedMd.getDependencies().length); - try { - checkFixedMdDependency(fixedMd.getDependencies()[0], "org1", "mod1.2", "1.1", - "default", new String[] {"*"}); - checkFixedMdDependency(fixedMd.getDependencies()[1], "org1", "mod1.2", "1.1", - "compile", new String[] {"default"}); - } catch (AssertionFailedError e) { - checkFixedMdDependency(fixedMd.getDependencies()[1], "org1", "mod1.2", "1.1", - "default", new String[] {"*"}); - checkFixedMdDependency(fixedMd.getDependencies()[0], "org1", "mod1.2", "1.1", - "compile", new String[] {"default"}); - } + checkFixedMdDependency(fixedMd.getDependencies()[0], "org1", "mod1.2", "1.1", "default", + new String[] {"*"}); + checkFixedMdDependency(fixedMd.getDependencies()[0], "org1", "mod1.2", "1.1", "compile", + new String[] {"default"}); } public void testFixedMdKeep() throws Exception { @@ -207,7 +199,34 @@ public class ResolveReportTest extends TestCase { checkFixedMdDependency(fixedMd.getDependencies()[0], "org1", "mod1.2", "[1.0,2.0[", "default", new String[] {"*"}); checkFixedMdDependency(fixedMd.getDependencies()[0], "org1", "mod1.2", "[1.0,2.0[", - "compile", new String[] {"*"}); + "compile", new String[] {"default"}); + } + + public void testFixedMdTransitiveKeep() throws Exception { + ResolveReport report = ivy.resolve(new File( + "test/repositories/1/org2/mod2.9/ivys/ivy-0.6.xml"), + getResolveOptions(new String[] {"*"})); + assertNotNull(report); + assertFalse(report.hasError()); + ModuleDescriptor fixedMd = report.toFixedModuleDescriptor(ivy.getSettings(), + Arrays.asList(new ModuleId[] {ModuleId.newInstance("org1", "mod1.2")})); + + ModuleRevisionId mrid = ModuleRevisionId.newInstance("org2", "mod2.9", "0.6"); + assertEquals(mrid, fixedMd.getModuleRevisionId()); + + assertEquals(Arrays.asList(new String[] {"default", "compile"}), + Arrays.asList(fixedMd.getConfigurationsNames())); + + assertEquals(2, fixedMd.getDependencies().length); + + checkFixedMdDependency(fixedMd.getDependencies()[0], "org1", "mod1.4", "1.0.2", "default", + new String[] {"*"}); + checkFixedMdDependency(fixedMd.getDependencies()[0], "org1", "mod1.4", "1.0.2", "compile", + new String[] {"default", "compile"}); + checkFixedMdDependency(fixedMd.getDependencies()[1], "org1", "mod1.2", "[1.0,2.0[", + "default", new String[] {"*"}); + checkFixedMdDependency(fixedMd.getDependencies()[1], "org1", "mod1.2", "[1.0,2.0[", + "compile", new String[] {"default"}); } } http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/83fcd3e1/test/repositories/1/org2/mod2.9/ivys/ivy-0.6.xml ---------------------------------------------------------------------- diff --git a/test/repositories/1/org2/mod2.9/ivys/ivy-0.6.xml b/test/repositories/1/org2/mod2.9/ivys/ivy-0.6.xml new file mode 100644 index 0000000..95bbd20 --- /dev/null +++ b/test/repositories/1/org2/mod2.9/ivys/ivy-0.6.xml @@ -0,0 +1,32 @@ +<!-- + 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="1.0"> + <info organisation="org2" + module="mod2.9" + revision="0.6" + status="integration" + /> + <configurations> + <conf name="default"/> + <conf name="compile" extends="default"/> + </configurations> + <dependencies> + <dependency org="org1" name="mod1.4" rev="1.0.2" /> + </dependencies> +</ivy-module>
