blob: 39cc81e18e80818cb8b062411d768b1324c77093 [file] [log] [blame]
/*
* 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.
*
*/
/*
* Portions of this software are based upon public domain software
* originally written at the National Center for Supercomputing Applications,
* University of Illinois, Urbana-Champaign.
*/
package org.apache.tools.ant.taskdefs.optional.perforce;
import org.apache.tools.ant.BuildException;
/**
* @ant.task category="scm"
*/
public class P4Resolve extends P4Base {
private String resolvemode = null;
private boolean redoall; /* -f */
private boolean simulationmode; /* -n */
private boolean forcetextmode; /* -t */
private boolean markersforall; /* -v */
private static final String AUTOMATIC = "automatic";
private static final String FORCE = "force";
private static final String SAFE = "safe";
private static final String THEIRS = "theirs";
private static final String YOURS = "yours";
private static final String[] RESOLVE_MODES = {
AUTOMATIC,
FORCE,
SAFE,
THEIRS,
YOURS
};
/**
* returns the resolve mode
* @return returns the resolve mode
*/
public String getResolvemode() {
return resolvemode;
}
/**
* values for resolvemode
* <ul>
* <li> automatic -am</li>
* <li> force -af </li>
* <li> safe -as </li>
* <li> theirs -at </li>
* <li> yours -ay </li>
* </ul>
* @param resolvemode one of automatic, force, safe, theirs, yours
*/
public void setResolvemode(String resolvemode) {
boolean found = false;
for (int counter = 0; counter < RESOLVE_MODES.length; counter++) {
if (resolvemode.equals(RESOLVE_MODES[counter])) {
found = true;
break;
}
}
if (!found) {
throw new BuildException("Unacceptable value for resolve mode");
}
this.resolvemode = resolvemode;
}
/**
* allows previously resolved files to be resolved again
* @return flag indicating whether one wants to
* allow previously resolved files to be resolved again
*/
public boolean isRedoall() {
return redoall;
}
/**
* set the redoall flag
* @param redoall flag indicating whether one want to
* allow previously resolved files to be resolved again
*/
public void setRedoall(boolean redoall) {
this.redoall = redoall;
}
/**
* read the simulation mode flag
* @return flag indicating whether one wants just to simulate
* the p4 resolve operation whithout actually doing it
*/
public boolean isSimulationmode() {
return simulationmode;
}
/**
* sets a flag
* @param simulationmode set to true, lists the integrations which would be performed,
* without actually doing them.
*/
public void setSimulationmode(boolean simulationmode) {
this.simulationmode = simulationmode;
}
/**
* If set to true, attempts a textual merge, even for binary files
* @return flag value
*/
public boolean isForcetextmode() {
return forcetextmode;
}
/**
* If set to true, attempts a textual merge, even for binary files
* @param forcetextmode set the flag value
*/
public void setForcetextmode(boolean forcetextmode) {
this.forcetextmode = forcetextmode;
}
/**
* If set to true, puts in markers for all changes, conflicting or not
* @return flag markersforall value
*/
public boolean isMarkersforall() {
return markersforall;
}
/**
* If set to true, puts in markers for all changes, conflicting or not
* @param markersforall flag true or false
*/
public void setMarkersforall(boolean markersforall) {
this.markersforall = markersforall;
}
/**
* execute the p4 resolve
* @throws BuildException if there is a wrong resolve mode specified
* or no view specified
*/
public void execute() throws BuildException {
if (this.resolvemode.equals(AUTOMATIC)) {
P4CmdOpts = P4CmdOpts + " -am";
} else if (this.resolvemode.equals(FORCE)) {
P4CmdOpts = P4CmdOpts + " -af";
} else if (this.resolvemode.equals(SAFE)) {
P4CmdOpts = P4CmdOpts + " -as";
} else if (this.resolvemode.equals(THEIRS)) {
P4CmdOpts = P4CmdOpts + " -at";
} else if (this.resolvemode.equals(YOURS)) {
P4CmdOpts = P4CmdOpts + " -ay";
} else {
throw new BuildException("unsupported or absent resolve mode");
}
if (P4View == null) {
throw new BuildException("please specify a view");
}
if (this.isRedoall()) {
P4CmdOpts = P4CmdOpts + " -f";
}
if (this.isSimulationmode()) {
P4CmdOpts = P4CmdOpts + " -n";
}
if (this.isForcetextmode()) {
P4CmdOpts = P4CmdOpts + " -t";
}
if (this.isMarkersforall()) {
P4CmdOpts = P4CmdOpts + " -v";
}
execP4Command("-s resolve " + P4CmdOpts + " " + P4View, new SimpleP4OutputHandler(this));
}
}