#!/bin/sh ############################################################ IDENT(1) # # $Title: Script to list perforce checkpoints $ # ############################################################ CONFIGURATION # # Local perforce server settings # NB: Taken from rc.conf(5) on FreeBSD # P4D_ROOT=$( sysrc -n p4d_root 2> /dev/null ) # # Sensible defaults (i.e., Linux) # : ${P4D_ROOT:=/perforce} # # Checkpoint specifics (case-sensitive) # PREFIX=checkpoint UMATCH='[^.]+' ZMATCH='\.[Gg][Zz]' ############################################################ GLOBALS pgm="${0##*/}" # Program basename # # Global exit status # SUCCESS=0 FAILURE=1 # # Command-line options # SHOW_ALL= # -a SHOW_U= # -u SHOW_Z= # -z ROOTDIR= # -R dir ############################################################ FUNCTIONS usage() { exec >&2 local optfmt="\t%-8s %s\n" printf "Usage: %s [-u|-z] { -a | NUM ... }\n" "$pgm" printf "OPTIONS:\n" printf "$optfmt" "NUM" "Ceckpoint number as-in \`checkpoint.NUM[.gz]'." printf "$optfmt" "-a" "Show all checkpoints." printf "$optfmt" "-R dir" "List dir checkpoints (default $P4D_ROOT)." printf "$optfmt" "-u" "Show only uncompressed checkpoints." printf "$optfmt" "-z" "Show only compressed checkpoints (*.gz)." exit $FAILURE } ############################################################ MAIN # # Command-line options # while getopts aR:uz flag; do case "$flag" in a) SHOW_ALL=1 ;; R) ROOTDIR="$OPTARG" ;; u) SHOW_U=1 SHOW_Z= ;; z) SHOW_Z=1 SHOW_U= ;; *) usage esac done shift $(( $OPTIND - 1 )) # # Validate command-line arguments # [ $# -gt 0 -o "$SHOW_ALL" ] || usage P4D_ROOT="${ROOTDIR:-$P4D_ROOT}" # set after last-call to usage() # NOTREACHED unless either `-a' (list all) or `NUM ...' is given # # All actions should be performed within the p4d_root (e.g., /perforce) # cd "$P4D_ROOT" || exit # # If given `-a' list all checkpoints, otherwise list only certain numbers # if [ "$SHOW_ALL" ]; then # Handle `-u' versus `-z' for listing only nongz/gz (respectively) regex="($UMATCH)($ZMATCH)?" [ "$SHOW_U" ] && regex="($UMATCH)" [ "$SHOW_Z" ] && regex="($UMATCH)($ZMATCH)" else nums= for num in "$@"; do nums="$regex|$num" done # Handle `-u' versus `-z' for listing only nongz/gz (respectively) regex="(${nums#|})($ZMATCH)?" [ "$SHOW_Z" ] && regex="(${nums#|})($ZMATCH)" [ "$SHOW_U" ] && regex="(${nums#|})" fi # # List checkpoints (filtered by awk(1)) # ls -1 "$PREFIX".* | awk -v regex="^$PREFIX\\.$regex$" '$0 ~ regex && ++N END {exit !N}' ################################################################################ # END ################################################################################ # # $Copyright: 2015 Devin Teske. All rights reserved. $ # # $Header: //guest/freebsdfrau/p4t/libexec/list_checkpoint#1 $ # ################################################################################