blob: 13a1678014abfc9bc074ad173c1dd9af39b96928 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010, 2014 Sonatype Inc. and others.
* 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:
* Igor Fedorenko - initial API and implementation
*******************************************************************************/
package org.eclipse.tycho.versionbump;
import java.io.File;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.project.MavenProject;
import org.eclipse.tycho.ArtifactType;
import org.eclipse.tycho.artifacts.IllegalArtifactReferenceException;
import org.eclipse.tycho.core.p2.P2ArtifactRepositoryLayout;
import org.eclipse.tycho.core.resolver.shared.MavenRepositoryLocation;
import org.eclipse.tycho.model.PluginRef;
import org.eclipse.tycho.model.ProductConfiguration;
import org.eclipse.tycho.p2.resolver.facade.P2ResolutionResult;
/**
* Quick&dirty way to update .product file to use latest versions of IUs available from specified
* metadata repositories.
*/
@Mojo(name = "update-product")
public class UpdateProductMojo extends AbstractUpdateMojo {
@Parameter(defaultValue = "${project.artifactId}.product")
private File productFile;
@Parameter(property = "project")
private MavenProject project;
@Override
protected void doUpdate() throws IOException, URISyntaxException {
for (ArtifactRepository repository : project.getRemoteArtifactRepositories()) {
URI uri = new URL(repository.getUrl()).toURI();
if (repository.getLayout() instanceof P2ArtifactRepositoryLayout) {
resolutionContext.addP2Repository(new MavenRepositoryLocation(repository.getId(), uri));
}
}
ProductConfiguration product = ProductConfiguration.read(productFile);
for (PluginRef plugin : product.getPlugins()) {
try {
p2.addDependency(ArtifactType.TYPE_ECLIPSE_PLUGIN, plugin.getId(), "0.0.0");
} catch (IllegalArtifactReferenceException e) {
// shouldn't happen for the constant type and version
throw new RuntimeException(e);
}
}
P2ResolutionResult result = p2.resolveMetadata(resolutionContext, executionEnvironment);
Map<String, String> ius = new HashMap<>();
for (P2ResolutionResult.Entry entry : result.getArtifacts()) {
ius.put(entry.getId(), entry.getVersion());
}
for (PluginRef plugin : product.getPlugins()) {
String version = ius.get(plugin.getId());
if (version != null) {
plugin.setVersion(version);
}
}
ProductConfiguration.write(product, productFile);
}
@Override
protected File getFileToBeUpdated() {
return productFile;
}
}