use of org.eclipse.tycho.p2.target.facade.TargetDefinition.Location in project tycho by eclipse.
the class TargetDefinitionFileTest method testIncludeSource.
@Test
public void testIncludeSource() throws Exception {
List<? extends Location> locations = readTarget("includeSource.target", IncludeSourceMode.honor).getLocations();
InstallableUnitLocation locationWithSources = (InstallableUnitLocation) locations.get(0);
InstallableUnitLocation locationWithoutSources = (InstallableUnitLocation) locations.get(1);
InstallableUnitLocation locationWithoutIncludeSourceAttribute = (InstallableUnitLocation) locations.get(2);
assertEquals(true, locationWithSources.includeSource());
assertEquals(false, locationWithoutSources.includeSource());
assertEquals(false, locationWithoutIncludeSourceAttribute.includeSource());
}
use of org.eclipse.tycho.p2.target.facade.TargetDefinition.Location in project tycho by eclipse.
the class TargetDefinitionUtil method makeURLsAbsolute.
/**
* Resolves relative URLs in the given target definition file, with the specified resource as
* base URL.
*
* @param targetDefinitionFile
* The target definition file in which relative URLs shall be replaced.
* @param base
* @throws IOException
*/
public static void makeURLsAbsolute(File targetDefinitionFile, File relocationBasedir) throws IOException {
TargetDefinitionFile platform = TargetDefinitionFile.read(targetDefinitionFile, null);
List<? extends TargetDefinition.Location> locations = platform.getLocations();
for (TargetDefinition.Location location : locations) {
List<Repository> repositories = ((IULocation) location).getRepositoryImpls();
for (Repository repository : repositories) {
makeRepositoryElementAbsolute(repository, relocationBasedir);
}
}
TargetDefinitionFile.write(platform, targetDefinitionFile);
}
use of org.eclipse.tycho.p2.target.facade.TargetDefinition.Location in project tycho by eclipse.
the class TargetDefinitionUtil method setRepositoryURLs.
/**
* Overwrites all repository URLs in the target file.
*/
public static void setRepositoryURLs(File targetDefinitionFile, String url) throws IOException {
TargetDefinitionFile platform = TargetDefinitionFile.read(targetDefinitionFile, null);
for (TargetDefinition.Location location : platform.getLocations()) {
for (Repository repository : ((IULocation) location).getRepositoryImpls()) {
repository.setLocation(url);
}
}
TargetDefinitionFile.write(platform, targetDefinitionFile);
}
use of org.eclipse.tycho.p2.target.facade.TargetDefinition.Location in project tycho by eclipse.
the class BaselineServiceImpl method getProjectBaseline.
@Override
public Map<String, IP2Artifact> getProjectBaseline(Collection<MavenRepositoryLocation> baselineLocations, Map<String, IP2Artifact> reactor, File target) {
// baseline repository may contain artifacts with the same id/version but different contents
// compared to what is installed (or cached) locally.
// current local repository layout does not track per-repository artifacts and does not allow
// multiple different artifacts with same id/version.
CompositeMetadataRepository baselineUnits;
CompositeArtifactRepository baselineArtifacts;
try {
IProvisioningAgent remoteAgent = remoteAgentManager.getProvisioningAgent();
IRepositoryIdManager remoteRepositoryIdManager = (IRepositoryIdManager) remoteAgent.getService(IRepositoryIdManager.SERVICE_NAME);
IMetadataRepositoryManager remoteMetadataRepositoryManager = (IMetadataRepositoryManager) remoteAgent.getService(IMetadataRepositoryManager.SERVICE_NAME);
IArtifactRepositoryManager remoteArtifactRepositoryManager = (IArtifactRepositoryManager) remoteAgent.getService(IArtifactRepositoryManager.SERVICE_NAME);
baselineUnits = CompositeMetadataRepository.createMemoryComposite(remoteAgent);
baselineArtifacts = CompositeArtifactRepository.createMemoryComposite(remoteAgent);
for (MavenRepositoryLocation location : baselineLocations) {
URI url = location.getURL();
try {
remoteRepositoryIdManager.addMapping(location.getId(), url);
// TODO offline mode https://bugs.eclipse.org/bugs/show_bug.cgi?id=337022
// not strictly necessary, but makes sure metadata download is visible in the console/log
remoteMetadataRepositoryManager.loadRepository(url, monitor);
remoteArtifactRepositoryManager.loadRepository(url, monitor);
baselineUnits.addChild(url);
baselineArtifacts.addChild(url);
} catch (ProvisionException e) {
// baseline repository may not exist yet
mavenContext.getLogger().warn(e.getMessage(), e);
}
}
} catch (ProvisionException e) {
throw new RuntimeException(e);
}
Map<String, IP2Artifact> result = new LinkedHashMap<>();
for (Map.Entry<String, IP2Artifact> reactorArtifact : reactor.entrySet()) {
IArtifactDescriptor descriptor = (IArtifactDescriptor) reactorArtifact.getValue().getArtifactDescriptor();
IArtifactDescriptor baselineDescriptor = getBaselineDescriptor(baselineArtifacts, descriptor);
if (baselineDescriptor == null) {
continue;
}
IArtifactKey baslineKey = baselineDescriptor.getArtifactKey();
String format = baselineDescriptor.getProperty(IArtifactDescriptor.FORMAT);
File baselineArtifact = new File(target, baslineKey.getClassifier() + "/" + baslineKey.getId() + "/" + baslineKey.getVersion() + (format != null ? "." + format : ""));
try {
baselineArtifact.getParentFile().mkdirs();
OutputStream os = new BufferedOutputStream(new FileOutputStream(baselineArtifact));
try {
IStatus status = baselineArtifacts.getRawArtifact(baselineDescriptor, os, monitor);
if (status.matches(IStatus.ERROR | IStatus.CANCEL)) {
String repository = baselineDescriptor.getRepository().getLocation().toString();
String artifactId = baselineDescriptor.getArtifactKey().getId();
String artifactVersion = baselineDescriptor.getArtifactKey().getVersion().toString();
String statusMessage = StatusTool.toLogMessage(status);
throw new RuntimeException(String.format("Error trying to download %s version %s from %s:\n%s", artifactId, artifactVersion, repository, statusMessage), StatusTool.findException(status));
}
} finally {
try {
os.close();
} catch (IOException e) {
// ignored
}
}
} catch (IOException e) {
throw new RuntimeException(e);
}
List<IInstallableUnit> units = new ArrayList<>();
for (Object _unit : reactorArtifact.getValue().getInstallableUnits()) {
IInstallableUnit unit = (IInstallableUnit) _unit;
IInstallableUnit baselineUnit = getBaselineUnit(baselineUnits, unit.getId(), unit.getVersion());
if (baselineUnit != null) {
units.add(baselineUnit);
}
}
result.put(reactorArtifact.getKey(), new P2Artifact(baselineArtifact, units, descriptor));
}
return !result.isEmpty() ? result : null;
}
use of org.eclipse.tycho.p2.target.facade.TargetDefinition.Location in project tycho by eclipse.
the class TargetDefinitionResolver method resolveContentWithExceptions.
TargetDefinitionContent resolveContentWithExceptions(TargetDefinition definition) throws TargetDefinitionSyntaxException, TargetDefinitionResolutionException, ResolverException {
List<URI> artifactRepositories = new ArrayList<>();
ResolverRun resolverRun = new ResolverRun();
for (Location locationDefinition : definition.getLocations()) {
if (locationDefinition instanceof InstallableUnitLocation) {
resolverRun.addLocation((InstallableUnitLocation) locationDefinition);
for (Repository repository : ((InstallableUnitLocation) locationDefinition).getRepositories()) {
artifactRepositories.add(repository.getLocation());
}
} else {
logger.warn("Target location type '" + locationDefinition.getTypeDescription() + "' is not supported");
}
}
if (definition.hasIncludedBundles()) {
// the bundle selection list is currently not taken into account (see bug 373776)
logger.warn("De-selecting bundles in a target definition file is not supported. See http://wiki.eclipse.org/Tycho_Messages_Explained#Target_File_Include_Bundles for alternatives.");
}
return new TargetDefinitionContent(resolverRun.resolve(), artifactRepositories);
}
Aggregations