Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions META-INF/MANIFEST.MF
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ Export-Package: org.apache.ivy;version="2.0.0",
org.apache.ivy.core.resolve;version="2.0.0",
org.apache.ivy.core.retrieve;version="2.0.0",
org.apache.ivy.core.search;version="2.0.0",
org.apache.ivy.core.settings;version="2.0.0",
org.apache.ivy.core.settings;version="2.6.0",
org.apache.ivy.core.sort;version="2.0.0",
org.apache.ivy.osgi.core;version="2.3.0",
org.apache.ivy.osgi.filter;version="2.3.0",
Expand All @@ -88,7 +88,7 @@ Export-Package: org.apache.ivy;version="2.0.0",
org.apache.ivy.plugins.pack;version="2.6.0",
org.apache.ivy.plugins.parser;version="2.0.0",
org.apache.ivy.plugins.parser.m2;version="2.0.0",
org.apache.ivy.plugins.parser.xml;version="2.0.0",
org.apache.ivy.plugins.parser.xml;version="2.6.0",
org.apache.ivy.plugins.report;version="2.0.0",
org.apache.ivy.plugins.repository;version="2.0.0",
org.apache.ivy.plugins.repository.file;version="2.0.0",
Expand Down
16 changes: 9 additions & 7 deletions src/java/org/apache/ivy/ant/IvyDeliver.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
import org.apache.ivy.core.settings.IvySettings;
import org.apache.ivy.util.DateUtil;
import org.apache.ivy.util.Message;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.taskdefs.CallTarget;
import org.apache.tools.ant.taskdefs.Echo;
Expand Down Expand Up @@ -412,19 +413,20 @@ public void doExecute() throws BuildException {
drResolver = new DeliverDRResolver();
}

