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: * Portions of this software are based upon public domain software
020: * originally written at the National Center for Supercomputing Applications,
021: * University of Illinois, Urbana-Champaign.
022: */
023:
024: package org.apache.tools.ant.taskdefs.optional.perforce;
025:
026: import org.apache.tools.ant.BuildException;
027: import org.apache.tools.ant.Project;
028: import org.apache.tools.ant.util.StringUtils;
029:
030: /**
031: * This method syncs an existing Perforce label against the Perforce client
032: * or against a set of files/revisions.
033: *
034: *
035: * Example Usage:
036: * <pre>
037: * <p4labelsync name="MyLabel-${TSTAMP}-${DSTAMP}"
038: * view="//depot/...#head;//depot2/file1#25" />
039: * </pre>
040: *
041: * @ant.task category="scm"
042: */
043: public class P4Labelsync extends P4Base {
044:
045: // CheckStyle:VisibilityModifier OFF - bc
046: protected String name;
047: private boolean add; /* -a */
048: private boolean delete; /* -n */
049: private boolean simulationmode; /* -n */
050:
051: // CheckStyle:VisibilityModifier ON
052: /**
053: * -a flag of p4 labelsync - preserve files which exist in the label,
054: * but not in the current view
055: * @return add attribute
056: * if set to true the task will not remove any files from the label
057: * only add files which were not there previously or update these where the revision has changed
058: * the add attribute is the -a flag of p4 labelsync
059: */
060: public boolean isAdd() {
061: return add;
062: }
063:
064: /**
065: * -a flag of p4 labelsync - preserve files which exist in the label,
066: * but not in the current view
067: * @param add if set to true the task will not remove any files from the label
068: * only add files which were not there previously or update these where the revision has changed
069: * the add attribute is the -a flag of p4 labelsync
070: */
071: public void setAdd(boolean add) {
072: this .add = add;
073: }
074:
075: /**
076: * -d flag of p4 labelsync; indicates an intention of deleting from the label
077: * the files specified in the view
078: * @return delete attribute
079: */
080: public boolean isDelete() {
081: return delete;
082: }
083:
084: /**
085: * -d flag of p4 labelsync; indicates an intention of deleting from the label
086: * the files specified in the view
087: * @param delete indicates intention of deleting from the label
088: * the files specified in the view
089: */
090: public void setDelete(boolean delete) {
091: this .delete = delete;
092: }
093:
094: /**
095: * The name of the label; optional, default "AntLabel"
096: * @param name of the label
097: */
098: public void setName(String name) {
099: this .name = name;
100: }
101:
102: /**
103: * -n flag of p4 labelsync - display changes without actually doing them
104: * @return -n flag of p4 labelsync
105: */
106: public boolean isSimulationmode() {
107: return simulationmode;
108: }
109:
110: /**
111: * -n flag of p4 labelsync - display changes without actually doing them
112: * @param simulationmode display changes without actually doing them
113: */
114: public void setSimulationmode(boolean simulationmode) {
115: this .simulationmode = simulationmode;
116: }
117:
118: /**
119: * do the work
120: * @throws BuildException if the label name is not supplied
121: */
122: public void execute() throws BuildException {
123: log("P4Labelsync exec:", Project.MSG_INFO);
124:
125: if (P4View != null && P4View.length() >= 1) {
126: P4View = StringUtils.replace(P4View, ":", "\n\t");
127: P4View = StringUtils.replace(P4View, ";", "\n\t");
128: }
129: if (P4View == null) {
130: P4View = "";
131: }
132:
133: if (name == null || name.length() < 1) {
134: throw new BuildException(
135: "name attribute is compulsory for labelsync");
136: }
137:
138: if (this .isSimulationmode()) {
139: P4CmdOpts = P4CmdOpts + " -n";
140: }
141: if (this .isDelete()) {
142: P4CmdOpts = P4CmdOpts + " -d";
143: }
144: if (this .isAdd()) {
145: P4CmdOpts = P4CmdOpts + " -a";
146: }
147:
148: execP4Command("-s labelsync -l " + name + " " + P4CmdOpts + " "
149: + P4View, new SimpleP4OutputHandler(this));
150:
151: }
152: }
|