ds #1

  • //
  • guest/
  • tom_tyler/
  • sw/
  • main/
  • install_sdp/
  • dev/
  • bin/
  • ds
  • View
  • Commits
  • Open Download .zip Download (2 KB)
# Diff vs. shelf
function diff_vs_shelf {
   local shelvedChange=${1:-}
   local workspace=
   local filesTmpFile=
   local diffTmpFile=
   local exitCode=0

   if [[ -z "$shelvedChange" ]]; then
      workspace=$(p4 set -q P4CLIENT|cut -d= -f2)
      if [[ -n "$workspace" ]]; then
         shelvedChange=$(p4 -ztag -F %change% changes -s shelved -c "$workspace" -m 1)
         if [[ -z "$shelvedChange" ]]; then
            echo "Error: Could not determine shelf to diff against."
            return 1
	 fi
      else
         echo "Error: Could not determine current workspace."
         return 1
      fi
   fi

   filesTmpFile=$(mktemp)
   p4 -ztag -F %depotFile% files "@=$shelvedChange" > "$filesTmpFile"

   if [[ -s "$filesTmpFile" ]]; then
      echo "Showing diffs for files in shelved change @$shelvedChange:"
   else
      echo "Error: No files found in change @$shelvedChange."
      return 1
   fi

   diffTmpFile=$(mktemp)

   while read -r file; do
      p4 diff "$file@=$shelvedChange" > "$diffTmpFile" 2>&1
      lineCount=$(wc -l "$diffTmpFile"| awk '{print $1}')
      if [[ "$lineCount" -gt 1 ]]; then
         if grep -q ^=== "$diffTmpFile"; then
	    cat "$diffTmpFile"
	 else
	    echo "Error: Could not get diffs for $file@=$shelvedChange"
	    exitCode=1
	 fi
      else
         if grep -q ^=== "$diffTmpFile"; then
            : No diffs. Do nothing.
	 else
	    echo "Error: Could not get diffs for $file@=$shelvedChange"
	    exitCode=1
	 fi
      fi
   done < "$filesTmpFile"

   rm -f "$filesTmpFile" "$diffsTmpFile"

   return "$exitCode"
}

diff_vs_shelf "${1:-}"
# Change User Description Committed
#1 30693 C. Thomas Tyler Added dev utils and tests.