# hms_exe_versions.sh Version=1.3.0 #============================================================================== # Copyright and license info is available in the LICENSE file included with # the Server Deployment Package (SDP), and also available online: # https://swarm.workshop.perforce.com/projects/perforce_software-hms/view/main/LICENSE #------------------------------------------------------------------------------ declare ExeVersionsBaseURL="https://updates.perforce.com/static" declare -A ExeVersionsURL # URL indexed by lowercase name, e.g. 'p4d'. declare -A ExeVersionsFile # Local file indexed by exe, e.g. 'p4d'. declare -A ExeVersionsDownloaded # Indication of whether new version had to # be downloaded. declare -A StagedExe # Downloaded exe, staged for upgrade. declare -A ExePatchAvailable # 1 if newer patch available, else 0. declare -A ExeUpgradeAvailable # 1 if newer major version available, else 0. declare -a HelixCoreExes declare StagingDir= HelixCoreExes[0]='p4' HelixCoreExes[1]='p4d' HelixCoreExes[2]='p4broker' HelixCoreExes[3]='p4p' ExeVersionsURL['p4']="$ExeVersionsBaseURL/P4/P4.json" ExeVersionsURL['p4d']="$ExeVersionsBaseURL/P4D/P4D.json" ExeVersionsURL['p4broker']="$ExeVersionsBaseURL/P4Broker/P4Broker.json" ExeVersionsURL['p4p']="$ExeVersionsBaseURL/P4Proxy/P4Proxy.json" ExeVersionsFile['p4']="${P4TMP:-/tmp}/P4.json" ExeVersionsFile['p4d']="${P4TMP:-/tmp}/P4D.json" ExeVersionsFile['p4broker']="${P4TMP:-/tmp}/P4Broker.json" ExeVersionsFile['p4p']="${P4TMP:-/tmp}/P4Proxy.json" StagingDir="$P4TMP/staged.$$.$RANDOM" StagedExe['p4']="$StagingDir/p4" StagedExe['p4d']="$StagingDir/p4d" StagedExe['p4broker']="$StagingDir/p4broker" StagedExe['p4p']="$StagingDir/p4p" ExeVersionsDownloaded['p4']=0 ExeVersionsDownloaded['p4d']=0 ExeVersionsDownloaded['p4broker']=0 ExeVersionsDownloaded['p4p']=0 #============================================================================== # HMS Library Functions. #------------------------------------------------------------------------------ # get_latest_exe_version (Exe, Platform) # # Input: # $1 - Exe name, e.g. 'p4d', 'p4broker', etc. # $2 - Platform (optional), e.g. 'linux2x6x86_64'; this value is the default. #------------------------------------------------------------------------------ function get_latest_exe_version () { vvmsg "CALL: get_latest_exe_version ($*)" declare Exe="${1:-Unset}" declare Platform="${2:-linux26x86_64}" } #------------------------------------------------------------------------------ # get_latest_exe_minor_version (Exe, MajorVersion, Platform) # # Input: # $1 - Exe name, e.g. 'p4d', 'p4broker', etc. # $2 - MajorVersion, e.g. 'r20' # $3 - Platform (optional), e.g. 'linux2x6x86_64'; this value is the default. #------------------------------------------------------------------------------ function get_latest_exe_patch_version () { vvmsg "CALL: get_latest_exe_patch_version ($*)" declare Exe="${1:-Unset}" declare MajorVersion="${2:-Unset}" declare Platform="${3:-linux26x86_64}" } #------------------------------------------------------------------------------ # get_latest_exe_patch_version (Exe, MajorVersion, MinorVersion, Platform) # # Input: # $1 - Exe name, e.g. 'p4d', 'p4broker', etc. # $2 - MajorVersion, e.g. 'r20' # $3 - MinorVersion, e.g. '1' (the '1' in 'r20.1'). # $4 - Platform (optional), e.g. 'linux2x6x86_64'; this value is the default. #------------------------------------------------------------------------------ function get_latest_exe_patch_version () { vvmsg "CALL: get_latest_exe_patch_version ($*)" declare Exe="${1:-Unset}" declare MajorVersion="${2:-Unset}" declare MinorVersion="${3:-Unset}" declare Platform="${4:-linux26x86_64}" } #------------------------------------------------------------------------------ function download_versions_data () { cd "${P4TMP:-/tmp}" || return 1 for exe in ${HelixCoreExes[@]}; do if [[ -r "${ExeVersionsFile[$exe]}" ]]; then msg "Using existing versions data file: ${ExeVersionsFile[$exe]}" continue fi ExeVersionsDownloaded[$exe]=1 if curl -s -k -O "${ExeVersionsURL[$exe]}"; then msg "Downloaded ${ExeVersionsFile[$exe]}" else errmsg "Failed to download from URL: ${ExeVersionsURL[$exe]}" fi done cd - > /dev/null 2>&1 ||: } #------------------------------------------------------------------------------ function load_exe_versions () { declare -i Force="${1:-0}" if [[ "$Force" -eq 1 || ! -r "$ExeVersionsFile" ]]; then download_versions_data ExeVersionsDataLoaded=0 fi [[ "$ExeVersionsDataLoaded" -eq 0 && "$Force" -eq 0 ]] && return }
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#2 | 30242 | C. Thomas Tyler | Updated package reference in LICENSE to refer to HMS rather than SDP license. | ||
#1 | 29182 | C. Thomas Tyler |
Moved HMS files from /p4/common/bin -> /p4/common/site/bin. Moved HMS files from /p4/common/lib -> /p4/common/site/lib. Removed dependency on SDP libs so that HMS can be deployed with a wider variety of SDP versions. |
||
//guest/perforce_software/hms/dev/p4/common/lib/hms_exe_versions.sh | |||||
#5 | 27748 | C. Thomas Tyler |
First pass at "outer to inner" implementation, adding a new test for same. Removed some DEMO HACK code; more to be removed. |
||
#4 | 27694 | C. Thomas Tyler | Copyright Update; non-functional change. | ||
#3 | 27310 | C. Thomas Tyler | Enhanced assignment per shellcheck. | ||
#2 | 26713 | C. Thomas Tyler |
WIP. Logic now supports downloading version data files published to updates.perforce.com. |
||
#1 | 26538 | C. Thomas Tyler | Added preliminary files contributing to "hms upgrade", etc. |