tycho package is retired on c9s for CS-935

This commit is contained in:
Troy Dawson 2022-04-14 13:17:36 -07:00
parent 5a5d321f96
commit 7dc7b95026
16 changed files with 1 additions and 3338 deletions

18
.gitignore vendored
View File

@ -1,18 +0,0 @@
/maven-repo.tar.bz2
/org.eclipse.tycho-*
/tycho-*.xz
/tycho-*.bz2
/tycho-*.gz
/tycho-*/
maven-repo.tar.xz
*.src.rpm
/noarch
/.project
/fedoraproject-p2-*.tar.xz
/fedoraproject-p2-*.tar.gz
/eclipse-bootstrap-neon.tar.xz
/eclipse-bootstrap-oxygen.tar.xz
/eclipse-bootstrap-photon.tar.xz
/eclipse-bootstrap-2019-12.tar.xz
/eclipse-bootstrap-2020-09.tar.xz
/eclipse-bootstrap-2020-12.tar.xz

View File

@ -1,53 +0,0 @@
From 8c2fc50f696b1b17e869e0bed6fd042174d99f91 Mon Sep 17 00:00:00 2001
From: Roland Grunberg <rgrunber@redhat.com>
Date: Tue, 12 Jun 2012 09:56:38 -0400
Subject: [PATCH 1/7] Fix the Tycho build to work on Fedora.
Minor fixes of limited scope needed to have Tycho building on Fedora.
Change-Id: Ic8c0514c1fa10ee53580d2654ac6a363ccd66814
---
.../core/maven/TychoMavenLifecycleParticipant.java | 4 +++-
.../tycho/test/AbstractTychoIntegrationTest.java | 11 +++++------
2 files changed, 8 insertions(+), 7 deletions(-)
diff --git a/tycho-core/src/main/java/org/eclipse/tycho/core/maven/TychoMavenLifecycleParticipant.java b/tycho-core/src/main/java/org/eclipse/tycho/core/maven/TychoMavenLifecycleParticipant.java
index f19a8a9..4bbb59b 100644
--- a/tycho-core/src/main/java/org/eclipse/tycho/core/maven/TychoMavenLifecycleParticipant.java
+++ b/tycho-core/src/main/java/org/eclipse/tycho/core/maven/TychoMavenLifecycleParticipant.java
@@ -108,7 +108,9 @@ public class TychoMavenLifecycleParticipant extends AbstractMavenLifecyclePartic
}
private void validate(List<MavenProject> projects) throws MavenExecutionException {
- validateConsistentTychoVersion(projects);
+ if (System.getProperty("tycho.enableVersionCheck") != null) {
+ validateConsistentTychoVersion(projects);
+ }
validateUniqueBaseDirs(projects);
}
diff --git a/tycho-testing-harness/src/main/java/org/eclipse/tycho/test/AbstractTychoIntegrationTest.java b/tycho-testing-harness/src/main/java/org/eclipse/tycho/test/AbstractTychoIntegrationTest.java
index 96e42e5..d6c7678 100644
--- a/tycho-testing-harness/src/main/java/org/eclipse/tycho/test/AbstractTychoIntegrationTest.java
+++ b/tycho-testing-harness/src/main/java/org/eclipse/tycho/test/AbstractTychoIntegrationTest.java
@@ -115,12 +115,11 @@ public abstract class AbstractTychoIntegrationTest {
verifier.getCliOptions().add(customOptions);
}
- if (System.getProperty(SYSPROP_STATELOCATION) != null) {
- verifier.setForkJvm(false);
- String m2eresolver = System.getProperty("tychodev-maven.ext.class.path"); // XXX
- if (m2eresolver != null) {
- verifier.addCliOption("-Dmaven.ext.class.path=" + m2eresolver);
- }
+ String m2eState = System.getProperty("m2eclipse.workspace.state");
+ String m2eResolver = System.getProperty("m2eclipse.workspace.resolver");
+
+ if (m2eState != null && m2eResolver != null) {
+ verifier.getVerifierProperties().put("m2eclipse.workspace.state", m2eState);
}
return verifier;
--
2.28.0

View File

@ -1,692 +0,0 @@
From 644f108f5b6453d88cd39771b944598de0ae60d1 Mon Sep 17 00:00:00 2001
From: Roland Grunberg <rgrunber@redhat.com>
Date: Tue, 12 Jun 2012 10:38:51 -0400
Subject: [PATCH 2/7] Implement a custom resolver for Tycho in local mode.
When running in local mode, dependencies should be resolved by looking
on the local system. Remote repositories should be ignored unless
offline mode is disabled.
Use fedoraproject-p2 to resolve bundles from their system location.
Relax constraints for bundles used in Tycho's Equinox runtime.
Since Fedora 17, we need an Execution Environment of at least JavaSE-1.6
for Eclipse bundles. Eclipse Juno platform bundles depend on
javax.annotation. In Fedora this is provided by geronimo-annotation, but
has a dependency on javax.lang.model (since 1.6).
Use the defined target environments in local mode when the property
tycho.local.keepTarget is set.
In situations where Tycho must resolve maven artifacts, upstream's
implementation only looks in the reactor cache. In Fedora, maven
artifacts may be located on the system using repository layouts
understood by XMvn. Therefore, when an artifact is not found in the
reactor cache, resolution should be attempted using the XMvn Resolver.
Upstream/Fedora Tycho differ in the kind of OSGi Runtime used
(org.eclipse.tycho:tycho-bundles-external:zip) so use separate location
for our runtime (fedora-eclipse) to avoid collisions.
Change-Id: Ia1ece07ece2412bc4a88901631f3f651ad2b634b
---
.../internal/DefaultEquinoxEmbedder.java | 19 ++++++--
.../remote/RemoteRepositoryCacheManager.java | 11 +++++
.../p2/target/TargetDefinitionResolver.java | 11 ++++-
.../p2/target/TargetPlatformFactoryImpl.java | 45 +++++++++++++++++--
.../MavenBundlesArtifactRepository.java | 20 +++------
.../p2/repository/LocalRepositoryReader.java | 41 ++++++++++++++++-
.../TargetPlatformConfigurationStub.java | 6 ++-
.../tycho-bundles-external.product | 1 +
.../tycho/core/locking/FileLockerImpl.java | 26 ++++++++---
.../maven/TychoMavenLifecycleParticipant.java | 13 ++++++
.../core/osgitools/AbstractTychoProject.java | 37 +++++++++++++++
.../core/osgitools/OsgiBundleProject.java | 6 ++-
...aultTargetPlatformConfigurationReader.java | 6 ++-
.../osgi/runtime/TychoOsgiRuntimeLocator.java | 33 +++++++++-----
tycho-p2/tycho-p2-facade/pom.xml | 5 +++
.../p2/resolver/P2DependencyResolver.java | 9 ++++
16 files changed, 244 insertions(+), 45 deletions(-)
diff --git a/sisu-equinox/sisu-equinox-embedder/src/main/java/org/eclipse/sisu/equinox/embedder/internal/DefaultEquinoxEmbedder.java b/sisu-equinox/sisu-equinox-embedder/src/main/java/org/eclipse/sisu/equinox/embedder/internal/DefaultEquinoxEmbedder.java
index 3ea7278..fea08c7 100644
--- a/sisu-equinox/sisu-equinox-embedder/src/main/java/org/eclipse/sisu/equinox/embedder/internal/DefaultEquinoxEmbedder.java
+++ b/sisu-equinox/sisu-equinox-embedder/src/main/java/org/eclipse/sisu/equinox/embedder/internal/DefaultEquinoxEmbedder.java
@@ -97,14 +97,18 @@ public class DefaultEquinoxEmbedder extends AbstractLogEnabled
@Override
public void addInstallation(File location) {
- if (location == null || !location.isDirectory() || !new File(location, "plugins").isDirectory()) {
+ if (location == null || !location.isDirectory() || (!new File(location, "plugins").isDirectory() && !new File(location, "eclipse/plugins").isDirectory())) {
throw new IllegalArgumentException();
}
if (!installationLocations.isEmpty()) {
// allow only one installation for now
throw new IllegalStateException();
}
- installationLocations.add(location);
+ if (new File(location, "plugins").isDirectory()) {
+ installationLocations.add(location);
+ } else {
+ installationLocations.add(new File(location, "eclipse"));
+ }
}
@Override
@@ -241,7 +245,14 @@ public class DefaultEquinoxEmbedder extends AbstractLogEnabled
if (verIdx > 0) {
bundles.append(name.substring(0, verIdx));
} else {
- throw new EquinoxEmbedderException("File name doesn't match expected pattern: " + file);
+ // In Fedora, NAME_VERSION.QUALIFIER.jar is too fragile.
+ // Let's also accept NAME.jar
+ verIdx = name.lastIndexOf(".jar");
+ if (verIdx > 0) {
+ bundles.append(name.substring(0, verIdx));
+ } else {
+ throw new EquinoxEmbedderException("File name doesn't match expected pattern: " + file);
+ }
}
}
}
@@ -249,7 +260,7 @@ public class DefaultEquinoxEmbedder extends AbstractLogEnabled
}
protected boolean isFrameworkBundle(File file) {
- return file.getName().startsWith("org.eclipse.osgi_");
+ return file.getName().startsWith("org.eclipse.osgi_") || file.getName().equals("org.eclipse.osgi.jar");
}
String getReferenceUrl(File file) {
diff --git a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/remote/RemoteRepositoryCacheManager.java b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/remote/RemoteRepositoryCacheManager.java
index 4cc81b1..63060e5 100644
--- a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/remote/RemoteRepositoryCacheManager.java
+++ b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/remote/RemoteRepositoryCacheManager.java
@@ -14,14 +14,18 @@ package org.eclipse.tycho.p2.remote;
import java.io.File;
import java.io.IOException;
+import java.net.MalformedURLException;
import java.net.URI;
+import java.net.URL;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.equinox.internal.p2.repository.CacheManager;
+import org.eclipse.equinox.internal.p2.repository.Messages;
import org.eclipse.equinox.internal.p2.repository.Transport;
import org.eclipse.equinox.p2.core.ProvisionException;
+import org.eclipse.osgi.util.NLS;
import org.eclipse.tycho.core.shared.MavenContext;
import org.eclipse.tycho.core.shared.MavenLogger;
import org.eclipse.tycho.p2.impl.Activator;
@@ -53,6 +57,13 @@ class RemoteRepositoryCacheManager extends CacheManager {
@Override
public File createCache(URI repositoryLocation, String prefix, IProgressMonitor monitor)
throws IOException, ProvisionException {
+ try {
+ new URL(repositoryLocation.toASCIIString());
+ } catch (MalformedURLException e) {
+ throw new ProvisionException(new Status(IStatus.ERROR,
+ org.eclipse.equinox.internal.p2.repository.Activator.ID, ProvisionException.REPOSITORY_NOT_FOUND,
+ NLS.bind(Messages.CacheManager_CannotLoadNonUrlLocation, repositoryLocation), null));
+ }
File cacheFile = getCache(repositoryLocation, prefix);
if (offline) {
if (cacheFile != null) {
diff --git a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/target/TargetDefinitionResolver.java b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/target/TargetDefinitionResolver.java
index 8cf981c..ce39b4a 100644
--- a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/target/TargetDefinitionResolver.java
+++ b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/target/TargetDefinitionResolver.java
@@ -29,6 +29,7 @@ import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.URIUtil;
import org.eclipse.equinox.p2.core.IProvisioningAgent;
import org.eclipse.equinox.p2.metadata.IArtifactKey;
import org.eclipse.equinox.p2.metadata.IInstallableUnit;
@@ -141,8 +142,14 @@ public final class TargetDefinitionResolver {
for (Repository repository : installableUnitLocation.getRepositories()) {
URI location = repository.getLocation();
String key = location.normalize().toASCIIString();
- locations.add(uriRepositories.computeIfAbsent(key,
- s -> new URITargetDefinitionContent(provisioningAgent, location, repository.getId())));
+ // We cannot resolve a non-file URI in local mode
+ if ((System.getProperty("TYCHO_MVN_LOCAL") == null
+ && System.getProperty("TYCHO_MVN_RPMBUILD") == null)
+ || URIUtil.isFileURI(repository.getLocation())
+ || "fedora".equals(repository.getLocation().getScheme())) {
+ locations.add(uriRepositories.computeIfAbsent(key,
+ s -> new URITargetDefinitionContent(provisioningAgent, location, repository.getId())));
+ }
}
IQueryable<IInstallableUnit> locationUnits = QueryUtil.compoundQueryable(locations);
installableUnitResolver.addLocation((InstallableUnitLocation) locationDefinition, locationUnits);
diff --git a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/target/TargetPlatformFactoryImpl.java b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/target/TargetPlatformFactoryImpl.java
index bc98b2f..0156d94 100644
--- a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/target/TargetPlatformFactoryImpl.java
+++ b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/target/TargetPlatformFactoryImpl.java
@@ -37,6 +37,9 @@ import org.eclipse.core.runtime.URIUtil;
import org.eclipse.equinox.p2.core.IProvisioningAgent;
import org.eclipse.equinox.p2.core.ProvisionException;
import org.eclipse.equinox.p2.metadata.IInstallableUnit;
+import org.eclipse.equinox.p2.metadata.expression.ExpressionUtil;
+import org.eclipse.equinox.p2.metadata.expression.IExpression;
+import org.eclipse.equinox.p2.query.IQuery;
import org.eclipse.equinox.p2.query.IQueryResult;
import org.eclipse.equinox.p2.query.QueryUtil;
import org.eclipse.equinox.p2.repository.artifact.IArtifactRepository;
@@ -279,9 +282,43 @@ public class TargetPlatformFactoryImpl implements TargetPlatformFactory {
metadataRepositories.add(localMetadataRepository);
}
- for (IMetadataRepository repository : metadataRepositories) {
- IQueryResult<IInstallableUnit> matches = repository.query(QueryUtil.ALL_UNITS, monitor);
- result.addAll(matches.toUnmodifiableSet());
+ if (System.getProperty("TYCHO_MVN_LOCAL") != null) {
+ final IExpression notmatchIU_ID = ExpressionUtil.parse("id != $0");
+ Set<IMetadataRepository> fedoraRepos = new HashSet<IMetadataRepository>();
+
+ // Sanity check even though the repo we want should be at index 1
+ for (IMetadataRepository repository : metadataRepositories) {
+ if ("fedora".equals(repository.getLocation().getScheme())) {
+ fedoraRepos.add(repository);
+ }
+ }
+
+ IQuery<IInstallableUnit> noLocalIUs = QueryUtil.createIUAnyQuery();
+
+ // Create a conjunction query that negates all IUs on the local system
+ for (IMetadataRepository repo : fedoraRepos) {
+ for (IInstallableUnit unit : repo.query(QueryUtil.ALL_UNITS, null).toUnmodifiableSet()) {
+ noLocalIUs = QueryUtil.createCompoundQuery(noLocalIUs,
+ QueryUtil.createMatchQuery(notmatchIU_ID, unit.getId()), true);
+ }
+ }
+
+ for (IMetadataRepository repository : metadataRepositories) {
+ IQueryResult<IInstallableUnit> matches;
+ if ("fedora".equals(repository.getLocation().getScheme())) {
+ matches = repository.query(QueryUtil.ALL_UNITS, monitor);
+ } else {
+ // Don't collect any remote IUs that can be found on the system
+ // This will favour IUs in the system local p2 repository
+ matches = repository.query(noLocalIUs, monitor);
+ }
+ result.addAll(matches.toUnmodifiableSet());
+ }
+ } else {
+ for (IMetadataRepository repository : metadataRepositories) {
+ IQueryResult<IInstallableUnit> matches = repository.query(QueryUtil.ALL_UNITS, monitor);
+ result.addAll(matches.toUnmodifiableSet());
+ }
}
result.addAll(pomDependenciesContent.gatherMavenInstallableUnits());
@@ -335,7 +372,7 @@ public class TargetPlatformFactoryImpl implements TargetPlatformFactory {
List<IArtifactRepository> artifactRepositories = new ArrayList<>();
for (MavenRepositoryLocation location : mavenRepositories) {
- if (!offline || URIUtil.isFileURI(location.getURL())) {
+ if (!offline || URIUtil.isFileURI(location.getURL()) || "fedora".equals(location.getURL().getScheme())) {
artifactRepositories.add(new LazyArtifactRepository(remoteAgent, location.getURL(),
RepositoryArtifactProvider::loadRepository));
}
diff --git a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/target/repository/MavenBundlesArtifactRepository.java b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/target/repository/MavenBundlesArtifactRepository.java
index 503827d..59aab38 100644
--- a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/target/repository/MavenBundlesArtifactRepository.java
+++ b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/target/repository/MavenBundlesArtifactRepository.java
@@ -22,6 +22,7 @@ import org.eclipse.core.runtime.AssertionFailedException;
import org.eclipse.equinox.p2.metadata.IArtifactKey;
import org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor;
import org.eclipse.tycho.p2.metadata.IArtifactFacade;
+import org.eclipse.tycho.p2.repository.LocalRepositoryReader;
import org.eclipse.tycho.p2.repository.MavenRepositoryCoordinates;
import org.eclipse.tycho.repository.local.GAVArtifactDescriptor;
import org.eclipse.tycho.repository.p2base.artifact.provider.formats.ArtifactTransferPolicies;
@@ -61,22 +62,9 @@ public final class MavenBundlesArtifactRepository extends ArtifactRepositoryBase
GAVArtifactDescriptor descriptorForRepository = new GAVArtifactDescriptor(baseDescriptor,
repositoryCoordinates);
- File requiredArtifactLocation = new File(getBaseDir(),
- descriptorForRepository.getMavenCoordinates().getLocalRepositoryPath());
- File actualArtifactLocation = mavenArtifact.getLocation();
- if (!equivalentPaths(requiredArtifactLocation, actualArtifactLocation)) {
- throw new AssertionFailedException(
- "The Maven artifact to be added to the target platform is not stored at the required location on disk: required \""
- + requiredArtifactLocation + "\" but was \"" + actualArtifactLocation + "\"");
- }
-
internalAddInternalDescriptor(descriptorForRepository);
}
- private boolean equivalentPaths(File path, File otherPath) {
- return path.equals(otherPath);
- }
-
@Override
protected GAVArtifactDescriptor getInternalDescriptorForAdding(IArtifactDescriptor descriptor) {
// artifacts are only added via the dedicated method
@@ -102,8 +90,10 @@ public final class MavenBundlesArtifactRepository extends ArtifactRepositoryBase
@Override
protected File internalGetArtifactStorageLocation(IArtifactDescriptor descriptor) {
- String relativePath = toInternalDescriptor(descriptor).getMavenCoordinates().getLocalRepositoryPath();
- return new File(getBaseDir(), relativePath);
+ MavenRepositoryCoordinates coord = toInternalDescriptor(descriptor).getMavenCoordinates();
+ LocalRepositoryReader reader = new LocalRepositoryReader(getBaseDir());
+ return reader.getLocalArtifactLocation(coord.getGav(), coord.getClassifier(),
+ coord.getExtensionOrDefault());
}
public File getBaseDir() {
diff --git a/tycho-bundles/org.eclipse.tycho.p2.resolver.shared/src/main/java/org/eclipse/tycho/p2/repository/LocalRepositoryReader.java b/tycho-bundles/org.eclipse.tycho.p2.resolver.shared/src/main/java/org/eclipse/tycho/p2/repository/LocalRepositoryReader.java
index 3bf2c33..959a257 100644
--- a/tycho-bundles/org.eclipse.tycho.p2.resolver.shared/src/main/java/org/eclipse/tycho/p2/repository/LocalRepositoryReader.java
+++ b/tycho-bundles/org.eclipse.tycho.p2.resolver.shared/src/main/java/org/eclipse/tycho/p2/repository/LocalRepositoryReader.java
@@ -13,6 +13,8 @@
package org.eclipse.tycho.p2.repository;
import java.io.File;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
public class LocalRepositoryReader implements RepositoryReader {
@@ -24,7 +26,44 @@ public class LocalRepositoryReader implements RepositoryReader {
@Override
public File getLocalArtifactLocation(GAV gav, String classifier, String extension) {
- return new File(localMavenRepositoryRoot, RepositoryLayoutHelper.getRelativePath(gav, classifier, extension));
+ File file = new File(localMavenRepositoryRoot,
+ RepositoryLayoutHelper.getRelativePath(gav, classifier, extension));
+ // In Fedora the artifact may be in an XMvn-defined repository location (not in reactor cache)
+ if (!file.exists()) {
+ try {
+ // Create Plexus config
+ Class<?> pcclazz = Class.forName("org.codehaus.plexus.ContainerConfiguration");
+ Object conf = Class.forName("org.codehaus.plexus.DefaultContainerConfiguration").newInstance();
+ pcclazz.getMethod("setAutoWiring", boolean.class).invoke(conf, true);
+ pcclazz.getMethod("setClassPathScanning", String.class).invoke(conf, "index");
+
+ // Use plexus container to lookup the reader
+ Class<?> pclazz = Class.forName("org.codehaus.plexus.DefaultPlexusContainer");
+ Object plexus = pclazz.getConstructor(pcclazz).newInstance(conf);
+
+ // Retrieve the workspace reader from the plexus container
+ Method mLookup = pclazz.getMethod("lookup", String.class, String.class);
+ Object reader = mLookup.invoke(plexus, "org.eclipse.aether.repository.WorkspaceReader", "ide");
+
+ // Create an Aether Artifact based on GAV, classifier, and extension
+ Class<?> iartclazz = Class.forName("org.eclipse.aether.artifact.Artifact");
+ Class<?> artclazz = Class.forName("org.eclipse.aether.artifact.DefaultArtifact");
+ Constructor<?> cNew = artclazz.getConstructor(String.class, String.class, String.class, String.class,
+ String.class);
+ Object artifact = cNew.newInstance(gav.getGroupId(), gav.getArtifactId(), classifier, extension,
+ gav.getVersion());
+
+ // Invoke "findArtifact" method of the workspace reader on the artifact
+ Method mfindArtifact = reader.getClass().getMethod("findArtifact", iartclazz);
+ File newFile = (File) mfindArtifact.invoke(reader, artifact);
+ if (newFile != null) {
+ file = newFile;
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ return file;
}
}
diff --git a/tycho-bundles/org.eclipse.tycho.p2.resolver.shared/src/main/java/org/eclipse/tycho/p2/target/facade/TargetPlatformConfigurationStub.java b/tycho-bundles/org.eclipse.tycho.p2.resolver.shared/src/main/java/org/eclipse/tycho/p2/target/facade/TargetPlatformConfigurationStub.java
index 3e93ee1..c79d4f1 100644
--- a/tycho-bundles/org.eclipse.tycho.p2.resolver.shared/src/main/java/org/eclipse/tycho/p2/target/facade/TargetPlatformConfigurationStub.java
+++ b/tycho-bundles/org.eclipse.tycho.p2.resolver.shared/src/main/java/org/eclipse/tycho/p2/target/facade/TargetPlatformConfigurationStub.java
@@ -61,7 +61,11 @@ public class TargetPlatformConfigurationStub {
}
public void addP2Repository(MavenRepositoryLocation location) {
- this.repositories.add(location);
+ // We cannot resolve a non-file URI in local mode while offline
+ if (System.getProperty("TYCHO_MVN_RPMBUILD") == null || "file".equalsIgnoreCase(location.getURL().getScheme())
+ || "fedora".equalsIgnoreCase(location.getURL().getScheme())) {
+ this.repositories.add(location);
+ }
}
// convenience method for tests
diff --git a/tycho-bundles/tycho-bundles-external/tycho-bundles-external.product b/tycho-bundles/tycho-bundles-external/tycho-bundles-external.product
index 7e3d5fb..b146c08 100644
--- a/tycho-bundles/tycho-bundles-external/tycho-bundles-external.product
+++ b/tycho-bundles/tycho-bundles-external/tycho-bundles-external.product
@@ -77,6 +77,7 @@
<plugin id="org.sat4j.pb"/>
<plugin id="org.slf4j.api"/>
<plugin id="org.tukaani.xz"/>
+ <plugin id="org.fedoraproject.p2"/>
</plugins>
<configurations>
diff --git a/tycho-core/src/main/java/org/eclipse/tycho/core/locking/FileLockerImpl.java b/tycho-core/src/main/java/org/eclipse/tycho/core/locking/FileLockerImpl.java
index 9940561..9a98a40 100644
--- a/tycho-core/src/main/java/org/eclipse/tycho/core/locking/FileLockerImpl.java
+++ b/tycho-core/src/main/java/org/eclipse/tycho/core/locking/FileLockerImpl.java
@@ -27,20 +27,34 @@ public class FileLockerImpl implements FileLocker {
final File lockMarkerFile;
public FileLockerImpl(File file, Location anyLocation) {
+ File lockFileCandidate = null;
try {
if (file.isDirectory()) {
- this.lockMarkerFile = new File(file, LOCKFILE_SUFFIX).getCanonicalFile();
+ lockFileCandidate = new File(file, LOCKFILE_SUFFIX).getCanonicalFile();
} else {
- this.lockMarkerFile = new File(file.getParentFile(), file.getName() + LOCKFILE_SUFFIX)
- .getCanonicalFile();
+ lockFileCandidate = new File(file.getParentFile(), file.getName() + LOCKFILE_SUFFIX).getCanonicalFile();
}
- if (lockMarkerFile.isDirectory()) {
- throw new RuntimeException("Lock marker file " + lockMarkerFile + " already exists and is a directory");
+ if (lockFileCandidate.isDirectory()) {
+ throw new RuntimeException(
+ "Lock marker file " + lockFileCandidate + " already exists and is a directory");
}
- File parentDir = lockMarkerFile.getParentFile();
+ File parentDir = lockFileCandidate.getParentFile();
if (!parentDir.isDirectory() && !parentDir.mkdirs()) {
throw new RuntimeException("Could not create parent directory " + parentDir + " of lock marker file");
}
+
+ String baseDir = System.getProperty("user.dir");
+ String reactorCache = baseDir + "/.m2/";
+ // In Fedora we can only assume reactor cache is safe for read/write.
+ if (!lockFileCandidate.getAbsolutePath().startsWith(reactorCache)) {
+ String lockFileDir = reactorCache + LOCKFILE_SUFFIX;
+ // If the file is located within baseDir, no need to repeat
+ String lockFileName = file.getAbsolutePath().replace(baseDir, "").replace("/", "-").replaceFirst("-",
+ "/") + LOCKFILE_SUFFIX;
+ lockFileCandidate = new File(lockFileDir, lockFileName);
+ }
+
+ this.lockMarkerFile = lockFileCandidate;
this.lockFileLocation = anyLocation.createLocation(null, null, false);
this.lockFileLocation.set(lockMarkerFile.toURL(), false, lockMarkerFile.getAbsolutePath());
} catch (MalformedURLException e) {
diff --git a/tycho-core/src/main/java/org/eclipse/tycho/core/maven/TychoMavenLifecycleParticipant.java b/tycho-core/src/main/java/org/eclipse/tycho/core/maven/TychoMavenLifecycleParticipant.java
index 4bbb59b..008b9f2 100644
--- a/tycho-core/src/main/java/org/eclipse/tycho/core/maven/TychoMavenLifecycleParticipant.java
+++ b/tycho-core/src/main/java/org/eclipse/tycho/core/maven/TychoMavenLifecycleParticipant.java
@@ -38,6 +38,7 @@ import org.apache.maven.project.MavenProject;
import org.codehaus.plexus.PlexusContainer;
import org.codehaus.plexus.component.annotations.Component;
import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
import org.codehaus.plexus.logging.Logger;
import org.eclipse.tycho.ReactorProject;
import org.eclipse.tycho.artifacts.DependencyResolutionException;
@@ -95,6 +96,18 @@ public class TychoMavenLifecycleParticipant extends AbstractMavenLifecyclePartic
configureComponents(session);
+ try {
+ if (plexus.lookup("org.fedoraproject.xmvn.resolver.Resolver") != null) {
+ if (session.isOffline()) {
+ System.setProperty("TYCHO_MVN_RPMBUILD", "");
+ } else {
+ System.setProperty("TYCHO_MVN_LOCAL", "");
+ }
+ }
+ } catch (ComponentLookupException e) {
+ // No XMvn (Upstream Maven in use)
+ }
+
for (MavenProject project : projects) {
resolver.setupProject(session, project, DefaultReactorProject.adapt(project));
}
diff --git a/tycho-core/src/main/java/org/eclipse/tycho/core/osgitools/AbstractTychoProject.java b/tycho-core/src/main/java/org/eclipse/tycho/core/osgitools/AbstractTychoProject.java
index 8daeef6..126be76 100644
--- a/tycho-core/src/main/java/org/eclipse/tycho/core/osgitools/AbstractTychoProject.java
+++ b/tycho-core/src/main/java/org/eclipse/tycho/core/osgitools/AbstractTychoProject.java
@@ -15,13 +15,19 @@ import java.util.Objects;
import org.apache.maven.execution.MavenSession;
import org.apache.maven.project.MavenProject;
+import org.apache.maven.toolchain.ToolchainManager;
+import org.codehaus.plexus.component.annotations.Requirement;
import org.codehaus.plexus.logging.AbstractLogEnabled;
+import org.codehaus.plexus.logging.Logger;
import org.eclipse.tycho.ReactorProject;
import org.eclipse.tycho.artifacts.DependencyArtifacts;
import org.eclipse.tycho.core.TargetPlatformConfiguration;
import org.eclipse.tycho.core.TychoConstants;
import org.eclipse.tycho.core.TychoProject;
+import org.eclipse.tycho.core.ee.ExecutionEnvironmentUtils;
import org.eclipse.tycho.core.ee.TargetDefinitionFile;
+import org.eclipse.tycho.core.ee.UnknownEnvironmentException;
+import org.eclipse.tycho.core.ee.shared.ExecutionEnvironment;
import org.eclipse.tycho.core.ee.shared.ExecutionEnvironmentConfiguration;
import org.eclipse.tycho.core.osgitools.targetplatform.LocalDependencyResolver;
import org.eclipse.tycho.core.osgitools.targetplatform.MultiEnvironmentDependencyArtifacts;
@@ -31,6 +37,12 @@ import org.eclipse.tycho.p2.target.facade.TargetDefinition;
public abstract class AbstractTychoProject extends AbstractLogEnabled implements TychoProject {
+ @Requirement
+ private Logger logger;
+
+ @Requirement
+ private ToolchainManager toolchainManager;
+
@Override
public DependencyArtifacts getDependencyArtifacts(ReactorProject project) {
return TychoProjectUtils.getDependencyArtifacts(project);
@@ -99,6 +111,8 @@ public abstract class AbstractTychoProject extends AbstractLogEnabled implements
String configuredForcedProfile = tpConfiguration.getExecutionEnvironment();
if (configuredForcedProfile != null) {
+ configuredForcedProfile = overrideToAtLeastJavaSE16(configuredForcedProfile, toolchainManager, mavenSession,
+ logger);
sink.overrideProfileConfiguration(configuredForcedProfile,
"target-platform-configuration <executionEnvironment>");
} else {
@@ -113,9 +127,32 @@ public abstract class AbstractTychoProject extends AbstractLogEnabled implements
String configuredDefaultProfile = tpConfiguration.getExecutionEnvironmentDefault();
if (configuredDefaultProfile != null) {
+ configuredDefaultProfile = overrideToAtLeastJavaSE16(configuredDefaultProfile, toolchainManager,
+ mavenSession, logger);
sink.setProfileConfiguration(configuredDefaultProfile,
"target-platform-configuration <executionEnvironmentDefault>");
}
}
+ public String overrideToAtLeastJavaSE16(String profile, ToolchainManager toolchainManager, MavenSession session,
+ Logger logger) {
+ try {
+ ExecutionEnvironment ee = ExecutionEnvironmentUtils.getExecutionEnvironment(profile, toolchainManager,
+ session, logger);
+
+ if (System.getProperty("TYCHO_MVN_LOCAL") != null || System.getProperty("TYCHO_MVN_RPMBUILD") != null) {
+ // EE must be at least JavaSE-1.6
+ final ExecutionEnvironment javaSE16 = ExecutionEnvironmentUtils.getExecutionEnvironment("JavaSE-1.6",
+ toolchainManager, session, logger);
+ if (!ee.isCompatibleCompilerTargetLevel(javaSE16.getCompilerTargetLevelDefault())) {
+ ee = javaSE16;
+ }
+ }
+
+ return ee.getProfileName();
+ } catch (UnknownEnvironmentException e) {
+ // can't happen, ee is validated during configuration parsing
+ return null;
+ }
+ }
}
diff --git a/tycho-core/src/main/java/org/eclipse/tycho/core/osgitools/OsgiBundleProject.java b/tycho-core/src/main/java/org/eclipse/tycho/core/osgitools/OsgiBundleProject.java
index 54e8227..2c0e0f9 100644
--- a/tycho-core/src/main/java/org/eclipse/tycho/core/osgitools/OsgiBundleProject.java
+++ b/tycho-core/src/main/java/org/eclipse/tycho/core/osgitools/OsgiBundleProject.java
@@ -514,6 +514,7 @@ public class OsgiBundleProject extends AbstractTychoProject implements BundlePro
// ... specified in build.properties (for PDE compatibility)
String pdeProfileName = getEclipsePluginProject(project).getBuildProperties().getJreCompilationProfile();
if (pdeProfileName != null) {
+ pdeProfileName = overrideToAtLeastJavaSE16(pdeProfileName, toolchainManager, mavenSession, logger);
sink.setProfileConfiguration(pdeProfileName.trim(), "build.properties");
} else {
// ... derived from BREE in bundle manifest
@@ -546,16 +547,19 @@ public class OsgiBundleProject extends AbstractTychoProject implements BundlePro
StandardExecutionEnvironment configuredProfile = ExecutionEnvironmentUtils
.getExecutionEnvironment(configuredProfileName, toolchainManager, mavenSession, logger);
if (configuredProfile != null) {
+ configuredProfileName = overrideToAtLeastJavaSE16(configuredProfileName, toolchainManager, mavenSession, logger);
// non standard profile, stick to it
sink.setProfileConfiguration(configuredProfileName, reason);
}
StandardExecutionEnvironment currentProfile = ExecutionEnvironmentUtils.getExecutionEnvironment(
"JavaSE-" + Runtime.version().feature(), toolchainManager, mavenSession, logger);
if (currentProfile.compareTo(configuredProfile) > 0) {
- sink.setProfileConfiguration(currentProfile.getProfileName(),
+ String configuredProfile1 = overrideToAtLeastJavaSE16(currentProfile.getProfileName(), toolchainManager, mavenSession, logger);
+ sink.setProfileConfiguration(configuredProfile1,
"Currently running profile, newer than configured profile (" + configuredProfileName + ") from ["
+ reason + "]");
} else {
+ configuredProfileName = overrideToAtLeastJavaSE16(configuredProfileName, toolchainManager, mavenSession, logger);
sink.setProfileConfiguration(configuredProfileName, reason);
}
}
diff --git a/tycho-core/src/main/java/org/eclipse/tycho/core/resolver/DefaultTargetPlatformConfigurationReader.java b/tycho-core/src/main/java/org/eclipse/tycho/core/resolver/DefaultTargetPlatformConfigurationReader.java
index 355f64d..ab69849 100644
--- a/tycho-core/src/main/java/org/eclipse/tycho/core/resolver/DefaultTargetPlatformConfigurationReader.java
+++ b/tycho-core/src/main/java/org/eclipse/tycho/core/resolver/DefaultTargetPlatformConfigurationReader.java
@@ -88,7 +88,11 @@ public class DefaultTargetPlatformConfigurationReader {
+ configuration.toString());
}
- addTargetEnvironments(result, project, configuration);
+ // Use the defined environments only in local mode with tycho.local.keepTarget
+ if ((System.getProperty("TYCHO_MVN_LOCAL") == null && System.getProperty("TYCHO_MVN_RPMBUILD") == null)
+ || System.getProperty("tycho.local.keepTarget") != null) {
+ addTargetEnvironments(result, project, configuration);
+ }
setTargetPlatformResolver(result, configuration);
diff --git a/tycho-core/src/main/java/org/eclipse/tycho/osgi/runtime/TychoOsgiRuntimeLocator.java b/tycho-core/src/main/java/org/eclipse/tycho/osgi/runtime/TychoOsgiRuntimeLocator.java
index ea817a9..c71fc93 100644
--- a/tycho-core/src/main/java/org/eclipse/tycho/osgi/runtime/TychoOsgiRuntimeLocator.java
+++ b/tycho-core/src/main/java/org/eclipse/tycho/osgi/runtime/TychoOsgiRuntimeLocator.java
@@ -160,40 +160,53 @@ public class TychoOsgiRuntimeLocator implements EquinoxRuntimeLocator {
Artifact artifact = resolveDependency(session, dependency);
if ("zip".equals(dependency.getType())) {
- File artifactFile = new File(session.getLocalRepository().getBasedir(), session.getLocalRepository()
- .pathOf(artifact));
+ File artifactFile = new File(session.getLocalRepository().getBasedir(),
+ session.getLocalRepository().pathOf(artifact));
File eclipseDir = new File(artifactFile.getParentFile(), "eclipse");
+ File eclipseSaveDir = new File(artifactFile.getParentFile(), "eclipse-save");
+ File fedoraDir = new File(artifactFile.getParentFile(), "fedora-eclipse");
FileLocker locker = fileLockService.getFileLocker(artifactFile);
locker.lock();
try {
- if (!eclipseDir.exists() || artifact.isSnapshot()) {
+ if (!fedoraDir.exists() || artifact.isSnapshot()) {
logger.debug("Extracting Tycho's OSGi runtime");
- if (artifact.getFile().lastModified() > eclipseDir.lastModified()) {
+ if (artifact.getFile().lastModified() > fedoraDir.lastModified()) {
logger.debug("Unpacking Tycho's OSGi runtime to " + eclipseDir);
try {
- FileUtils.deleteDirectory(eclipseDir);
+ FileUtils.deleteDirectory(fedoraDir);
+ if (eclipseDir.exists()) {
+ FileUtils.rename(eclipseDir, eclipseSaveDir);
+ }
} catch (IOException e) {
- logger.warn("Failed to delete Tycho's OSGi runtime " + eclipseDir + ": " + e.getMessage());
+ logger.warn("Failed to delete Tycho's OSGi runtime " + fedoraDir + ": " + e.getMessage());
}
eclipseDir.mkdirs();
unArchiver.setSourceFile(artifact.getFile());
unArchiver.setDestDirectory(eclipseDir);
try {
unArchiver.extract();
+ logger.debug("Moving Tycho's OSGi runtime to " + fedoraDir);
+ FileUtils.rename(eclipseDir, fedoraDir);
+ if (eclipseSaveDir.exists()) {
+ FileUtils.rename(eclipseSaveDir, eclipseDir);
+ }
} catch (ArchiverException e) {
- throw new MavenExecutionException("Failed to unpack Tycho's OSGi runtime: "
- + e.getMessage(), e);
+ throw new MavenExecutionException(
+ "Failed to unpack Tycho's OSGi runtime: " + e.getMessage(), e);
+ } catch (IOException e) {
+ throw new MavenExecutionException("Failed to move Tycho's OSGi runtime: " + e.getMessage(),
+ e);
}
- eclipseDir.setLastModified(artifact.getFile().lastModified());
+ fedoraDir.setLastModified(artifact.getFile().lastModified());
}
}
} finally {
locker.release();
}
- description.addInstallation(eclipseDir);
+ description.addInstallation(fedoraDir);
} else {
description.addBundle(artifact.getFile());
}
diff --git a/tycho-p2/tycho-p2-facade/pom.xml b/tycho-p2/tycho-p2-facade/pom.xml
index 2fa2201..8c5996b 100644
--- a/tycho-p2/tycho-p2-facade/pom.xml
+++ b/tycho-p2/tycho-p2-facade/pom.xml
@@ -57,6 +57,11 @@
<artifactId>junit-jupiter-api</artifactId>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.fedoraproject.p2</groupId>
+ <artifactId>org.fedoraproject.p2</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+ </dependency>
</dependencies>
<build>
diff --git a/tycho-p2/tycho-p2-facade/src/main/java/org/eclipse/tycho/p2/resolver/P2DependencyResolver.java b/tycho-p2/tycho-p2-facade/src/main/java/org/eclipse/tycho/p2/resolver/P2DependencyResolver.java
index de4e6aa..5543b01 100644
--- a/tycho-p2/tycho-p2-facade/src/main/java/org/eclipse/tycho/p2/resolver/P2DependencyResolver.java
+++ b/tycho-p2/tycho-p2-facade/src/main/java/org/eclipse/tycho/p2/resolver/P2DependencyResolver.java
@@ -94,6 +94,7 @@ import org.eclipse.tycho.p2.resolver.facade.P2ResolverFactory;
import org.eclipse.tycho.p2.target.facade.PomDependencyCollector;
import org.eclipse.tycho.p2.target.facade.TargetPlatformConfigurationStub;
import org.eclipse.tycho.repository.registry.facade.ReactorRepositoryManagerFacade;
+import org.fedoraproject.p2.EclipseSystemLayout;
@Component(role = DependencyResolver.class, hint = P2DependencyResolver.ROLE_HINT, instantiationStrategy = "per-lookup")
public class P2DependencyResolver extends AbstractLogEnabled implements DependencyResolver, Initializable {
@@ -200,6 +201,14 @@ public class P2DependencyResolver extends AbstractLogEnabled implements Dependen
PomDependencyCollector pomDependencies = collectPomDependencies(project, reactorProjects, session,
configuration.getPomDependencies());
+
+ // Add Fedora Local P2 Repository when running in local mode
+ if (System.getProperty("TYCHO_MVN_LOCAL") != null || System.getProperty("TYCHO_MVN_RPMBUILD") != null) {
+ for (URI uri : EclipseSystemLayout.getRepositories()) {
+ tpConfiguration.addP2Repository(new MavenRepositoryLocation(uri.getPath(), uri));
+ }
+ }
+
for (ArtifactRepository repository : project.getRemoteArtifactRepositories()) {
addEntireP2RepositoryToTargetPlatform(repository, tpConfiguration);
}
--
2.28.0

View File

@ -1,687 +0,0 @@
From 9bba214b359e384b3c23b1d31541eda067a62ed3 Mon Sep 17 00:00:00 2001
From: Roland Grunberg <rgrunber@redhat.com>
Date: Wed, 18 Jun 2014 13:01:31 -0400
Subject: [PATCH 3/7] Tycho should always delegate artifact resolution to
Maven.
Maven resolves dependencies from the following locations in the
following order:
* reactor,
* workspace (eg. XMvn),
* local repository,
* remote repositories.
Tycho assumes that all resolved artifacts are present within the reactor
cache but this is not true for artifacts resolved from workspace
locations.
Change-Id: Ia44969ed1064965a82c3507a63e54caeebb75b18
---
.../tycho/core/shared/MavenContext.java | 1 +
.../tycho/core/shared/MavenContextImpl.java | 9 +++-
.../core/shared/MavenRepositorySystem.java | 19 +++++++
.../LocalArtifactRepositoryP2APITest.java | 4 +-
.../local/LocalMetadataRepositoryTest.java | 3 +-
.../local/LocalArtifactRepository.java | 8 +--
.../local/LocalArtifactRepositoryFactory.java | 3 +-
.../index/LocalRepositoryP2IndicesImpl.java | 6 +++
.../remote/RemoteAgentMavenMirrorsTest.java | 3 +-
...emoteAgentMetadataRepositoryCacheTest.java | 9 ++--
.../TargetPlatformBundlePublisherTest.java | 4 +-
.../tycho/p2/target/TestResolverFactory.java | 7 ++-
.../p2/resolver/P2ResolverFactoryImpl.java | 8 +--
.../p2/target/PomDependencyCollectorImpl.java | 2 +-
.../target/TargetPlatformBundlePublisher.java | 6 ++-
.../MavenBundlesArtifactRepository.java | 7 ++-
.../repository/LocalRepositoryP2Indices.java | 3 ++
.../p2/repository/LocalRepositoryReader.java | 50 +++++--------------
.../TemporaryLocalMavenRepository.java | 4 +-
.../test/util/MavenRepositorySystemStub.java | 30 +++++++++++
.../MavenRepositorySystemAdapter.java | 37 ++++++++++++++
.../MavenContextConfigurator.java | 7 ++-
22 files changed, 166 insertions(+), 64 deletions(-)
create mode 100644 tycho-bundles/org.eclipse.tycho.core.shared/src/main/java/org/eclipse/tycho/core/shared/MavenRepositorySystem.java
create mode 100644 tycho-bundles/org.eclipse.tycho.test.utils/src/main/java/org/eclipse/tycho/test/util/MavenRepositorySystemStub.java
create mode 100644 tycho-core/src/main/java/org/eclipse/tycho/osgi/adapters/MavenRepositorySystemAdapter.java
diff --git a/tycho-bundles/org.eclipse.tycho.core.shared/src/main/java/org/eclipse/tycho/core/shared/MavenContext.java b/tycho-bundles/org.eclipse.tycho.core.shared/src/main/java/org/eclipse/tycho/core/shared/MavenContext.java
index 3836f70..b87d1f3 100644
--- a/tycho-bundles/org.eclipse.tycho.core.shared/src/main/java/org/eclipse/tycho/core/shared/MavenContext.java
+++ b/tycho-bundles/org.eclipse.tycho.core.shared/src/main/java/org/eclipse/tycho/core/shared/MavenContext.java
@@ -50,4 +50,5 @@ public interface MavenContext {
*/
public Collection<ReactorProject> getProjects();
+ public MavenRepositorySystem getRepositorySystem();
}
diff --git a/tycho-bundles/org.eclipse.tycho.core.shared/src/main/java/org/eclipse/tycho/core/shared/MavenContextImpl.java b/tycho-bundles/org.eclipse.tycho.core.shared/src/main/java/org/eclipse/tycho/core/shared/MavenContextImpl.java
index 4a85819..fd831a1 100644
--- a/tycho-bundles/org.eclipse.tycho.core.shared/src/main/java/org/eclipse/tycho/core/shared/MavenContextImpl.java
+++ b/tycho-bundles/org.eclipse.tycho.core.shared/src/main/java/org/eclipse/tycho/core/shared/MavenContextImpl.java
@@ -29,18 +29,20 @@ public class MavenContextImpl implements MavenContext {
private boolean offline;
private Properties mergedProperties;
private List<ReactorProject> projects = new ArrayList<>();
+ private MavenRepositorySystem repositorySystem;
public MavenContextImpl(File localRepositoryRoot, boolean offline, MavenLogger mavenLogger,
- Properties mergedProperties) {
+ Properties mergedProperties, MavenRepositorySystem repositorySystem) {
this.localRepositoryRoot = localRepositoryRoot;
this.offline = offline;
this.mavenLogger = mavenLogger;
this.mergedProperties = mergedProperties;
+ this.repositorySystem = repositorySystem;
}
// constructor for tests
public MavenContextImpl(File localRepositoryRoot, MavenLogger mavenLogger) {
- this(localRepositoryRoot, false, mavenLogger, new Properties());
+ this(localRepositoryRoot, false, mavenLogger, new Properties(), null);
}
@Override
@@ -72,4 +74,7 @@ public class MavenContextImpl implements MavenContext {
projects.add(reactorProject);
}
+ public MavenRepositorySystem getRepositorySystem() {
+ return repositorySystem;
+ }
}
diff --git a/tycho-bundles/org.eclipse.tycho.core.shared/src/main/java/org/eclipse/tycho/core/shared/MavenRepositorySystem.java b/tycho-bundles/org.eclipse.tycho.core.shared/src/main/java/org/eclipse/tycho/core/shared/MavenRepositorySystem.java
new file mode 100644
index 0000000..965e5cd
--- /dev/null
+++ b/tycho-bundles/org.eclipse.tycho.core.shared/src/main/java/org/eclipse/tycho/core/shared/MavenRepositorySystem.java
@@ -0,0 +1,19 @@
+/*******************************************************************************
+ * Copyright (c) 2014 Red Hat Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Red Hat Inc. - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tycho.core.shared;
+
+import java.io.File;
+
+public interface MavenRepositorySystem {
+
+ public File resolve(String gid, String aid, String version, String type, String classifier);
+
+}
diff --git a/tycho-bundles/org.eclipse.tycho.p2.maven.repository.tests/src/test/java/org/eclipse/tycho/repository/local/LocalArtifactRepositoryP2APITest.java b/tycho-bundles/org.eclipse.tycho.p2.maven.repository.tests/src/test/java/org/eclipse/tycho/repository/local/LocalArtifactRepositoryP2APITest.java
index 43eb9af..68c7878 100644
--- a/tycho-bundles/org.eclipse.tycho.p2.maven.repository.tests/src/test/java/org/eclipse/tycho/repository/local/LocalArtifactRepositoryP2APITest.java
+++ b/tycho-bundles/org.eclipse.tycho.p2.maven.repository.tests/src/test/java/org/eclipse/tycho/repository/local/LocalArtifactRepositoryP2APITest.java
@@ -55,6 +55,7 @@ import org.eclipse.tycho.repository.p2base.artifact.repository.ArtifactRepositor
import org.eclipse.tycho.repository.streaming.testutil.ProbeArtifactSink;
import org.eclipse.tycho.repository.streaming.testutil.ProbeOutputStream;
import org.eclipse.tycho.repository.streaming.testutil.ProbeRawArtifactSink;
+import org.eclipse.tycho.test.util.MavenRepositorySystemStub;
import org.junit.After;
import org.junit.Assume;
import org.junit.Before;
@@ -116,7 +117,8 @@ public class LocalArtifactRepositoryP2APITest {
@Before
public void initSubject() throws Exception {
temporaryLocalMavenRepo.initContentFromResourceFolder(ResourceUtil.resourceFile("repositories/local"));
- subject = new LocalArtifactRepository(null, temporaryLocalMavenRepo.getLocalRepositoryIndex());
+ subject = new LocalArtifactRepository(null, temporaryLocalMavenRepo.getLocalRepositoryIndex(),
+ new MavenRepositorySystemStub(temporaryLocalMavenRepo.getLocalRepositoryRoot()));
testOutputStream = new ProbeOutputStream();
}
diff --git a/tycho-bundles/org.eclipse.tycho.p2.maven.repository.tests/src/test/java/org/eclipse/tycho/repository/local/LocalMetadataRepositoryTest.java b/tycho-bundles/org.eclipse.tycho.p2.maven.repository.tests/src/test/java/org/eclipse/tycho/repository/local/LocalMetadataRepositoryTest.java
index 1c9fba1..b534686 100644
--- a/tycho-bundles/org.eclipse.tycho.p2.maven.repository.tests/src/test/java/org/eclipse/tycho/repository/local/LocalMetadataRepositoryTest.java
+++ b/tycho-bundles/org.eclipse.tycho.p2.maven.repository.tests/src/test/java/org/eclipse/tycho/repository/local/LocalMetadataRepositoryTest.java
@@ -35,6 +35,7 @@ import org.eclipse.tycho.p2.repository.LocalRepositoryReader;
import org.eclipse.tycho.p2.repository.RepositoryLayoutHelper;
import org.eclipse.tycho.p2.repository.TychoRepositoryIndex;
import org.eclipse.tycho.repository.local.index.FileBasedTychoRepositoryIndex;
+import org.eclipse.tycho.test.util.MavenRepositorySystemStub;
import org.eclipse.tycho.test.util.NoopFileLockService;
import org.junit.Assert;
import org.junit.Test;
@@ -53,7 +54,7 @@ public class LocalMetadataRepositoryTest {
protected IMetadataRepository loadRepository(File location) throws ProvisionException {
return new LocalMetadataRepository(location.toURI(), createMetadataIndex(location),
- new LocalRepositoryReader(location));
+ new LocalRepositoryReader(location, new MavenRepositorySystemStub(location)));
}
private TychoRepositoryIndex createMetadataIndex(File location) {
diff --git a/tycho-bundles/org.eclipse.tycho.p2.maven.repository/src/main/java/org/eclipse/tycho/repository/local/LocalArtifactRepository.java b/tycho-bundles/org.eclipse.tycho.p2.maven.repository/src/main/java/org/eclipse/tycho/repository/local/LocalArtifactRepository.java
index 7a11200..649042b 100644
--- a/tycho-bundles/org.eclipse.tycho.p2.maven.repository/src/main/java/org/eclipse/tycho/repository/local/LocalArtifactRepository.java
+++ b/tycho-bundles/org.eclipse.tycho.p2.maven.repository/src/main/java/org/eclipse/tycho/repository/local/LocalArtifactRepository.java
@@ -31,6 +31,7 @@ import java.util.concurrent.locks.ReentrantLock;
import org.eclipse.equinox.p2.core.IProvisioningAgent;
import org.eclipse.equinox.p2.metadata.IArtifactKey;
import org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor;
+import org.eclipse.tycho.core.shared.MavenRepositorySystem;
import org.eclipse.tycho.p2.maven.repository.Activator;
import org.eclipse.tycho.p2.maven.repository.xmlio.ArtifactsIO;
import org.eclipse.tycho.p2.repository.GAV;
@@ -51,15 +52,16 @@ public class LocalArtifactRepository extends ArtifactRepositoryBaseImpl<GAVArtif
// TODO what is the agent needed for? does using the default agent harm?
public LocalArtifactRepository(LocalRepositoryP2Indices localRepoIndices) {
- this(Activator.getProvisioningAgent(), localRepoIndices);
+ this(Activator.getProvisioningAgent(), localRepoIndices, (MavenRepositorySystem) null);
}
public LocalArtifactRepository(LocalRepositoryP2Indices localRepoIndices, RepositoryReader contentLocator) {
this(Activator.getProvisioningAgent(), localRepoIndices, contentLocator);
}
- public LocalArtifactRepository(IProvisioningAgent agent, LocalRepositoryP2Indices localRepoIndices) {
- this(agent, localRepoIndices, new LocalRepositoryReader(localRepoIndices.getBasedir()));
+ public LocalArtifactRepository(IProvisioningAgent agent, LocalRepositoryP2Indices localRepoIndices,
+ MavenRepositorySystem repositorySystem) {
+ this(agent, localRepoIndices, new LocalRepositoryReader(localRepoIndices.getBasedir(), repositorySystem));
}
public LocalArtifactRepository(IProvisioningAgent agent, LocalRepositoryP2Indices localRepoIndices,
diff --git a/tycho-bundles/org.eclipse.tycho.p2.maven.repository/src/main/java/org/eclipse/tycho/repository/local/LocalArtifactRepositoryFactory.java b/tycho-bundles/org.eclipse.tycho.p2.maven.repository/src/main/java/org/eclipse/tycho/repository/local/LocalArtifactRepositoryFactory.java
index 8d01519..0173a9c 100644
--- a/tycho-bundles/org.eclipse.tycho.p2.maven.repository/src/main/java/org/eclipse/tycho/repository/local/LocalArtifactRepositoryFactory.java
+++ b/tycho-bundles/org.eclipse.tycho.p2.maven.repository/src/main/java/org/eclipse/tycho/repository/local/LocalArtifactRepositoryFactory.java
@@ -43,7 +43,8 @@ public class LocalArtifactRepositoryFactory extends ArtifactRepositoryFactory {
if (localRepositoryDirectory.isDirectory()
&& new File(localRepositoryDirectory, ".meta/p2-artifacts.properties").exists()) {
// see FileBasedTychoRepositoryIndex#ARTIFACTS_INDEX_RELPATH
- return new LocalArtifactRepository(getAgent(), lookupLocalRepoIndices());
+ return new LocalArtifactRepository(getAgent(), lookupLocalRepoIndices(),
+ lookupLocalRepoIndices().getRepositorySystem());
}
}
return null;
diff --git a/tycho-bundles/org.eclipse.tycho.p2.maven.repository/src/main/java/org/eclipse/tycho/repository/local/index/LocalRepositoryP2IndicesImpl.java b/tycho-bundles/org.eclipse.tycho.p2.maven.repository/src/main/java/org/eclipse/tycho/repository/local/index/LocalRepositoryP2IndicesImpl.java
index 4cf6511..fc3cc9f 100644
--- a/tycho-bundles/org.eclipse.tycho.p2.maven.repository/src/main/java/org/eclipse/tycho/repository/local/index/LocalRepositoryP2IndicesImpl.java
+++ b/tycho-bundles/org.eclipse.tycho.p2.maven.repository/src/main/java/org/eclipse/tycho/repository/local/index/LocalRepositoryP2IndicesImpl.java
@@ -17,6 +17,7 @@ import java.io.File;
import org.eclipse.tycho.core.shared.MavenContext;
import org.eclipse.tycho.core.shared.MavenLogger;
+import org.eclipse.tycho.core.shared.MavenRepositorySystem;
import org.eclipse.tycho.locking.facade.FileLockService;
import org.eclipse.tycho.p2.repository.LocalRepositoryP2Indices;
import org.eclipse.tycho.p2.repository.TychoRepositoryIndex;
@@ -27,6 +28,7 @@ public class LocalRepositoryP2IndicesImpl implements LocalRepositoryP2Indices {
private FileLockService fileLockService;
private File localRepositoryRoot;
private MavenLogger logger;
+ private MavenRepositorySystem repoSystem;
// derived members
private boolean initialized = false;
@@ -41,6 +43,7 @@ public class LocalRepositoryP2IndicesImpl implements LocalRepositoryP2Indices {
public void setMavenContext(MavenContext mavenContext) {
this.localRepositoryRoot = mavenContext.getLocalRepositoryRoot();
this.logger = mavenContext.getLogger();
+ this.repoSystem = mavenContext.getRepositorySystem();
}
// injected by DS runtime
@@ -82,4 +85,7 @@ public class LocalRepositoryP2IndicesImpl implements LocalRepositoryP2Indices {
return localRepositoryRoot;
}
+ public MavenRepositorySystem getRepositorySystem() {
+ return repoSystem;
+ }
}
diff --git a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl.test/src/test/java/org/eclipse/tycho/p2/remote/RemoteAgentMavenMirrorsTest.java b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl.test/src/test/java/org/eclipse/tycho/p2/remote/RemoteAgentMavenMirrorsTest.java
index d7042fc..2f9dbc8 100644
--- a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl.test/src/test/java/org/eclipse/tycho/p2/remote/RemoteAgentMavenMirrorsTest.java
+++ b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl.test/src/test/java/org/eclipse/tycho/p2/remote/RemoteAgentMavenMirrorsTest.java
@@ -31,6 +31,7 @@ import org.eclipse.tycho.p2.impl.test.ResourceUtil;
import org.eclipse.tycho.p2.remote.testutil.MavenRepositorySettingsStub;
import org.eclipse.tycho.test.util.HttpServer;
import org.eclipse.tycho.test.util.LogVerifier;
+import org.eclipse.tycho.test.util.MavenRepositorySystemStub;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
@@ -54,7 +55,7 @@ public class RemoteAgentMavenMirrorsTest {
public void initSubject() throws Exception {
File localRepository = tempManager.newFolder("localRepo");
MavenContext mavenContext = new MavenContextImpl(localRepository, OFFLINE, logVerifier.getLogger(),
- new Properties());
+ new Properties(), new MavenRepositorySystemStub(localRepository));
mavenRepositorySettings = new MavenRepositorySettingsStub();
subject = new RemoteAgent(mavenContext, mavenRepositorySettings, OFFLINE);
diff --git a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl.test/src/test/java/org/eclipse/tycho/p2/remote/RemoteAgentMetadataRepositoryCacheTest.java b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl.test/src/test/java/org/eclipse/tycho/p2/remote/RemoteAgentMetadataRepositoryCacheTest.java
index c3bd41c..802da29 100644
--- a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl.test/src/test/java/org/eclipse/tycho/p2/remote/RemoteAgentMetadataRepositoryCacheTest.java
+++ b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl.test/src/test/java/org/eclipse/tycho/p2/remote/RemoteAgentMetadataRepositoryCacheTest.java
@@ -28,6 +28,7 @@ import org.eclipse.equinox.p2.repository.metadata.IMetadataRepositoryManager;
import org.eclipse.tycho.core.shared.MavenContextImpl;
import org.eclipse.tycho.test.util.HttpServer;
import org.eclipse.tycho.test.util.LogVerifier;
+import org.eclipse.tycho.test.util.MavenRepositorySystemStub;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
@@ -127,13 +128,13 @@ public class RemoteAgentMetadataRepositoryCacheTest {
}
private RemoteAgent newOnlineAgent() throws Exception {
- return new RemoteAgent(
- new MavenContextImpl(localMavenRepository, false, logVerifier.getLogger(), new Properties()));
+ return new RemoteAgent(new MavenContextImpl(localMavenRepository, false, logVerifier.getLogger(),
+ new Properties(), new MavenRepositorySystemStub(localMavenRepository)));
}
private RemoteAgent newOfflineAgent() throws Exception {
- return new RemoteAgent(
- new MavenContextImpl(localMavenRepository, true, logVerifier.getLogger(), new Properties()));
+ return new RemoteAgent(new MavenContextImpl(localMavenRepository, true, logVerifier.getLogger(),
+ new Properties(), new MavenRepositorySystemStub(localMavenRepository)));
}
private IMetadataRepository loadHttpRepository(RemoteAgent agent) throws ProvisionException {
diff --git a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl.test/src/test/java/org/eclipse/tycho/p2/target/TargetPlatformBundlePublisherTest.java b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl.test/src/test/java/org/eclipse/tycho/p2/target/TargetPlatformBundlePublisherTest.java
index da8bdf1..176ba81 100644
--- a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl.test/src/test/java/org/eclipse/tycho/p2/target/TargetPlatformBundlePublisherTest.java
+++ b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl.test/src/test/java/org/eclipse/tycho/p2/target/TargetPlatformBundlePublisherTest.java
@@ -42,6 +42,7 @@ import org.eclipse.tycho.p2.resolver.WrappedArtifact;
import org.eclipse.tycho.repository.p2base.artifact.provider.IRawArtifactProvider;
import org.eclipse.tycho.repository.streaming.testutil.ProbeRawArtifactSink;
import org.eclipse.tycho.test.util.LogVerifier;
+import org.eclipse.tycho.test.util.MavenRepositorySystemStub;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
@@ -69,7 +70,8 @@ public class TargetPlatformBundlePublisherTest {
localRepositoryRoot = tempFolder.getRoot();
subject = new TargetPlatformBundlePublisher(localRepositoryRoot,
- new ReactorProjectStub(tempFolder.newFolder(), "test"), logVerifier.getLogger());
+ new ReactorProjectStub(tempFolder.newFolder(), "test"), logVerifier.getLogger(),
+ new MavenRepositorySystemStub(localRepositoryRoot));
}
@Test
diff --git a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl.test/src/test/java/org/eclipse/tycho/p2/target/TestResolverFactory.java b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl.test/src/test/java/org/eclipse/tycho/p2/target/TestResolverFactory.java
index 33a98e4..0ea66e2 100644
--- a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl.test/src/test/java/org/eclipse/tycho/p2/target/TestResolverFactory.java
+++ b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl.test/src/test/java/org/eclipse/tycho/p2/target/TestResolverFactory.java
@@ -32,6 +32,7 @@ import org.eclipse.tycho.p2.target.facade.TargetPlatformFactory;
import org.eclipse.tycho.repository.local.LocalArtifactRepository;
import org.eclipse.tycho.repository.local.LocalMetadataRepository;
import org.eclipse.tycho.repository.local.index.LocalRepositoryP2IndicesImpl;
+import org.eclipse.tycho.test.util.MavenRepositorySystemStub;
import org.eclipse.tycho.test.util.NoopFileLockService;
public class TestResolverFactory implements P2ResolverFactory {
@@ -50,7 +51,8 @@ public class TestResolverFactory implements P2ResolverFactory {
File localMavenRepoRoot = mavenContext.getLocalRepositoryRoot();
LocalRepositoryP2Indices localRepoIndices = createLocalRepoIndices(mavenContext);
- LocalRepositoryReader localRepositoryReader = new LocalRepositoryReader(localMavenRepoRoot);
+ LocalRepositoryReader localRepositoryReader = new LocalRepositoryReader(localMavenRepoRoot,
+ mavenContext.getRepositorySystem());
localMetadataRepo = new LocalMetadataRepository(localMavenRepoRoot.toURI(), localRepoIndices.getMetadataIndex(),
localRepositoryReader);
localArtifactRepo = new LocalArtifactRepository(localRepoIndices, localRepositoryReader);
@@ -61,7 +63,8 @@ public class TestResolverFactory implements P2ResolverFactory {
}
private MavenContext createMavenContext(boolean offline, MavenLogger logger) {
- return new MavenContextImpl(getLocalRepositoryLocation(), offline, logger, new Properties());
+ return new MavenContextImpl(getLocalRepositoryLocation(), offline, logger, new Properties(),
+ new MavenRepositorySystemStub(getLocalRepositoryLocation()));
}
// TODO use TemporaryLocalMavenRepository
diff --git a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/resolver/P2ResolverFactoryImpl.java b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/resolver/P2ResolverFactoryImpl.java
index bb227a4..9481da4 100644
--- a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/resolver/P2ResolverFactoryImpl.java
+++ b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/resolver/P2ResolverFactoryImpl.java
@@ -37,7 +37,7 @@ public class P2ResolverFactoryImpl implements P2ResolverFactory {
private static LocalMetadataRepository localMetadataRepository;
private static LocalArtifactRepository localArtifactRepository;
- private MavenContext mavenContext;
+ private static MavenContext mavenContext;
private LocalRepositoryP2Indices localRepoIndices;
private RemoteAgentManager remoteAgentManager;
private TargetDefinitionResolverService targetDefinitionResolverService;
@@ -46,7 +46,8 @@ public class P2ResolverFactoryImpl implements P2ResolverFactory {
LocalRepositoryP2Indices localRepoIndices) {
if (localMetadataRepository == null) {
File localMavenRepoRoot = context.getLocalRepositoryRoot();
- RepositoryReader contentLocator = new LocalRepositoryReader(localMavenRepoRoot);
+ RepositoryReader contentLocator = new LocalRepositoryReader(localMavenRepoRoot,
+ mavenContext.getRepositorySystem());
localMetadataRepository = new LocalMetadataRepository(localMavenRepoRoot.toURI(),
localRepoIndices.getMetadataIndex(), contentLocator);
@@ -57,7 +58,8 @@ public class P2ResolverFactoryImpl implements P2ResolverFactory {
private static synchronized LocalArtifactRepository getLocalArtifactRepository(MavenContext mavenContext,
LocalRepositoryP2Indices localRepoIndices) {
if (localArtifactRepository == null) {
- RepositoryReader contentLocator = new LocalRepositoryReader(mavenContext.getLocalRepositoryRoot());
+ RepositoryReader contentLocator = new LocalRepositoryReader(mavenContext.getLocalRepositoryRoot(),
+ mavenContext.getRepositorySystem());
localArtifactRepository = new LocalArtifactRepository(localRepoIndices, contentLocator);
}
return localArtifactRepository;
diff --git a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/target/PomDependencyCollectorImpl.java b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/target/PomDependencyCollectorImpl.java
index 589418e..4ad19f5 100644
--- a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/target/PomDependencyCollectorImpl.java
+++ b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/target/PomDependencyCollectorImpl.java
@@ -49,7 +49,7 @@ public class PomDependencyCollectorImpl implements PomDependencyCollector {
File localRepositoryRoot = mavenContext.getLocalRepositoryRoot();
this.bundlesPublisher = new TargetPlatformBundlePublisher(localRepositoryRoot, project,
- mavenContext.getLogger());
+ mavenContext.getLogger(), mavenContext.getRepositorySystem());
}
public File getProjectLocation() {
diff --git a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/target/TargetPlatformBundlePublisher.java b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/target/TargetPlatformBundlePublisher.java
index d7119d7..83ab36e 100644
--- a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/target/TargetPlatformBundlePublisher.java
+++ b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/target/TargetPlatformBundlePublisher.java
@@ -35,6 +35,7 @@ import org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor;
import org.eclipse.osgi.service.resolver.BundleDescription;
import org.eclipse.tycho.ReactorProject;
import org.eclipse.tycho.core.shared.MavenLogger;
+import org.eclipse.tycho.core.shared.MavenRepositorySystem;
import org.eclipse.tycho.p2.impl.publisher.MavenPropertiesAdvice;
import org.eclipse.tycho.p2.impl.publisher.repo.TransientArtifactRepository;
import org.eclipse.tycho.p2.metadata.IArtifactFacade;
@@ -52,9 +53,10 @@ public class TargetPlatformBundlePublisher {
private final MavenBundlesArtifactRepository publishedArtifacts;
private ReactorProject project;
- public TargetPlatformBundlePublisher(File localMavenRepositoryRoot, ReactorProject project, MavenLogger logger) {
+ public TargetPlatformBundlePublisher(File localMavenRepositoryRoot, ReactorProject project, MavenLogger logger,
+ MavenRepositorySystem repositorySystem) {
this.project = project;
- this.publishedArtifacts = new MavenBundlesArtifactRepository(localMavenRepositoryRoot);
+ this.publishedArtifacts = new MavenBundlesArtifactRepository(localMavenRepositoryRoot, repositorySystem);
this.logger = logger;
}
diff --git a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/target/repository/MavenBundlesArtifactRepository.java b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/target/repository/MavenBundlesArtifactRepository.java
index 59aab38..67df39d 100644
--- a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/target/repository/MavenBundlesArtifactRepository.java
+++ b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/target/repository/MavenBundlesArtifactRepository.java
@@ -21,6 +21,7 @@ import java.io.File;
import org.eclipse.core.runtime.AssertionFailedException;
import org.eclipse.equinox.p2.metadata.IArtifactKey;
import org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor;
+import org.eclipse.tycho.core.shared.MavenRepositorySystem;
import org.eclipse.tycho.p2.metadata.IArtifactFacade;
import org.eclipse.tycho.p2.repository.LocalRepositoryReader;
import org.eclipse.tycho.p2.repository.MavenRepositoryCoordinates;
@@ -49,9 +50,11 @@ import org.eclipse.tycho.repository.p2base.artifact.repository.ArtifactRepositor
* </p>
*/
public final class MavenBundlesArtifactRepository extends ArtifactRepositoryBaseImpl<GAVArtifactDescriptor> {
+ private MavenRepositorySystem repositorySystem;
- public MavenBundlesArtifactRepository(File localMavenRepositoryRoot) {
+ public MavenBundlesArtifactRepository(File localMavenRepositoryRoot, MavenRepositorySystem repositorySystem) {
super(null, localMavenRepositoryRoot.toURI(), ArtifactTransferPolicies.forLocalArtifacts());
+ this.repositorySystem = repositorySystem;
}
public void addPublishedArtifact(IArtifactDescriptor baseDescriptor, IArtifactFacade mavenArtifact) {
@@ -91,7 +94,7 @@ public final class MavenBundlesArtifactRepository extends ArtifactRepositoryBase
@Override
protected File internalGetArtifactStorageLocation(IArtifactDescriptor descriptor) {
MavenRepositoryCoordinates coord = toInternalDescriptor(descriptor).getMavenCoordinates();
- LocalRepositoryReader reader = new LocalRepositoryReader(getBaseDir());
+ LocalRepositoryReader reader = new LocalRepositoryReader(getBaseDir(), repositorySystem);
return reader.getLocalArtifactLocation(coord.getGav(), coord.getClassifier(),
coord.getExtensionOrDefault());
}
diff --git a/tycho-bundles/org.eclipse.tycho.p2.resolver.shared/src/main/java/org/eclipse/tycho/p2/repository/LocalRepositoryP2Indices.java b/tycho-bundles/org.eclipse.tycho.p2.resolver.shared/src/main/java/org/eclipse/tycho/p2/repository/LocalRepositoryP2Indices.java
index 7a1303b..1a8feb4 100644
--- a/tycho-bundles/org.eclipse.tycho.p2.resolver.shared/src/main/java/org/eclipse/tycho/p2/repository/LocalRepositoryP2Indices.java
+++ b/tycho-bundles/org.eclipse.tycho.p2.resolver.shared/src/main/java/org/eclipse/tycho/p2/repository/LocalRepositoryP2Indices.java
@@ -15,6 +15,8 @@ package org.eclipse.tycho.p2.repository;
import java.io.File;
+import org.eclipse.tycho.core.shared.MavenRepositorySystem;
+
/**
* This service provides access to the tycho p2 index files of the local maven repository.
*/
@@ -26,4 +28,5 @@ public interface LocalRepositoryP2Indices {
public File getBasedir();
+ public MavenRepositorySystem getRepositorySystem();
}
diff --git a/tycho-bundles/org.eclipse.tycho.p2.resolver.shared/src/main/java/org/eclipse/tycho/p2/repository/LocalRepositoryReader.java b/tycho-bundles/org.eclipse.tycho.p2.resolver.shared/src/main/java/org/eclipse/tycho/p2/repository/LocalRepositoryReader.java
index 959a257..3c8fb8b 100644
--- a/tycho-bundles/org.eclipse.tycho.p2.resolver.shared/src/main/java/org/eclipse/tycho/p2/repository/LocalRepositoryReader.java
+++ b/tycho-bundles/org.eclipse.tycho.p2.resolver.shared/src/main/java/org/eclipse/tycho/p2/repository/LocalRepositoryReader.java
@@ -13,57 +13,31 @@
package org.eclipse.tycho.p2.repository;
import java.io.File;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Method;
+
+import org.eclipse.tycho.core.shared.MavenRepositorySystem;
public class LocalRepositoryReader implements RepositoryReader {
private final File localMavenRepositoryRoot;
+ private final MavenRepositorySystem repositorySystem;
- public LocalRepositoryReader(File localMavenRepositoryRoot) {
+ public LocalRepositoryReader(File localMavenRepositoryRoot, MavenRepositorySystem repositorySystem) {
this.localMavenRepositoryRoot = localMavenRepositoryRoot;
+ this.repositorySystem = repositorySystem;
}
@Override
public File getLocalArtifactLocation(GAV gav, String classifier, String extension) {
- File file = new File(localMavenRepositoryRoot,
+ File ret = new File(localMavenRepositoryRoot,
RepositoryLayoutHelper.getRelativePath(gav, classifier, extension));
- // In Fedora the artifact may be in an XMvn-defined repository location (not in reactor cache)
- if (!file.exists()) {
- try {
- // Create Plexus config
- Class<?> pcclazz = Class.forName("org.codehaus.plexus.ContainerConfiguration");
- Object conf = Class.forName("org.codehaus.plexus.DefaultContainerConfiguration").newInstance();
- pcclazz.getMethod("setAutoWiring", boolean.class).invoke(conf, true);
- pcclazz.getMethod("setClassPathScanning", String.class).invoke(conf, "index");
-
- // Use plexus container to lookup the reader
- Class<?> pclazz = Class.forName("org.codehaus.plexus.DefaultPlexusContainer");
- Object plexus = pclazz.getConstructor(pcclazz).newInstance(conf);
-
- // Retrieve the workspace reader from the plexus container
- Method mLookup = pclazz.getMethod("lookup", String.class, String.class);
- Object reader = mLookup.invoke(plexus, "org.eclipse.aether.repository.WorkspaceReader", "ide");
-
- // Create an Aether Artifact based on GAV, classifier, and extension
- Class<?> iartclazz = Class.forName("org.eclipse.aether.artifact.Artifact");
- Class<?> artclazz = Class.forName("org.eclipse.aether.artifact.DefaultArtifact");
- Constructor<?> cNew = artclazz.getConstructor(String.class, String.class, String.class, String.class,
- String.class);
- Object artifact = cNew.newInstance(gav.getGroupId(), gav.getArtifactId(), classifier, extension,
- gav.getVersion());
-
- // Invoke "findArtifact" method of the workspace reader on the artifact
- Method mfindArtifact = reader.getClass().getMethod("findArtifact", iartclazz);
- File newFile = (File) mfindArtifact.invoke(reader, artifact);
- if (newFile != null) {
- file = newFile;
- }
- } catch (Exception e) {
- e.printStackTrace();
+ if (repositorySystem != null) {
+ File tmp = repositorySystem.resolve(gav.getGroupId(), gav.getArtifactId(), gav.getVersion(), extension,
+ classifier);
+ if (tmp != null) {
+ ret = tmp;
}
}
- return file;
+ return ret;
}
}
diff --git a/tycho-bundles/org.eclipse.tycho.test.utils/src/main/java/org/eclipse/tycho/repository/local/testutil/TemporaryLocalMavenRepository.java b/tycho-bundles/org.eclipse.tycho.test.utils/src/main/java/org/eclipse/tycho/repository/local/testutil/TemporaryLocalMavenRepository.java
index fe0c456..8b1a9d1 100644
--- a/tycho-bundles/org.eclipse.tycho.test.utils/src/main/java/org/eclipse/tycho/repository/local/testutil/TemporaryLocalMavenRepository.java
+++ b/tycho-bundles/org.eclipse.tycho.test.utils/src/main/java/org/eclipse/tycho/repository/local/testutil/TemporaryLocalMavenRepository.java
@@ -19,6 +19,7 @@ import org.eclipse.equinox.internal.p2.core.helpers.FileUtils;
import org.eclipse.tycho.p2.repository.LocalRepositoryP2Indices;
import org.eclipse.tycho.repository.local.LocalArtifactRepository;
import org.eclipse.tycho.repository.local.index.LocalRepositoryP2IndicesImpl;
+import org.eclipse.tycho.test.util.MavenRepositorySystemStub;
import org.eclipse.tycho.test.util.NoopFileLockService;
import org.junit.Rule;
import org.junit.rules.ExternalResource;
@@ -74,7 +75,8 @@ public class TemporaryLocalMavenRepository extends ExternalResource {
public LocalArtifactRepository getLocalArtifactRepository() {
if (repo == null) {
- repo = new LocalArtifactRepository(null, getLocalRepositoryIndex());
+ repo = new LocalArtifactRepository(null, getLocalRepositoryIndex(),
+ new MavenRepositorySystemStub(getLocalRepositoryRoot()));
}
return repo;
}
diff --git a/tycho-bundles/org.eclipse.tycho.test.utils/src/main/java/org/eclipse/tycho/test/util/MavenRepositorySystemStub.java b/tycho-bundles/org.eclipse.tycho.test.utils/src/main/java/org/eclipse/tycho/test/util/MavenRepositorySystemStub.java
new file mode 100644
index 0000000..be02d64
--- /dev/null
+++ b/tycho-bundles/org.eclipse.tycho.test.utils/src/main/java/org/eclipse/tycho/test/util/MavenRepositorySystemStub.java
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Copyright (c) 2014 Red Hat Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Red Hat Inc. - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tycho.test.util;
+
+import java.io.File;
+
+import org.eclipse.tycho.core.shared.MavenRepositorySystem;
+import org.eclipse.tycho.p2.repository.RepositoryLayoutHelper;
+
+public class MavenRepositorySystemStub implements MavenRepositorySystem {
+
+ private File localMavenRepositoryRoot;
+
+ public MavenRepositorySystemStub(File localMavenRepositoryRoot) {
+ this.localMavenRepositoryRoot = localMavenRepositoryRoot;
+ }
+
+ public File resolve(String gid, String aid, String version, String type, String classifier) {
+ return new File(localMavenRepositoryRoot,
+ RepositoryLayoutHelper.getRelativePath(gid, aid, version, classifier, type));
+ }
+}
diff --git a/tycho-core/src/main/java/org/eclipse/tycho/osgi/adapters/MavenRepositorySystemAdapter.java b/tycho-core/src/main/java/org/eclipse/tycho/osgi/adapters/MavenRepositorySystemAdapter.java
new file mode 100644
index 0000000..e1d46fa
--- /dev/null
+++ b/tycho-core/src/main/java/org/eclipse/tycho/osgi/adapters/MavenRepositorySystemAdapter.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2014 Red Hat Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Red Hat Inc. - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tycho.osgi.adapters;
+
+import java.io.File;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.resolver.ArtifactResolutionRequest;
+import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
+import org.apache.maven.repository.RepositorySystem;
+import org.eclipse.tycho.core.shared.MavenRepositorySystem;
+
+public class MavenRepositorySystemAdapter implements MavenRepositorySystem {
+
+ private RepositorySystem repoSystem;
+
+ public MavenRepositorySystemAdapter(RepositorySystem repoSystem) {
+ this.repoSystem = repoSystem;
+ }
+
+ public File resolve(String gid, String aid, String version, String type, String classifier) {
+ ArtifactResolutionRequest req = new ArtifactResolutionRequest();
+ Artifact art = repoSystem.createArtifactWithClassifier(gid, aid, version, type, classifier);
+ req.setArtifact(art);
+ ArtifactResolutionResult res = repoSystem.resolve(req);
+ return res.getArtifacts().size() > 0 ? res.getArtifacts().toArray(new Artifact[0])[0].getFile() : null;
+ }
+
+}
diff --git a/tycho-core/src/main/java/org/eclipse/tycho/osgi/configuration/MavenContextConfigurator.java b/tycho-core/src/main/java/org/eclipse/tycho/osgi/configuration/MavenContextConfigurator.java
index 4a21341..e16c7e0 100644
--- a/tycho-core/src/main/java/org/eclipse/tycho/osgi/configuration/MavenContextConfigurator.java
+++ b/tycho-core/src/main/java/org/eclipse/tycho/osgi/configuration/MavenContextConfigurator.java
@@ -18,6 +18,7 @@ import java.util.Properties;
import org.apache.maven.execution.MavenSession;
import org.apache.maven.plugin.LegacySupport;
import org.apache.maven.project.MavenProject;
+import org.apache.maven.repository.RepositorySystem;
import org.apache.maven.settings.Profile;
import org.apache.maven.settings.Settings;
import org.codehaus.plexus.component.annotations.Component;
@@ -29,6 +30,7 @@ import org.eclipse.tycho.core.osgitools.DefaultReactorProject;
import org.eclipse.tycho.core.shared.MavenContext;
import org.eclipse.tycho.core.shared.MavenContextImpl;
import org.eclipse.tycho.osgi.adapters.MavenLoggerAdapter;
+import org.eclipse.tycho.osgi.adapters.MavenRepositorySystemAdapter;
@Component(role = EquinoxLifecycleListener.class, hint = "MavenContextConfigurator")
public class MavenContextConfigurator extends EquinoxLifecycleListener {
@@ -39,6 +41,9 @@ public class MavenContextConfigurator extends EquinoxLifecycleListener {
@Requirement
private LegacySupport context;
+ @Requirement
+ private RepositorySystem repositorySystem;
+
@Override
public void afterFrameworkStarted(EmbeddedEquinox framework) {
MavenSession session = context.getSession();
@@ -46,7 +51,7 @@ public class MavenContextConfigurator extends EquinoxLifecycleListener {
MavenLoggerAdapter mavenLogger = new MavenLoggerAdapter(logger, false);
Properties globalProps = getGlobalProperties(session);
MavenContextImpl mavenContext = new MavenContextImpl(localRepoRoot, session.isOffline(), mavenLogger,
- globalProps);
+ globalProps, new MavenRepositorySystemAdapter(repositorySystem));
for (MavenProject project : session.getProjects()) {
mavenContext.addProject(DefaultReactorProject.adapt(project));
}
--
2.28.0

View File

@ -1,31 +0,0 @@
From 3ad22ed9fa3d227fa0d508c333be9319d9082fc6 Mon Sep 17 00:00:00 2001
From: Mat Booth <mat.booth@redhat.com>
Date: Thu, 20 Feb 2020 16:08:00 +0000
Subject: [PATCH 4/7] Fix uncaught exception
"unreported exception org.codehaus.plexus.configuration.PlexusConfigurationException; must be caught or declared to be thrown"
---
.../tycho/extras/sourcefeature/SourceFeatureMojo.java | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/tycho-extras/tycho-source-feature-plugin/src/main/java/org/eclipse/tycho/extras/sourcefeature/SourceFeatureMojo.java b/tycho-extras/tycho-source-feature-plugin/src/main/java/org/eclipse/tycho/extras/sourcefeature/SourceFeatureMojo.java
index 36f1eed..87815d1 100644
--- a/tycho-extras/tycho-source-feature-plugin/src/main/java/org/eclipse/tycho/extras/sourcefeature/SourceFeatureMojo.java
+++ b/tycho-extras/tycho-source-feature-plugin/src/main/java/org/eclipse/tycho/extras/sourcefeature/SourceFeatureMojo.java
@@ -576,7 +576,12 @@ public class SourceFeatureMojo extends AbstractMojo {
}
private String getAttribute(PlexusConfiguration dom, String attrName) {
- String attr = dom.getAttribute(attrName);
+ String attr = null;
+ try {
+ attr = dom.getAttribute(attrName);
+ } catch (Exception ex) {
+ attr = null;
+ }
if (attr == null) {
return null;
}
--
2.28.0

View File

@ -1,88 +0,0 @@
From 085015460b077536f94cafeb21a3ce868fd56096 Mon Sep 17 00:00:00 2001
From: Mat Booth <mat.booth@redhat.com>
Date: Fri, 20 Mar 2020 02:35:02 +0000
Subject: [PATCH 5/7] Fix dependency problems when bootstrapping with extras
---
tycho-extras/pack200/tycho-pack200b-plugin/pom.xml | 4 ++--
tycho-extras/pom.xml | 10 +++++-----
tycho-extras/tycho-source-feature-plugin/pom.xml | 4 ++--
3 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/tycho-extras/pack200/tycho-pack200b-plugin/pom.xml b/tycho-extras/pack200/tycho-pack200b-plugin/pom.xml
index 55a4107..4af01c5 100644
--- a/tycho-extras/pack200/tycho-pack200b-plugin/pom.xml
+++ b/tycho-extras/pack200/tycho-pack200b-plugin/pom.xml
@@ -36,7 +36,7 @@
<dependency>
<groupId>org.eclipse.tycho</groupId>
<artifactId>org.eclipse.tycho.p2.resolver.shared</artifactId>
- <version>${tycho-version}</version>
+ <version>${project.version}</version>
</dependency>
</dependencies>
-</project>
\ No newline at end of file
+</project>
diff --git a/tycho-extras/pom.xml b/tycho-extras/pom.xml
index 416abd1..53ddf73 100644
--- a/tycho-extras/pom.xml
+++ b/tycho-extras/pom.xml
@@ -72,28 +72,28 @@
<dependency>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-core</artifactId>
- <version>${tycho-version}</version>
+ <version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-p2-facade</artifactId>
- <version>${tycho-version}</version>
+ <version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.eclipse.tycho</groupId>
<artifactId>org.eclipse.tycho.core.shared</artifactId>
- <version>${tycho-version}</version>
+ <version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-testing-harness</artifactId>
- <version>${tycho-version}</version>
+ <version>${project.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.eclipse.tycho</groupId>
<artifactId>sisu-equinox-launching</artifactId>
- <version>${tycho-version}</version>
+ <version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.eclipse.tycho</groupId>
diff --git a/tycho-extras/tycho-source-feature-plugin/pom.xml b/tycho-extras/tycho-source-feature-plugin/pom.xml
index bfccba8..2d4162c 100644
--- a/tycho-extras/tycho-source-feature-plugin/pom.xml
+++ b/tycho-extras/tycho-source-feature-plugin/pom.xml
@@ -42,14 +42,14 @@
<dependency>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-packaging-plugin</artifactId>
- <version>${tycho-version}</version>
+ <version>${project.version}</version>
<type>maven-plugin</type>
</dependency>
<dependency>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-source-plugin</artifactId>
- <version>${tycho-version}</version>
+ <version>${project.version}</version>
<type>maven-plugin</type>
</dependency>
--
2.28.0

View File

@ -1,51 +0,0 @@
From cec1526c14fe52697eea6864285f3700c22178fa Mon Sep 17 00:00:00 2001
From: Roland Grunberg <rgrunber@redhat.com>
Date: Mon, 6 May 2013 14:20:58 -0400
Subject: [PATCH 6/7] Use custom resolver for tycho-eclipserun-plugin.
Add various system local OSGi bundle locations to the target platform
used by tycho-eclipserun-plugin.
Change-Id: Ifd0aae3f32c8077cd0ae33e70f40698c1129788d
---
.../tycho/extras/eclipserun/EclipseRunMojo.java | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/tycho-extras/tycho-eclipserun-plugin/src/main/java/org/eclipse/tycho/extras/eclipserun/EclipseRunMojo.java b/tycho-extras/tycho-eclipserun-plugin/src/main/java/org/eclipse/tycho/extras/eclipserun/EclipseRunMojo.java
index e10b211..d0f0857 100644
--- a/tycho-extras/tycho-eclipserun-plugin/src/main/java/org/eclipse/tycho/extras/eclipserun/EclipseRunMojo.java
+++ b/tycho-extras/tycho-eclipserun-plugin/src/main/java/org/eclipse/tycho/extras/eclipserun/EclipseRunMojo.java
@@ -15,6 +15,7 @@ package org.eclipse.tycho.extras.eclipserun;
import java.io.File;
import java.net.MalformedURLException;
+import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -57,6 +58,7 @@ import org.eclipse.tycho.p2.resolver.facade.P2Resolver;
import org.eclipse.tycho.p2.resolver.facade.P2ResolverFactory;
import org.eclipse.tycho.p2.target.facade.TargetPlatformConfigurationStub;
import org.eclipse.tycho.plugins.p2.extras.Repository;
+import org.fedoraproject.p2.EclipseSystemLayout;
/**
* Launch an eclipse process with arbitrary commandline arguments. The eclipse installation is
@@ -240,6 +242,14 @@ public class EclipseRunMojo extends AbstractMojo {
TargetPlatformConfigurationStub tpConfiguration = new TargetPlatformConfigurationStub();
// we want to resolve from remote repos only
tpConfiguration.setForceIgnoreLocalArtifacts(true);
+
+ // Add Fedora Local P2 Repository when running in local mode
+ if (System.getProperty("TYCHO_MVN_LOCAL") != null || System.getProperty("TYCHO_MVN_RPMBUILD") != null) {
+ for (URI uri : EclipseSystemLayout.getRepositories()) {
+ tpConfiguration.addP2Repository(new MavenRepositoryLocation(uri.getPath(), uri));
+ }
+ }
+
for (Repository repository : repositories) {
tpConfiguration.addP2Repository(new MavenRepositoryLocation(repository.getId(), repository.getLocation()));
}
--
2.28.0

View File

@ -1,86 +0,0 @@
From 7aae9528d45e45602cf27122c07a065d47a8418d Mon Sep 17 00:00:00 2001
From: Mat Booth <mat.booth@redhat.com>
Date: Mon, 8 Feb 2021 13:49:24 +0000
Subject: [PATCH 7/7] Accomodate API change in surefire 3.0.0~M4
---
.../META-INF/MANIFEST.MF | 1 +
.../pom.xml | 5 +++++
.../surefire/osgibooter/OsgiSurefireBooter.java | 17 +++++++++++++----
3 files changed, 19 insertions(+), 4 deletions(-)
diff --git a/tycho-surefire/org.eclipse.tycho.surefire.osgibooter/META-INF/MANIFEST.MF b/tycho-surefire/org.eclipse.tycho.surefire.osgibooter/META-INF/MANIFEST.MF
index 9ad1c2e..4ad1fe9 100644
--- a/tycho-surefire/org.eclipse.tycho.surefire.osgibooter/META-INF/MANIFEST.MF
+++ b/tycho-surefire/org.eclipse.tycho.surefire.osgibooter/META-INF/MANIFEST.MF
@@ -8,6 +8,7 @@ Bundle-ClassPath: .,
jars/surefire-booter-2.22.2.jar,
jars/surefire-api-2.22.2.jar,
jars/surefire-logger-api-2.22.2.jar,
+ jars/surefire-extensions-api-2.22.2.jar,
jars/maven-surefire-common-2.22.2.jar
Bundle-Name: Tycho Surefire OSGi Booter Eclipse Application
Bundle-ManifestVersion: 2
diff --git a/tycho-surefire/org.eclipse.tycho.surefire.osgibooter/pom.xml b/tycho-surefire/org.eclipse.tycho.surefire.osgibooter/pom.xml
index 1ab4254..8255509 100644
--- a/tycho-surefire/org.eclipse.tycho.surefire.osgibooter/pom.xml
+++ b/tycho-surefire/org.eclipse.tycho.surefire.osgibooter/pom.xml
@@ -57,6 +57,11 @@
<artifactId>surefire-api</artifactId>
<version>${surefire-version}</version>
</artifactItem>
+ <artifactItem>
+ <groupId>org.apache.maven.surefire</groupId>
+ <artifactId>surefire-extensions-api</artifactId>
+ <version>${surefire-version}</version>
+ </artifactItem>
<artifactItem>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-logger-api</artifactId>
diff --git a/tycho-surefire/org.eclipse.tycho.surefire.osgibooter/src/main/java/org/eclipse/tycho/surefire/osgibooter/OsgiSurefireBooter.java b/tycho-surefire/org.eclipse.tycho.surefire.osgibooter/src/main/java/org/eclipse/tycho/surefire/osgibooter/OsgiSurefireBooter.java
index 3680799..165c9a3 100644
--- a/tycho-surefire/org.eclipse.tycho.surefire.osgibooter/src/main/java/org/eclipse/tycho/surefire/osgibooter/OsgiSurefireBooter.java
+++ b/tycho-surefire/org.eclipse.tycho.surefire.osgibooter/src/main/java/org/eclipse/tycho/surefire/osgibooter/OsgiSurefireBooter.java
@@ -28,6 +28,9 @@ import java.util.Properties;
import java.util.Set;
import org.apache.maven.plugin.surefire.StartupReportConfiguration;
+import org.apache.maven.plugin.surefire.extensions.SurefireConsoleOutputReporter;
+import org.apache.maven.plugin.surefire.extensions.SurefireStatelessReporter;
+import org.apache.maven.plugin.surefire.extensions.SurefireStatelessTestsetInfoReporter;
import org.apache.maven.plugin.surefire.log.api.PrintStreamLogger;
import org.apache.maven.plugin.surefire.report.ConsoleReporter;
import org.apache.maven.plugin.surefire.report.DefaultReporterFactory;
@@ -93,7 +96,7 @@ public class OsgiSurefireBooter {
ClasspathConfiguration classPathConfig = new ClasspathConfiguration(false, false);
StartupConfiguration startupConfiguration = new StartupConfiguration(provider, classPathConfig,
- new ClassLoaderConfiguration(useSystemClassloader, useManifestOnlyJar), forkRequested, inForkedVM);
+ new ClassLoaderConfiguration(useSystemClassloader, useManifestOnlyJar), forkRequested, inForkedVM, null);
// TODO dir scanning with no includes done here (done in TestMojo already)
// but without dirScannerParams we get an NPE accessing runOrder
DirectoryScannerParameters dirScannerParams = new DirectoryScannerParameters(testClassesDir,
@@ -106,11 +109,17 @@ public class OsgiSurefireBooter {
new RunOrderParameters(runOrder, null), failIfNoTests, reporterConfig, null, testRequest,
extractProviderProperties(testProps), null, false, Collections.<CommandLineOption> emptyList(),
skipAfterFailureCount, Shutdown.DEFAULT, 30);
+
+ SurefireStatelessReporter xmlReporter = new SurefireStatelessReporter(disableXmlReport, "3.0" );
+ xmlReporter.setDisable(disableXmlReport);
+ SurefireConsoleOutputReporter outReporter = new SurefireConsoleOutputReporter();
+ SurefireStatelessTestsetInfoReporter testsetReporter = new SurefireStatelessTestsetInfoReporter();
+
StartupReportConfiguration startupReportConfig = new StartupReportConfiguration(useFile, printSummary,
- ConsoleReporter.PLAIN, redirectTestOutputToFile, disableXmlReport, reportsDir, trimStackTrace, null,
- new File(reportsDir, "TESTHASH"), false, rerunFailingTestsCount, XSD, null, false);
+ ConsoleReporter.PLAIN, redirectTestOutputToFile, reportsDir, trimStackTrace, null,
+ new File(reportsDir, "TESTHASH"), false, rerunFailingTestsCount, XSD, null, false, xmlReporter, outReporter, testsetReporter);
ReporterFactory reporterFactory = new DefaultReporterFactory(startupReportConfig,
- new PrintStreamLogger(startupReportConfig.getOriginalSystemOut()));
+ new PrintStreamLogger(System.out));
// API indicates we should use testClassLoader below but surefire also tries
// to load surefire classes using this classloader
RunResult result = ProviderFactory.invokeProvider(null, createCombinedClassLoader(testPlugin), reporterFactory,
--
2.28.0

View File

@ -1,19 +0,0 @@
package org.fedoraproject;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugin.AbstractMojo;
/**
* Empty goal to fix
* @goal empty
* @phase clean
*/
public class EmptyMojo
extends AbstractMojo
{
public void execute()
throws MojoExecutionException, MojoFailureException
{
}
}

1
dead.package Normal file
View File

@ -0,0 +1 @@
tycho package is retired on c9s for CS-935

View File

@ -1,20 +0,0 @@
#!/bin/sh
set -e
_prefer_jre="true"
. /usr/share/java-utils/java-functions
set_jvm
set_classpath \
beust-jcommander \
eclipse/osgi \
slf4j/api \
slf4j/simple \
tycho/org.fedoraproject.p2 \
tycho/xmvn-p2-installer-plugin \
xmvn/xmvn-api \
xmvn/xmvn-core \
MAIN_CLASS=org.fedoraproject.p2.app.P2InstallerApp
run "$@"

View File

@ -1,3 +0,0 @@
SHA512 (fedoraproject-p2-0be3abaa1729553b13f384a008b1cd1fb00beaf4.tar.gz) = 0fc3585203eff6dcaf08c679a258dc8f108a6d64a29f88983a8ac10ae82641b85ea5cf05e112daadaeef95d798255d1307efd8b2d55b5d482b36b448709f7ab5
SHA512 (eclipse-bootstrap-2020-12.tar.xz) = 28d93663bb7e4d86341fc40c648416039f57cee7bb3922ea1cb939f69d70e8fd857120ead181e3877455af5abfb3d400dacb7efcffd3344e1276c0ad11782513
SHA512 (org.eclipse.tycho-tycho-2.2.0.tar.xz) = 4c37b4d3bbd55bf4a433f44cf0f98f63c147d97f094a0c43e8379c5006df8eb033b2000abfa148ad279129d70bb6499dca9f0e753c2f60697e7042187483e457

View File

@ -1,113 +0,0 @@
#! /bin/bash -e
. $(pwd)/tycho-scripts.sh
preV=$1
v="$preV-SNAPSHOT"
osgiV='3.16.100.v20201211-1332'
osgiCompatV='1.2.200.v20201211-1332'
fp2V='0.0.1-SNAPSHOT'
bundles=()
bundles[0]='tycho-bundles/org.eclipse.tycho.embedder.shared'
bundles[1]='tycho-bundles/org.eclipse.tycho.core.shared'
bundles[2]='tycho-bundles/org.eclipse.tycho.p2.resolver.shared'
bundles[3]='tycho-bundles/org.eclipse.tycho.p2.tools.shared'
bundles[4]='tycho-bundles/org.eclipse.tycho.p2.maven.repository'
bundles[5]='tycho-bundles/org.eclipse.tycho.p2.resolver.impl'
bundles[6]='tycho-bundles/org.eclipse.tycho.p2.tools.impl'
xtraBundles[0]='fedoraproject-p2/org.fedoraproject.p2'
deps[0]=""
deps[1]="tycho-bundles/org.eclipse.tycho.embedder.shared/target/org.eclipse.tycho.embedder.shared-${v}.jar"
deps[2]="tycho-bundles/org.eclipse.tycho.embedder.shared/target/org.eclipse.tycho.embedder.shared-${v}.jar:tycho-bundles/org.eclipse.tycho.core.shared/target/org.eclipse.tycho.core.shared-${v}.jar"
deps[3]="tycho-bundles/org.eclipse.tycho.embedder.shared/target/org.eclipse.tycho.embedder.shared-${v}.jar:tycho-bundles/org.eclipse.tycho.core.shared/target/org.eclipse.tycho.core.shared-${v}.jar:tycho-bundles/org.eclipse.tycho.p2.resolver.shared/target/org.eclipse.tycho.p2.resolver.shared-${v}.jar"
deps[4]="tycho-bundles/org.eclipse.tycho.embedder.shared/target/org.eclipse.tycho.embedder.shared-${v}.jar:tycho-bundles/org.eclipse.tycho.core.shared/target/org.eclipse.tycho.core.shared-${v}.jar:tycho-bundles/org.eclipse.tycho.p2.resolver.shared/target/org.eclipse.tycho.p2.resolver.shared-${v}.jar"
deps[5]="tycho-bundles/org.eclipse.tycho.embedder.shared/target/org.eclipse.tycho.embedder.shared-${v}.jar:tycho-bundles/org.eclipse.tycho.core.shared/target/org.eclipse.tycho.core.shared-${v}.jar:tycho-bundles/org.eclipse.tycho.p2.resolver.shared/target/org.eclipse.tycho.p2.resolver.shared-${v}.jar:tycho-bundles/org.eclipse.tycho.p2.maven.repository/target/org.eclipse.tycho.p2.maven.repository-${v}.jar:fedoraproject-p2/org.fedoraproject.p2/target/org.fedoraproject.p2-${fp2V}.jar"
deps[6]="tycho-bundles/org.eclipse.tycho.embedder.shared/target/org.eclipse.tycho.embedder.shared-${v}.jar:tycho-bundles/org.eclipse.tycho.core.shared/target/org.eclipse.tycho.core.shared-${v}.jar:tycho-bundles/org.eclipse.tycho.p2.resolver.shared/target/org.eclipse.tycho.p2.resolver.shared-${v}.jar:tycho-bundles/org.eclipse.tycho.p2.tools.shared/target/org.eclipse.tycho.p2.tools.shared-${v}.jar:tycho-bundles/org.eclipse.tycho.p2.maven.repository/target/org.eclipse.tycho.p2.maven.repository-${v}.jar:tycho-bundles/org.eclipse.tycho.p2.resolver.impl/target/org.eclipse.tycho.p2.resolver.impl-${v}.jar"
xtraDeps[0]=""
externalDeps[4]="org.eclipse.equinox.common,org.eclipse.equinox.p2.repository,org.eclipse.equinox.p2.metadata,org.eclipse.equinox.p2.core,org.eclipse.equinox.p2.metadata.repository,org.eclipse.equinox.p2.artifact.repository,org.eclipse.osgi"
externalDeps[5]="org.eclipse.core.runtime,org.eclipse.equinox.security,org.eclipse.equinox.frameworkadmin.equinox,org.eclipse.equinox.frameworkadmin,org.eclipse.equinox.p2.core,org.eclipse.equinox.p2.metadata,org.eclipse.equinox.p2.publisher,org.eclipse.equinox.p2.publisher.eclipse,org.eclipse.equinox.p2.artifact.repository,org.eclipse.equinox.p2.metadata.repository,org.eclipse.equinox.p2.director,org.eclipse.equinox.p2.repository,org.eclipse.equinox.p2.updatesite,org.eclipse.core.net,org.eclipse.equinox.common,org.eclipse.osgi,org.eclipse.equinox.preferences,biz.aQute.bndlib"
externalDeps[6]="org.eclipse.equinox.p2.director.app,org.eclipse.equinox.frameworkadmin.equinox,org.eclipse.equinox.frameworkadmin,org.eclipse.equinox.p2.core,org.eclipse.equinox.p2.publisher,org.eclipse.equinox.p2.updatesite,org.eclipse.core.runtime,org.eclipse.equinox.p2.metadata,org.eclipse.equinox.p2.repository,org.eclipse.equinox.p2.repository.tools,org.eclipse.equinox.p2.metadata.repository,org.eclipse.equinox.p2.artifact.repository,org.eclipse.equinox.p2.publisher.eclipse,org.eclipse.equinox.p2.engine,org.eclipse.equinox.p2.director,org.eclipse.osgi,org.eclipse.equinox.common,org.eclipse.equinox.app,org.eclipse.equinox.registry"
xtraExternalDeps[0]="org.eclipse.osgi,org.eclipse.core.runtime,org.eclipse.equinox.common,org.eclipse.equinox.p2.metadata,org.eclipse.equinox.p2.repository,org.eclipse.equinox.p2.core,org.eclipse.equinox.p2.publisher.eclipse,org.eclipse.equinox.p2.publisher,org.eclipse.equinox.p2.touchpoint.eclipse,org.eclipse.equinox.p2.updatesite,org.eclipse.equinox.p2.repository.tools,org.eclipse.equinox.app,slf4j.api"
reactorprojs=( 'tycho-embedder-api' 'tycho-metadata-model' 'sisu-equinox/sisu-equinox-api' 'sisu-equinox/sisu-equinox-embedder' 'tycho-core' 'tycho-packaging-plugin' 'tycho-p2/tycho-p2-facade' 'tycho-maven-plugin' 'tycho-p2/tycho-p2-repository-plugin' 'tycho-p2/tycho-p2-publisher-plugin' 'target-platform-configuration' 'tycho-artifactcomparator' 'sisu-equinox/sisu-equinox-launching' 'tycho-p2/tycho-p2-plugin' 'tycho-lib-detector' 'tycho-compiler-jdt' 'tycho-compiler-plugin' )
for ((i=0; i < ${#xtraBundles[@]}; i++)) ;do
echo ''
echo 'Building ' ${xtraBundles[${i}]} '...'
echo ''
isolateProject ${xtraBundles[${i}]} ${fp2V}
minibuild ${xtraBundles[${i}]} "${xtraDeps[${i}]}" ${xtraExternalDeps[${i}]}
unifyProject ${xtraBundles[${i}]}
done
# TODO: stop minibuild function from hard-coding org/eclipse/tycho GID path
dir=$(pwd)/.m2/org/fedoraproject/p2/org.fedoraproject.p2/
mkdir -p ${dir}
ln -s $(pwd)/.m2/org/eclipse/tycho/org.fedoraproject.p2/${fp2V} ${dir}
for ((i=0; i < ${#bundles[@]}; i++)) ;do
echo ''
echo 'Building ' ${bundles[${i}]} '...'
echo ''
isolateProject ${bundles[${i}]}
minibuild ${bundles[${i}]} "${deps[${i}]}" ${externalDeps[${i}]}
unifyProject ${bundles[${i}]}
done
# Run the build on this maven reactor project
for proj in ${reactorprojs[@]} ; do
isolateProject ${proj}
xmvn -B -o -e -f "${proj}/pom.xml" -Dmaven.repo.local=$(pwd)/.m2 -Dmaven.test.skip=true \
-Dmaven.compiler.source=11 -Dmaven.compiler.target=11 -Dmaven.compiler.release=11 -Dproject.build.sourceEncoding=UTF-8 \
clean install
unifyProject ${proj}
done
# Add org.fedoraproject.p2 to target platform for tycho-bundles-external
extras='bootstrap/extras'
mkdir -p ${extras}
fp2Loc=`find .m2 -name "org.fedoraproject.p2-*.jar"`
cp ${fp2Loc} ${extras}
# Tycho Bundles External (needed for Tycho's OSGi Runtime)
tbeDir='tycho-bundles/tycho-bundles-external'
tbeTargetDir="${tbeDir}/target"
wantedBundles=`sed 's/ fragment=\"true\"//' "${tbeDir}/tycho-bundles-external.product" | sed -n 's/.*<plugin id=\"\(.*\)\"\/>.*/\1/ p'`
mkdir -p ${tbeTargetDir}'/eclipse/plugins'
copyBundles "${wantedBundles}" "${tbeTargetDir}/eclipse/plugins"
pushd ${tbeTargetDir}
echo "#Eclipse Product File
version=${v}
name=org.eclipse.tycho.p2
id=tycho-bundles-external" > 'eclipse/.eclipseproduct'
mkdir -p 'eclipse/configuration'
echo '#Product Runtime Configuration File
osgi.bundles=org.apache.commons.codec,org.apache.commons.logging,org.apache.httpcomponents.httpclient,org.apache.httpcomponents.httpcore,org.eclipse.core.contenttype,org.eclipse.core.jobs,org.eclipse.core.net,org.eclipse.core.runtime@4\:start,org.eclipse.core.runtime.compatibility.registry,org.eclipse.ecf,org.eclipse.ecf.filetransfer,org.eclipse.ecf.identity,org.eclipse.ecf.provider.filetransfer,org.eclipse.ecf.provider.filetransfer.httpclient4,org.eclipse.ecf.provider.filetransfer.httpclient4.ssl,org.eclipse.ecf.provider.filetransfer.ssl,org.eclipse.ecf.ssl,org.eclipse.equinox.app,org.eclipse.equinox.common@2\:start,org.eclipse.equinox.concurrent,org.eclipse.equinox.ds@2\:start,org.eclipse.equinox.frameworkadmin,org.eclipse.equinox.frameworkadmin.equinox,org.eclipse.equinox.launcher,org.eclipse.equinox.p2.artifact.repository,org.eclipse.equinox.p2.core,org.eclipse.equinox.p2.director,org.eclipse.equinox.p2.director.app,org.eclipse.equinox.p2.engine,org.eclipse.equinox.p2.garbagecollector,org.eclipse.equinox.p2.jarprocessor,org.eclipse.equinox.p2.metadata,org.eclipse.equinox.p2.metadata.repository,org.eclipse.equinox.p2.publisher,org.eclipse.equinox.p2.publisher.eclipse,org.eclipse.equinox.p2.repository,org.eclipse.equinox.p2.repository.tools,org.eclipse.equinox.p2.touchpoint.eclipse,org.eclipse.equinox.p2.touchpoint.natives,org.eclipse.equinox.p2.transport.ecf,org.eclipse.equinox.p2.updatesite,org.eclipse.equinox.preferences,org.eclipse.equinox.registry,org.eclipse.equinox.security,org.eclipse.equinox.simpleconfigurator,org.eclipse.equinox.simpleconfigurator.manipulator,org.eclipse.equinox.util,org.eclipse.osgi.services,org.eclipse.osgi.compatibility.state,org.eclipse.tycho.noopsecurity,org.sat4j.core,org.sat4j.pb,org.eclipse.osgi.util,org.apache.felix.scr,org.kxml2,org.xmlpull,org.fedoraproject.p2
osgi.bundles.defaultStartLevel=4
eclipse.product=org.eclipse.equinox.p2.director.app.product
osgi.splashPath=platform\:/base/plugins/org' > 'eclipse/configuration/config.ini'
zip -r "tycho-bundles-external-${v}.zip" 'eclipse'
popd
loc=".m2/org/eclipse/tycho/tycho-bundles-external/${v}"
mkdir -p ${loc}
cp "${tbeTargetDir}/tycho-bundles-external-${v}.zip" ${loc}
cp 'tycho-bundles/tycho-bundles-external/pom.xml' "${loc}/tycho-bundles-external-${v}.pom"
sed -i "s/<equinoxVersion>.*<\/equinoxVersion>/<equinoxVersion>${osgiV}<\/equinoxVersion>/" pom.xml
sed -i "s/<equinoxCompatVersion>.*<\/equinoxCompatVersion>/<equinoxCompatVersion>${osgiCompatV}<\/equinoxCompatVersion>/" pom.xml
# xmvn-p2-installer-plugin needs to find the org.eclipse.osgi bundle
sed -i "s/>\${equinox-version}</>${osgiV}</" fedoraproject-p2/xmvn-p2-installer-plugin/pom.xml

View File

@ -1,25 +0,0 @@
#! /bin/bash
. $(pwd)/tycho-scripts.sh
projLoc=$1
zipLoc=$projLoc/target/*.zip
mfLoc=$2
zipDir=`dirname ${zipLoc}`
zipFile=`basename ${zipLoc}`
tmpDir=${zipDir}/tmp
[ -z "$mfLoc" ] && mfLoc=/dev/null
mkdir -p ${tmpDir}
unzip -d ${tmpDir} ${zipLoc}
wantedBundles=`sed 's/ fragment=\"true\"//' ${projLoc}/*.product | sed -n 's/.*<plugin id=\"\(.*\)\"\/>.*/\1/ p'`
pushd ${tmpDir}
pluginsDir=`find . -type d -name plugins`
pushd ${pluginsDir} && rm -rf *
symlinkBundles "${wantedBundles}"
for b in *; do readlink $b; done >$mfLoc
popd
zip -ry ${zipFile} *
popd
mv ${tmpDir}/${zipFile} ${zipLoc}

View File

@ -1,181 +0,0 @@
#! /bin/bash
function minibuild () {
basedir=$1
src=$(cat "${basedir}/build.properties" | grep 'source..' | cut -d'=' -f2 | sed -e 's/ //g')
output=$(cat "${basedir}/build.properties" | grep 'output..' | cut -d'=' -f2 | sed -e 's/ //g')
bName=$(cat "${basedir}/META-INF/MANIFEST.MF" | grep 'Bundle-SymbolicName:' | sed 's/Bundle-SymbolicName: \([a-zA-Z0-9_.-]*\)\(;\)\?.*/\1/')
artifactId=$(cat "${basedir}/pom.xml" | sed '/<parent>/,/<\/parent>/ d' | grep "<artifactId>" | sed 's/.*<artifactId>\(.*\)<\/artifactId>.*/\1/')
version=$(cat "${basedir}/pom.xml" | grep "<version>" | sed 's/.*<version>\(.*\)<\/version>.*/\1/')
# External (System) dependencies
if [ $# -eq 3 ]; then
mkdir -p "${basedir}/target/externalDeps"
copyBundles $3 "${basedir}/target/externalDeps"
else
mkdir -p "${basedir}/target"
fi
mkdir -p "${basedir}/${output}"
# Compile
cp=
if [ $# -gt 1 ]; then
cp='-classpath '$2':'"${basedir}"'/target/externalDeps/*'
fi
javac -d "${basedir}/${output}" -encoding utf8 --release 11 \
$(for file in `find "${basedir}/${src}" -name "*.java"`; \
do echo -n "${file} "; \
done;) \
${cp}
# Package
pushd ${basedir}
pushd ${output}
classfiles=`for file in $(find . -name "*.class"); do echo -n ' -C '${output} ${file} ; done;`
popd
packagefiles="${classfiles}"
[ -e about.html ] && packagefiles="about.html $packagefiles"
[ -e plugin.properties ] && packagefiles="plugin.properties $packagefiles"
[ -e plugin.xml ] && packagefiles="plugin.xml $packagefiles"
[ -e OSGI-INF ] && packagefiles="OSGI-INF $packagefiles"
jar -cfmv "target/${bName}-${version}.jar" 'META-INF/MANIFEST.MF' ${packagefiles}
popd
# Install
loc=".m2/org/eclipse/tycho/${artifactId}/${version}"
mkdir -p ${loc}
cp "${basedir}/target/${bName}-${version}.jar" ${loc}
cp "${basedir}/pom.xml" "${loc}/${bName}-${version}.pom"
}
function copyBundles () {
# X_SCLS expands to list of currently enabled SCLs, in the order they were enabled, if any
scls="$X_SCLS"
baseLocations=( '/usr/share/java' '/usr/lib/java' '/usr/lib/eclipse' )
osgiLocations=(${baseLocations[@]} ${osgiLocations[@]} )
for scl in ${scls} ; do
osgiLocations=( ${baseLocations[@]/#//opt/rh/${scl}/root} ${osgiLocations[@]} )
done
prefix="$(pwd)/bootstrap"
osgiLocations=( ${osgiLocations[@]/#/${prefix}} )
osgiLocations+=( ${osgiLocations[@]/${prefix}/} )
osgiLocations=( ${prefix}/extras ${osgiLocations[@]} )
wantedBundles=`echo $1 | tr ',' ' '`
destDir=$2
for loc in ${osgiLocations[@]} ; do
for jar in `find ${loc} -name "*.jar" 2>/dev/null`; do
bsn=`readBSN ${jar}`
if [ -n "${bsn}" ]; then
versionline=`unzip -p ${jar} 'META-INF/MANIFEST.MF' | grep 'Bundle-Version:'`
vers=`echo "${versionline}" | sed 's/Bundle-Version: \([a-zA-Z0-9_.-]*\).*/\1/'`
if echo ${wantedBundles} | grep "${bsn}" ; then
cp ${jar} "${destDir}/${bsn}_${vers}.jar"
wantedBundles=`removeFromList "${wantedBundles}" "${bsn}"`
fi
fi
done
done
}
function symlinkBundles () {
# Bootstrap Built Tycho provides some Eclipse bundles
# Prevent non-bootstrap build's de-bundling from symlinking to them
# SCL priority is from right to left.
# X_SCLS expands to list of currently enabled SCLs, in the order they were enabled, if any
scls="$X_SCLS"
baseLocations=( '/usr/share/java/eclipse' '/usr/share/java' '/usr/lib/java' )
osgiLocations=(${baseLocations[@]} ${osgiLocations[@]} )
for scl in ${scls} ; do
osgiLocations=( ${baseLocations[@]/#//opt/rh/${scl}/root} ${osgiLocations[@]} )
done
wantedBundles=`echo $1 | tr ',' ' '`
for loc in ${osgiLocations[@]} ; do
for jar in `find ${loc} -name "*.jar" 2>/dev/null`; do
bsn=`readBSN ${jar}`
if [ -n "${bsn}" ]; then
echo ${wantedBundles} | grep -q "${bsn}"
if [ $? -eq 0 ]; then
ln -s ${jar} "${bsn}.jar"
wantedBundles=`removeFromList "${wantedBundles}" "${bsn}"`
fi
fi
done
done
}
function removeFromList () {
arr=( ${1} )
for (( i=0; i < ${#arr[@]}; i++ )); do
if [ "${arr[${i}]}" = "$2" ]; then
arr[${i}]=
fi
done
echo ${arr[@]}
}
function isolateProject () {
cp $1/pom.xml $1/pom.xml.boot
sed -i -e "/<artifactId>org.eclipse.osgi</ a <version>${osgiV}</version>" \
-e "/<artifactId>org.eclipse.osgi.compatibility.state</ a <version>${osgiCompatV}</version>" \
-e '/<parent>/,/<\/parent>/ d' "$1/pom.xml"
if ! grep -q generate-metadata "$1/pom.xml" ; then
sed -i -e "/<artifactId>plexus-component-metadata</ a <version>1.5.5</version><executions><execution><goals><goal>generate-metadata</goal></goals></execution></executions>" "$1/pom.xml"
fi
if [ $# -eq 2 ]; then
sed -i "/<modelVersion>/ a <groupId>org.eclipse.tycho<\/groupId><version>$2<\/version>" "$1/pom.xml"
else
sed -i "/<modelVersion>/ a <groupId>org.eclipse.tycho<\/groupId><version>${v}<\/version>" "$1/pom.xml"
fi
}
function unifyProject () {
cp $1/pom.xml.boot $1/pom.xml
}
function readBSN () {
bsn=
manEntryPat="^[a-zA-Z-]*:"
foundBSNLine=0
while read line; do
if [ ${foundBSNLine} -eq 1 ]; then
echo ${line} | grep -qE ${manEntryPat}
if [ $? -eq 0 ]; then
break
else
bsn=${bsn}"`echo ${line} | sed 's/\([a-zA-Z0-9_.-]*\)\(;\)\?.*/\1/'`"
fi
fi
echo ${line} | grep -q "Bundle-SymbolicName:"
if [ $? -eq 0 ]; then
bsn=`echo ${line} | grep 'Bundle-SymbolicName:' | sed 's/Bundle-SymbolicName: \([a-zA-Z0-9_.-]*\)\(;\)\?.*/\1/'`
echo ${line} | grep "Bundle-SymbolicName:" | grep -q ";"
if [ $? -eq 0 ]; then
break
fi
foundBSNLine=1
fi
done < <(unzip -p $1 'META-INF/MANIFEST.MF')
echo ${bsn}
}

1271
tycho.spec

File diff suppressed because it is too large Load Diff