forked from HPR/hpr-tools
		
	Updates since 2024-06-15
Database/query2tt2: comment and documentation updates; use of Perl's
    try/catch.
InternetArchive/.make_metadata.cfg: added comments for readability
InternetArchive/make_metadata: bug fix needed now that all shows on the HPR server have
    a directory with assets under it.
InternetArchive/repair_assets: new Bash script in development. Collects
    assets from the IA and uploads them to a new directory on the HPR
    server. Will run 'fix_asset_links' (to repair asset links for their
    new directories) once it is ready.
InternetArchive/repair_item: Bash script which was originally written to
    run on 'borg' and upload files to a new IA item when the uploads
    timed out. Now enhanced to upload missing files recovered from the
    HPR backup disk, such as transcripts.
			
			
This commit is contained in:
		
							
								
								
									
										627
									
								
								InternetArchive/repair_assets
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										627
									
								
								InternetArchive/repair_assets
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,627 @@ | ||||
| #!/bin/bash - | ||||
| #=============================================================================== | ||||
| # | ||||
| #         FILE: repair_assets | ||||
| # | ||||
| #        USAGE: ./repair_assets showid | ||||
| # | ||||
| #  DESCRIPTION: Given a show where there was a directory of asset files on the | ||||
| #               old HPR server whichj got lost in the migration, rebuild it | ||||
| #               and fill it with assets from the IA. Modify the show notes to | ||||
| #               point to these recovered assets. | ||||
| # | ||||
| #      OPTIONS: --- | ||||
| # REQUIREMENTS: --- | ||||
| #         BUGS: --- | ||||
| #        NOTES: --- | ||||
| #       AUTHOR: Dave Morriss (djm), Dave.Morriss@gmail.com | ||||
| #      VERSION: 0.0.6 | ||||
| #      CREATED: 2024-05-10 21:26:31 | ||||
| #     REVISION: 2024-07-10 15:12:54 | ||||
| # | ||||
| #=============================================================================== | ||||
|  | ||||
| # set -o nounset                              # Treat unset variables as an error | ||||
|  | ||||
| VERSION="0.0.6" | ||||
|  | ||||
| SCRIPT=${0##*/} | ||||
| # DIR=${0%/*} | ||||
|  | ||||
| STDOUT="/dev/fd/2" | ||||
|  | ||||
| # | ||||
| # Select the appropriate working directory for the host | ||||
| # | ||||
| case $(hostname) in | ||||
|     i7-desktop) | ||||
|         BASEDIR="$HOME/HPR/InternetArchive" | ||||
|         ;; | ||||
|     borg) | ||||
|         BASEDIR="$HOME/IA" | ||||
|         ;; | ||||
|     *) | ||||
|         echo "Wrong host!" | ||||
|         exit 1 | ||||
|         ;; | ||||
| esac | ||||
|  | ||||
| cd "$BASEDIR" || { echo "Failed to cd to $BASEDIR"; exit 1; } | ||||
|  | ||||
| # | ||||
| # Load library functions | ||||
| # | ||||
| LIB="$HOME/HPR/function_lib.sh" | ||||
| [ -e "$LIB" ] || { echo "Unable to source functions"; exit; } | ||||
| # shellcheck disable=SC1090 | ||||
| source "$LIB" | ||||
|  | ||||
| # | ||||
| # Enable coloured messages | ||||
| # | ||||
| define_colours | ||||
|  | ||||
| # | ||||
| # Sanity checks | ||||
| # | ||||
| IA=$(command -v ia) | ||||
| [ -n "$IA" ] || { echo "Program 'ia' was not found"; exit 1; } | ||||
| Q2T=$(command -v query2tt2) | ||||
| [ -n "$Q2T" ] || { echo "Program 'query2tt2' was not found"; exit 1; } | ||||
| FIXAL="$BASEDIR/fix_asset_links" | ||||
| [ -e "$FIXAL" ] || { echo "Program '$FIXAL' was not found"; exit 1; } | ||||
|  | ||||
| # | ||||
| # Make temporary files and set traps to delete them | ||||
| # | ||||
| TMP1=$(mktemp) || { echo "$SCRIPT: creation of temporary file failed!"; exit 1; } | ||||
| TMP2=$(mktemp) || { echo "$SCRIPT: creation of temporary file failed!"; exit 1; } | ||||
| trap 'cleanup_temp $TMP1 $TMP2' SIGHUP SIGINT SIGPIPE SIGTERM EXIT | ||||
|  | ||||
| # {{{ -- Functions -- _verbose, _usage, _log, find_missing, make_dir | ||||
|  | ||||
| #===  FUNCTION  ================================================================ | ||||
| #         NAME: find_missing | ||||
| #  DESCRIPTION: Given two arrays containing IA assets and HPR assets, | ||||
| #               determine which IA assets are missing from the HPR list. | ||||
| #   PARAMETERS: $1      (nameref) IA list | ||||
| #               $2      (nameref) HPR list | ||||
| #               $3      Name of array to receive list of missing assets | ||||
| #      RETURNS: Nothing | ||||
| #=============================================================================== | ||||
| find_missing () { | ||||
|     local -n IA="${1}" | ||||
|     local -n HPR="${2}" | ||||
|     local output="${3}" | ||||
|  | ||||
|     local -A hIA hHPR | ||||
|     local i key | ||||
|  | ||||
|     # | ||||
|     # Make a hash keyed by the IA file base names from an indexed array | ||||
|     # | ||||
|     for (( i=0; i<${#IA[@]}; i++ )); do | ||||
|         hIA+=([${IA[$i]##*/}]=${IA[$i]}) | ||||
|     done | ||||
|  | ||||
|     # | ||||
|     # Make a hash keyed by the HPR file base names from an indexed array | ||||
|     # | ||||
|     for (( i=0; i<${#HPR[@]}; i++ )); do | ||||
|         hHPR+=([${HPR[$i]##*/}]=${HPR[$i]}) | ||||
|     done | ||||
|  | ||||
|     # | ||||
|     # Use the basename keys to check what's missing, but return the full path | ||||
|     # names. | ||||
|     # | ||||
|     for key in "${!hIA[@]}"; do | ||||
|         if ! exists_in hHPR "$key"; then | ||||
|             eval "$output+=('${hIA[$key]}')" | ||||
|         fi | ||||
|     done | ||||
| } | ||||
|  | ||||
| #===  FUNCTION  ================================================================ | ||||
| #         NAME: make_dir | ||||
| #  DESCRIPTION: Make a directory if it doesn't exist, failing gracefully on | ||||
| #               errors. | ||||
| #   PARAMETERS: $1      directory path | ||||
| #      RETURNS: True if success, otherwise exits the caller script | ||||
| #=============================================================================== | ||||
| make_dir () { | ||||
|     local dir="${1}" | ||||
|  | ||||
|     if [[ ! -d $dir ]]; then | ||||
|         mkdir -p "$dir" || { | ||||
|             coloured 'red' "Failed to create $dir" | ||||
|             exit 1 | ||||
|         } | ||||
|     fi | ||||
| } | ||||
|  | ||||
| #===  FUNCTION  ================================================================ | ||||
| #         NAME: _verbose | ||||
| #  DESCRIPTION: Writes a message in verbose mode | ||||
| #   PARAMETERS: *       message strings to write | ||||
| #      RETURNS: Nothing | ||||
| #=============================================================================== | ||||
| _verbose () { | ||||
|     [ "$VERBOSE" -eq 0 ] && return | ||||
|     for msg; do | ||||
|         printf '%s\n' "$msg" | ||||
|     done | ||||
| } | ||||
|  | ||||
| #===  FUNCTION  ================================================================ | ||||
| #         NAME: _log | ||||
| #  DESCRIPTION: Appends a record to the file "$LOGFILE" | ||||
| #   PARAMETERS: $1      Message to write | ||||
| #      RETURNS: Nothing | ||||
| #=============================================================================== | ||||
| _log () { | ||||
|     local message="${1}" | ||||
|  | ||||
|     echo "$(date +%F\ %T) $message" >> "$LOGFILE" | ||||
| } | ||||
|  | ||||
| #===  FUNCTION  ================================================================ | ||||
| #         NAME: _usage | ||||
| #  DESCRIPTION: Reports usage; always exits the script after doing so | ||||
| #   PARAMETERS: 1 - the integer to pass to the 'exit' command | ||||
| #      RETURNS: Nothing | ||||
| #=============================================================================== | ||||
| _usage () { | ||||
|     local -i result=${1:-0} | ||||
|  | ||||
|     cat >$STDOUT <<-endusage | ||||
| ${SCRIPT} - version: ${VERSION} | ||||
|  | ||||
| Usage: ./${SCRIPT} [-h] [-v] [-d {0|1}] [-D] showid | ||||
|  | ||||
| Attempts to repair an show where the directory of assets was not transferred | ||||
| from the old HPR server. | ||||
|  | ||||
| Options: | ||||
|   -h                    Print this help | ||||
|   -v                    Run in verbose mode where more information is | ||||
|                         reported. Default is off. If -v is repeated it | ||||
|                         increases the verbosity level (levels 1 and 2 only). | ||||
|   -d 0|1                Dry run: -d 1 (the default) runs the script in dry-run | ||||
|                         mode where nothing is changed but the actions that | ||||
|                         will be taken are reported; -d 0 turns off dry-run | ||||
|                         mode and the actions will be carried out. | ||||
|   -D                    Run in debug mode where a lot more information is | ||||
|                         reported | ||||
|  | ||||
| Arguments: | ||||
|     showid              The show id in the form 'hpr1234' | ||||
|  | ||||
| endusage | ||||
|     exit "$result" | ||||
| } | ||||
|  | ||||
| # }}} | ||||
|  | ||||
| #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||||
|  | ||||
| #------------------------------------------------------------------------------- | ||||
| # Directories and files | ||||
| #------------------------------------------------------------------------------- | ||||
| LOGS="$BASEDIR/logs" | ||||
| make_dir "${LOGS}" | ||||
| LOGFILE="$LOGS/$SCRIPT.log" | ||||
|  | ||||
| #------------------------------------------------------------------------------- | ||||
| # Options | ||||
| #------------------------------------------------------------------------------- | ||||
| # Default settings | ||||
| # | ||||
| VERBOSE=0 | ||||
|  | ||||
| # | ||||
| # Process options | ||||
| # | ||||
| while getopts :d:Dhv opt | ||||
| do | ||||
|     case "${opt}" in | ||||
|         D) DEBUG=1;; | ||||
|         d) DRYRUN=$OPTARG;; | ||||
|         h) _usage 0;; | ||||
|         v) ((VERBOSE++));; | ||||
|         *) echo "** Unknown option" | ||||
|            _usage 1;; | ||||
|     esac | ||||
| done | ||||
| shift $((OPTIND - 1)) | ||||
|  | ||||
| # | ||||
| # Set option defaults and check their values | ||||
| # | ||||
| DRYRUN=${DRYRUN:-1} | ||||
| if [[ $DRYRUN -ne 0 && $DRYRUN -ne 1 ]]; then | ||||
|     coloured 'red' "** Use '-d 0' or '-d 1'" | ||||
|     _usage 1 | ||||
| fi | ||||
| [[ $VERBOSE -gt 0 && $DRYRUN -eq 1 ]] && echo "Dry run mode" | ||||
|  | ||||
| DEBUG=${DEBUG:-0} | ||||
| [[ $DEBUG -eq 1 ]] && coloured 'yellow' "Debug mode" | ||||
|  | ||||
| #------------------------------------------------------------------------------- | ||||
| # Argument check | ||||
| #------------------------------------------------------------------------------- | ||||
| # Should have one argument | ||||
| # | ||||
| if [[ $# != 1 ]]; then | ||||
|     coloured 'red' "Missing argument" | ||||
|     _usage 1 | ||||
| fi | ||||
| show="${1,,}" | ||||
|  | ||||
| # | ||||
| # Ensure show id is correctly formatted. We want it to be 'hpr1234' | ||||
| # | ||||
| if [[ $show =~ (hpr)?([0-9]+) ]]; then | ||||
|     printf -v show 'hpr%04d' "${BASH_REMATCH[2]}" | ||||
| else | ||||
|     coloured 'red' "Incorrect show specification: $show" | ||||
|     coloured 'yellow' "Use 'hpr9999' or '9999' format" | ||||
|     exit 1 | ||||
| fi | ||||
| _DEBUG "Parsed item: $show" | ||||
| echo "Processing show $show" | ||||
| _log "Processing show $show; dry-run: $([ "$DRYRUN" -eq 1 ] && echo "on" || echo "off")" | ||||
|  | ||||
| #------------------------------------------------------------------------------- | ||||
| # Declarations and constants | ||||
| #------------------------------------------------------------------------------- | ||||
| declare -a iacache | ||||
|  | ||||
| # | ||||
| # SHOWURL is where the show will be on the webserver | ||||
| # | ||||
| printf -v SHOWURL 'https://hackerpublicradio.org/eps/%s/index.html' "$show" | ||||
|  | ||||
| # | ||||
| # CACHEDIR is where we store asset details and files | ||||
| # | ||||
| CACHEDIR="$BASEDIR/assets" | ||||
| [ ! -d "$CACHEDIR" ] && { | ||||
|     coloured 'red' "Creating cache directory" | ||||
|     make_dir "$CACHEDIR" | ||||
| } | ||||
|  | ||||
| # | ||||
| # Pointers into the cache: | ||||
| # LOCAL_ASSETDIR  - where the cache for this show lives | ||||
| # LOCAL_FILEDIR   - where the IA files have been placed | ||||
| # LOCAL_PARENTDIR - the equivalent directory to the top show dir | ||||
| # | ||||
| LOCAL_ASSETDIR="$CACHEDIR/${show}" | ||||
| LOCAL_FILEDIR="$LOCAL_ASSETDIR/files" | ||||
| LOCAL_PARENTDIR="$LOCAL_FILEDIR/${show}" | ||||
|  | ||||
| # | ||||
| # Pointers to the HPR server directories: | ||||
| # REMOTE_ASSETDIR  - where the assets are to go | ||||
| # REMOTE_PARENTDIR - the remote parent directory | ||||
| # | ||||
| REMOTE_ASSETDIR="public_html/eps/${show}/${show}" | ||||
| REMOTE_PARENTDIR="public_html/eps/${show}" | ||||
|  | ||||
| CMDTPL='ssh hpr@hackerpublicradio.org %s' | ||||
|  | ||||
| MANIFEST="$CACHEDIR/$show/manifest" | ||||
| DBNOTES="$CACHEDIR/$show/notes.html" | ||||
|  | ||||
| #------------------------------------------------------------------------------- | ||||
| # Check the show exists in the database (or is visible on the website). | ||||
| #------------------------------------------------------------------------------- | ||||
| _verbose "Checking the show exists on the HPR server" | ||||
| result=$(curl --head --silent --write-out "%{http_code}" --output /dev/null "$SHOWURL") | ||||
| if [[ $result -eq 404 ]]; then | ||||
|     coloured 'red' "Could not detect show '$show' on the HPR server" | ||||
|     _log "Show '$show' not on the HPR server" | ||||
|     exit 1 | ||||
| fi | ||||
|  | ||||
| #------------------------------------------------------------------------------- | ||||
| # Check the show exists on the IA | ||||
| #------------------------------------------------------------------------------- | ||||
| _verbose "Checking the show exists on the IA server" | ||||
| if ! ia metadata "$show" --exists > /dev/null 2>&1; then | ||||
|     coloured 'red' "Could not detect show '$show' on the IA server" | ||||
|     coloured 'yellow' "Check that archive.org is available" | ||||
|     coloured 'yellow' "Try https://downfor.io/internet-archive" | ||||
|     _log "Show '$show' not on the IA server" | ||||
|     exit 1 | ||||
| fi | ||||
|  | ||||
| #------------------------------------------------------------------------------- | ||||
| # Check IA, collect contents, classify them | ||||
| #------------------------------------------------------------------------------- | ||||
| # Interrogate the IA for the required item contents. If it returns True we can | ||||
| # collect its contents, otherwise we can't proceed. The file 'TMP1' contains | ||||
| # just a simple list of the files on the IA relating to this item. | ||||
| # | ||||
| _verbose "Collecting filenames from the IA server" | ||||
| if ia list "$show" > "$TMP1"; then | ||||
|     while read -r iafile; do | ||||
|         iacache+=("$iafile") | ||||
|     done < "$TMP1" | ||||
| else | ||||
|     coloured 'red' "Item $show can't be found on the IA" | ||||
|     coloured 'red' "Can't continue" | ||||
|     _log "Files for show '$show' not on the IA server" | ||||
|     exit 1 | ||||
| fi | ||||
|  | ||||
| _DEBUG "$(printf '%s\n' "${iacache[@]}")" | ||||
|  | ||||
| # | ||||
| # Determine which files are assets | ||||
| # | ||||
| _verbose "Categorising files held on the IA" | ||||
|  | ||||
| declare -a audio ia_transcript ia_asset | ||||
|  | ||||
| audio_re="^${show}\.(flac|mp3|ogg|opus|spx|wav)\$" | ||||
| # transcript_re="^${show}/${show}/${show}\.(json|srt|tsv|txt|vtt)\$" | ||||
| transcript_re="^${show}/${show}\.(json|srt|tsv|txt|vtt)\$" | ||||
| asset_re="^${show}/(${show}/)?.*\$" | ||||
| metadata_re="^(__ia_thumb.jpg|${show}[^/]+\.(afpk|torrent|gz|xml|sqlite|png))\$" | ||||
|  | ||||
| for file in "${iacache[@]}"; do | ||||
|     if [[ $file =~ $audio_re ]]; then | ||||
|         audio+=("$file") | ||||
|     elif [[ $file =~ $metadata_re ]]; then | ||||
|         _verbose "Skipping $file" | ||||
|         continue | ||||
|     elif [[ $file =~ $transcript_re ]]; then | ||||
|         ia_transcript+=("$file") | ||||
|     elif [[ $file =~ $asset_re ]]; then | ||||
|         ia_asset+=("$file") | ||||
|     fi | ||||
| done | ||||
|  | ||||
| # | ||||
| # Report what was collected at verbosity level 2 | ||||
| # | ||||
| if [[ $VERBOSE -gt 1 ]]; then | ||||
|     coloured 'cyan' "** audio (${#audio[@]}):" | ||||
|     printf '%s\n' "${audio[@]}" | ||||
|  | ||||
|     coloured 'cyan' "** transcript (${#ia_transcript[@]}):" | ||||
|     printf '%s\n' "${ia_transcript[@]}" | ||||
|  | ||||
|     coloured 'cyan' "** asset (${#ia_asset[@]}):" | ||||
|     printf '%s\n' "${ia_asset[@]}" | ||||
|  | ||||
|     _log "IA asset count for show '$show' = ${#ia_asset[@]}" | ||||
| fi | ||||
|  | ||||
| # | ||||
| # No assets, no need to proceed! | ||||
| # | ||||
| if [[ ${#ia_asset[@]} -eq 0 ]]; then | ||||
|     coloured 'green' "No IA assets found for show $show; nothing to do" | ||||
|     _log "Nothing to do for show $show" | ||||
|     exit | ||||
| fi | ||||
|  | ||||
| #------------------------------------------------------------------------------- | ||||
| # Check what's on the HPR server | ||||
| #------------------------------------------------------------------------------- | ||||
| # | ||||
| # 'rc' is the remote command template | ||||
| # | ||||
| printf -v rc 'find public_html/eps/%s -type f -printf "%s/%%P\\n"' "$show" "$show" | ||||
|  | ||||
| # | ||||
| # 'command' is the local command we'll run to run a remote command on the HPR | ||||
| # server | ||||
| # | ||||
| # shellcheck disable=SC2059 disable=SC2089 | ||||
| printf -v command "$CMDTPL" "'$rc'" | ||||
|  | ||||
| if [[ $VERBOSE -gt 1 ]]; then | ||||
|     echo "Command: $command" | ||||
| fi | ||||
|  | ||||
| declare -a hpr_asset | ||||
| ignore_re="index.html$" | ||||
|  | ||||
| # | ||||
| # Run the command and save the output. Save the asset names returned in an | ||||
| # array. TODO: Handle errors from the command | ||||
| # | ||||
| if [[ $DRYRUN -eq 0 ]]; then | ||||
|     eval "$command" > "$TMP2" | ||||
|     RES=$? | ||||
|     if [[ $RES -eq 0 ]]; then | ||||
|         _verbose "$(coloured 'green' "Remote command successful")" | ||||
|         while read -r hprfile; do | ||||
|             if [[ ! $hprfile =~ $ignore_re ]]; then | ||||
|                 hpr_asset+=("${hprfile}") | ||||
|             fi | ||||
|         done < "$TMP2" | ||||
|         _verbose "$(coloured 'green' "Assets found on HPR server = ${#hpr_asset[@]}")" | ||||
|         _verbose "$(printf '%s\n' "${hpr_asset[@]}")" | ||||
|         _log "Assets found on HPR server = ${#hpr_asset[@]}" | ||||
|     else | ||||
|         coloured 'red' "Remote command failed" | ||||
|         _log "Failed while searching for HPR assets" | ||||
|         exit 1 | ||||
|     fi | ||||
| else | ||||
|     coloured 'yellow' "Would have searched for assets on the HPR server" | ||||
| fi | ||||
|  | ||||
| #------------------------------------------------------------------------------- | ||||
| # Compare the two asset lists and return what's missing on the HPR server | ||||
| #------------------------------------------------------------------------------- | ||||
| declare -a missing | ||||
| find_missing ia_asset hpr_asset missing | ||||
| _verbose "$(coloured 'cyan' "** missing (${#missing[@]}):")" | ||||
| _verbose "$(printf '%s\n' "${missing[@]}")" | ||||
|  | ||||
| if [[ ${#missing[@]} -eq 0 ]]; then | ||||
|     coloured 'green' "No missing assets detected; nothing to do" | ||||
|     _log "No missing assets detected; nothing to do" | ||||
|     exit | ||||
| else | ||||
|     coloured 'yellow' "Found ${#missing[@]} files missing on the HPR server" | ||||
| fi | ||||
|  | ||||
| #------------------------------------------------------------------------------- | ||||
| # Prepare to copy the missing files | ||||
| #------------------------------------------------------------------------------- | ||||
| make_dir "$LOCAL_FILEDIR" | ||||
|  | ||||
| declare -a downloads | ||||
|  | ||||
| # | ||||
| # Check whether files are already downloaded | ||||
| # | ||||
| for file in "${missing[@]}"; do | ||||
|     if [[ ! -e "$LOCAL_FILEDIR/$show/$file" ]]; then | ||||
|         downloads+=("$file") | ||||
|     fi | ||||
| done | ||||
|  | ||||
| _verbose "$(coloured 'cyan' "** downloads (${#downloads[@]}):")" | ||||
| _verbose "$(printf '%s\n' "${downloads[@]}")" | ||||
|  | ||||
| # | ||||
| # If we have files to download get them now | ||||
| # | ||||
| if [[ ${#downloads[@]} -gt 0 ]]; then | ||||
|     if [[ $DRYRUN -eq 1 ]]; then | ||||
|         coloured 'yellow' "Would have downloaded missing files from the IA" | ||||
|     else | ||||
|         ia download "$show" --destdir="$LOCAL_FILEDIR" "${downloads[@]}" | ||||
|         RES=$? | ||||
|         if [[ $RES -eq 0 ]]; then | ||||
|             coloured 'green' "Downloads complete" | ||||
|             _log "Downloaded IA assets for show $show" | ||||
|         fi | ||||
|     fi | ||||
| else | ||||
|     coloured 'yellow' "IA files are already downloaded" | ||||
| fi | ||||
|  | ||||
| # shellcheck disable=SC2089 | ||||
| RSYNCTPL="rsync -a -e 'ssh' %s hpr@hpr:%s" | ||||
|  | ||||
| #------------------------------------------------------------------------------- | ||||
| # Build the 'ssh' command to make a directory | ||||
| #------------------------------------------------------------------------------- | ||||
| # | ||||
| # Prepare to make the remote directory if necessary. | ||||
| # | ||||
| # - $rc is the remote command we'll run on the server | ||||
| # - $command is the full 'ssh' command including $rc | ||||
| # | ||||
| printf -v rc 'if [ ! -e "%s" ]; then mkdir -p "%s"; fi' \ | ||||
|     "$REMOTE_ASSETDIR" "$REMOTE_ASSETDIR" | ||||
|  | ||||
| # shellcheck disable=SC2059 disable=SC2089 | ||||
| printf -v command "$CMDTPL" "'$rc'" | ||||
|  | ||||
| #------------------------------------------------------------------------------- | ||||
| # Run or report the command that would be run | ||||
| #------------------------------------------------------------------------------- | ||||
| if [[ $DRYRUN -eq 0 ]]; then | ||||
|     eval "$command" | ||||
|     RES=$? | ||||
|     if [[ $RES -eq 0 ]]; then | ||||
|         coloured 'green' "Remote directory creation successful" | ||||
|     else | ||||
|         coloured 'red' "Remote directory creation failed" | ||||
|     fi | ||||
| else | ||||
|     coloured 'yellow' "Would have created the remote directory" | ||||
|     echo "$command" | ||||
| fi | ||||
|  | ||||
| #------------------------------------------------------------------------------- | ||||
| # Synchronise assets to the directory | ||||
| #------------------------------------------------------------------------------- | ||||
| # shellcheck disable=SC2059 disable=SC2089 | ||||
| printf -v command "$RSYNCTPL" "$LOCAL_PARENTDIR/" "$REMOTE_PARENTDIR/" | ||||
|  | ||||
| if [[ $DRYRUN -eq 0 ]]; then | ||||
|     eval "$command" | ||||
|     RES=$? | ||||
|     if [[ $RES -eq 0 ]]; then | ||||
|         coloured 'green' "Remote upload successful" | ||||
|         _log "Uploaded assets for show $show" | ||||
|     else | ||||
|         coloured 'red' "Remote upload failed" | ||||
|         exit 1 | ||||
|     fi | ||||
| else | ||||
|     coloured 'yellow' "Would have synchronised local assets with the remote directory" | ||||
|     echo "$command" | ||||
| fi | ||||
|  | ||||
| #------------------------------------------------------------------------------- | ||||
| # Make a 'manifest' file if necessary | ||||
| #------------------------------------------------------------------------------- | ||||
| if [[ $DRYRUN -eq 0 ]]; then | ||||
|     if [[ ! -e $MANIFEST ]]; then | ||||
|         find "$LOCAL_PARENTDIR" -type f -printf '%P\n' > "$MANIFEST" | ||||
|         _verbose "$(coloured 'green' "Created manifest file")" | ||||
|         _log "Created manifest file $MANIFEST" | ||||
|     fi | ||||
| fi | ||||
|  | ||||
| #------------------------------------------------------------------------------- | ||||
| # Save the notes from the database if necessary | ||||
| #------------------------------------------------------------------------------- | ||||
| if [[ $DRYRUN -eq 0 ]]; then | ||||
|     if [[ ! -e $DBNOTES ]]; then | ||||
|         if ! tunnel_is_open; then | ||||
|             open_tunnel | ||||
|         fi | ||||
|         if query2tt2 -config="$BASEDIR/.hpr_livedb.cfg" \ | ||||
|                 -temp="$BASEDIR/query2tt2_nokey.tpl" \ | ||||
|                 -out="$DBNOTES" \ | ||||
|                 -dbarg="${show:3}" \ | ||||
|                 'select notes from eps where id = ?' | ||||
|         then | ||||
|             _verbose "$(coloured 'green' "Created notes file")" | ||||
|             _log "Created notes file $DBNOTES" | ||||
|         else | ||||
|             _verbose "$(coloured 'red' "Creation of notes file failed")" | ||||
|             _log "Creation of notes file $DBNOTES failed" | ||||
|         fi | ||||
|     fi | ||||
| fi | ||||
|  | ||||
| #------------------------------------------------------------------------------- | ||||
| # Adjust the notes with 'fix_asset_links' | ||||
| #------------------------------------------------------------------------------- | ||||
| if [[ $DRYRUN -eq 0 ]]; then | ||||
|     echo "$FIXAL" | ||||
|     # $FIXAL | ||||
| fi | ||||
|  | ||||
|  | ||||
| # | ||||
| # All done | ||||
| # | ||||
| if [[ $DRYRUN -eq 0 ]]; then | ||||
|     _log "Repaired show $show" | ||||
| fi | ||||
|  | ||||
| #------------------------------------------------------------------------------- | ||||
| # √ Make a place to hold the files on this machine | ||||
| # √ Download them from the IA | ||||
| # √ Make a directory on the HPR server | ||||
| # √ Copy the assets to the HPR server | ||||
| #   Modify the notes to point to the assets on the server | ||||
| #------------------------------------------------------------------------------- | ||||
|  | ||||
| # vim: syntax=sh:ts=8:sw=4:ai:et:tw=78:fo=tcrqn21:fdm=marker | ||||
		Reference in New Issue
	
	Block a user