private boolean useChildFirstClassLoader;
private String basePlugin;
private boolean core;
+ private String implementationBuild;
private DefaultPluginMetadata() {
}
return this;
}
+ public String getImplementationBuild() {
+ return implementationBuild;
+ }
+
+ public DefaultPluginMetadata setImplementationBuild(String implementationBuild) {
+ this.implementationBuild = implementationBuild;
+ return this;
+ }
+
public boolean isOldManifest() {
return !hasKey() && hasMainClass();
}
metadata.setPathsToInternalDeps(manifest.getDependencies());
metadata.setUseChildFirstClassLoader(manifest.isUseChildFirstClassLoader());
metadata.setBasePlugin(manifest.getBasePlugin());
+ metadata.setImplementationBuild(manifest.getImplementationBuild());
metadata.setCore(isCore);
if (metadata.isOldManifest()) {
completeDeprecatedMetadata(metadata);
.setVersion("1.1")
.setSonarVersion("3.0")
.setUseChildFirstClassLoader(true)
- .setCore(false);
+ .setCore(false)
+ .setImplementationBuild("abcdef");
assertThat(metadata.getKey()).isEqualTo("checkstyle");
assertThat(metadata.getLicense()).isEqualTo("LGPL");
assertThat(metadata.getBasePlugin()).isNull();
assertThat(metadata.getFile()).isNotNull();
assertThat(metadata.getDeployedFiles()).isEmpty();
+ assertThat(metadata.getImplementationBuild()).isEqualTo("abcdef");
}
@Test
@Test
public void shouldExtractMetadata() {
- DefaultPluginMetadata metadata = extractor.extractMetadata(getFile("sonar-checkstyle-plugin-2.8.jar"), true);
+ DefaultPluginMetadata metadata = extractor.extractMetadata(getFile("sonar-cobertura-plugin-3.1.1.jar"), true);
- assertThat(metadata.getKey()).isEqualTo("checkstyle");
+ assertThat(metadata.getKey()).isEqualTo("cobertura");
assertThat(metadata.getBasePlugin()).isNull();
- assertThat(metadata.getName()).isEqualTo("Checkstyle");
+ assertThat(metadata.getName()).isEqualTo("Cobertura");
assertThat(metadata.isCore()).isEqualTo(true);
- assertThat(metadata.getFile().getName()).isEqualTo("sonar-checkstyle-plugin-2.8.jar");
- assertThat(metadata.getVersion()).isEqualTo("2.8");
+ assertThat(metadata.getFile().getName()).isEqualTo("sonar-cobertura-plugin-3.1.1.jar");
+ assertThat(metadata.getVersion()).isEqualTo("3.1.1");
+ assertThat(metadata.getImplementationBuild()).isEqualTo("b9283404030db9ce1529b1fadfb98331686b116d");
}
@Test
package org.sonar.server.platform;
import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Joiner;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.sonar.api.CoreProperties;
import org.sonar.api.config.Settings;
import org.sonar.api.platform.Server;
import java.util.Properties;
public final class ServerImpl extends Server {
+ private static final Logger LOG = LoggerFactory.getLogger(ServerImpl.class);
+ private final Settings settings;
+ private final Date startedAt;
+ private final String buildProperties;
+ private final String pomProperties;
private String id;
private String version;
- private final Date startedAt;
- private Settings settings;
- private final String manifest;
+ private String implementationBuild;
public ServerImpl(Settings settings) {
- this(settings, "/META-INF/maven/org.codehaus.sonar/sonar-plugin-api/pom.properties");
+ this(settings, "/build.properties", "/META-INF/maven/org.codehaus.sonar/sonar-plugin-api/pom.properties");
}
@VisibleForTesting
- ServerImpl(Settings settings, String manifest) {
+ ServerImpl(Settings settings, String buildProperties, String pomProperties) {
this.settings = settings;
this.startedAt = new Date();
- this.manifest = manifest;
+ this.buildProperties = buildProperties;
+ this.pomProperties = pomProperties;
}
public void start() {
try {
id = new SimpleDateFormat("yyyyMMddHHmmss").format(startedAt);
- version = loadVersionFromManifest(manifest);
+
+ version = read(pomProperties).getProperty("version", "");
+ implementationBuild = read(buildProperties).getProperty("Implementation-Build");
+
if (StringUtils.isBlank(version)) {
throw new ServerStartException("Unknown Sonar version");
}
+ LOG.info("Sonar {}", Joiner.on(" / ").skipNulls().join("Server", version, implementationBuild));
+
} catch (IOException e) {
throw new ServerStartException("Can not load metadata", e);
}
return version;
}
+ public String getImplementationBuild() {
+ return implementationBuild;
+ }
+
@Override
public Date getStartedAt() {
return startedAt;
}
- private String loadVersionFromManifest(String pomFilename) throws IOException {
- InputStream pomFileStream = getClass().getResourceAsStream(pomFilename);
- try {
- return readVersion(pomFileStream);
+ private static Properties read(String filename) throws IOException {
+ Properties properties = new Properties();
+ InputStream stream = null;
+ try {
+ stream = ServerImpl.class.getResourceAsStream(filename);
+ if (stream != null) {
+ properties.load(stream);
+ }
} finally {
- IOUtils.closeQuietly(pomFileStream);
+ IOUtils.closeQuietly(stream);
}
- }
- protected static String readVersion(InputStream pomFileStream) throws IOException {
- String result = null;
- if (pomFileStream != null) {
- Properties pomProp = new Properties();
- pomProp.load(pomFileStream);
- result = pomProp.getProperty("version");
- }
- return StringUtils.defaultIfEmpty(result, "");
+ return properties;
}
-
@Override
public String getURL() {
return null;
*/
package org.sonar.server.plugins;
+import com.google.common.base.Joiner;
+
import com.google.common.base.Preconditions;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
}
private void deploy(DefaultPluginMetadata plugin) {
- LOG.debug("Deploy plugin " + plugin);
+ LOG.info("Deploy plugin {}", Joiner.on(" / ").skipNulls().join(plugin.getName(), plugin.getVersion(), plugin.getImplementationBuild()));
Preconditions.checkState(plugin.isCompatibleWith(server.getVersion()),
"Plugin %s needs a more recent version of Sonar than %s. At least %s is expected",
--- /dev/null
+Implementation-Build=${buildNumber}
+Build-Time=${timestamp}
\ No newline at end of file
@Test
public void alwaysReturnTheSameValues() {
- ServerImpl server = new ServerImpl(new Settings(), "/org/sonar/server/platform/ServerImplTest/pom-with-version.properties");
+ ServerImpl server = new ServerImpl(new Settings(), "", "/org/sonar/server/platform/ServerImplTest/pom-with-version.properties");
server.start();
assertThat(server.getId()).isNotNull();
@Test
public void getVersionFromFile() {
- ServerImpl server = new ServerImpl(new Settings(), "/org/sonar/server/platform/ServerImplTest/pom-with-version.properties");
+ ServerImpl server = new ServerImpl(new Settings(), "", "/org/sonar/server/platform/ServerImplTest/pom-with-version.properties");
server.start();
assertThat(server.getVersion()).isEqualTo("1.0");
}
+ @Test
+ public void getImplementationBuildFromManifest() {
+ ServerImpl server = new ServerImpl(new Settings(),
+ "/org/sonar/server/platform/ServerImplTest/build.properties",
+ "/org/sonar/server/platform/ServerImplTest/pom-with-version.properties");
+ server.start();
+
+ assertThat(server.getImplementationBuild()).isEqualTo("0b9545a8b74aca473cb776275be4dc93a327c363");
+ }
+
@Test
public void testFileWithNoVersion() {
exception.expect(ServerStartException.class);
exception.expectMessage("Unknown Sonar version");
- ServerImpl server = new ServerImpl(new Settings(), "/org/sonar/server/platform/ServerImplTest/pom-without-version.properties");
+ ServerImpl server = new ServerImpl(new Settings(), "", "/org/sonar/server/platform/ServerImplTest/pom-without-version.properties");
server.start();
}
exception.expect(ServerStartException.class);
exception.expectMessage("Unknown Sonar version");
- ServerImpl server = new ServerImpl(new Settings(), "/org/sonar/server/platform/ServerImplTest/pom-with-empty-version.properties");
+ ServerImpl server = new ServerImpl(new Settings(), "", "/org/sonar/server/platform/ServerImplTest/pom-with-empty-version.properties");
server.start();
}
exception.expect(ServerStartException.class);
exception.expectMessage("Unknown Sonar version");
- ServerImpl server = new ServerImpl(new Settings(), "/org/sonar/server/platform/ServerImplTest/unknown-file.properties");
+ ServerImpl server = new ServerImpl(new Settings(), "", "/org/sonar/server/platform/ServerImplTest/unknown-file.properties");
server.start();
}
--- /dev/null
+Implementation-Build=0b9545a8b74aca473cb776275be4dc93a327c363
+Build-Time=1342455258749
\ No newline at end of file