# hms_exe_versions.sh
Version=1.2.1
#==============================================================================
# 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 | |
|---|---|---|---|---|---|
| #6 | 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. |
||
| #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. |