DeliverOptions options = new DeliverOptions(status, pubdate, drResolver,
doValidate(settings), replacedynamicrev, splitToArray(conf))
.setResolveId(resolveId).setReplaceForcedRevisions(isReplaceForcedRev())
.setGenerateRevConstraint(generateRevConstraint).setMerge(merge)
.setPubBranch(pubBranch);
DeliverOptions options =
new DeliverOptions(status, pubdate, drResolver, doValidate(settings), replacedynamicrev, splitToArray(conf))
.setGenerateRevConstraint(generateRevConstraint)
.setReplaceForcedRevisions(isReplaceForcedRev())
.setResolveId(resolveId)
.setPubBranch(pubBranch)
.setMerge(merge);
if (mrid == null) {
ivy.deliver(pubRevision, deliverpattern, options);
} else {
ivy.deliver(mrid, pubRevision, deliverpattern, options);
}
} catch (Exception e) {
throw new BuildException("impossible to deliver " + (mrid == null ? resolveId : mrid)
+ ": " + e, e);
throw new BuildException("impossible to deliver " + (mrid == null ? resolveId : mrid) + ": " + e, e);
} finally {
if (isLeading) {
if (deliveryList.exists()) {
Expand Down
57 changes: 28 additions & 29 deletions src/java/org/apache/ivy/core/settings/IvySettings.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,25 @@
*/
package org.apache.ivy.core.settings;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.security.AccessControlException;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;

import org.apache.ivy.Ivy;
import org.apache.ivy.core.IvyPatternHelper;
import org.apache.ivy.core.NormalRelativeUrlResolver;
Expand Down Expand Up @@ -97,25 +116,6 @@
import org.apache.ivy.util.filter.Filter;
import org.apache.ivy.util.url.URLHandlerRegistry;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.security.AccessControlException;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;

import static org.apache.ivy.util.StringUtils.splitToArray;

public class IvySettings implements SortEngineSettings, PublishEngineSettings, ParserSettings,
Expand Down Expand Up @@ -933,17 +933,16 @@ public synchronized boolean hasResolver(String resolverName) {
}

public synchronized DependencyResolver getResolver(String resolverName) {
DependencyResolver r = getDictatorResolver();
if (r != null) {
return r;
}
DependencyResolver resolver = resolversMap.get(resolverName);
DependencyResolver resolver = getDictatorResolver();
if (resolver == null) {
Message.error("unknown resolver " + resolverName);
} else if (workspaceResolver != null && !(resolver instanceof WorkspaceChainResolver)) {
resolver = new WorkspaceChainResolver(this, resolver, workspaceResolver);
resolversMap.put(resolver.getName(), resolver);
resolversMap.put(resolverName, resolver);
resolver = resolversMap.get(resolverName);
if (resolver == null) {
Message.debug("unknown resolver " + resolverName);
} else if (workspaceResolver != null && !(resolver instanceof WorkspaceChainResolver)) {
resolver = new WorkspaceChainResolver(this, resolver, workspaceResolver);
resolversMap.put(resolver.getName(), resolver);
resolversMap.put(resolverName, resolver);
}
}
return resolver;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@
import org.apache.ivy.util.Message;
import org.apache.ivy.util.XMLHelper;
import org.apache.ivy.util.extendable.ExtendableItemHelper;

import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
Expand Down Expand Up @@ -166,23 +167,19 @@ public static void update(InputStream in, Resource res, File destFile, UpdateOpt
private static class UpdaterHandler extends DefaultHandler implements LexicalHandler {

/** standard attributes of ivy-module/info */
private static final Collection<String> STD_ATTS = Arrays.asList("organisation",
"module", "branch", "revision", "status", "publication", "namespace");
private static final Collection<String> STD_ATTS = Collections.unmodifiableList(Arrays.asList("organisation", "module", "branch", "revision", "status", "publication", "namespace"));

/** elements that may appear inside ivy-module, in expected order */
private static final List<String> MODULE_ELEMENTS = Arrays.asList("info",
"configurations", "publications", "dependencies", "conflicts");
private static final List<String> MODULE_ELEMENTS = Collections.unmodifiableList(Arrays.asList("info", "configurations", "publications", "dependencies", "conflicts"));

/** element position of "configurations" inside "ivy-module" */
private static final int CONFIGURATIONS_POSITION = MODULE_ELEMENTS
.indexOf("configurations");
private static final int CONFIGURATIONS_POSITION = MODULE_ELEMENTS.indexOf("configurations");

/** element position of "dependencies" inside "ivy-module" */
private static final int DEPENDENCIES_POSITION = MODULE_ELEMENTS.indexOf("dependencies");

/** elements that may appear inside of ivy-module/info */
private static final Collection<String> INFO_ELEMENTS = Arrays.asList("extends",
"ivyauthor", "license", "repository", "description");
private static final Collection<String> INFO_ELEMENTS = Collections.unmodifiableList(Arrays.asList("extends", "ivyauthor", "license", "repository", "description"));

private final ParserSettings settings;

Expand Down Expand Up @@ -212,7 +209,7 @@ private static class UpdaterHandler extends DefaultHandler implements LexicalHan

private final UpdateOptions options;

public UpdaterHandler(URL relativePathCtx, PrintWriter out, final UpdateOptions options) {
UpdaterHandler(URL relativePathCtx, PrintWriter out, final UpdateOptions options) {
this.options = options;
this.settings = options.getSettings();
this.out = out;
Expand Down Expand Up @@ -291,8 +288,8 @@ public void startElement(String uri, String localName, String qName, Attributes
// according to ivy.xsd, all <dependency> elements must occur before
// the <exclude>, <override> or <conflict> elements
if (options.isMerge()
&& ("exclude".equals(localName) || "override".equals(localName) || "conflict"
.equals(localName)) && "ivy-module/dependencies".equals(getContext())) {
&& "ivy-module/dependencies".equals(getContext())
&& ("exclude".equals(localName) || "override".equals(localName) || "conflict".equals(localName))) {
ModuleDescriptor merged = options.getMergedDescriptor();
writeInheritedDependencies(merged);
out.println();
Expand Down Expand Up @@ -547,6 +544,7 @@ private void startElementInDependency(Attributes attributes) {
buffers.push(buffer);
confAttributeBuffers.push(buffer);
buffer.setDefaultPrint(isNullOrEmpty(attributes.getValue("conf")));

write("<dependency");
String org = substitute(settings, attributes.getValue("org"));
if (org == null) {
Expand Down Expand Up @@ -575,12 +573,9 @@ private void startElementInDependency(Attributes attributes) {

String revision = substitute(settings, attributes.getValue("rev"));
String revisionConstraint = substitute(settings, attributes.getValue("revConstraint"));
Map<String, String> extraAttributes = ExtendableItemHelper.getExtraAttributes(settings, attributes,
XmlModuleDescriptorParser.DEPENDENCY_REGULAR_ATTRIBUTES);
ModuleRevisionId localMrid = ModuleRevisionId.newInstance(org, module, branch,
revision, extraAttributes);
ModuleRevisionId systemMrid = (ns == null) ? localMrid : ns.getToSystemTransformer()
.transform(localMrid);
Map<String, String> extraAttributes = ExtendableItemHelper.getExtraAttributes(settings, attributes, XmlModuleDescriptorParser.DEPENDENCY_REGULAR_ATTRIBUTES);
ModuleRevisionId localMrid = ModuleRevisionId.newInstance(org, module, branch, revision, extraAttributes);
ModuleRevisionId systemMrid = (ns == null) ? localMrid : ns.getToSystemTransformer().transform(localMrid);

String newBranch = resolvedBranches.get(systemMrid);

Expand Down Expand Up @@ -636,8 +631,7 @@ private void startElementInDependency(Attributes attributes) {
}
break;
default:
write(" " + attName + "=\""
+ substitute(settings, attributes.getValue(attName)) + "\"");
write(" " + attName + "=\"" + substitute(settings, attributes.getValue(attName)) + "\"");
break;
}
}
Expand Down Expand Up @@ -985,8 +979,7 @@ private void writeInheritedItems(ModuleDescriptor merged, InheritableItem[] item
// we can add some useful comments
PrintWriter out = getWriter();

Map<ModuleRevisionId, List<InheritableItem>> inheritedItems = collateInheritedItems(
merged, items);
Map<ModuleRevisionId, List<InheritableItem>> inheritedItems = collateInheritedItems(merged, items);
boolean hasItems = !inheritedItems.isEmpty();

if (hasItems && includeContainer) {
Expand All @@ -1005,8 +998,7 @@ private void writeInheritedItems(ModuleDescriptor merged, InheritableItem[] item
justOpen = null;
}

for (Map.Entry<ModuleRevisionId, List<InheritableItem>> entry : inheritedItems
.entrySet()) {
for (Map.Entry<ModuleRevisionId, List<InheritableItem>> entry : inheritedItems.entrySet()) {
if (justOpen != null) {
out.println(">");
justOpen = null; // helps endElement() decide how to write close tags
Expand Down Expand Up @@ -1048,20 +1040,15 @@ private void writeInheritanceComment(String itemDescription, Object parentInfo)
* @return maps parent ModuleRevisionId to a List of InheritedItems imported from that
* parent
*/
private Map<ModuleRevisionId, List<InheritableItem>> collateInheritedItems(
ModuleDescriptor merged, InheritableItem[] items) {
private Map<ModuleRevisionId, List<InheritableItem>> collateInheritedItems(ModuleDescriptor merged, InheritableItem[] items) {
Map<ModuleRevisionId, List<InheritableItem>> inheritedItems = new LinkedHashMap<>();
for (InheritableItem item : items) {
ModuleRevisionId source = item.getSourceModule();
// ignore items that are defined directly in the child descriptor
if (source != null
&& !source.getModuleId().equals(merged.getModuleRevisionId().getModuleId())) {
List<InheritableItem> accum = inheritedItems.get(source);
if (accum == null) {
accum = new ArrayList<>();
inheritedItems.put(source, accum);
}
accum.add(item);
ModuleRevisionId sourceModule = item.getSourceModule();
ModuleRevisionId mergedModule = merged.getModuleRevisionId();
if (sourceModule != null && !sourceModule.getModuleId().equals(mergedModule.getModuleId())) {
List<InheritableItem> list = inheritedItems.computeIfAbsent(sourceModule, k -> new ArrayList<>());
list.add(item);
}
}
return inheritedItems;
Expand All @@ -1081,8 +1068,7 @@ private void writeInheritedDescription(ModuleDescriptor merged) {
writer.println(">");
}
writeInheritanceComment("description", "parent");
writer.println(getIndent() + "<description>" + XMLHelper.escape(description)
+ "</description>");
writer.println(getIndent() + "<description>" + XMLHelper.escape(description) + "</description>");
// restore the indent that existed before we wrote the extra elements
writer.print(currentIndent);
justOpen = null;
Expand All @@ -1093,29 +1079,29 @@ private void writeInheritedDescription(ModuleDescriptor merged) {
private void writeInheritedConfigurations(ModuleDescriptor merged) {
if (!mergedConfigurations) {
mergedConfigurations = true;
writeInheritedItems(merged, merged.getConfigurations(),
ConfigurationPrinter.INSTANCE, "configurations", false);
InheritableItem[] items = merged.getConfigurations();
writeInheritedItems(merged, items, ConfigurationPrinter.INSTANCE, "configurations", false);
}
}

private void writeInheritedDependencies(ModuleDescriptor merged) {
if (!mergedDependencies) {
mergedDependencies = true;
writeInheritedItems(merged, getDependencies(merged), DependencyPrinter.INSTANCE,
"dependencies", false);
InheritableItem[] items = getDependencies(merged);
writeInheritedItems(merged, items, DependencyPrinter.INSTANCE, "dependencies", false);
}
}

private DependencyDescriptor[] getDependencies(ModuleDescriptor merged) {
DependencyDescriptor[] dependencies = merged.getDependencies();
for (int i = 0; i < dependencies.length; i += 1) {
ModuleRevisionId mrid = dependencies[i].getDependencyRevisionId();
String rev = resolvedRevisions.get(mrid); // IVY-1410
if (rev != null && !rev.equals(mrid.getRevision())) {
dependencies[i] = dependencies[i].clone(ModuleRevisionId.newInstance(mrid, rev));
DependencyDescriptor[] dependencies = merged.getDependencies();
for (int i = 0; i < dependencies.length; i += 1) {
ModuleRevisionId mrid = dependencies[i].getDependencyRevisionId();
String rev = resolvedRevisions.get(mrid); // IVY-1410
if (rev != null && !rev.equals(mrid.getRevision())) {
dependencies[i] = dependencies[i].clone(ModuleRevisionId.newInstance(mrid, rev));
}
}
}
return dependencies;
return dependencies;
}

/**
Expand All @@ -1137,32 +1123,24 @@ private DependencyDescriptor[] getDependencies(ModuleDescriptor merged) {
* a descriptor element name, for example "configurations" or "info"
*/
private void flushMergedElementsBefore(String moduleElement) {
if (options.isMerge() && context.size() == 1 && "ivy-module".equals(context.peek())
&& !(mergedConfigurations && mergedDependencies)) {

if (options.isMerge() && context.size() == 1 && "ivy-module".equals(context.peek()) && !(mergedConfigurations && mergedDependencies)) {
// calculate the position of the element in ivy-module
int position = (moduleElement == null) ? MODULE_ELEMENTS.size()
: MODULE_ELEMENTS.indexOf(moduleElement);

int position = (moduleElement == null) ? MODULE_ELEMENTS.size() : MODULE_ELEMENTS.indexOf(moduleElement);
ModuleDescriptor merged = options.getMergedDescriptor();
InheritableItem[] items;

// see if we should write <configurations>
if (!mergedConfigurations && position > CONFIGURATIONS_POSITION
&& merged.getConfigurations().length > 0) {

items = merged.getConfigurations();
if (!mergedConfigurations && items.length > 0 && position > CONFIGURATIONS_POSITION) {
mergedConfigurations = true;
writeInheritedItems(merged, merged.getConfigurations(),
ConfigurationPrinter.INSTANCE, "configurations", true);

writeInheritedItems(merged, items, ConfigurationPrinter.INSTANCE, "configurations", true);
}
// see if we should write <dependencies>
if (!mergedDependencies && position > DEPENDENCIES_POSITION
&& merged.getDependencies().length > 0) {

// see if we should write <dependencies>
items = getDependencies(merged);
if (!mergedDependencies && items.length > 0 && position > DEPENDENCIES_POSITION) {
mergedDependencies = true;
writeInheritedItems(merged, merged.getDependencies(),
DependencyPrinter.INSTANCE, "dependencies", true);

writeInheritedItems(merged, items, DependencyPrinter.INSTANCE, "dependencies", true);
}
}
}
Expand Down
Loading