#!/bin/bash set -u Version=1.0.6 function msg () { echo -e "$*"; } function bail () { msg "\nError: ${1:-Unknown Error}\n"; exit ${2:-1}; } declare Owner=perforce_software declare Product=Unset declare Branch=Unset declare OutFile=/tmp/tmp.output.mdcu.$$.$RANDOM declare ChangeFile=/tmp/tmp.change.mdcu.$$.$RANDOM declare Changelist= [[ $PWD != "/pub/"* ]] && bail "This script assumes a workspace root starting with '/pub'." Product=${PWD#/pub/} Product=${Product%%/*} Cmd="p4 -s opened /pub/$Product/..." msg "Checking for any opened files:\n\t$Cmd" $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. Run only when no files are checked out. Aborting." fi msg Verified: No files checked out. if [[ $PWD == *"/dev"* ]]; then Branch=dev elif [[ $PWD == *"/ntx64"* ]]; then Branch=ntx64 else bail "Could not determine branch from current dir [$PWD]. Aborting." fi BranchSpec=$Owner-$Product-$Branch 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." # Do some quick inline Perl to generate a changelist, but ignore the # jobs picked up by JobView. p4 change -o | perl -e "while(<>){ last if /^Jobs:/; s/<enter description here>/Copy Up using 'p4 copy -r -b $BranchSpec'./g; print; }" > $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 msg "\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" msg "Doing Copy Up with:\n\t$Cmd" $Cmd < /dev/null > $OutFile 2>&1 cat $OutFile /bin/rm -f $OutFile $ChangeFile
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#6 | 21804 | C. Thomas Tyler | Fixed typo. | ||
#5 | 21802 | C. Thomas Tyler |
Added msg() function. #review-21765 |
||
#4 | 15164 | C. Thomas Tyler | Tweaked regex in egrep. | ||
#3 | 15163 | C. Thomas Tyler | Fixed bug in opened file safety check. | ||
#2 | 15085 | C. Thomas Tyler | Detects product. | ||
#1 | 15058 | C. Thomas Tyler | Added 'mdcu' (Merge Down Copy Up) dev support tool. |