env.sh #18

  • //
  • guest/
  • perforce_software/
  • sdp/
  • tools/
  • env.sh
  • View
  • Commits
  • Open Download .zip Download (7 KB)
# 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
export WORKSHOP_PROJECT_TAG=sdp
export P4U_HOME="${APP_HOME}/dev/Server/Unix/p4/common/bin"
export P4U_LIB="${APP_HOME}/dev/Server/Unix/p4/common/lib"

# Set WORKSHOP_USER in your own personal shell environment
# to avoid guessing.
export WORKSHOP_USER=${WORKSHOP_USER:-Unset}
export PATH="$PATH:$TOOLS_DIR:$P4U_HOME"

# Alias to list open SDP jobs.
alias ojobs='$TOOLS_DIR/sdp_jobs_report.sh'
alias ofjobs='$TOOLS_DIR/sdp_jobs_report.sh -st open,blocked,inprogress,fixed'
alias ajobs='$TOOLS_DIR/sdp_jobs_report.sh -a'
alias mjobs='$TOOLS_DIR/sdp_jobs_report.sh -me'

#------------------------------------------------------------------------------
# Function fjob ($job1 $job2 ...)
# Change job status to fixed. Job can look like SDP-### or ###.
function fjob () {
   local job=
   local jobProj=
   for job in $*; do
      # If the job looks like 323, prefix with 'SDP-'
      [[ "$job" =~ ^[0-9]+$ ]] && job="${WORKSHOP_PROJECT_TAG^^}-$job"

      if [[ ! "$job" =~ ^SDP- ]]; then
         echo -e "\\nError: Not changing status of non-SDP job [$job]."
         continue
      fi

      jobProj=$(p4 -ztag -F %Project% job -o "$job")

      if [[ "$jobProj" != "$WORKSHOP_PROJECT" ]]; then
         if [[ "$jobProj" == "setme" ]]; then
            echo -e "\\nError: Job [$job] does not exist. Skipping it."
         else
            echo -e "\\nError: Job [$job] has wrong project [$jobProj], expected [$WORKSHOP_PROJECT]. Skipping it."
         fi
         continue
      fi

      # Try to change the status to fixed.
      p4 --field Status=fixed job -o "$job" | p4 job -i
   done
}

#------------------------------------------------------------------------------
# Function: guess_workshop_user ($user)
#
# Try to guess the workshop user based on the current OS user.  The assumption
# is that local OS user will NOT be the same as the userid on The Workshop, due
# to intentionally differing 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 public.perforce.com:1666.
#
# This is strictly a convenience function for SDP project members.
#------------------------------------------------------------------------------
function guess_workshop_user () {
   declare user="${1:-$USER}"
   declare workshopUser=

   if [[ "$WORKSHOP_USER" == "Unset" ]]; then
      case "$user" in
         (rjackson) workshopUser="russell_jackson";;
         (rcowham) workshopUser="robert_cowham";;
         (ttyler) workshopUser="tom_tyler";;
         (mzinthefer) workshopUser="mark_zinthefer";;
         (amorriss) workshopUser="amo";;
         (*) workshopUser="$USER";;
      esac
   else
      workshopUser="$USER"
   fi
   echo $workshopUser
}

#------------------------------------------------------------------------------
# Usage: njob [type] [description headline, quotes optional]
# The default for 'type' is Feature; valid values are Bug/Doc/Feature/Problem.
#
# Auto spelling correct logic is keyed off the first letter, case-insensitive:
#
# * 'B' is 'Bug'
# * 'D' is 'Doc'
# * 'F' is 'Feature'
# * 'P' is 'Problem'
#
# 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} == "d"* ]]; then
      type=Doc
   elif [[ ${type} == "p"* ]]; then
      type=Problem
   elif [[ ${type} == "f"* ]]; then
      type=Feature
   else
      echo -e "\\nWarning: Type value specified [$type] should be B (Bug), F (Feature), D (Doc), or P (Problem).  Unless the Public Depot server 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"
}

# Display a job with 'less', sans the big comment block.
function jo () {
   p4 job -o $1 | grep -v "^#" | less
}

# Alias for 'Get Job Header' script.
alias gj='gjh.sh'
alias bp='/p4/tools/bp.sh'
# Change User Description Committed
#18 31100 C. Thomas Tyler Added 'bp' alias.
#17 29509 C. Thomas Tyler Added guesses for more user names.
#16 29020 C. Thomas Tyler Added support for new 'Doc' type in jobspec.
#15 28583 C. Thomas Tyler Added alias for gjh.sh utility.
#14 28058 C. Thomas Tyler Added simple fjob function to change a job status to 'fixed'.
#13 28056 C. Thomas Tyler Added new 'ofjobs' alias to report open and fixed jobs, useful
for ensuring all 'fixed' jobs are submitted for the next release.

Added new 'jo' alias to display a job with 'less' and sans the
big comment block.
#12 28004 C. Thomas Tyler Added support for jobs of type 'Problem'.
#11 26505 C. Thomas Tyler Tweaked PATH in SDP tools/env.sh to make it easier to generate
usage docs for developing SDP.

This is used only when developing the SDP; it is not part of the SDP.
#10 26417 C. Thomas Tyler Added WORKSHOP_PROJECT_TAG setting to env.sh to slow the jobs report script
to be completely generic.
#9 26360 C. Thomas Tyler Enhanced environment so sdp_jobs_report.sh can run without
having a local SDP installation.  This was done by adding
P4U_ENV and P4U_LIB settings that are based on the current
workspace structure rather than an as-deployed SDP structure.
#8 25505 C. Thomas Tyler Fixed a typo; removed inactive project members.
#7 24749 C. Thomas Tyler Added basic SDP jobs report script, and refactored aliases
to call it.
#6 24748 C. Thomas Tyler Converted ojobs from alias to function, greatly enhancned.
#5 22032 C. Thomas Tyler Tweak to take advantage of new Component field in Workshop
job spec.
#4 20647 C. Thomas Tyler Optimed env.sh for SDP for working on SDP.

Enhanced njob() function to guess at the Workshop user,
added a usage message, optimized sed, etc.
Renamed template file to avoid confusion by auto-complete
with generated job files.
#3 19405 C. Thomas Tyler Eliminated hard-coding of utility paths.
#2 18780 C. Thomas Tyler Corrected copy/paste carry over from SDP Workshop job creation
tool (originally copied from CBD tools).
#1 16680 C. Thomas Tyler Added handy environment file for working on the SDP,
filing SDP jobs, etc.  Comes with a .p4ignore file.