001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: *
017: */
018:
019: package org.apache.tools.ant.taskdefs.optional.clearcase;
020:
021: import org.apache.tools.ant.BuildException;
022: import org.apache.tools.ant.Project;
023: import org.apache.tools.ant.taskdefs.Execute;
024: import org.apache.tools.ant.types.Commandline;
025:
026: /**
027: * Performs ClearCase UnCheckout command.
028: *
029: * <p>
030: * The following attributes are interpreted:
031: * <table border="1">
032: * <tr>
033: * <th>Attribute</th>
034: * <th>Values</th>
035: * <th>Required</th>
036: * </tr>
037: * <tr>
038: * <td>viewpath</td>
039: * <td>Path to the ClearCase view file or directory that the command will operate on</td>
040: * <td>No</td>
041: * <tr>
042: * <tr>
043: * <td>keepcopy</td>
044: * <td>Specifies whether to keep a copy of the file with a .keep extension or not</td>
045: * <td>No</td>
046: * <tr>
047: * <tr>
048: * <td>failonerr</td>
049: * <td>Throw an exception if the command fails. Default is true</td>
050: * <td>No</td>
051: * <tr>
052: * </table>
053: *
054: */
055: public class CCUnCheckout extends ClearCase {
056: private boolean mKeep = false;
057:
058: /**
059: * Executes the task.
060: * <p>
061: * Builds a command line to execute cleartool and then calls Exec's run method
062: * to execute the command line.
063: * @throws BuildException if the command fails and failonerr is set to true
064: */
065: public void execute() throws BuildException {
066: Commandline commandLine = new Commandline();
067: Project aProj = getProject();
068: int result = 0;
069:
070: // Default the viewpath to basedir if it is not specified
071: if (getViewPath() == null) {
072: setViewPath(aProj.getBaseDir().getPath());
073: }
074:
075: // build the command line from what we got the format is
076: // cleartool uncheckout [options...] [viewpath ...]
077: // as specified in the CLEARTOOL.EXE help
078: commandLine.setExecutable(getClearToolCommand());
079: commandLine.createArgument().setValue(COMMAND_UNCHECKOUT);
080:
081: checkOptions(commandLine);
082:
083: if (!getFailOnErr()) {
084: getProject().log(
085: "Ignoring any errors that occur for: "
086: + getViewPathBasename(),
087: Project.MSG_VERBOSE);
088: }
089: result = run(commandLine);
090: if (Execute.isFailure(result) && getFailOnErr()) {
091: String msg = "Failed executing: " + commandLine.toString();
092: throw new BuildException(msg, getLocation());
093: }
094: }
095:
096: /**
097: * Check the command line options.
098: */
099: private void checkOptions(Commandline cmd) {
100: // ClearCase items
101: if (getKeepCopy()) {
102: // -keep
103: cmd.createArgument().setValue(FLAG_KEEPCOPY);
104: } else {
105: // -rm
106: cmd.createArgument().setValue(FLAG_RM);
107: }
108:
109: // viewpath
110: cmd.createArgument().setValue(getViewPath());
111: }
112:
113: /**
114: * If true, keep a copy of the file with a .keep extension.
115: *
116: * @param keep the status to set the flag to
117: */
118: public void setKeepCopy(boolean keep) {
119: mKeep = keep;
120: }
121:
122: /**
123: * Get keepcopy flag status
124: *
125: * @return boolean containing status of keep flag
126: */
127: public boolean getKeepCopy() {
128: return mKeep;
129: }
130:
131: /**
132: * -keep flag -- keep a copy of the file with .keep extension
133: */
134: public static final String FLAG_KEEPCOPY = "-keep";
135: /**
136: * -rm flag -- remove the copy of the file
137: */
138: public static final String FLAG_RM = "-rm";
139:
140: }
|