Author: hibou
Date: Sun Nov 13 19:55:21 2011
New Revision: 1201498
URL: http://svn.apache.org/viewvc?rev=1201498&view=rev
Log:
Fix composite P2 respotory parsing
Added:
ant/ivy/core/trunk/test/test-p2/composite/
ant/ivy/core/trunk/test/test-p2/composite/compositeArtifacts.xml (with
props)
ant/ivy/core/trunk/test/test-p2/composite/compositeContent.xml (with
props)
Modified:
ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/p2/P2ArtifactParser.java
ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/p2/P2CompositeParser.java
ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/p2/P2Descriptor.java
ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/p2/P2MetadataParser.java
ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/repo/RepoDescriptor.java
ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/UpdateSiteLoader.java
ant/ivy/core/trunk/test/java/org/apache/ivy/osgi/updatesite/UpdateSiteLoaderTest.java
Modified:
ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/p2/P2ArtifactParser.java
URL:
http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/p2/P2ArtifactParser.java?rev=1201498&r1=1201497&r2=1201498&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/p2/P2ArtifactParser.java
(original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/p2/P2ArtifactParser.java
Sun Nov 13 19:55:21 2011
@@ -38,12 +38,15 @@ public class P2ArtifactParser implements
private final P2Descriptor p2Descriptor;
- public P2ArtifactParser(P2Descriptor p2Descriptor) {
+ private final String repoUrl;
+
+ public P2ArtifactParser(P2Descriptor p2Descriptor, String repoUrl) {
this.p2Descriptor = p2Descriptor;
+ this.repoUrl = repoUrl;
}
public void parse(InputStream in) throws ParseException, IOException,
SAXException {
- RepositoryHandler handler = new RepositoryHandler(p2Descriptor);
+ RepositoryHandler handler = new RepositoryHandler(p2Descriptor,
repoUrl);
try {
XMLHelper.parse(in, null, handler, null);
} catch (ParserConfigurationException e) {
@@ -63,7 +66,7 @@ public class P2ArtifactParser implements
private Map/* <String, String> */patternsByClassifier = new HashMap();
- public RepositoryHandler(final P2Descriptor p2Descriptor) {
+ public RepositoryHandler(final P2Descriptor p2Descriptor, String
repoUrl) {
super(REPOSITORY);
// addChild(new PropertiesHandler(), new ChildElementHandler() {
// public void childHanlded(DelegetingHandler child) {
@@ -85,7 +88,7 @@ public class P2ArtifactParser implements
}
}
});
- addChild(new ArtifactsHandler(p2Descriptor, patternsByClassifier),
+ addChild(new ArtifactsHandler(p2Descriptor, patternsByClassifier,
repoUrl),
new ChildElementHandler() {
public void childHanlded(DelegetingHandler child) {
// nothing to do
@@ -153,12 +156,13 @@ public class P2ArtifactParser implements
// private static final String SIZE = "size";
public ArtifactsHandler(final P2Descriptor p2Descriptor,
- final Map/* <String, String> */patternsByClassifier) {
+ final Map/* <String, String> */patternsByClassifier, final
String repoUrl) {
super(ARTIFACTS);
addChild(new ArtifactHandler(), new ChildElementHandler() {
public void childHanlded(DelegetingHandler child) {
P2Artifact a = ((ArtifactHandler) child).p2Artifact;
String url = (String)
patternsByClassifier.get(a.getClassifier());
+ url = url.replaceAll("\\$\\{repoUrl\\}", repoUrl);
p2Descriptor.addArtifactUrl(a.getId(), a.getVersion(),
url);
}
});
Modified:
ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/p2/P2CompositeParser.java
URL:
http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/p2/P2CompositeParser.java?rev=1201498&r1=1201497&r2=1201498&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/p2/P2CompositeParser.java
(original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/p2/P2CompositeParser.java
Sun Nov 13 19:55:21 2011
@@ -21,7 +21,9 @@ import java.io.IOException;
import java.io.InputStream;
import java.text.ParseException;
import java.util.ArrayList;
+import java.util.LinkedHashSet;
import java.util.List;
+import java.util.Set;
import javax.xml.parsers.ParserConfigurationException;
@@ -32,9 +34,9 @@ import org.xml.sax.SAXException;
public class P2CompositeParser implements XMLInputParser {
- private List/* <String> */childLocations;
+ private Set/* <String> */childLocations = new LinkedHashSet();
- public List getChildLocations() {
+ public Set getChildLocations() {
return childLocations;
}
@@ -45,7 +47,7 @@ public class P2CompositeParser implement
} catch (ParserConfigurationException e) {
throw new SAXException(e);
}
- childLocations = handler.childLocations;
+ childLocations.addAll(handler.childLocations);
}
static class RepositoryHandler extends DelegetingHandler {
Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/p2/P2Descriptor.java
URL:
http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/p2/P2Descriptor.java?rev=1201498&r1=1201497&r2=1201498&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/p2/P2Descriptor.java
(original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/p2/P2Descriptor.java Sun
Nov 13 19:55:21 2011
@@ -20,7 +20,9 @@ package org.apache.ivy.osgi.p2;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
+import java.util.ArrayList;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import org.apache.ivy.osgi.core.BundleInfo;
@@ -51,14 +53,14 @@ public class P2Descriptor extends RepoDe
public void addBundle(BundleInfo bundleInfo) {
// before transforming it and adding it into the repo, let's add the
artifacts
+ // and if no artifact, then no bundle
Map/* <Version, String> */urlPatternsByVersion = (Map)
artifactUrlPatterns.get(bundleInfo
.getSymbolicName());
if (urlPatternsByVersion != null) {
String urlPattern = (String)
urlPatternsByVersion.get(bundleInfo.getVersion());
if (urlPattern != null) {
- String url = urlPattern.replaceAll("\\$\\{repoUrl\\}",
repoUrl);
- url = url.replaceAll("\\$\\{id\\}",
bundleInfo.getSymbolicName());
+ String url = urlPattern.replaceAll("\\$\\{id\\}",
bundleInfo.getSymbolicName());
url = url.replaceAll("\\$\\{version\\}",
bundleInfo.getVersion().toString());
try {
bundleInfo.setUri(new URI(url));
@@ -66,10 +68,9 @@ public class P2Descriptor extends RepoDe
throw new RuntimeException("Unable to build the artifact
uri of " + bundleInfo,
e);
}
+ super.addBundle(bundleInfo);
}
}
-
- super.addBundle(bundleInfo);
}
public void addArtifactUrl(String id, Version version, String url) {
@@ -80,4 +81,5 @@ public class P2Descriptor extends RepoDe
}
byVersion.put(version, url);
}
+
}
Modified:
ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/p2/P2MetadataParser.java
URL:
http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/p2/P2MetadataParser.java?rev=1201498&r1=1201497&r2=1201498&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/p2/P2MetadataParser.java
(original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/p2/P2MetadataParser.java
Sun Nov 13 19:55:21 2011
@@ -187,7 +187,10 @@ public class P2MetadataParser implements
super(UNITS);
addChild(new UnitHandler(), new ChildElementHandler() {
public void childHanlded(DelegetingHandler child) {
- bundles.add(((UnitHandler) child).bundleInfo);
+ BundleInfo bundleInfo = ((UnitHandler) child).bundleInfo;
+ if (!bundleInfo.getCapabilities().isEmpty()) {
+ bundles.add(((UnitHandler) child).bundleInfo);
+ }
}
});
}
@@ -207,7 +210,7 @@ public class P2MetadataParser implements
private static final String VERSION = "version";
- private static final String SINGLETON = "singleton";
+ // private static final String SINGLETON = "singleton";
BundleInfo bundleInfo;
@@ -350,6 +353,9 @@ public class P2MetadataParser implements
String name = ((ProvidedHandler) child).name;
Version version = ((ProvidedHandler) child).version;
String type = namespace2Type(((ProvidedHandler)
child).namespace);
+ if (type == null) {
+ return;
+ }
BundleCapability capability;
if (type == BundleInfo.PACKAGE_TYPE) {
capability = new ExportPackage(name, version);
@@ -423,7 +429,7 @@ public class P2MetadataParser implements
static class RequiresHandler extends AbstractRequirementHandler {
- private static final String REQUIRES = "provides";
+ private static final String REQUIRES = "requires";
public RequiresHandler() {
super(REQUIRES);
@@ -679,7 +685,7 @@ public class P2MetadataParser implements
private static final String CHANGES = "changes";
- private static final String SIZE = "size";
+ // private static final String SIZE = "size";
public ChangesHandler() {
super(CHANGES);
@@ -690,7 +696,7 @@ public class P2MetadataParser implements
}
protected void handleAttributes(Attributes atts) {
- int size = Integer.parseInt(atts.getValue(SIZE));
+ // int size = Integer.parseInt(atts.getValue(SIZE));
}
}
@@ -727,7 +733,7 @@ public class P2MetadataParser implements
private static final String PATCH_SCOPE = "patchScope";
- private static final String SIZE = "size";
+ // private static final String SIZE = "size";
public PatchScopeHandler() {
super(PATCH_SCOPE);
@@ -738,7 +744,7 @@ public class P2MetadataParser implements
}
protected void handleAttributes(Attributes atts) {
- int size = Integer.parseInt(atts.getValue(SIZE));
+ // int size = Integer.parseInt(atts.getValue(SIZE));
}
}
Modified:
ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/repo/RepoDescriptor.java
URL:
http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/repo/RepoDescriptor.java?rev=1201498&r1=1201497&r2=1201498&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/repo/RepoDescriptor.java
(original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/repo/RepoDescriptor.java
Sun Nov 13 19:55:21 2011
@@ -90,7 +90,8 @@ public class RepoDescriptor {
map.put(value, bundleReferences);
}
if (!bundleReferences.add(md)) {
- Message.warn("The repo did already contains " + md);
+ Message.debug("Duplicate module in the repo " + baseUri + " for "
+ type + " "
+ + value + ": " + md.getModuleRevisionId());
}
}
Modified:
ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/UpdateSiteLoader.java
URL:
http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/UpdateSiteLoader.java?rev=1201498&r1=1201497&r2=1201498&view=diff
==============================================================================
---
ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/UpdateSiteLoader.java
(original)
+++
ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/UpdateSiteLoader.java
Sun Nov 13 19:55:21 2011
@@ -105,15 +105,22 @@ public class UpdateSiteLoader {
private boolean populateP2Descriptor(URI repoUri, P2Descriptor
p2Descriptor)
throws IOException, ParseException, SAXException {
- boolean exist = false;
-
- exist |= readComposite(repoUri, "compositeContent", p2Descriptor);
-
- exist |= readComposite(repoUri, "compositeArtifacts", p2Descriptor);
+ Message.verbose("Loading P2 repository " + repoUri);
- exist |= readJarOrXml(repoUri, "artifacts", new
P2ArtifactParser(p2Descriptor));
+ boolean exist = false;
- exist |= readJarOrXml(repoUri, "content", new
P2MetadataParser(p2Descriptor));
+ boolean artifactExists = readComposite(repoUri, "compositeArtifacts",
p2Descriptor);
+ if (!artifactExists) {
+ artifactExists = readJarOrXml(repoUri, "artifacts", new
P2ArtifactParser(p2Descriptor,
+ repoUri.toURL().toExternalForm()));
+ }
+ exist |= artifactExists;
+
+ boolean contentExists = readComposite(repoUri, "compositeContent",
p2Descriptor);
+ if (!contentExists) {
+ contentExists = readJarOrXml(repoUri, "content", new
P2MetadataParser(p2Descriptor));
+ }
+ exist |= artifactExists;
return exist;
}
Modified:
ant/ivy/core/trunk/test/java/org/apache/ivy/osgi/updatesite/UpdateSiteLoaderTest.java
URL:
http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/java/org/apache/ivy/osgi/updatesite/UpdateSiteLoaderTest.java?rev=1201498&r1=1201497&r2=1201498&view=diff
==============================================================================
---
ant/ivy/core/trunk/test/java/org/apache/ivy/osgi/updatesite/UpdateSiteLoaderTest.java
(original)
+++
ant/ivy/core/trunk/test/java/org/apache/ivy/osgi/updatesite/UpdateSiteLoaderTest.java
Sun Nov 13 19:55:21 2011
@@ -79,4 +79,13 @@ public class UpdateSiteLoaderTest extend
assertTrue(site.getModules().size() > 900);
}
+ public void testComposite() throws Exception {
+ RepoDescriptor site = loader.load(new
File("test/test-p2/composite/").toURI());
+ assertEquals(18, site.getModules().size());
+
+ // check that the url of the artifact is correctly resolved
+ String path = new
File("test/test-p2/ivyde-repo/").toURI().toURL().toExternalForm();
+ ModuleDescriptor md = (ModuleDescriptor)
site.getModules().iterator().next();
+
assertTrue(md.getAllArtifacts()[0].getUrl().toExternalForm().startsWith(path));
+ }
}
Added: ant/ivy/core/trunk/test/test-p2/composite/compositeArtifacts.xml
URL:
http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/test-p2/composite/compositeArtifacts.xml?rev=1201498&view=auto
==============================================================================
--- ant/ivy/core/trunk/test/test-p2/composite/compositeArtifacts.xml (added)
+++ ant/ivy/core/trunk/test/test-p2/composite/compositeArtifacts.xml Sun Nov 13
19:55:21 2011
@@ -0,0 +1,29 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<?compositeArtifactRepository version='1.0.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.
+-->
+<repository name='IvyDE test composite Repository'
type='org.eclipse.equinox.internal.p2.artifact.repository.CompositeArtifactRepository'
version='1.0.0'>
+ <properties size='2'>
+ <property name='p2.timestamp' value='1308747727547'/>
+ <property name='p2.compressed' value='true'/>
+ </properties>
+ <children size='2'>
+ <child location='../ivyde-repo'/>
+ </children>
+</repository>
Propchange: ant/ivy/core/trunk/test/test-p2/composite/compositeArtifacts.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: ant/ivy/core/trunk/test/test-p2/composite/compositeArtifacts.xml
------------------------------------------------------------------------------
svn:keywords = Date Revision Author HeadURL Id
Propchange: ant/ivy/core/trunk/test/test-p2/composite/compositeArtifacts.xml
------------------------------------------------------------------------------
svn:mime-type = text/xml
Added: ant/ivy/core/trunk/test/test-p2/composite/compositeContent.xml
URL:
http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/test-p2/composite/compositeContent.xml?rev=1201498&view=auto
==============================================================================
--- ant/ivy/core/trunk/test/test-p2/composite/compositeContent.xml (added)
+++ ant/ivy/core/trunk/test/test-p2/composite/compositeContent.xml Sun Nov 13
19:55:21 2011
@@ -0,0 +1,29 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<?compositeMetadataRepository version='1.0.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.
+-->
+<repository name='IvyDE test composite repository'
type='org.eclipse.equinox.internal.p2.metadata.repository.CompositeMetadataRepository'
version='1.0.0'>
+ <properties size='2'>
+ <property name='p2.timestamp' value='1308747730658'/>
+ <property name='p2.compressed' value='true'/>
+ </properties>
+ <children size='2'>
+ <child location='../ivyde-repo'/>
+ </children>
+</repository>
Propchange: ant/ivy/core/trunk/test/test-p2/composite/compositeContent.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: ant/ivy/core/trunk/test/test-p2/composite/compositeContent.xml
------------------------------------------------------------------------------
svn:keywords = Date Revision Author HeadURL Id
Propchange: ant/ivy/core/trunk/test/test-p2/composite/compositeContent.xml
------------------------------------------------------------------------------
svn:mime-type = text/xml