Perforce 2005.2 Command Reference
<< Previous Chapter
p4 tickets
Table of Contents
Index
Perforce on the Web
Next Chapter >>
p4 typemap

p4 triggers

Synopsis

Edit a list of scripts to be run conditionally whenever changelists are submitted, forms are updated, or when integrating Perforce with external authentication mechanisms.

Syntax

p4 [g-opts] triggers
p4 [g-opts] triggers -i
p4 [g-opts] triggers -o

Description

Perforce triggers are user-written scripts that are called by a Perforce server whenever certain operations (such as changelist submission or changes to forms) are performed. If the script returns a value of 0, the operation continues; if the script returns any other value, the operation fails. Upon failure, the script's standard output (not error output) is used as the text of the failed operation's error message.

Perforce supports nine trigger types, divided into three categories. Changelist submission triggers (change-submit, change-content, and change-commit) are fired when users submit changelists. Form triggers (form-save, form-out, form-in, and form-delete) are fired when users generate or modify form specifications. Authentication triggers (auth-check and auth-set) are fired when administrators wish to integrate Perforce with external authentication mechanisms such as LDAP or Active Directory.

Use the change-submit trigger type to create triggers that fire after changelist creation, but before files are transferred to the server. Because change-submit triggers fire before files are transferred to the server, submit triggers cannot access file contents. Submit triggers are useful for integration with reporting tools or systems that do not require access to file contents.

Use the change-content trigger type to create triggers that fire after changelist creation and file transfer, but prior to committing the submit to the database.

Use the change-commit trigger type to create triggers that fire after changelist creation, file transfer, and changelist commission to the database. Use commit triggers for processes that assume (or require) the successful submission of a changelist.

Even when a change-submit or change-content trigger script succeeds, the submit may fail because of subsequent trigger failures, or for other reasons. Use change-submit and change-content triggers only for validation, and use change-commit triggers or daemons for operations that are contingent on the successful completion of the submit.

To configure Perforce to run trigger scripts when users edit specification forms, use form triggers: these are triggers of type form-save, form-in, form-out, and form-delete. Use form triggers to generate customized specifications for users, validate customized specifications, to notify other users of attempted changes to specification forms, and to otherwise interact with process control and management tools.

To use an external password authentication manager (such as LDAP or Active Directory) with Perforce, use authentication triggers (auth-check and auth-set). Use the %user% variable to pass the user's username in the command for the script. Passwords typed by the user as part of the authentication process are supplied to authentication scripts as standard input; never on the command line. For further information, see the System Administrator's Guide.

Triggers are run in the order listed in the table; if a trigger script fails for a specified type, subsequent trigger scripts also associated with that type are not run.

To use the same trigger script with multiple file patterns, list the same trigger multiple times in the trigger table. Use exclusionary mappings to prevent files from activating the trigger script; the order of the trigger entries matters, just as it does when exclusionary mappings are used in views. If a particular trigger name and type is listed multiple times, only the script corresponding to the first use of the trigger name and type is activated.

Form Fields

The p4 triggers form contains a single Triggers: field. Each row in the field holds four values:

Field
Meaning

name

The user-defined name of the trigger.

type

There are nine trigger types, divided into three subtypes: changelist submission triggers, form triggers, and authentication triggers.

Changelist submission triggers:

  • change-submit: Execute a changelist trigger after changelist creation, but before file transfer. Trigger may not access file contents.
  • change-content: Execute a changelist trigger after changelist creation and file transfer, but before file commit.
To obtain file contents, use commands such as p4 diff2, p4 files, p4 fstat, and p4 print with the revision specifier @=change, where change is the changelist number of the pending changelist as passed to the script in the %changelist% variable.
  • change-commit: Execute a changelist trigger after changelist creation, file transfer, and changelist commit.

