diff --git a/src/main/org/apache/tools/ant/taskdefs/defaults.properties b/src/main/org/apache/tools/ant/taskdefs/defaults.properties
index 2afa46b26..f65a88c49 100644
--- a/src/main/org/apache/tools/ant/taskdefs/defaults.properties
+++ b/src/main/org/apache/tools/ant/taskdefs/defaults.properties
@@ -64,7 +64,6 @@ starteam=org.apache.tools.ant.taskdefs.optional.scm.AntStarTeamCheckOut
wljspc=org.apache.tools.ant.taskdefs.optional.jsp.WLJspc
jlink=org.apache.tools.ant.taskdefs.optional.jlink.JlinkTask
native2ascii=org.apache.tools.ant.taskdefs.optional.Native2Ascii
-perforce=org.apache.tools.ant.taskdefs.optional.perforce.P4sync
propertyfile=org.apache.tools.ant.taskdefs.optional.PropertyFile
depend=org.apache.tools.ant.taskdefs.optional.depend.Depend
antlr=org.apache.tools.ant.taskdefs.optional.ANTLR
@@ -76,6 +75,12 @@ csc=org.apache.tools.ant.taskdefs.optional.dotnet.CSharp
ilasm=org.apache.tools.ant.taskdefs.optional.dotnet.Ilasm
stylebook=org.apache.tools.ant.taskdefs.optional.StyleBook
test=org.apache.tools.ant.taskdefs.optional.Test
+p4change=org.apache.tools.ant.taskdefs.optional.perforce.P4Change
+p4label=org.apache.tools.ant.taskdefs.optional.perforce.P4Label
+p4have=org.apache.tools.ant.taskdefs.optional.perforce.P4Have
+p4sync=org.apache.tools.ant.taskdefs.optional.perforce.P4Sync
+p4edit=org.apache.tools.ant.taskdefs.optional.perforce.P4Edit
+p4submit=org.apache.tools.ant.taskdefs.optional.perforce.P4Submit
# deprecated ant tasks (kept for back compatibility)
javadoc2=org.apache.tools.ant.taskdefs.Javadoc
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4sync.java b/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4sync.java
deleted file mode 100644
index 14e170b17..000000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4sync.java
+++ /dev/null
@@ -1,257 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000 The Apache Software Foundation. All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- * any, must include the following acknowlegement:
- * "This product includes software developed by the
- * Apache Software Foundation (http://www.apache.org/)."
- * Alternately, this acknowlegement may appear in the software itself,
- * if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software
- * Foundation" must not be used to endorse or promote products derived
- * from this software without prior written permission. For written
- * permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- * nor may "Apache" appear in their names without prior written
- * permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation. For more
- * information on the Apache Software Foundation, please see
- * .
- */
-
-package org.apache.tools.ant.taskdefs.optional.perforce;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.taskdefs.Exec;
-import org.apache.tools.ant.Task;
-
-/**
- *
- * Description
- * Handles packages/modules retrieved from a Perforce repository.
- * Parameters
- *
- *
- * Attribute |
- * Description |
- * Required |
- *
- *
- * localpath |
- * The local path of the file/directory to
- * write file(s) to. |
- * Yes |
- *
- *
- * user |
- * Specifies the user name, overriding the value of $P4USER,
- * $USER, and $USERNAME in the environment. |
- * No
- * |
- *
- *
- * port |
- * Specifies the server's listen address, overriding the
- * value of $P4PORT in the environment and the default (perforce:1666). |
- * No
- * |
- *
- *
- * version |
- * The revision number of the file being
- * extracted. |
- * No |
- *
- *
- * date |
- * Get files as of this date. Either [yyyy/mm/dd]
- * or [yyyy/mm/dd:hh:mm:ss]. Note that [yyyy/mm/dd] means [yyyy/mm/dd:00:00:00],
- * so if you want to include all events on that day refer to
- * the next day. |
- * No |
- *
- *
- * label |
- * A label from which to check out files. |
- * No |
- *
- *
- * force |
- * "[true|false]". Forces
- * resynchronization even if the client already has the
- * file, and clobbers writable files. This flag doesn't
- * affect open files. |
- * No, default "false" |
- *
- *
- * change |
- * Gets the file(s) as they were when a specified change
- * number was applied. |
- * No
- * |
- *
- *
- *
- * Examples
- *
- * <perforce localpath="//path/to/source/..."
- * force="true"
- * change="4513"
- * />
- *
- * syncs the files in the source directory that are in the
- * Perforce repository, as of change number 4513, overwriting any
- * modified files in the current source tree is needed. You cannot
- * specify more than one of (date, label, revision).
- *
- * <perforce localpath="//path/to/source/..." />
- *
- * Syncs with the latest version of the file in the repository.
- */
-public class P4sync extends Exec {
- private String p4user;
- private String p4port;
- private String directory;
- private boolean force;
- private String date;
- private String label;
- private String revision;
- private String changenum;
- private String error = "";
-
- // The method executing the task
- public void execute() throws BuildException {
- StringBuffer cmdline = new StringBuffer();
- String RevisionString = "";
- int nRevisions = 0;
-
- cmdline.append("p4");
- cmdline.append(" " + "-s"); // 'p4 -s' gives a tag for parsing each line
-
- if (p4user != null) {
- cmdline.append( " " + "-u");
- cmdline.append( " " + p4user);
- }
-
- if (p4port != null) {
- cmdline.append( " " + "-p");
- cmdline.append( " " + p4port);
- }
- cmdline.append( " " + "sync");
-
- if (force) {
- cmdline.append( " " + "-f");
- }
-
- if (directory == null) {
- throw new BuildException("dir= not specified for 'p4sync'");
- }
-
- if (label != null) {
- String prefix = "";
- if (!label.startsWith("@")) {
- prefix = "@";
- }
- RevisionString = prefix + label;
- nRevisions = nRevisions + 1;
- }
-
- if (changenum != null) {
- String prefix = "";
- if (!changenum.startsWith("@")) {
- prefix = "@";
- }
- RevisionString = prefix + changenum;
- nRevisions = nRevisions + 1;
- }
-
- if (date != null) {
- String prefix = "";
- if (!date.startsWith("@")) {
- prefix = "@";
- }
- RevisionString = prefix + date;
- nRevisions = nRevisions + 1;
- }
-
- if (revision != null) {
- if (revision.startsWith("#")) {
- RevisionString = revision;
- } else {
- RevisionString = "#" + revision;
- }
- nRevisions = nRevisions + 1;
- }
-
- if (nRevisions > 1) {
- throw new BuildException("date/revision/label/changenumber are mutually exclusive - specify only one.");
- }
-
- cmdline.append(" " + directory + RevisionString);
-
- String command = cmdline.toString();
- System.out.println("executing: "+command);
-
- run(command);
-
- if (error.length() != 0) {
- throw new BuildException(error);
- }
- }
-
- protected void outputLog(String line, int messageLevel) {
- if (line.startsWith("error: ") && !line.endsWith("file(s) up-to-date.")) {
- error += line.substring(7);
- }
-
- super.outputLog(line, messageLevel);
- };
-
- // The setter for the attributes
- public void setForce(boolean force) { this.force = force; }
- public void setLabel(String label) { this.label = label; }
- public void setDate(String date) { this.date = date; }
- public void setLocalpath(String directory) { this.directory = directory; }
- public void setVersion(String revision) { this.revision = revision; }
-
- public void setRevision(String revision) { this.revision = revision; }
- public void setChange(String changenum) { this.changenum = changenum; }
-
- public void setP4user(String p4user) { this.p4user = p4user; }
- public void setUser(String p4user) { this.p4user = p4user; }
- public void setPort(String p4port) { this.p4port = p4port; }
- public void setP4port(String p4port) { this.p4port = p4port; }
-}