Helix Core is now P4. Product user interfaces will be updated soon. Learn more >>

P4 Server Administration Documentation | 2025.2

# Change-commit triggers

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

When a `change-commit` trigger fires, any file or stream spec in the committed changelist has already been submitted and could be changed by a user while the `change-commit` trigger executes.

Replicas that are metadata-only do not support triggers of type `change-commit` and `change-content`.

Example:

A change-commit trigger that sends emails to other users who have files open in the submitted changelist.

Copy

    #!/bin/sh
    # mailopens.sh - Notify users when open files are updated
    changelist="$1
    workspace="$2"
    user="$3"
    p4 fstat -e "$changelist" //... | while read -r line
    do
       # Parse out the name/value pair.
       name=$(echo "$line" | sed 's/[\. ]\+\([^ ]\+\) .\+/\1/')
       value=$(echo "$line" | sed 's/[\. ]\+[^ ]\+ \(.\+\)/\1/')
       if [ "$name" = "depotFile" ]
       then
         # Line is "... depotFile <depotFile>". Parse to get depotFile.
         depotfile="$value"
       elif [ "$(echo "$name" | cut -b-9)" = "otherOpen" ] && \
            [ "$name" != "otherOpen" ]
       then
         # Line is "... ... otherOpen[0-9]+ <otherUser@otherWorkspace>".
         # Parse to get otherUser and otherWorkspace.
         otheruser=$(echo "$value" | sed 's/\(.\+\)@.\+/\1/')
         otherworkspace=$(echo "$value" | sed 's/.\+@\(.\+\)/\1/')
         # Get email address of the other user from p4 user -o.
         othermail=$(p4 user -o "$otheruser" | grep "Email:" | \
             grep -v \# | cut -b8-)

         # Mail other user that a file they have open has been updated
         mail -s "$depotfile was just submitted" "$othermail" <<EOM
    The Perforce file: $depotfile
    was just submitted in changelist $changelist by Perforce user $user
    from the $workspace workspace.  You have been sent this message
    because you have this file open in the $otherworkspace workspace.
    EOM
       fi
    done
    exit 0

To use the trigger, add the following line to your triggers table:

    sample3  change-commit //... "mailopens.sh %change% %client% %user%"

Whenever a user submits a changelist, any users with open files affected by that changelist receive an email notification.

Your search for returned results