You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by xa...@apache.org on 2008/03/24 19:05:15 UTC
svn commit: r640488 - in /ant/ivy/core/trunk: ./
src/java/org/apache/ivy/core/module/descriptor/
src/java/org/apache/ivy/core/resolve/
src/java/org/apache/ivy/plugins/parser/m2/
src/java/org/apache/ivy/plugins/parser/xml/ src/java/org/apache/ivy/plugin...
Author: xavier
Date: Mon Mar 24 11:05:10 2008
New Revision: 640488
URL: http://svn.apache.org/viewvc?rev=640488&view=rev
Log:
NEW: Add transitive dependency version and branch override mechanism (IVY-784) (not completed yet)
FIX: Compatibility with maven's dependencyMangement (IVY-753) (not completed yet)
Syntax for IVY-784 still needs to be cleared out. Then I need to update documentation, xml module descriptor writer and updater. For IVY-753 to be fully completed, update of xml module descriptor writer still need to be achieved to be able to use converted pom file from cache.
Added:
ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/descriptor/DependencyDescriptorMediator.java (with props)
ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/descriptor/OverrideDependencyDescriptorMediator.java (with props)
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/DefaultPomDependencyMgt.java (with props)
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/PomDependencyMgt.java (with props)
ant/ivy/core/trunk/test/repositories/parentPom/org/apache/dm/test/2.0/
ant/ivy/core/trunk/test/repositories/parentPom/org/apache/dm/test/2.0/test-2.0.jar (with props)
ant/ivy/core/trunk/test/repositories/parentPom/org/apache/dm/test/2.0/test-2.0.pom (with props)
ant/ivy/core/trunk/test/repositories/parentPom/org/apache/dm/test2/3.0/
ant/ivy/core/trunk/test/repositories/parentPom/org/apache/dm/test2/3.0/test2-3.0.jar (with props)
ant/ivy/core/trunk/test/repositories/parentPom/org/apache/dm/test2/3.0/test2-3.0.pom (with props)
ant/ivy/core/trunk/test/repositories/parentPom/org/apache/dm/test4/
ant/ivy/core/trunk/test/repositories/parentPom/org/apache/dm/test4/1.0/
ant/ivy/core/trunk/test/repositories/parentPom/org/apache/dm/test4/1.0/test4-1.0.jar (with props)
ant/ivy/core/trunk/test/repositories/parentPom/org/apache/dm/test4/1.0/test4-1.0.pom (with props)
ant/ivy/core/trunk/test/repositories/parentPom/org/apache/dm/test4/2.0/
ant/ivy/core/trunk/test/repositories/parentPom/org/apache/dm/test4/2.0/test4-2.0.jar (with props)
ant/ivy/core/trunk/test/repositories/parentPom/org/apache/dm/test4/2.0/test4-2.0.pom (with props)
Modified:
ant/ivy/core/trunk/CHANGES.txt
ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/descriptor/DefaultDependencyDescriptor.java
ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/descriptor/DefaultModuleDescriptor.java
ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/descriptor/DependencyDescriptor.java
ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/descriptor/ModuleDescriptor.java
ant/ivy/core/trunk/src/java/org/apache/ivy/core/resolve/IvyNode.java
ant/ivy/core/trunk/src/java/org/apache/ivy/core/resolve/IvyNodeCallers.java
ant/ivy/core/trunk/src/java/org/apache/ivy/core/resolve/ResolveData.java
ant/ivy/core/trunk/src/java/org/apache/ivy/core/resolve/ResolveEngine.java
ant/ivy/core/trunk/src/java/org/apache/ivy/core/resolve/VisitNode.java
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/PomModuleDescriptorBuilder.java
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/PomModuleDescriptorParser.java
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/PomReader.java
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorParser.java
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/ivy.xsd
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/AbstractResolver.java
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/AbstractResourceResolver.java
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/BasicResolver.java
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/CacheResolver.java
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/ChainResolver.java
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/IBiblioResolver.java
ant/ivy/core/trunk/test/java/org/apache/ivy/core/resolve/ResolveTest.java
ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorParserTest.java
ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/test.xml
ant/ivy/core/trunk/test/repositories/parentPom/org/apache/dm/parent/2.0/parent-2.0.pom
Modified: ant/ivy/core/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/CHANGES.txt?rev=640488&r1=640487&r2=640488&view=diff
==============================================================================
--- ant/ivy/core/trunk/CHANGES.txt (original)
+++ ant/ivy/core/trunk/CHANGES.txt Mon Mar 24 11:05:10 2008
@@ -66,6 +66,7 @@
=====================================
- NEW: Retain original dependency constraint rules in resolved ivy file (IVY-739)
- NEW: Add a new resolve mode (optionally per module) to utilize dynamic constraint rule metadata (IVY-740)
+- NEW: Add transitive dependency version and branch override mechanism (IVY-784) (not completed yet)
- IMPROVEMENT: Make Ivy standalone runnable with no required dependencies (IVY-757)
- IMPROVEMENT: add branch attribute in ivy:install task (IVY-727)
@@ -73,6 +74,7 @@
- IMPROVEMENT: Parse description and home page from poms (IVY-767)
- IMPROVEMENT: Smarter determination if an expression is exact or not for RegexpPatternMatcher and GlobPatternMatcher
+- FIX: Compatibility with maven's dependencyMangement (IVY-753) (not completed yet)
- FIX: ivy:settings fails when override is not set to 'true' (IVY-771)
- FIX: NPE when specifying both resolveId and inline in an Ivy:Resolve (IVY-776)
- FIX: repreport task not working against a repository structured by branches (IVY-716)
Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/descriptor/DefaultDependencyDescriptor.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/descriptor/DefaultDependencyDescriptor.java?rev=640488&r1=640487&r2=640488&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/descriptor/DefaultDependencyDescriptor.java (original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/descriptor/DefaultDependencyDescriptor.java Mon Mar 24 11:05:10 2008
@@ -37,6 +37,7 @@
import org.apache.ivy.plugins.namespace.NameSpaceHelper;
import org.apache.ivy.plugins.namespace.Namespace;
import org.apache.ivy.plugins.namespace.NamespaceTransformer;
+import org.apache.ivy.util.Checks;
/**
* This class can be used as the default implementation for DependencyDescriptor. It implements
@@ -118,7 +119,7 @@
return newdd;
}
- private ModuleRevisionId revId;
+ private final ModuleRevisionId revId;
private ModuleRevisionId dynamicRevId;
@@ -158,10 +159,19 @@
private DependencyDescriptor asSystem = this;
- public DefaultDependencyDescriptor(DependencyDescriptor dd, String revision) {
+ public DefaultDependencyDescriptor(DependencyDescriptor dd, ModuleRevisionId revision) {
+ Checks.checkNotNull(dd, "dd");
+ Checks.checkNotNull(revision, "revision");
+
+ if (!revision.getModuleId().equals(dd.getDependencyId())) {
+ throw new IllegalArgumentException(
+ "new ModuleRevisionId MUST have the same ModuleId as original one."
+ + " original = " + dd.getDependencyId()
+ + " new = " + revision.getModuleId());
+ }
md = null;
parentId = dd.getParentRevisionId();
- revId = ModuleRevisionId.newInstance(dd.getDependencyRevisionId(), revision);
+ revId = revision;
dynamicRevId = dd.getDynamicConstraintDependencyRevisionId();
isForce = dd.isForce();
isChanging = dd.isChanging();
@@ -185,9 +195,20 @@
this(md, mrid, mrid, force, changing, transitive);
}
+ public DefaultDependencyDescriptor(ModuleRevisionId mrid, boolean force) {
+ this(mrid, force, false);
+ }
+
+ public DefaultDependencyDescriptor(ModuleRevisionId mrid, boolean force, boolean changing) {
+ this(null, mrid, mrid, force, changing, true);
+ }
+
public DefaultDependencyDescriptor(
ModuleDescriptor md, ModuleRevisionId mrid, ModuleRevisionId dynamicConstraint,
boolean force, boolean changing, boolean transitive) {
+ Checks.checkNotNull(mrid, "mrid");
+ Checks.checkNotNull(dynamicConstraint, "dynamicConstraint");
+
this.md = md;
revId = mrid;
dynamicRevId = dynamicConstraint;
@@ -196,18 +217,6 @@
isTransitive = transitive;
}
- public DefaultDependencyDescriptor(ModuleRevisionId mrid, boolean force) {
- this(mrid, force, false);
- }
-
- public DefaultDependencyDescriptor(ModuleRevisionId mrid, boolean force, boolean changing) {
- md = null;
- revId = mrid;
- dynamicRevId = mrid;
- isForce = force;
- isChanging = changing;
- }
-
public ModuleId getDependencyId() {
return getDependencyRevisionId().getModuleId();
}
@@ -576,4 +585,7 @@
return excludeRules;
}
+ public DependencyDescriptor clone(ModuleRevisionId revision) {
+ return new DefaultDependencyDescriptor(this, revision);
+ }
}
Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/descriptor/DefaultModuleDescriptor.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/descriptor/DefaultModuleDescriptor.java?rev=640488&r1=640487&r2=640488&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/descriptor/DefaultModuleDescriptor.java (original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/descriptor/DefaultModuleDescriptor.java Mon Mar 24 11:05:10 2008
@@ -160,10 +160,11 @@
if (md instanceof DefaultModuleDescriptor) {
DefaultModuleDescriptor dmd = (DefaultModuleDescriptor) md;
nmd.conflictManagers.putAll(dmd.conflictManagers);
+ nmd.dependencyDescriptorMediators.putAll(dmd.dependencyDescriptorMediators);
} else {
Message.warn(
"transformed module descriptor is not a default module descriptor: "
- + "impossible to copy conflict manager configuration: " + md);
+ + "impossible to copy conflict manager and version mediation configuration: " + md);
}
nmd.licenses.addAll(Arrays.asList(md.getLicenses()));
nmd.homePage = md.getHomePage();
@@ -199,6 +200,9 @@
private boolean isDefault = false;
private Map conflictManagers = new LinkedHashMap(); // Map (ModuleId -> )
+
+ private Map/*<ModuleId, DependencyDescriptorMediator>*/ dependencyDescriptorMediators
+ = new LinkedHashMap();
private List licenses = new ArrayList(); // List(License)
@@ -470,6 +474,22 @@
}
}
return null;
+ }
+
+ public void addDependencyDescriptorMediator(ModuleId moduleId, PatternMatcher matcher,
+ DependencyDescriptorMediator ddm) {
+ dependencyDescriptorMediators.put(new ModuleIdMatcher(matcher, moduleId), ddm);
+ }
+
+ public DependencyDescriptor mediate(DependencyDescriptor dd) {
+ for (Iterator iter = dependencyDescriptorMediators.keySet().iterator(); iter.hasNext();) {
+ ModuleIdMatcher matcher = (ModuleIdMatcher) iter.next();
+ if (matcher.matches(dd.getDependencyId())) {
+ dd = ((DependencyDescriptorMediator) dependencyDescriptorMediators.get(matcher))
+ .mediate(dd);
+ }
+ }
+ return dd;
}
public void addLicense(License license) {
Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/descriptor/DependencyDescriptor.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/descriptor/DependencyDescriptor.java?rev=640488&r1=640487&r2=640488&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/descriptor/DependencyDescriptor.java (original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/descriptor/DependencyDescriptor.java Mon Mar 24 11:05:10 2008
@@ -125,4 +125,16 @@
public boolean canExclude();
DependencyDescriptor asSystem();
+
+ /**
+ * Clones current dependency descriptor with another revision.
+ *
+ * @param revision
+ * the revision of the cloned dependency descriptor
+ * @return the cloned dependency descriptor
+ * @throws IllegalArgumentException
+ * if the given {@link ModuleRevisionId} has not the same {@link ModuleId} as the
+ * {@link ModuleRevisionId} of this descriptor.
+ */
+ DependencyDescriptor clone(ModuleRevisionId revision);
}
Added: ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/descriptor/DependencyDescriptorMediator.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/descriptor/DependencyDescriptorMediator.java?rev=640488&view=auto
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/descriptor/DependencyDescriptorMediator.java (added)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/descriptor/DependencyDescriptorMediator.java Mon Mar 24 11:05:10 2008
@@ -0,0 +1,44 @@
+/*
+ * 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.
+ *
+ */
+package org.apache.ivy.core.module.descriptor;
+
+/**
+ * A DependencyDescriptorMediator is responsible for dependency descriptor mediation.
+ * <p>
+ * Dependency descriptor mediation consists in adjusting dependency descriptors according to
+ * a context, environment, the stack of dependers, ...
+ * </p>
+ */
+public interface DependencyDescriptorMediator {
+
+ /**
+ * Mediates the given {@link DependencyDescriptor} according to this {@link ModuleDescriptor}.
+ * <p>
+ * This method gives the opportunity to a ModuleDescriptor to override dependency version
+ * information of any of its transitive dependencies, since it is called by dependency resolvers
+ * before actually resolving a dependency.
+ * </p>
+ *
+ * @param dd
+ * the dependency descriptor which should be mediated.
+ * @return the mediated {@link DependencyDescriptor}, or the original
+ * {@link DependencyDescriptor} if no mediation is required by this ModuleDescriptor.
+ */
+ DependencyDescriptor mediate(DependencyDescriptor dd);
+
+}
Propchange: ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/descriptor/DependencyDescriptorMediator.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/descriptor/DependencyDescriptorMediator.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/descriptor/ModuleDescriptor.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/descriptor/ModuleDescriptor.java?rev=640488&r1=640487&r2=640488&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/descriptor/ModuleDescriptor.java (original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/descriptor/ModuleDescriptor.java Mon Mar 24 11:05:10 2008
@@ -36,7 +36,9 @@
/**
* Decriptor of a module. This is the Java representation of an ivy.xml
*/
-public interface ModuleDescriptor extends ExtendableItem, ArtifactInfo {
+public interface ModuleDescriptor
+ extends ExtendableItem, ArtifactInfo, DependencyDescriptorMediator {
+
public static final String DEFAULT_CONFIGURATION = "default";
public static final String CALLER_ALL_CONFIGURATION = "all";
@@ -136,7 +138,8 @@
Configuration getConfiguration(String confName);
/**
- * Returns the conflict manager to use for the given ModuleId
+ * Returns the conflict manager to use for the given ModuleId, or <code>null</code> if no
+ * specific conflict manager is associated with the given module id in this module descriptor.
*
* @param id
* @return
Added: ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/descriptor/OverrideDependencyDescriptorMediator.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/descriptor/OverrideDependencyDescriptorMediator.java?rev=640488&view=auto
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/descriptor/OverrideDependencyDescriptorMediator.java (added)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/descriptor/OverrideDependencyDescriptorMediator.java Mon Mar 24 11:05:10 2008
@@ -0,0 +1,78 @@
+/*
+ * 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.
+ *
+ */
+package org.apache.ivy.core.module.descriptor;
+
+import org.apache.ivy.core.module.id.ModuleRevisionId;
+
+/**
+ * DependencyDescriptorMediator used to override some dependency descriptors values, such as
+ * the branch or version of the dependency.
+ */
+public class OverrideDependencyDescriptorMediator implements DependencyDescriptorMediator {
+ private String version;
+ private String branch;
+
+ /**
+ * Constructs a new instance.
+ *
+ * @param branch
+ * the branch to give to mediated dependency descriptors, <code>null</code> to keep
+ * the original branch.
+ * @param version
+ * the version to give to mediated dependency descriptors, <code>null</code> to
+ * keep the original one.
+ */
+ public OverrideDependencyDescriptorMediator(String branch, String version) {
+ this.branch = branch;
+ this.version = version;
+ }
+
+ /**
+ * Returns the version this mediator will give to mediated descriptors, or <code>null</code>
+ * if this mediator does not override version.
+ *
+ * @return the version this mediator will give to mediated descriptors.
+ */
+ public String getVersion() {
+ return version;
+ }
+
+ /**
+ * Returns the branch this mediator will give to mediated descriptors, or <code>null</code>
+ * if this mediator does not override branch.
+ *
+ * @return the branch this mediator will give to mediated descriptors.
+ */
+ public String getBranch() {
+ return branch;
+ }
+
+ public DependencyDescriptor mediate(DependencyDescriptor dd) {
+ ModuleRevisionId mrid = dd.getDependencyRevisionId();
+ if ((version == null || version.equals(mrid.getRevision()))
+ && (branch == null || branch.equals(mrid.getBranch()))) {
+ return dd;
+ }
+
+ String version = this.version == null ? mrid.getRevision() : this.version;
+ String branch = this.branch == null ? mrid.getBranch() : this.branch;
+
+ return dd.clone(ModuleRevisionId.newInstance(
+ mrid.getOrganisation(), mrid.getName(), branch, version, mrid.getExtraAttributes()));
+ }
+}
Propchange: ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/descriptor/OverrideDependencyDescriptorMediator.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/descriptor/OverrideDependencyDescriptorMediator.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/core/resolve/IvyNode.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/core/resolve/IvyNode.java?rev=640488&r1=640487&r2=640488&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/core/resolve/IvyNode.java (original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/core/resolve/IvyNode.java Mon Mar 24 11:05:10 2008
@@ -167,7 +167,7 @@
private Map blacklisted = new HashMap();
public IvyNode(ResolveData data, IvyNode parent, DependencyDescriptor dd) {
- id = data.getEngine().getRequestedDependencyRevisionId(dd, data.getOptions());
+ id = dd.getDependencyRevisionId();
dds.put(parent, dd);
root = parent.getRoot();
init(data);
@@ -220,8 +220,8 @@
Message.debug("\tusing " + resolver + " to resolve " + getId());
DependencyDescriptor dependencyDescriptor = getDependencyDescriptor(parent);
long start = System.currentTimeMillis();
- ModuleRevisionId requestedRevisionId =
- data.getRequestedDependencyRevisionId(dependencyDescriptor);
+ ModuleRevisionId requestedRevisionId
+ = dependencyDescriptor.getDependencyRevisionId();
data.getEventManager().fireIvyEvent(
new StartResolveDependencyEvent(resolver, dependencyDescriptor, requestedRevisionId));
module = resolver.getDependency(dependencyDescriptor, data);
@@ -370,15 +370,14 @@
DependencyDescriptor[] dds = md.getDependencies();
Collection dependencies = new LinkedHashSet(); // it's important to respect order
for (int i = 0; i < dds.length; i++) {
- DependencyDescriptor dd = dds[i];
+ DependencyDescriptor dd = data.mediate(dds[i]);
String[] dependencyConfigurations = dd.getDependencyConfigurations(conf, requestedConf);
if (dependencyConfigurations.length == 0) {
// no configuration of the dependency is required for current confs :
// it is exactly the same as if there was no dependency at all on it
continue;
}
- ModuleRevisionId requestedDependencyRevisionId =
- data.getEngine().getRequestedDependencyRevisionId(dd, data.getOptions());
+ ModuleRevisionId requestedDependencyRevisionId = dd.getDependencyRevisionId();
if (isDependencyModuleExcluded(rootModuleConf, requestedDependencyRevisionId, conf)) {
// the whole module is excluded, it is considered as not being part of dependencies
// at all
Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/core/resolve/IvyNodeCallers.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/core/resolve/IvyNodeCallers.java?rev=640488&r1=640487&r2=640488&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/core/resolve/IvyNodeCallers.java (original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/core/resolve/IvyNodeCallers.java Mon Mar 24 11:05:10 2008
@@ -96,7 +96,7 @@
}
public ModuleRevisionId getAskedDependencyId(ResolveData resolveData) {
- return resolveData.getRequestedDependencyRevisionId(dd);
+ return dd.getDependencyRevisionId();
}
public ModuleDescriptor getModuleDescriptor() {
Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/core/resolve/ResolveData.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/core/resolve/ResolveData.java?rev=640488&r1=640487&r2=640488&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/core/resolve/ResolveData.java (original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/core/resolve/ResolveData.java Mon Mar 24 11:05:10 2008
@@ -19,16 +19,20 @@
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.Date;
import java.util.Iterator;
import java.util.LinkedHashMap;
+import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import org.apache.ivy.core.event.EventManager;
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.ConfigurationResolveReport;
+import org.apache.ivy.util.Message;
public class ResolveData {
private ResolveEngine engine;
@@ -39,9 +43,12 @@
private ResolveOptions options;
+ private VisitNode currentVisitNode = null;
+
public ResolveData(ResolveData data, boolean validate) {
- this(data.engine, new ResolveOptions(data.options).setValidate(validate), data.report,
- data.visitData);
+ this(data.engine, new ResolveOptions(data.options).setValidate(validate),
+ data.report, data.visitData);
+ setCurrentVisitNode(currentVisitNode);
}
public ResolveData(ResolveEngine engine, ResolveOptions options) {
@@ -86,6 +93,26 @@
public VisitData getVisitData(ModuleRevisionId mrid) {
return (VisitData) visitData.get(mrid);
}
+
+ /**
+ * Returns the VisitNode currently visited, or <code>null</code> if there is no node currently
+ * visited in this context.
+ *
+ * @return the VisitNode currently visited
+ */
+ public VisitNode getCurrentVisitNode() {
+ return currentVisitNode;
+ }
+
+ /**
+ * Sets the currently visited node.
+ * WARNING: This should only be called by Ivy core ResolveEngine!
+ *
+ * @param currentVisitNode
+ */
+ void setCurrentVisitNode(VisitNode currentVisitNode) {
+ this.currentVisitNode = currentVisitNode;
+ }
public void register(VisitNode node) {
register(node.getId(), node);
@@ -180,7 +207,30 @@
return node != null && node.isBlacklisted(rootModuleConf);
}
- public ModuleRevisionId getRequestedDependencyRevisionId(DependencyDescriptor dd) {
- return getEngine().getRequestedDependencyRevisionId(dd, getOptions());
+
+ public DependencyDescriptor mediate(DependencyDescriptor dd) {
+ VisitNode current = getCurrentVisitNode();
+ if (current != null) {
+ // mediating dd through dependers stack
+ DependencyDescriptor originalDD = dd;
+ List dependers = new ArrayList(current.getPath());
+ // the returned path contains the currently visited node, we are only interested in
+ // the dependers, so we remove the currently visted node from the end
+ dependers.remove(dependers.size() - 1);
+ // we want to apply mediation going up in the dependers stack, not the opposite
+ Collections.reverse(dependers);
+ for (Iterator iterator = dependers.iterator(); iterator.hasNext();) {
+ VisitNode n = (VisitNode) iterator.next();
+ ModuleDescriptor md = n.getDescriptor();
+ if (md != null) {
+ dd = md.mediate(dd);
+ }
+ }
+ if (originalDD != dd) {
+ Message.verbose("dependency descriptor has been mediated: "
+ + originalDD + " => " + dd);
+ }
+ }
+ return getEngine().mediate(dd, getOptions());
}
}
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=640488&r1=640487&r2=640488&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 Mon Mar 24 11:05:10 2008
@@ -254,8 +254,7 @@
if (dd != null) {
ModuleRevisionId depResolvedId = dependencies[i].getResolvedId();
ModuleDescriptor depDescriptor = dependencies[i].getDescriptor();
- ModuleRevisionId depRevisionId =
- getRequestedDependencyRevisionId(dd, options);
+ ModuleRevisionId depRevisionId = dd.getDependencyRevisionId();
if (depResolvedId == null) {
throw new NullPointerException("getResolvedId() is null for "
+ dependencies[i].toString());
@@ -595,6 +594,10 @@
} else {
Message.verbose("== resolving dependencies for " + node.getId() + " [" + conf + "]");
}
+ ResolveData data = node.getNode().getData();
+ VisitNode parentVisitNode = data.getCurrentVisitNode();
+
+ data.setCurrentVisitNode(node);
resolveConflict(node, conf);
if (node.loadData(conf, shouldBePublic)) {
@@ -640,6 +643,7 @@
Message.debug(node.getId() + " => dependencies resolved in " + conf + " ("
+ (System.currentTimeMillis() - start) + "ms)");
}
+ data.setCurrentVisitNode(parentVisitNode);
}
private void doFetchDependencies(VisitNode node, String conf) {
@@ -966,17 +970,20 @@
}
/**
- * Returns the module revision id constraint requested by the given dependency descriptor,
- * according to the given resolve options.
+ * Mediates the given dependency descriptor according to given options.
+ * <p>
+ * The mediated dependency descriptor must return the actually requested module revision id when
+ * the method {@link DependencyDescriptor#getDependencyRevisionId()} is called.
+ * </p>
*
* @param dd
* the dependency descriptor for which the requested module revision id should be
* returned
* @param options
* the resolve options to use
- * @return the {@link ModuleRevisionId} corresponding to the requested dependency constraint
+ * @return the mediated {@link DependencyDescriptor}.
*/
- public ModuleRevisionId getRequestedDependencyRevisionId(
+ public DependencyDescriptor mediate(
DependencyDescriptor dd, ResolveOptions options) {
if (dd == null) {
return null;
@@ -984,9 +991,13 @@
String resolveMode = options.getResolveMode() == null
? settings.getResolveMode(dd.getDependencyId())
: options.getResolveMode();
- return ResolveOptions.RESOLVEMODE_DYNAMIC.equals(resolveMode)
- ? dd.getDynamicConstraintDependencyRevisionId()
- : dd.getDependencyRevisionId();
+ if (ResolveOptions.RESOLVEMODE_DYNAMIC.equals(resolveMode)
+ && !dd.getDynamicConstraintDependencyRevisionId()
+ .equals(dd.getDependencyRevisionId())) {
+ return dd.clone(dd.getDynamicConstraintDependencyRevisionId());
+ } else {
+ return dd;
+ }
}
public EventManager getEventManager() {
Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/core/resolve/VisitNode.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/core/resolve/VisitNode.java?rev=640488&r1=640487&r2=640488&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/core/resolve/VisitNode.java (original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/core/resolve/VisitNode.java Mon Mar 24 11:05:10 2008
@@ -140,14 +140,14 @@
return root;
}
- public Collection getPath() {
+ public Collection/*<VisitNode>*/ getPath() {
if (path == null) {
path = computePath();
}
return path;
}
- private Collection computePath() {
+ private Collection/*<VisitNode>*/ computePath() {
if (parent != null) {
Collection p = new LinkedHashSet(parent.getPath());
p.add(this);
Added: ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/DefaultPomDependencyMgt.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/DefaultPomDependencyMgt.java?rev=640488&view=auto
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/DefaultPomDependencyMgt.java (added)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/DefaultPomDependencyMgt.java Mon Mar 24 11:05:10 2008
@@ -0,0 +1,42 @@
+/*
+ * 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.
+ *
+ */
+package org.apache.ivy.plugins.parser.m2;
+
+public class DefaultPomDependencyMgt implements PomDependencyMgt {
+ private String groupId;
+ private String artifactId;
+ private String version;
+
+ public DefaultPomDependencyMgt(String groupId, String artifactId, String version) {
+ this.groupId = groupId;
+ this.artifactId = artifactId;
+ this.version = version;
+ }
+
+ public String getGroupId() {
+ return groupId;
+ }
+ public String getArtifaceId() {
+ return artifactId;
+ }
+ public String getVersion() {
+ return version;
+ }
+
+
+}
Propchange: ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/DefaultPomDependencyMgt.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/DefaultPomDependencyMgt.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/PomDependencyMgt.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/PomDependencyMgt.java?rev=640488&view=auto
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/PomDependencyMgt.java (added)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/PomDependencyMgt.java Mon Mar 24 11:05:10 2008
@@ -0,0 +1,28 @@
+/*
+ * 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.
+ *
+ */
+package org.apache.ivy.plugins.parser.m2;
+
+public interface PomDependencyMgt {
+
+ public abstract String getGroupId();
+
+ public abstract String getArtifaceId();
+
+ public abstract String getVersion();
+
+}
\ No newline at end of file
Propchange: ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/PomDependencyMgt.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/PomDependencyMgt.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/PomModuleDescriptorBuilder.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/PomModuleDescriptorBuilder.java?rev=640488&r1=640487&r2=640488&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/PomModuleDescriptorBuilder.java (original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/PomModuleDescriptorBuilder.java Mon Mar 24 11:05:10 2008
@@ -21,6 +21,7 @@
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
+import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
@@ -33,6 +34,7 @@
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.descriptor.OverrideDependencyDescriptorMediator;
import org.apache.ivy.core.module.descriptor.Configuration.Visibility;
import org.apache.ivy.core.module.id.ArtifactId;
import org.apache.ivy.core.module.id.ModuleId;
@@ -41,8 +43,8 @@
import org.apache.ivy.plugins.matcher.PatternMatcher;
import org.apache.ivy.plugins.parser.ModuleDescriptorParser;
import org.apache.ivy.plugins.parser.m2.PomReader.PomDependencyData;
-import org.apache.ivy.plugins.parser.m2.PomReader.PomDependencyMgt;
import org.apache.ivy.plugins.repository.Resource;
+import org.apache.ivy.util.Message;
/**
@@ -52,6 +54,8 @@
public class PomModuleDescriptorBuilder {
+ private static final int DEPENDENCY_MANAGEMENT_KEY_PARTS_COUNT = 3;
+
public static final Configuration[] MAVEN2_CONFIGURATIONS = new Configuration[] {
new Configuration("default", Visibility.PUBLIC,
"runtime dependencies and master artifact can be used with this conf",
@@ -257,6 +261,11 @@
public void addDependencyMgt(PomDependencyMgt dep) {
String key = getDependencyMgtExtraInfoKey(dep.getGroupId(), dep.getArtifaceId());
ivyModuleDescriptor.addExtraInfo(key, dep.getVersion());
+ // dependency management info is also used for version mediation of transitive dependencies
+ ivyModuleDescriptor.addDependencyDescriptorMediator(
+ ModuleId.newInstance(dep.getGroupId(), dep.getArtifaceId()),
+ ExactPatternMatcher.INSTANCE,
+ new OverrideDependencyDescriptorMediator(null, dep.getVersion()));
}
private String getDefaultVersion(PomDependencyData dep) {
@@ -274,6 +283,24 @@
return PROPERTIES + EXTRA_INFO_DELIMITER + propertyName;
}
+ public static Map/*<ModuleId, String version>*/
+ getDependencyManagementMap(ModuleDescriptor md) {
+ Map ret = new LinkedHashMap();
+ for (Iterator iterator = md.getExtraInfo().entrySet().iterator(); iterator.hasNext();) {
+ Map.Entry entry = (Map.Entry) iterator.next();
+ String key = (String) entry.getKey();
+ if ((key).startsWith(DEPENDENCY_MANAGEMENT)) {
+ String[] parts = key.split(EXTRA_INFO_DELIMITER);
+ if (parts.length != DEPENDENCY_MANAGEMENT_KEY_PARTS_COUNT) {
+ Message.warn("what seem to be a dependency management extra info "
+ + "doesn't match expected pattern: " + key);
+ } else {
+ ret.put(ModuleId.newInstance(parts[1], parts[2]), entry.getValue());
+ }
+ }
+ }
+ return ret;
+ }
public void addExtraInfos(Map extraAttributes) {
Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/PomModuleDescriptorParser.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/PomModuleDescriptorParser.java?rev=640488&r1=640487&r2=640488&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/PomModuleDescriptorParser.java (original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/PomModuleDescriptorParser.java Mon Mar 24 11:05:10 2008
@@ -32,6 +32,7 @@
import org.apache.ivy.core.module.descriptor.DefaultDependencyDescriptor;
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;
import org.apache.ivy.core.resolve.ResolveData;
import org.apache.ivy.core.resolve.ResolveEngine;
@@ -196,22 +197,31 @@
}
if (parentDescr != null) {
- Map parentPomProps = mdBuilder.extractPomProperties(parentDescr.getExtraInfo());
+ Map parentPomProps = PomModuleDescriptorBuilder
+ .extractPomProperties(parentDescr.getExtraInfo());
for (Iterator iter = parentPomProps.entrySet().iterator(); iter.hasNext();) {
Map.Entry prop = (Map.Entry) iter.next();
domReader.setProperty((String) prop.getKey(), (String) prop.getValue());
}
+
+ mdBuilder.addExtraInfos(parentDescr.getExtraInfo());
+
+ // add dependency management info from parent
+ Map depMgt = PomModuleDescriptorBuilder.getDependencyManagementMap(parentDescr);
+ for (Iterator iterator = depMgt.entrySet().iterator(); iterator.hasNext();) {
+ Map.Entry entry = (Map.Entry) iterator.next();
+ ModuleId mid = (ModuleId) entry.getKey();
+ String v = (String) entry.getValue();
+ mdBuilder.addDependencyMgt(
+ new DefaultPomDependencyMgt(mid.getOrganisation(), mid.getName(), v));
+ }
}
for (Iterator it = domReader.getDependencyMgt().iterator(); it.hasNext();) {
- PomReader.PomDependencyMgt dep = (PomReader.PomDependencyMgt) it.next();
+ PomDependencyMgt dep = (PomDependencyMgt) it.next();
mdBuilder.addDependencyMgt(dep);
}
- if (parentDescr != null) {
- mdBuilder.addExtraInfos(parentDescr.getExtraInfo());
- }
-
for (Iterator it = domReader.getDependencies().iterator(); it.hasNext();) {
PomReader.PomDependencyData dep = (PomReader.PomDependencyData) it.next();
mdBuilder.addDependency(res, dep);
Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/PomReader.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/PomReader.java?rev=640488&r1=640487&r2=640488&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/PomReader.java (original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/PomReader.java Mon Mar 24 11:05:10 2008
@@ -220,7 +220,7 @@
for (int i = 0; i < childs.getLength(); i++) {
Node node = childs.item(i);
if (node instanceof Element && DEPENDENCY.equals(node.getNodeName())) {
- dependencies.add(new PomDependencyMgt((Element) node));
+ dependencies.add(new PomDependencyMgtElement((Element) node));
}
}
}
@@ -228,23 +228,32 @@
}
- public class PomDependencyMgt {
+ public class PomDependencyMgtElement implements PomDependencyMgt {
private final Element depElement;
- PomDependencyMgt(Element depElement) {
+ PomDependencyMgtElement(Element depElement) {
this.depElement = depElement;
}
+ /* (non-Javadoc)
+ * @see org.apache.ivy.plugins.parser.m2.PomDependencyMgt#getGroupId()
+ */
public String getGroupId() {
String val = getFirstChildText(depElement , GROUP_ID);
return replaceProps(val);
}
+ /* (non-Javadoc)
+ * @see org.apache.ivy.plugins.parser.m2.PomDependencyMgt#getArtifaceId()
+ */
public String getArtifaceId() {
String val = getFirstChildText(depElement , ARTIFACT_ID);
return replaceProps(val);
}
+ /* (non-Javadoc)
+ * @see org.apache.ivy.plugins.parser.m2.PomDependencyMgt#getVersion()
+ */
public String getVersion() {
String val = getFirstChildText(depElement , VERSION);
return replaceProps(val);
@@ -253,7 +262,7 @@
}
- public class PomDependencyData extends PomDependencyMgt {
+ public class PomDependencyData extends PomDependencyMgtElement {
private final Element depElement;
PomDependencyData(Element depElement) {
super(depElement);
Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorParser.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorParser.java?rev=640488&r1=640487&r2=640488&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorParser.java (original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorParser.java Mon Mar 24 11:05:10 2008
@@ -45,6 +45,7 @@
import org.apache.ivy.core.module.descriptor.License;
import org.apache.ivy.core.module.descriptor.MDArtifact;
import org.apache.ivy.core.module.descriptor.ModuleDescriptor;
+import org.apache.ivy.core.module.descriptor.OverrideDependencyDescriptorMediator;
import org.apache.ivy.core.module.id.ArtifactId;
import org.apache.ivy.core.module.id.ModuleId;
import org.apache.ivy.core.module.id.ModuleRevisionId;
@@ -184,6 +185,10 @@
private static final int EXTRA_INFO = 12;
+ private static final int ENGINE_HINTS = 13;
+
+ private static final int MEDIATION = 14;
+
private int state = NONE;
private final URL xmlURL;
@@ -298,6 +303,11 @@
} else if ("conflicts".equals(qName)) {
state = CONFLICT;
checkConfigurations();
+ } else if ("engine-hints".equals(qName)) {
+ state = ENGINE_HINTS;
+ checkConfigurations();
+ } else if ("mediation".equals(qName)) {
+ state = MEDIATION;
} else if ("artifact".equals(qName)) {
artifactStarted(qName, attributes);
} else if ("include".equals(qName) && state == DEP) {
@@ -317,6 +327,8 @@
.getValue("name")));
} else if ("manager".equals(qName) && state == CONFLICT) {
managerStarted(attributes);
+ } else if ("override".equals(qName) && state == MEDIATION) {
+ mediationOverrideStarted(attributes);
} else if ("include".equals(qName) && state == CONF) {
includeConfStarted(attributes);
} else if (validate && state != EXTRA_INFO && state != DESCRIPTION) {
@@ -367,6 +379,25 @@
return;
}
getMd().addConflictManager(new ModuleId(org, mod), matcher, cm);
+ }
+
+ private void mediationOverrideStarted(Attributes attributes) {
+ String org = ivy.substitute(attributes.getValue("org"));
+ org = org == null ? PatternMatcher.ANY_EXPRESSION : org;
+ String mod = ivy.substitute(attributes.getValue("module"));
+ mod = mod == null ? PatternMatcher.ANY_EXPRESSION : mod;
+ String rev = ivy.substitute(attributes.getValue("rev"));
+ String branch = ivy.substitute(attributes.getValue("branch"));
+ String matcherName = ivy.substitute(attributes.getValue("matcher"));
+ PatternMatcher matcher = matcherName == null ? defaultMatcher : ivy
+ .getMatcher(matcherName);
+ if (matcher == null) {
+ addError("unknown matcher: " + matcherName);
+ return;
+ }
+ getMd().addDependencyDescriptorMediator(
+ new ModuleId(org, mod), matcher,
+ new OverrideDependencyDescriptorMediator(branch, rev));
}
private void includeConfStarted(Attributes attributes)
Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/ivy.xsd
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/ivy.xsd?rev=640488&r1=640487&r2=640488&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/ivy.xsd (original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/ivy.xsd Mon Mar 24 11:05:10 2008
@@ -251,6 +251,27 @@
</xs:sequence>
</xs:complexType>
</xs:element>
+ <xs:element name="engine" minOccurs="0">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="mediation" minOccurs="0">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="override" minOccurs="0" maxOccurs="unbounded">
+ <xs:complexType>
+ <xs:attribute name="org" type="xs:string"/>
+ <xs:attribute name="module" type="xs:string"/>
+ <xs:attribute name="matcher" type="xs:string"/>
+ <xs:attribute name="rev" type="xs:string"/>
+ <xs:attribute name="branch" type="xs:string"/>
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
</xs:sequence>
<xs:attribute name="version" type="xs:string" use="required"/>
</xs:complexType>
Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/AbstractResolver.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/AbstractResolver.java?rev=640488&r1=640487&r2=640488&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/AbstractResolver.java (original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/AbstractResolver.java Mon Mar 24 11:05:10 2008
@@ -298,7 +298,7 @@
protected ResolvedModuleRevision findModuleInCache(
DependencyDescriptor dd, ResolveData data, boolean anyResolver) {
return getRepositoryCacheManager().findModuleInCache(
- dd, data.getRequestedDependencyRevisionId(dd),
+ dd, dd.getDependencyRevisionId(),
getCacheOptions(data), anyResolver ? null : getName());
}
Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/AbstractResourceResolver.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/AbstractResourceResolver.java?rev=640488&r1=640487&r2=640488&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/AbstractResourceResolver.java (original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/AbstractResourceResolver.java Mon Mar 24 11:05:10 2008
@@ -71,7 +71,7 @@
}
public ResolvedResource findIvyFileRef(DependencyDescriptor dd, ResolveData data) {
- ModuleRevisionId mrid = data.getRequestedDependencyRevisionId(dd);
+ ModuleRevisionId mrid = dd.getDependencyRevisionId();
if (isM2compatible()) {
mrid = convertM2IdForResourceSearch(mrid);
}
Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/BasicResolver.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/BasicResolver.java?rev=640488&r1=640487&r2=640488&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/BasicResolver.java (original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/BasicResolver.java Mon Mar 24 11:05:10 2008
@@ -166,8 +166,8 @@
try {
clearIvyAttempts();
clearArtifactAttempts();
- ModuleRevisionId systemMrid = data.getRequestedDependencyRevisionId(systemDd);
- ModuleRevisionId nsMrid = data.getRequestedDependencyRevisionId(nsDd);
+ ModuleRevisionId systemMrid = systemDd.getDependencyRevisionId();
+ ModuleRevisionId nsMrid = nsDd.getDependencyRevisionId();
checkRevision(systemMrid);
@@ -444,7 +444,7 @@
DependencyDescriptor nsDd = dd;
dd = toSystem(nsDd);
- ModuleRevisionId mrid = data.getRequestedDependencyRevisionId(dd);
+ ModuleRevisionId mrid = dd.getDependencyRevisionId();
ModuleDescriptorParser parser = ModuleDescriptorParserRegistry
.getInstance().getParser(mdRef.getResource());
if (parser == null) {
Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/CacheResolver.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/CacheResolver.java?rev=640488&r1=640487&r2=640488&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/CacheResolver.java (original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/CacheResolver.java Mon Mar 24 11:05:10 2008
@@ -26,7 +26,6 @@
import org.apache.ivy.core.cache.DefaultRepositoryCacheManager;
import org.apache.ivy.core.cache.RepositoryCacheManager;
import org.apache.ivy.core.module.descriptor.Artifact;
-import org.apache.ivy.core.module.descriptor.DefaultDependencyDescriptor;
import org.apache.ivy.core.module.descriptor.DependencyDescriptor;
import org.apache.ivy.core.module.id.ModuleRevisionId;
import org.apache.ivy.core.report.ArtifactDownloadReport;
@@ -56,7 +55,7 @@
throws ParseException {
clearIvyAttempts();
- ModuleRevisionId mrid = data.getRequestedDependencyRevisionId(dd);
+ ModuleRevisionId mrid = dd.getDependencyRevisionId();
// check revision
ResolvedModuleRevision rmr = getRepositoryCacheManager()
@@ -84,7 +83,8 @@
return node.getModuleRevision();
}
rmr = getRepositoryCacheManager().findModuleInCache(
- new DefaultDependencyDescriptor(dd, ivyRef.getRevision()),
+ dd.clone(ModuleRevisionId.newInstance(
+ dd.getDependencyRevisionId(), ivyRef.getRevision())),
dd.getDependencyRevisionId(),
getCacheOptions(data), null);
if (rmr != null) {
Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/ChainResolver.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/ChainResolver.java?rev=640488&r1=640487&r2=640488&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/ChainResolver.java (original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/ChainResolver.java Mon Mar 24 11:05:10 2008
@@ -106,7 +106,7 @@
ResolvedModuleRevision mr = null;
- ModuleRevisionId mrid = data.getRequestedDependencyRevisionId(dd);
+ ModuleRevisionId mrid = dd.getDependencyRevisionId();
Message.verbose(getName() + ": Checking cache for: " + dd);
Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/IBiblioResolver.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/IBiblioResolver.java?rev=640488&r1=640487&r2=640488&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/IBiblioResolver.java (original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/IBiblioResolver.java Mon Mar 24 11:05:10 2008
@@ -80,7 +80,7 @@
public ResolvedResource findIvyFileRef(DependencyDescriptor dd, ResolveData data) {
if (isM2compatible() && isUsepoms()) {
- ModuleRevisionId mrid = data.getRequestedDependencyRevisionId(dd);
+ ModuleRevisionId mrid = dd.getDependencyRevisionId();
mrid = convertM2IdForResourceSearch(mrid);
ResolvedResource rres = findResourceUsingPatterns(mrid, getIvyPatterns(),
DefaultArtifact.newPomArtifact(mrid, data.getDate()), getRMDParser(dd, data), data
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=640488&r1=640487&r2=640488&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 Mon Mar 24 11:05:10 2008
@@ -3564,7 +3564,50 @@
assertTrue(getArchiveFileInCache(ivy, "org.apache.dm", "test3", "1.0",
"test3", "jar", "jar").exists());
}
+
+ public void testResolveMaven2ParentPomDependencyManagementOverrideTransitiveVersion() throws Exception {
+ // test;2.0 has a dependency on test2;3.0.
+ // test has a parent of parent(2.0) then parent2.
+ // Both parents have a dependencyManagement element for test2, and each list the version as
+ // ${pom.version}. The version for test2 in test should take precedance,
+ // so the version should be test2 version 3.0.
+ // test2;3.0 -> test4;2.0, but parent has a dependencyManagement section specifying test4;1.0.
+ // since maven 2.0.6, the information in parent should override transitive dependency version,
+ // and thus we should get test4;1.0
+ Ivy ivy = new Ivy();
+ ivy.configure(new File("test/repositories/parentPom/ivysettings.xml"));
+ ivy.getSettings().setDefaultResolver("parentChain");
+ ResolveReport report = ivy.resolve(new File(
+ "test/repositories/parentPom/org/apache/dm/test/2.0/test-2.0.pom").toURL(),
+ getResolveOptions(new String[] {"*"}));
+ assertNotNull(report);
+
+ //test the report to make sure the right dependencies are listed
+ List dependencies = report.getDependencies();
+ assertEquals(3, dependencies.size());
+
+ IvyNode ivyNode;
+ ivyNode = (IvyNode) dependencies.get(0);
+ assertNotNull(ivyNode);
+ ModuleRevisionId mrid = ModuleRevisionId.newInstance("org.apache.dm", "test2", "3.0");
+ assertEquals(mrid, ivyNode.getId());
+ assertTrue(getIvyFileInCache(
+ ModuleRevisionId.newInstance("org.apache.dm", "test2", "3.0")).exists());
+ assertTrue(getArchiveFileInCache(ivy, "org.apache.dm", "test2", "3.0",
+ "test2", "jar", "jar").exists());
+
+ ivyNode = (IvyNode) dependencies.get(2);
+ assertNotNull(ivyNode);
+ mrid = ModuleRevisionId.newInstance("org.apache.dm", "test4", "1.0");
+ assertEquals(mrid, ivyNode.getId());
+ assertTrue(getIvyFileInCache(
+ ModuleRevisionId.newInstance("org.apache.dm", "test4", "1.0")).exists());
+ assertTrue(getArchiveFileInCache(ivy, "org.apache.dm", "test4", "1.0",
+ "test4", "jar", "jar").exists());
+ }
+
+
public void testNamespaceMapping() throws Exception {
// the dependency is in another namespace
Ivy ivy = new Ivy();
Modified: ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorParserTest.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorParserTest.java?rev=640488&r1=640487&r2=640488&view=diff
==============================================================================
--- ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorParserTest.java (original)
+++ ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorParserTest.java Mon Mar 24 11:05:10 2008
@@ -29,7 +29,9 @@
import org.apache.ivy.Ivy;
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.DependencyDescriptor;
+import org.apache.ivy.core.module.descriptor.DependencyDescriptorMediator;
import org.apache.ivy.core.module.descriptor.ExcludeRule;
import org.apache.ivy.core.module.descriptor.License;
import org.apache.ivy.core.module.descriptor.ModuleDescriptor;
@@ -453,6 +455,12 @@
cm = md.getConflictManager(new ModuleId("theirorg", "theirmodule2"));
assertNull(cm);
+
+ assertEquals(
+ ModuleRevisionId.parse("yourorg#yourmodule1#BRANCH;1.0"),
+ md.mediate(new DefaultDependencyDescriptor(
+ ModuleRevisionId.parse("yourorg#yourmodule1;2.0"), false))
+ .getDependencyRevisionId());
ExcludeRule[] rules = md.getAllExcludeRules();
assertNotNull(rules);
Modified: ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/test.xml
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/test.xml?rev=640488&r1=640487&r2=640488&view=diff
==============================================================================
--- ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/test.xml (original)
+++ ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/test.xml Mon Mar 24 11:05:10 2008
@@ -106,4 +106,9 @@
<manager org="yourorg" module=".*" name="all" matcher="regexp"/>
<manager org="theirorg" module="theirmodule1" rev="1.0, 1.1"/>
</conflicts>
+ <engine-hints>
+ <mediation>
+ <override org="yourorg" module=".*1" matcher="regexp" branch="BRANCH" rev="1.0" />
+ </mediation>
+ </engine-hints>
</ivy-module>
Modified: ant/ivy/core/trunk/test/repositories/parentPom/org/apache/dm/parent/2.0/parent-2.0.pom
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/repositories/parentPom/org/apache/dm/parent/2.0/parent-2.0.pom?rev=640488&r1=640487&r2=640488&view=diff
==============================================================================
--- ant/ivy/core/trunk/test/repositories/parentPom/org/apache/dm/parent/2.0/parent-2.0.pom (original)
+++ ant/ivy/core/trunk/test/repositories/parentPom/org/apache/dm/parent/2.0/parent-2.0.pom Mon Mar 24 11:05:10 2008
@@ -35,6 +35,11 @@
<artifactId>test2</artifactId>
<version>${pom.version}</version>
</dependency>
+ <dependency>
+ <groupId>org.apache.dm</groupId>
+ <artifactId>test4</artifactId>
+ <version>1.0</version>
+ </dependency>
</dependencies>
</dependencyManagement>
<dependencies>
Added: ant/ivy/core/trunk/test/repositories/parentPom/org/apache/dm/test/2.0/test-2.0.jar
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/repositories/parentPom/org/apache/dm/test/2.0/test-2.0.jar?rev=640488&view=auto
==============================================================================
Binary file - no diff available.
Propchange: ant/ivy/core/trunk/test/repositories/parentPom/org/apache/dm/test/2.0/test-2.0.jar
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: ant/ivy/core/trunk/test/repositories/parentPom/org/apache/dm/test/2.0/test-2.0.pom
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/repositories/parentPom/org/apache/dm/test/2.0/test-2.0.pom?rev=640488&view=auto
==============================================================================
--- ant/ivy/core/trunk/test/repositories/parentPom/org/apache/dm/test/2.0/test-2.0.pom (added)
+++ ant/ivy/core/trunk/test/repositories/parentPom/org/apache/dm/test/2.0/test-2.0.pom Mon Mar 24 11:05:10 2008
@@ -0,0 +1,38 @@
+<?xml version="1.0"?>
+<!--
+ 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.
+-->
+<project>
+ <parent>
+ <artifactId>parent</artifactId>
+ <groupId>org.apache.dm</groupId>
+ <version>2.0</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.dm</groupId>
+ <artifactId>test</artifactId>
+ <name>Test parsing parent POM</name>
+ <version>2.0</version>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.dm</groupId>
+ <artifactId>test2</artifactId>
+ <version>3.0</version>
+ </dependency>
+ </dependencies>
+</project>
Propchange: ant/ivy/core/trunk/test/repositories/parentPom/org/apache/dm/test/2.0/test-2.0.pom
------------------------------------------------------------------------------
svn:eol-style = native
Added: ant/ivy/core/trunk/test/repositories/parentPom/org/apache/dm/test2/3.0/test2-3.0.jar
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/repositories/parentPom/org/apache/dm/test2/3.0/test2-3.0.jar?rev=640488&view=auto
==============================================================================
Binary file - no diff available.
Propchange: ant/ivy/core/trunk/test/repositories/parentPom/org/apache/dm/test2/3.0/test2-3.0.jar
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: ant/ivy/core/trunk/test/repositories/parentPom/org/apache/dm/test2/3.0/test2-3.0.pom
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/repositories/parentPom/org/apache/dm/test2/3.0/test2-3.0.pom?rev=640488&view=auto
==============================================================================
--- ant/ivy/core/trunk/test/repositories/parentPom/org/apache/dm/test2/3.0/test2-3.0.pom (added)
+++ ant/ivy/core/trunk/test/repositories/parentPom/org/apache/dm/test2/3.0/test2-3.0.pom Mon Mar 24 11:05:10 2008
@@ -0,0 +1,33 @@
+<?xml version="1.0"?>
+<!--
+ 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.
+-->
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.dm</groupId>
+ <artifactId>test2</artifactId>
+ <name>Test parsing parent POM</name>
+ <version>3.0</version>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.dm</groupId>
+ <artifactId>test4</artifactId>
+ <version>2.0</version>
+ </dependency>
+ </dependencies>
+</project>
Propchange: ant/ivy/core/trunk/test/repositories/parentPom/org/apache/dm/test2/3.0/test2-3.0.pom
------------------------------------------------------------------------------
svn:eol-style = native
Added: ant/ivy/core/trunk/test/repositories/parentPom/org/apache/dm/test4/1.0/test4-1.0.jar
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/repositories/parentPom/org/apache/dm/test4/1.0/test4-1.0.jar?rev=640488&view=auto
==============================================================================
Binary file - no diff available.
Propchange: ant/ivy/core/trunk/test/repositories/parentPom/org/apache/dm/test4/1.0/test4-1.0.jar
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: ant/ivy/core/trunk/test/repositories/parentPom/org/apache/dm/test4/1.0/test4-1.0.pom
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/repositories/parentPom/org/apache/dm/test4/1.0/test4-1.0.pom?rev=640488&view=auto
==============================================================================
--- ant/ivy/core/trunk/test/repositories/parentPom/org/apache/dm/test4/1.0/test4-1.0.pom (added)
+++ ant/ivy/core/trunk/test/repositories/parentPom/org/apache/dm/test4/1.0/test4-1.0.pom Mon Mar 24 11:05:10 2008
@@ -0,0 +1,26 @@
+<?xml version="1.0"?>
+<!--
+ 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.
+-->
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.dm</groupId>
+ <artifactId>test4</artifactId>
+ <name>Test parsing parent POM</name>
+ <version>1.0</version>
+</project>
Propchange: ant/ivy/core/trunk/test/repositories/parentPom/org/apache/dm/test4/1.0/test4-1.0.pom
------------------------------------------------------------------------------
svn:eol-style = native
Added: ant/ivy/core/trunk/test/repositories/parentPom/org/apache/dm/test4/2.0/test4-2.0.jar
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/repositories/parentPom/org/apache/dm/test4/2.0/test4-2.0.jar?rev=640488&view=auto
==============================================================================
Binary file - no diff available.
Propchange: ant/ivy/core/trunk/test/repositories/parentPom/org/apache/dm/test4/2.0/test4-2.0.jar
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: ant/ivy/core/trunk/test/repositories/parentPom/org/apache/dm/test4/2.0/test4-2.0.pom
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/repositories/parentPom/org/apache/dm/test4/2.0/test4-2.0.pom?rev=640488&view=auto
==============================================================================
--- ant/ivy/core/trunk/test/repositories/parentPom/org/apache/dm/test4/2.0/test4-2.0.pom (added)
+++ ant/ivy/core/trunk/test/repositories/parentPom/org/apache/dm/test4/2.0/test4-2.0.pom Mon Mar 24 11:05:10 2008
@@ -0,0 +1,26 @@
+<?xml version="1.0"?>
+<!--
+ 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.
+-->
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.dm</groupId>
+ <artifactId>test4</artifactId>
+ <name>Test parsing parent POM</name>
+ <version>2.0</version>
+</project>
Propchange: ant/ivy/core/trunk/test/repositories/parentPom/org/apache/dm/test4/2.0/test4-2.0.pom
------------------------------------------------------------------------------
svn:eol-style = native