by
Version 1.1 - 2001/01/09
These tasks provide an interface to the Perforce SCM.
The org.apache.tools.ant.taskdefs.optional.perforce
package consists of a simple framework to support
p4 functionality as well as some Ant tasks encapsulating frequently used (by me :-) p4 commands.
However, the addition of new p4 commands is a pretty simple task (see the source).
Although it is possible to use these commands on the desktop,
they were primarily intended to be used by automated build systems.
Note: These tasks require the oro 2.0 regular expression package. Simply download this package and copy the jakarta-oro-2.0.jar file into Ant's lib directory. You will also need the perforce client executable (p4 or p4.exe but not p4win.exe) in your path.
P4Sync | Synchronise a workspce to a depot |
P4Change | Request a new changelist from the perforce server |
P4Edit | Open files for edit (checkout) |
P4Submit | Submit a changelist to the perforce server (checkin) |
P4Have | List current files in client view, useful for reporting |
P4Label | Create a label reflecting files in the current workspace |
P4Counter | Obtain or set the value of a counter |
Each p4 task requires a number of settings, either through build-wide properties, individual attributes or environment variables. These are
Property | Attribute | Env Var | Description | Default |
p4.port | port | P4PORT | The p4d server and port to connect to | perforce:1666 |
p4.client | client | P4CLIENT | The p4 client spec to use | The logged in username |
p4.user | user | P4USER | The p4 username | The logged in username |
-- | view | -- | The client, branch or label view to operate upon. See the p4 user guide for more info. | //... |
Your local installation of perforce may require other settings (e.g. P4PASSWD, P4CONFIG). At the moment, these can only be set outside of Ant, as environment variables.
Setting in the environment:-
(Unix csh)
setenv P4PORT myperforcebox:1666
(Unix sh et al)
P4USER=myp4userid; export P4USER
Using build properties:-
<property name="p4.client" value="nightlybuild"/>
Using task attributes:-
<p4Whatever port="myserver:1666" client="smoketest" user="smoketestdude" . . . />
For more information regarding the underlying 'p4' commands you are referred to the Perforce Command Reference available from the Perforce website.
Standard taskdefs (for you to copy'n'paste)
<taskdef name="p4sync" classname="org.apache.tools.ant.taskdefs.optional.perforce.P4Sync" /> <taskdef name="p4change" classname="org.apache.tools.ant.taskdefs.optional.perforce.P4Change" /> <taskdef name="p4edit" classname="org.apache.tools.ant.taskdefs.optional.perforce.P4Edit" /> <taskdef name="p4submit" classname="org.apache.tools.ant.taskdefs.optional.perforce.P4Submit" /> <taskdef name="p4have" classname="org.apache.tools.ant.taskdefs.optional.perforce.P4Have" /> <taskdef name="p4label" classname="org.apache.tools.ant.taskdefs.optional.perforce.P4Label" /> <taskdef name="p4counter" classname="org.apache.tools.ant.taskdefs.optional.perforce.P4Counter" />
Synchronize the current workspace with the depot.
Attribute | Description | Required |
force | force a refresh of files | no |
label | sync client to label | no |
<p4sync label="nightlybuild-0.0123" force="yes" /> <p4sync view="//depot/projects/projectfoo/main/src/..." />
Request a new changelist from the perforce server. This task sets the ${p4.change} property which can then be passed to P4Submit or P4Edit.
Attribute | Description | Required |
description | Description for ChangeList. If none specified, it will default to "AutoSubmit By Ant" | No. |
<p4change description="Change Build Number in Script">
Open file(s) for edit. P4Change should be used to obtain a new changelist for P4Edit as, although P4Edit can open files to the default change, P4Submit cannot yet submit it.
Attribute | Description | Required |
view | The filespec to request to edit | Yes |
change | An existing changelist number to assign files to. | No, but see above. |
<p4edit view="//depot/projects/projectfoo/main/src/Blah.java..." change="${p4.change}" />
Submit a changelist, usually obtained from P4Change.
Attribute | Description | Required |
change | The changelist number to submit | Yes |
<p4submit change="${p4.change}" />
List handy file info reflecting the current client contents.
Attribute | Description | Required |
None | -- | -- |
<p4have />
Create a new label and set contents to reflect current client file revisions.
Attribute | Description | Required |
name | The name of the label | Yes |
view | client view to use for label | No |
desc | Label Description | No |
<p4label name="NightlyBuild:${DSTAMP}:${TSTAMP}" desc="Auto Nightly Build" />
Obtain or set the value of a counter
Attribute | Description | Required |
name | The name of the counter | Yes |
value | The new value for the counter | No |
<p4counter name="last-clean-build" /> <p4counter name="last-clean-build" value="${TSTAMP}" />
Sept 2000 | -- | Internal Release within Rubus |
Nov 2000 | V1.0 | Initial Release donated to ASF :-) |
Jan 2001 | V1.1 | fixed cross platform (NT/Unix) bug refactored p4 output handling code refactored exec'ing code |