/******************************************************************************* * 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 CovCommitDefectsCommand extends CoverityCommand { private static final String command = "cov-commit-defects"; private static final String hostArg = "--host"; private static final String dataPort = "--dataport"; private static final String httpsPort = "--https-port"; private static final String port = "--port"; private static final String streamArg = "--stream"; private static final String userArg = "--user"; private static final String coverity_passphrase = "COVERITY_PASSPHRASE"; private static final String misraOnly = "--misra-only"; private CIMInstance cimInstance; private CIMStream cimStream; private CoverityVersion version; private InvocationAssistance invocationAssistance; public CovCommitDefectsCommand( AbstractBuild<?, ?> build, Launcher launcher, TaskListener listener, CoverityPublisher publisher, String home, EnvVars envVars, CIMStream cimStream, CIMInstance cimInstance, CoverityVersion version) { super(command, build, launcher, listener, publisher, home, envVars); this.cimStream = cimStream; this.cimInstance = cimInstance; this.version = version; if (publisher != null && publisher.getInvocationAssistance() != null) { invocationAssistance = publisher.getInvocationAssistance(); } } @Override protected void prepareCommand() { addHost(); if (cimInstance.getDataPort() != 0){ addSsl(); addDataPort(); addSslConfiguration(cimInstance, version); } else if (cimInstance.isUseSSL()) { addSsl(); addHtppsPort(); addSslConfiguration(cimInstance, version); } else { addPort(); } addStream(); addUserInfo(); addMisraOnly(); addCommitArguments(); listener.getLogger().println("[Coverity] cov-commit-defects command line arguments: " + commandLine.toString()); } @Override protected boolean canExecute() { if (publisher.getInvocationAssistance() == null) { return false; } return true; } private void addHost() { addArgument(hostArg); addArgument(cimInstance.getHost()); } private void addDataPort() { addArgument(dataPort); addArgument(Integer.toString(cimInstance.getDataPort())); } private void addHtppsPort() { addArgument(httpsPort); addArgument(Integer.toString(cimInstance.getPort())); } private void addPort() { addArgument(port); addArgument(Integer.toString(cimInstance.getPort())); } private void addStream() { addArgument(streamArg); addArgument(CoverityUtils.doubleQuote(cimStream.getStream(), invocationAssistance.getUseAdvancedParser())); } private void addUserInfo() { addArgument(userArg); addArgument(cimInstance.getUser()); envVars.put(coverity_passphrase, cimInstance.getPassword()); } private void addMisraOnly() { if (version.compareTo(CoverityVersion.VERSION_JASPER) < 0 && publisher.getInvocationAssistance().getIsUsingMisra()) { addArgument(misraOnly); } } private void addCommitArguments() { if (!StringUtils.isEmpty(invocationAssistance.getCommitArguments())) { try{ addArguments(EnvParser.tokenize(invocationAssistance.getCommitArguments())); }catch(ParseException e) { throw new RuntimeException("ParseException occurred during tokenizing the cov-commit-defect commit arguments."); } } } private void addSsl() { if (version.compareTo(CoverityVersion.VERSION_INDIO) > 0 && cimInstance.isUseSSL()) { addArgument(useSslArg); } } }