# Usage: # cd /dir/in/your/workspace/containing/this/file # source ./env.sh export APP_HOME=$(dirname $PWD) export TOOLS_DIR=$APP_HOME/tools export WORKSHOP_PROJECT=perforce-software-sdp # Set WORKSHOP_USER in your own personal shell environment # to avoid guessing. export WORKSHOP_USER=${WORKSHOP_USER:-Unset} export PATH=$PATH:$TOOLS_DIR # Alias to list open SDP jobs. function ojobs () { printf " %-8s %-16s %-s\n" "Job" "Owner" "Title" printf " %-8s %-16s %-s\n" "--------" "----------------" "----------------------------------------" for job in $(p4 -ztag -F %Job% jobs -e "Project=$WORKSHOP_PROJECT ^Status=closed ^Status=punted ^Status=suspended"); do ownedBy=$(p4 -ztag -F %OwnedBy% job -o $job) title=$(p4 -ztag -F %Description% job -o $job | head -1) printf " %-8s %-16s %-s\n" "$job" "$ownedBy" "$title" done } # Alias to list all SDP jobs. alias ajobs='p4 jobs -e "Project=$WORKSHOP_PROJECT"' #------------------------------------------------------------------------------ # Function: guess_workshop_user ($user) # # Try to guess the workshop user based on the current OS user. The # assumption here is that local OS user will not be the same as the # userid on The Workshop, due to different user naming conentions. # The guessing logic can be avoided by defining WORKSHOP_USER environment # variable in your personal shell environment to your P4USER value # for workshop.perforce.com:1666. #------------------------------------------------------------------------------ function guess_workshop_user () { declare user=${1:-Unset} declare workshopUser= if [[ $WORKSHOP_USER == Unset ]]; then case "$user" in (awaters) workshopUser=adrian_waters;; (rjackson) workshopUser=russell_jackson;; (rcowham) workshopUser=robert_cowham;; (ttyler) workshopUser=tom_tyler;; (*) workshopUser=$user;; esac else workshopUser=$WORKSHOP_USER fi echo $workshopUser } #------------------------------------------------------------------------------ # Usage: njob [type] [description headline, quotes optional] # The default for 'type' is Feature; valid values are Bug/Feature. Auto # spelling correct logic assumes anything that starts with a 'b' is 'Bug', # anything starting with an 'f' is Feature. # Examples: # njob # njob b # njob B This is my job headline # njob FEatuRE "This is my job headline" # njob f This is my cool new feature. function njob () { declare type=${1:-Feature} if [[ $# -lt 2 ]]; then echo -e "\nUsage: njob {f|b} Your description goes here.\n" return 1 fi shift declare desc=${*:-__EDITME_DESC__} declare user=$(guess_workshop_user ${USER:-unknown}) declare -i colonHandling=0 declare -i i=1 declare newJobFile=new_${i}.job declare -a ComponentList declare -a ComponentDescList declare Component declare ComponentDesc declare -i ComponentCount=0 declare -i ComponentValid declare tmpFile= # Simple auto-correct. I'd like to use the bash built-in ${var^^} syntax, # but that requires bash 4.x, which isn't standard on Mac yet (but is # ubiquitous on modern Linux). type=$(echo $type | awk '{print tolower($0)}') if [[ ${type} == "b"* ]]; then type=Bug elif [[ ${type} == "f"* ]]; then type=Feature else echo -e "\nWarning: Type value specified [$type] should be F (Feature) or B (Bug). Unless the Workshop admins have updated the list of supported values...\n" fi if [[ -r $TOOLS_DIR/components.txt ]]; then # Load components list while read data; do [[ $data == "#"* ]] && continue Component=$data Component=${Component%%:*} ComponentDesc=$data ComponentDesc=${ComponentDesc##*:} ComponentList[$ComponentCount]=$Component ComponentDescList[$ComponentCount]=$ComponentDesc ComponentCount+=1 done < $TOOLS_DIR/components.txt ComponentCount=0 echo -e "SDP Components:" for Component in ${ComponentList[*]}; do echo "$((ComponentCount+1)). $Component: ${ComponentDescList[$ComponentCount]}" ComponentCount+=1 done ComponentValid=0 while [[ $ComponentValid -eq 0 ]]; do echo -e -n "\nSelect a Component (1-$ComponentCount): " read ComponentId if [[ -n "$ComponentId" ]]; then ComponentId=$((ComponentId-1)) Component=${ComponentList[$ComponentId]} for ccheck in ${ComponentList[*]}; do [[ "$Component" == "$ccheck" ]] && ComponentValid=1 done else Component ComponentValid=1 fi done fi # Get a unique job file name in the current dir by incrementing an # integer. while [[ -f $newJobFile ]]; do i=$((i+1)) newJobFile=new_${i}.job done echo -e "\nGenerating new job file: $newJobFile:\n" template=$TOOLS_DIR/template.job.p4s if [[ $desc == *":"* ]]; then colonHandling=1 desc=$(echo $desc | sed "s/:/__COLON__/g") fi sed -e "s:__EDITME_TYPE__:$type:g" \ -e "s:__EDITME_USER__:$user:g" \ -e "s:__EDITME_PROJECT__:$WORKSHOP_PROJECT:g" \ -e "s:__EDITME_COMPONENT__:$Component:g" \ -e "s:__EDITME_DESC__:$desc:g" $template > $newJobFile if [[ $colonHandling -eq 1 ]]; then tmpFile=tmp.$newJobFile.$$.$RANDOM sed "s/__COLON__/:/g" $newJobFile > $tmpFile mv -f "$tmpFile" $newJobFile fi cat $newJobFile echo -e "\n" }