#!/bin/sh ############################################################ IDENT(1) # # $Title: Script to perform p4 verify against local p4d $ # ############################################################ CONFIGURATION # # User to perform verify as # P4D_USER= # overide with -u user # # Local perforce server settings # NB: Taken from rc.conf(5) on FreeBSD # P4D_PORT=$( sysrc -n p4d_port 2> /dev/null ) # override with -p port ############################################################ GLOBALS pgm="${0##*/}" # Program basename # # Global exit status # SUCCESS=0 FAILURE=1 # # Command-line options # QUIET= # -q TRANSFER= # -t # # Miscellaneous # export LC_ALL="${LC_ALL:-en_US.ISO8859-1}" # separators in dpv(1) status : ${UNAME_s:=$( uname -s )} ############################################################ FUNCTIONS die() { local fmt="$1" exec >&2 if [ "$fmt" ]; then shift 1 # fmt printf "$fmt\n" "$@" fi exit $FAILURE } usage() { exec >&2 local optfmt="\t%-8s %s\n" printf "Usage: %s [-p port] [-qt] [-u user]\n" "$pgm" printf "OPTIONS:\n" printf "$optfmt" "-p port" "Server port (default local system's p4d)." printf "$optfmt" "-q" "Quiet. Don't display performance metrics." printf "$optfmt" "-t" "Transfer broken/missing files (replicas only)." printf "$optfmt" "-u user" "Perform verify as user (default $P4D_USER)." exit $FAILURE } ############################################################ MAIN # # Command-line options # while getopts p:qtu: flag; do case "$flag" in p) P4D_PORT="$OPTARG" ;; q) QUIET=1 ;; t) TRANSFER=1 ;; u) P4D_USER="$OPTARG" ;; *) usage esac done shift $(( $OPTIND - 1 )) # # Make sure we have HOST:PORT for the local p4d # if [ "$P4D_PORT" ]; then : good to go # I.e., FreeBSD (see rc.conf(5)) or `-p port' given elif [ "$UNAME_s" = "FreeBSD" ]; then : skip below # rc.conf(5) drives the setting elif [ -f "/etc/init.d/p4d" ]; then # I.e., Linux eval "$( { exec >&- 2>&- eval "$( awk 'gsub(/exit/,":")||1' /etc/init.d/p4d )" if [ "$p4d_port_interface" -a ! "$p4d_port" ]; then p4d_port=$( ifconfig "$p4d_port_interface" | awk ' sub(/inet addr:/, "") { print addr = $1; exit} END { exit !addr } ' ) && p4d_port="$p4d_port:1666" fi echo "P4D_PORT=${p4d_port%%[!0-9a-zA-Z.\[\]:-]}" >&3 } 3>&1 )" else # I.e., Other Linux export SUDO_PROMPT="[sudo] Password:" P4D_PORT=$( sudo lsof -nPi 4:1666 -a -c p4d | awk ' sub(/\(LISTEN\)$/, "") { print p4d_port = $NF } END { exit !p4d_port } ' ) || die "p4d is not running." fi # # Make sure local p4d is running # err=$( p4 ${P4D_PORT:+-p "$P4D_PORT"} ${P4D_USER:+-u "$P4D_USER"} \ info -s 2>&1 ) || die "%s" "$err" # # Run quiet verification (if-desired) # if [ "$QUIET" ]; then p4 ${P4D_PORT:+-p "$P4D_PORT"} ${P4D_USER:+-u "$P4D_USER"} \ verify -q ${TRANSFER:+-t} //... exit fi # NOTREACHED if `-q' given # # Run visual verification with performance metrics # p4 ${P4D_PORT:+-p "$P4D_PORT"} ${P4D_USER:+-u "$P4D_USER"} \ verify ${TRANSFER:+-t} //... 2>&1 | time dpv -lwb "$pgm" -t "p4d" \ -p "Verifying ${P4D_PORT:-${P4PORT:-perforce:1666}} depot...\n" \ -a "\nThis may take a while." " //" ################################################################################ # END ################################################################################ # # $Copyright: 2015 Devin Teske. All rights reserved. $ # # $Header: //guest/freebsdfrau/p4t/libexec/verify#1 $ # ################################################################################