p4ms_exe_versions.sh #2

  • //
  • p4ms/
  • dev/
  • p4/
  • common/
  • site/
  • lib/
  • p4ms_exe_versions.sh
  • View
  • Commits
  • Open Download .zip Download (5 KB)
# hms_exe_versions.sh
Version=1.3.1

#==============================================================================
# Copyright and license info is available in the LICENSE file included with
# the Helix Management System (HMS), 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 31810 C. Thomas Tyler Post-refactoring cleanup.
#1 31797 C. Thomas Tyler p4 merge -b HMS_to_P4MS; p4 resolve -as; p4 submit
//guest/perforce_software/hms/dev/p4/common/site/lib/hms_exe_versions.sh
#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.