/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ package org.apache.tools.ant.taskdefs.optional.clearcase; import java.io.File; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Project; import org.apache.tools.ant.Task; import org.apache.tools.ant.taskdefs.ExecTask; import org.apache.tools.ant.taskdefs.Execute; import org.apache.tools.ant.taskdefs.LogStreamHandler; import org.apache.tools.ant.types.Commandline; import org.apache.tools.ant.util.FileUtils; /** * A base class for creating tasks for executing commands on ClearCase. *
* The class extends the 'exec' task as it operates by executing the cleartool program * supplied with ClearCase. By default the task expects the cleartool executable to be * in the path, * you can override this be specifying the cleartooldir attribute. *
** This class provides set and get methods for the 'viewpath' and 'objselect' * attribute. It also contains constants for the flags that can be passed to * cleartool. *
* */ public abstract class ClearCase extends Task { private String mClearToolDir = ""; private String mviewPath = null; private String mobjSelect = null; private static int pcnt = 0; private boolean mFailonerr = true; /** * Set the directory where the cleartool executable is located. * * @param dir the directory containing the cleartool executable */ public final void setClearToolDir(String dir) { mClearToolDir = FileUtils.translatePath(dir); } /** * Builds and returns the command string to execute cleartool * * @return String containing path to the executable */ protected final String getClearToolCommand() { String toReturn = mClearToolDir; if (!toReturn.equals("") && !toReturn.endsWith("/")) { toReturn += "/"; } toReturn += CLEARTOOL_EXE; return toReturn; } /** * Set the path to the item in a ClearCase view to operate on. * * @param viewPath Path to the view directory or file */ public final void setViewPath(String viewPath) { mviewPath = viewPath; } /** * Get the path to the item in a clearcase view * * @return mviewPath */ public String getViewPath() { return mviewPath; } /** * Get the basename path of the item in a clearcase view * * @return basename */ public String getViewPathBasename() { return (new File(mviewPath)).getName(); } /** * Set the object to operate on. * * @param objSelect object to operate on */ public final void setObjSelect(String objSelect) { mobjSelect = objSelect; } /** * Get the object to operate on * * @return mobjSelect */ public String getObjSelect() { return mobjSelect; } /** * Execute the given command are return success or failure * @param cmd command line to execute * @return the exit status of the subprocess orINVALID
*/
protected int run(Commandline cmd) {
try {
Project aProj = getProject();
Execute exe
= new Execute(new LogStreamHandler(this, Project.MSG_INFO, Project.MSG_WARN));
exe.setAntRun(aProj);
exe.setWorkingDirectory(aProj.getBaseDir());
exe.setCommandline(cmd.getCommandline());
return exe.execute();
} catch (java.io.IOException e) {
throw new BuildException(e, getLocation());
}
}
/**
* Execute the given command, and return it's output
* @param cmdline command line to execute
* @return output of the command line
*/
protected String runS(Commandline cmdline) {
String outV = "opts.cc.runS.output" + pcnt++;
ExecTask exe = new ExecTask(this);
Commandline.Argument arg = exe.createArg();
exe.setExecutable(cmdline.getExecutable());
arg.setLine(Commandline.toString(cmdline.getArguments()));
exe.setOutputproperty(outV);
exe.execute();
return getProject().getProperty(outV);
}
/**
* If true, command will throw an exception on failure.
*
* @param failonerr the status to set the flag to
* @since ant 1.6.1
*/
public void setFailOnErr(boolean failonerr) {
mFailonerr = failonerr;
}
/**
* Get failonerr flag status
*
* @return boolean containing status of failonerr flag
* @since ant 1.6.1
*/
public boolean getFailOnErr() {
return mFailonerr;
}
/**
* Constant for the thing to execute
*/
private static final String CLEARTOOL_EXE = "cleartool";
/**
* The 'Update' command
*/
public static final String COMMAND_UPDATE = "update";
/**
* The 'Checkout' command
*/
public static final String COMMAND_CHECKOUT = "checkout";
/**
* The 'Checkin' command
*/
public static final String COMMAND_CHECKIN = "checkin";
/**
* The 'UndoCheckout' command
*/
public static final String COMMAND_UNCHECKOUT = "uncheckout";
/**
* The 'Lock' command
*/
public static final String COMMAND_LOCK = "lock";
/**
* The 'Unlock' command
*/
public static final String COMMAND_UNLOCK = "unlock";
/**
* The 'Mkbl' command
*/
public static final String COMMAND_MKBL = "mkbl";
/**
* The 'Mklabel' command
*/
public static final String COMMAND_MKLABEL = "mklabel";
/**
* The 'Mklbtype' command
*/
public static final String COMMAND_MKLBTYPE = "mklbtype";
/**
* The 'Rmtype' command
*/
public static final String COMMAND_RMTYPE = "rmtype";
/**
* The 'LsCheckout' command
*/
public static final String COMMAND_LSCO = "lsco";
/**
* The 'Mkelem' command
*/
public static final String COMMAND_MKELEM = "mkelem";
/**
* The 'Mkattr' command
*/
public static final String COMMAND_MKATTR = "mkattr";
/**
* The 'Mkdir' command
*/
public static final String COMMAND_MKDIR = "mkdir";
}