mdcu.sh #2

  • //
  • guest/
  • perforce_software/
  • sdp/
  • tools/
  • mdcu.sh
  • View
  • Commits
  • Open Download .zip Download (3 KB)
#!/bin/bash
set -u
Version=1.0.5

function msg () { echo -e "$*"; }
function bail () { msg "\nError: ${1:-Unknown Error}\n"; exit ${2:-1}; }

declare Owner=perforce_software
declare Product=Unset
declare DevBranch=Unset
declare RelString=
declare RelDate=
declare IsPartial=Unset
declare VersionFile=
declare TmpDir=$(mktemp -d)
declare OutFile=$TmpDir/output
declare RelString=
declare ChangeFile=$TmpDir/change.p4s
declare Changelist=

[[ $PWD != "/pub/"* ]] && bail "This script assumes a workspace root starting with '/pub'."

Product=${PWD#/pub/}
Product=${Product%%/*}

if [[ $PWD == *"/dev"* ]]; then
   DevBranch=dev
elif [[ $PWD == *"/ntx64"* ]]; then
   Branch=ntx64
else
   bail "Could not determine branch from current dir [$PWD]. Aborting."
fi

for branch in main $DevBranch; do
   Cmd="p4 -s opened /pub/$Product/$branch/..."
   msg "Checking for any opened file in $branch branch."

   $Cmd < /dev/null > $OutFile 2>&1

   egrep "error: .* - file\(s\) not opened on this client." $OutFile > /dev/null

   if [[ $? -ne 0 ]]; then
      cat $OutFile
      bail "Files are checked out in $branch branch.  Run only when no files are checked out in main or the dev branch to promote.  Aborting."
fi

   msg Verified: No files checked out in $branch branch.

done

BranchSpec=$Owner-$Product-$DevBranch

Cmd="p4 -s merge -n -b $BranchSpec"
msg "Doing Merge Down Preview with:\n\t$Cmd"

$Cmd < /dev/null > $OutFile 2>&1

grep 'error: All revision(s) already integrated.' $OutFile > /dev/null

if [[ $? -ne 0 ]]; then
   cat $OutFile
   bail "Merge work required.  Aborting."
fi

msg "\nVerified: No merge down required.  Proceeding with Copy Up."

VersionFile=/pub/$Product/$DevBranch/Version

[[ -r $VersionFile ]] || bail "Could not read version file [$VersionFile]. Aborting."

RelString=$(cat $VersionFile)
RelString=${RelString##*MultiArch/}
RelString=${RelString%% *}
RelString=${RelString/\//\.}
RelDate=$(cat $VersionFile)
RelDate=${RelDate##* }
RelDate=${RelDate%\.}

while [[ $IsPartial == Unset ]]; do
   echo -e -n "\nIs this to be a partial release? (y/[n]): "
   read -e IsPartial
   IsPartial=$(echo $IsPartial | tr '[:lower:]' '[:upper:]')
   if [[ $IsPartial != Y && $IsPartial != N ]]; then
      msg "\nInalid input; enter y or n only please."
      IsPartial=Unset
   fi
done

echo -e "Change: new\n
Description:
\tReleased SDP $RelString $RelDate." > $ChangeFile

if [[ $IsPartial == Y ]]; then
   echo -e "\tCopy Up using 'p4 copy -r -b perforce_software-sdp-dev'," >> $ChangeFile
   echo -e "\twith selective removal of work-in-progress files." >> $ChangeFile
else
   echo -e "\tCopy Up using 'p4 copy -r -b perforce_software-sdp-dev'." >> $ChangeFile
fi

msg CF=
cat $ChangeFile

p4 change -i < $ChangeFile > $OutFile 2>&1

egrep 'Change \d+ created.' $OutFile

if [[ $? -ne 0 ]]; then
   cat $OutFile
   bail "Failed to create pending changelist. Aborting."
fi

# Parse the generated changelist number from the output file.
Changelist=$(cat $OutFile)
Changelist=${Changelist#Change }
Changelist=${Changelist%% *}
Changelist=$(echo $Changelist)

Cmd="p4 -ztag -F %change% interchanges -r -b $BranchSpec"
$Cmd < /dev/null > $OutFile 2>&1
cat $OutFile

echo -e "\n============\nDescribing changes to help build a good Promotion changelist description.D"

while read c; do
   Cmd="p4 describe -s $c"
   $Cmd
done < $OutFile

Cmd="p4 -s copy -c $Changelist -r -b $BranchSpec"
echo -e "Doing Copy Up with:\n\t$Cmd"

$Cmd < /dev/null > $OutFile 2>&1
cat $OutFile

[[ -d "$TmpDir" ]] && /bin/rm -rf "$TmpDir"
# Change User Description Committed
#6 25932 C. Thomas Tyler Adjusted mdcu.sh script because 'Files not checked out' and
'All revisions already integrated' messages were changed
from 'error:' to 'warning:' along the way (which is more appropriate).

Also made mdcu.sh shellcheck compliant (v0.6.0).
#5 21523 C. Thomas Tyler Minor tweak to make it easier to submit.
#4 21031 C. Thomas Tyler Removed silly dependency on workspace root starting with /pub.
#3 20576 C. Thomas Tyler Removed noise; accounted for new process based on jobs.
#2 20520 C. Thomas Tyler Enhanced mdcu.sh script.
#1 16681 C. Thomas Tyler Added basic Merge Down/Copy Up script for working on the
SDP.