#!/bin/sh
############################################################ IDENT(1)
#
# $Title: Script to replay perforce checkpoint (simple) $
#
############################################################ GLOBALS
pgm="${0##*/}" # Program basename
progdir="${0%/*}" # Program directory
#
# Global exit status
#
SUCCESS=0
FAILURE=1
#
# Command-line options
#
DEBUG= # -d
ROOTDIR= # -R dir
UNPACK_ONLY= # -U
USER= # -u user
#
# Miscellaneous
#
NUM=
# NB: For usage() statement only (not exported)
P4D_USER=admin
P4D_ROOT=$( sysrc -n p4d_root 2> /dev/null )
: ${P4D_ROOT:=/perforce}
############################################################ FUNCTIONS
usage()
{
exec >&2
local optfmt="\t%-8s %s\n"
printf "Usage: %s [-U|-d] [OPTIONS] [NUM]\n" "$pgm"
printf "OPTIONS:\n"
printf "$optfmt" "-U" \
"Unpack the checkpoint if-required (first step) and exit."
printf "$optfmt" "-d" \
"Debug. Don't stop p4d and don't replay but simulate it."
printf "$optfmt" "-R dir" \
"Perform replay in dir (default $P4D_ROOT)."
printf "$optfmt" "-u user" \
"Perform replay as user (default $P4D_USER)."
exit $FAILURE
}
list_checkpoint_nums()
{
exec >&2
echo "Available checkpoint numbers:"
p4t checkpoints ${ROOTDIR:+-R "$ROOTDIR"} |
awk 'sub(/^checkpoint\./,"\t")&&(sub(/\.[^.]+$/,"")||1)' |
sort -nu
exit $FAILURE
}
############################################################ MAIN
#
# Command-line options
#
while getopts dR:u:U flag; do
case "$flag" in
d) DEBUG=1 ;;
R) ROOTDIR="$OPTARG" ;;
u) USER="$OPTARG" ;;
U) UNPACK_ONLY=1 ;;
*) usage
esac
done
shift $(( $OPTIND - 1 ))
NUM="$1"
#
# Validate command-line arguments
#
[ "$NUM" ] || list_checkpoint_nums
#
# Find out if there is such a checkpoint
#
if ! checkpoints=$( p4t list_checkpoint ${ROOTDIR:+-R "$ROOTDIR"} "$NUM" )
then
[ -d "${ROOTDIR:-.}" ] || exit $FAILURE
echo "Checkpoint not available." >&2
list_checkpoint_nums
fi
checkpoint="${checkpoints%%[$IFS]*}"
#
# Hand-off execution
#
exec p4t replay_checkpoint ${DEBUG:+-d} ${UNPACK_ONLY:+-U} \
${ROOTDIR:+-R "$ROOTDIR"} ${USER:+-u "$USER"} "$checkpoint"
################################################################################
# END
################################################################################
#
# $Copyright: 2015 Devin Teske. All rights reserved. $
#
# $Header: //guest/freebsdfrau/p4t/libexec/replay#1 $
#
################################################################################