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.
#!/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.