/******************************************************************************* * 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 com.coverity.ws.v9.CovRemoteServiceException_Exception; import com.coverity.ws.v9.SnapshotIdDataObj; import hudson.EnvVars; import hudson.Launcher; import hudson.model.AbstractBuild; import hudson.model.TaskListener; import jenkins.plugins.coverity.*; import com.coverity.ws.v9.StreamIdDataObj; import com.coverity.ws.v9.SnapshotFilterSpecDataObj; import java.io.IOException; import java.util.List; public class CovManageHistoryCommand extends CoverityCommand { private static final String command = "cov-manage-history"; private static final String downloadArg = "download"; private static final String hostArg = "--host"; private static final String portArg = "--port"; private static final String streamArg = "--stream"; private static final String userArg = "--user"; private static final String mergeArg = "--merge"; private static final String coverity_passphrase = "COVERITY_PASSPHRASE"; private CIMInstance cimInstance; private CIMStream cimStream; private CoverityVersion version; public CovManageHistoryCommand( 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; } @Override protected void prepareCommand() { addArgument(downloadArg); addCimStreamInfo(); if (cimInstance.isUseSSL()){ addArgument(useSslArg); } addSslConfiguration(cimInstance, version); addUserInfo(); addArgument(mergeArg); listener.getLogger().println("[Coverity] cov-manage-history command line arguments: " + commandLine.toString()); } @Override protected boolean canExecute() { TaOptionBlock taOptionBlock = publisher.getTaOptionBlock(); if (taOptionBlock == null || !taOptionBlock.getCovHistoryCheckbox()) { return false; } if (!checkSnapshot()){ return false; } return true; } private void addCimStreamInfo(){ addArgument(hostArg); addArgument(cimInstance.getHost()); addArgument(portArg); addArgument(Integer.toString(cimInstance.getPort())); addArgument(streamArg); addArgument(CoverityUtils.doubleQuote(cimStream.getStream(), publisher.getInvocationAssistance().getUseAdvancedParser())); } private void addUserInfo() { addArgument(userArg); addArgument(cimInstance.getUser()); envVars.put(coverity_passphrase, cimInstance.getPassword()); } private boolean checkSnapshot() { StreamIdDataObj streamId = new StreamIdDataObj(); streamId.setName(cimStream.getStream()); SnapshotFilterSpecDataObj filter = new SnapshotFilterSpecDataObj(); try{ List<SnapshotIdDataObj> snapshotList = cimInstance.getConfigurationService().getSnapshotsForStream(streamId, filter); if (snapshotList == null || snapshotList.isEmpty()) { return false; } return true; }catch(Exception e) { launcher.getListener().getLogger().println("Error occurred while checking the stream \"" + cimStream.getStream() + "\" has any snapshots"); return false; } } }