package hudson.plugins.accurev.delegates;
import hudson.EnvVars;
import hudson.model.Run;
import hudson.plugins.accurev.AccurevLauncher;
import hudson.plugins.accurev.AccurevSCM;
import hudson.plugins.accurev.cmd.Command;
import hudson.util.ArgumentListBuilder;
import org.apache.commons.lang.StringUtils;
import java.io.File;
import java.io.IOException;
import java.util.logging.Logger;
/**
* @author raymond
*/
public class SnapshotDelegate extends StreamDelegate {
private static final Logger logger = Logger.getLogger(SnapshotDelegate.class.getName());
private static final String DEFAULT_SNAPSHOT_NAME_FORMAT = "${JOB_NAME}_${BUILD_NUMBER}";
private String snapshotName;
public SnapshotDelegate(AccurevSCM scm) {
super(scm);
}
private String calculateSnapshotName(final Run<?, ?> build) throws IOException, InterruptedException {
String snapshotNameFormat = scm.getSnapshotNameFormat();
final String actualFormat = StringUtils.isBlank(snapshotNameFormat) ? DEFAULT_SNAPSHOT_NAME_FORMAT : snapshotNameFormat.trim();
final EnvVars environment = build.getEnvironment(listener);
return environment.expand(actualFormat);
}
@Override
protected boolean checkout(Run<?, ?> build, File changeLogFile) throws IOException, InterruptedException {
snapshotName = calculateSnapshotName(build);
listener.getLogger().println("Creating snapshot: " + snapshotName + "...");
build.getEnvironment(listener).put("ACCUREV_SNAPSHOT", snapshotName);
// snapshot command: accurev mksnap -H <server> -s <snapshotName> -b <backing_stream> -t now
final ArgumentListBuilder mksnapcmd = new ArgumentListBuilder();
mksnapcmd.add("mksnap");
Command.addServer(mksnapcmd, server);
mksnapcmd.add("-s");
mksnapcmd.add(snapshotName);
mksnapcmd.add("-b");
mksnapcmd.add(localStream);
mksnapcmd.add("-t");
mksnapcmd.add("now");
if (!AccurevLauncher.runCommand("Create snapshot command", scm.getAccurevTool(), launcher, mksnapcmd, scm.getOptionalLock(),
accurevEnv, jenkinsWorkspace, listener, logger, true)) {
return false;
}
listener.getLogger().println("Snapshot created successfully.");
return true;
}
@Override
protected boolean isSteamColorEnabled() {
return false;
}
@Override
protected String getPopulateFromMessage() {
return "from snapshot";
}
@Override
protected String getPopulateStream() {
return snapshotName;
}
}