Form triggers:

  • form-save: Execute form trigger after its contents are parsed, but before its contents are stored in the Perforce database. Trigger may not modify form specified in %formfile% variable.
  • form-out: Execute form trigger upon generation of form to end user. Trigger may modify form.
  • form-in: Execute form trigger on edited form before contents are parsed and validated by the Perforce server. Trigger may modify form.
  • form-delete: Execute form trigger after its contents are parsed, but before the specification is deleted from the Perforce database. Trigger may not modify form.

Authentication triggers:

  • auth-check: Execute an authentication check trigger to verify a user's password against an external password manager during login, or when setting a new password.
  • auth-set: Execute an authentication set trigger to send a new password to an external password manager.

path

For changelist submission triggers (change-submit, change-content, or change-commit), a file pattern in depot syntax. When a user submits a changelist that contains any files that match this file pattern, the script linked to this trigger is run. Use exclusionary mappings to prevent triggers from running on specified files.

For form triggers (form-save, form-out, form-in, or form-delete), the name of the type of form, (one of branch, change, client, depot, group, job, label, protect, spec, triggers, typemap, or user). Triggers that fire on the p4 triggers command are ignored.

For authentication triggers (auth-check or auth-set), use auth as the path value.

command

The command for the Perforce server to run when a matching path applies for the trigger type. Specify the command in a way that allows the Perforce server account to locate and run the command. The command must be quoted, and can take the variables specified below as arguments.

For change-submit and change-content triggers, changelist submission continues if the trigger script exits with 0, or fails if the script exits with a nonzero value. For change-commit triggers, changelist submission succeeds regardless of the trigger script's exit code, but subsequent change-commit triggers do not fire if the script exits with a nonzero value.

For form-in, form-out, form-save, and form-delete triggers, the data in the specification becomes part of the Perforce database if the script exits with 0. Otherwise, the database is not updated.

For auth-check triggers (fired by p4 login), the user's typed password is supplied to the trigger command as standard input. If the trigger executes successfully, the Perforce ticket is issued. The user name is available as %user% to be passed on the command line.

For auth-set triggers, (fired by p4 passwd, but only after also passing an auth-check trigger check) the user's old password and new password are passed to the trigger as standard input. The user name is available as %user% to be passed on the command line.

Options

-i

Read the trigger table from standard input without invoking the editor.

-o

Write the trigger table to standard output without invoking the editor.

g-opts

See the Global Options section.

Usage Notes

Can File Arguments Use
Revision Specifier?

Can File Arguments Use
Revision Range?

Minimal Access Level Required

N/A

N/A

super

Warning!
Never use a Perforce command in an out trigger that fires the same out trigger, or infinite recursion will result. For example, never run p4 job -o from within an out trigger script that fires on job specifications.

Examples

Suppose that the trigger table consists of the following entries:

trig1 change-submit //depot/dir/... "/usr/bin/s1.pl %changelist%"
trig2 change-submit //depot/dir/file "/usr/bin/s2.pl %user%"
trig1 change-submit -//depot/dir/z* "/usr/bin/s1.pl %user%"
trig1 change-submit //depot/dir/zed "/usr/bin/s3.pl %client%"

Both the first and fourth lines call the script /bin/s1.pl %changelist%, because the first occurrence of a particular trigger name determines which script is run when the trigger name is subsequently used.

No triggers are activated if someone submits file //depot/dir/zebra, because the third line excludes this file. If someone submits //depot/dir/zed, the trig1 script /usr/bin/s1.pl %changelist% is run: although the fourth line overrides the third, only the first script associated with the name trig1 is called.

For more detailed examples, see the System Administrator's Guide.

Related Commands

To obtain information about the changelist being submitted

p4 describe
p4 opened

To aid daemon creation

p4 review
p4 reviews
p4 counter
p4 counters
p4 user


Perforce 2005.2 Command Reference
<< Previous Chapter
p4 tickets
Table of Contents
Index
Perforce on the Web
Next Chapter >>
p4 typemap
Please send comments and questions about this manual to [email protected].
Copyright 1999-2005 Perforce Software. All rights reserved.
Last updated: 12/15/05