/*******************************************************************************
* Copyright (c) 2017 Synopsys, 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:
* Synopsys, Inc - initial implementation and documentation
*******************************************************************************/
package jenkins.plugins.coverity.CoverityTool;
import hudson.EnvVars;
import hudson.Launcher;
import hudson.model.AbstractBuild;
import hudson.model.TaskListener;
import jenkins.plugins.coverity.*;
import org.apache.commons.lang.StringUtils;
public class CovImportScmCommand extends CoverityCommand {
private static final String command = "cov-import-scm";
private static final String scmFlag = "--scm";
private static final String toolFlag = "--tool";
private static final String toolArgsFlag = "--tool-arg";
private static final String commandArgFlag = "--command-arg";
private static final String scmLog = "--log";
private static final String scmFileRegex = "--filename-regex";
private static final String projectRootFlag = "--project-root";
private static final String noScmTool = "none";
private ScmOptionBlock scmOptionBlock;
private boolean useAdvancedParser;
public CovImportScmCommand(AbstractBuild<?, ?> build, Launcher launcher, TaskListener listener, CoverityPublisher publisher, String home, EnvVars envVars) {
super(command, build, launcher, listener, publisher, home, envVars);
scmOptionBlock = publisher.getScmOptionBlock();
if (publisher.getInvocationAssistance() != null){
useAdvancedParser = publisher.getInvocationAssistance().getUseAdvancedParser();
}
}
@Override
protected void prepareCommand() {
addScmTool();
addScmToolArguments();
addScmCommandArguments();
addLogFileLocation();
addFileRegex();
if (scmOptionBlock.getScmSystem().equalsIgnoreCase("accurev")) {
addAccurevProjectRoot();
}
else if (scmOptionBlock.getScmSystem().equalsIgnoreCase("perforce")
|| scmOptionBlock.getScmSystem().equalsIgnoreCase("perforce2009")) {
addP4port();
}
addScmAdditionalCommand();
listener.getLogger().println("[Coverity] cov-import-scm command line arguments: " + commandLine.toString());
}
@Override
protected boolean canExecute() {
if (scmOptionBlock == null || scmOptionBlock.getScmSystem().equalsIgnoreCase(noScmTool)) {
return false;
}
return true;
}
private void addScmTool() {
addArgument(scmFlag);
addArgument(scmOptionBlock.getScmSystem());
if(scmOptionBlock.getCustomTestTool() != null) {
addArgument(toolFlag);
addArgument(scmOptionBlock.getCustomTestTool());
}
}
private void addScmToolArguments() {
if(scmOptionBlock.getScmToolArguments() != null){
addArgument(toolArgsFlag);
addArgument(CoverityUtils.doubleQuote(scmOptionBlock.getScmToolArguments(), useAdvancedParser));
}
}
private void addScmCommandArguments() {
if(scmOptionBlock.getScmCommandArgs() != null){
addArgument(commandArgFlag);
addArgument(CoverityUtils.doubleQuote(scmOptionBlock.getScmCommandArgs(), useAdvancedParser));
}
}
private void addLogFileLocation() {
if(scmOptionBlock.getLogFileLoc() != null){
addArgument(scmLog);
addArgument(scmOptionBlock.getLogFileLoc());
}
}
private void addFileRegex() {
if(scmOptionBlock.getFileRegex() != null){
addArgument(scmFileRegex);
addArgument(scmOptionBlock.getFileRegex());
}
}
private void addAccurevProjectRoot() {
// Adding accurev's root repo, which is optional
if(scmOptionBlock.getAccRevRepo() != null){
addArgument(projectRootFlag);
addArgument(scmOptionBlock.getAccRevRepo());
}
}
private void addP4port() {
if(!StringUtils.isEmpty(scmOptionBlock.getP4Port())){
envVars.put("P4PORT",CoverityUtils.evaluateEnvVars(scmOptionBlock.getP4Port(), envVars, useAdvancedParser));
}
}
private void addScmAdditionalCommand() {
try{
if(scmOptionBlock.getScmAdditionalCmd() != null) {
addArguments(EnvParser.tokenize(scmOptionBlock.getScmAdditionalCmd()));
}
}catch(ParseException e) {
throw new RuntimeException("ParseException occurred during tokenizing the cov import scm additional command.");
}
}
}