forked from HPR/hpr-tools
		
	
		
			
	
	
		
			223 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			223 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								#!/bin/bash - 
							 | 
						||
| 
								 | 
							
								#===============================================================================
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								#         FILE: move_shownotes
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								#        USAGE: ./move_shownotes original_show new_show
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								#  DESCRIPTION: After a show has been moved from one slot to another on the
							 | 
						||
| 
								 | 
							
								#               HPR server this script ensures that the local versions of
							 | 
						||
| 
								 | 
							
								#               processed show notes correspond to the change by moving
							 | 
						||
| 
								 | 
							
								#               directories around and correcting file names and some
							 | 
						||
| 
								 | 
							
								#               contents.
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								#               ** Under development **
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								#      OPTIONS: ---
							 | 
						||
| 
								 | 
							
								# REQUIREMENTS: ---
							 | 
						||
| 
								 | 
							
								#         BUGS: ---
							 | 
						||
| 
								 | 
							
								#        NOTES: ---
							 | 
						||
| 
								 | 
							
								#       AUTHOR: Dave Morriss (djm), Dave.Morriss@gmail.com
							 | 
						||
| 
								 | 
							
								#      VERSION: 0.0.2
							 | 
						||
| 
								 | 
							
								#      CREATED: 2022-12-02 22:12:20
							 | 
						||
| 
								 | 
							
								#     REVISION: 2022-12-06 23:03:12
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								#===============================================================================
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								set -o nounset                              # Treat unset variables as an error
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								SCRIPT=${0##*/}
							 | 
						||
| 
								 | 
							
								DIR=${0%/*}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								VERSION='0.0.2'
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								STDOUT="/dev/fd/2"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Load library functions
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								LIB="$HOME/bin/function_lib.sh"
							 | 
						||
| 
								 | 
							
								[ -e "$LIB" ] || { echo "$SCRIPT: Unable to source functions"; exit 1; }
							 | 
						||
| 
								 | 
							
								# shellcheck source=/home/cendjm/bin/function_lib.sh
							 | 
						||
| 
								 | 
							
								source "$LIB"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Colour codes
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								define_colours
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#===  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
							 | 
						||
| 
								 | 
							
								Usage: ./${SCRIPT} [-h] [-d] [-D] original_show new_show
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Version: $VERSION
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								When a show has been processed and posted on the server, but needs to be moved
							 | 
						||
| 
								 | 
							
								to another slot (after getting the host's permission) this script assists with
							 | 
						||
| 
								 | 
							
								the processes involved in ensuring the local shownote caches reflect the
							 | 
						||
| 
								 | 
							
								server state.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The need to move a show is rare, but often follows when a host has forgotten
							 | 
						||
| 
								 | 
							
								the request to spread their shows out by at least two weeks and has sent them
							 | 
						||
| 
								 | 
							
								in to clots too close in time to one another.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Options:
							 | 
						||
| 
								 | 
							
								  -h                    Print this help
							 | 
						||
| 
								 | 
							
								  -d                    Select dry run mode
							 | 
						||
| 
								 | 
							
								  -D                    Turn on debug mode with lots of extra output
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Arguments:
							 | 
						||
| 
								 | 
							
								    original_show
							 | 
						||
| 
								 | 
							
								    new_show
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								 Both arguments can use either an integer number or a format like 'hpr9999'
							 | 
						||
| 
								 | 
							
								 and also compensate for the use of 'HPR' rather than 'hpr'.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Examples
							 | 
						||
| 
								 | 
							
								  ./${SCRIPT} -h
							 | 
						||
| 
								 | 
							
								  ./${SCRIPT} -d 3742 3756
							 | 
						||
| 
								 | 
							
								  ./${SCRIPT} -D 3738 3746
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								endusage
							 | 
						||
| 
								 | 
							
								    exit "$result"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#===  FUNCTION  ================================================================
							 | 
						||
| 
								 | 
							
								#         NAME: _DEBUG
							 | 
						||
| 
								 | 
							
								#  DESCRIPTION: Writes one or more message lines if in DEBUG mode
							 | 
						||
| 
								 | 
							
								#   PARAMETERS: List of messages
							 | 
						||
| 
								 | 
							
								#      RETURNS: Nothing
							 | 
						||
| 
								 | 
							
								#===============================================================================
							 | 
						||
| 
								 | 
							
								_DEBUG () {
							 | 
						||
| 
								 | 
							
								    [ "$DEBUG" == 0 ] && return
							 | 
						||
| 
								 | 
							
								    for msg in "$@"; do
							 | 
						||
| 
								 | 
							
								        printf 'D> %s\n' "$msg"
							 | 
						||
| 
								 | 
							
								    done
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#===  FUNCTION  ================================================================
							 | 
						||
| 
								 | 
							
								#         NAME: coloured
							 | 
						||
| 
								 | 
							
								#  DESCRIPTION: Write a message with colour codes
							 | 
						||
| 
								 | 
							
								#   PARAMETERS: 1 - colour name
							 | 
						||
| 
								 | 
							
								#               2 - message
							 | 
						||
| 
								 | 
							
								#      RETURNS: Nothing
							 | 
						||
| 
								 | 
							
								#===============================================================================
							 | 
						||
| 
								 | 
							
								coloured () {
							 | 
						||
| 
								 | 
							
								    local colour="${1:-green}"
							 | 
						||
| 
								 | 
							
								    local message="${2:-no message}"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    printf '%s%s%s\n' "${!colour}" "$message" "${reset}"
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Directories
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								BASEDIR="$HOME/HPR/Show_Submission"
							 | 
						||
| 
								 | 
							
								RES="$BASEDIR/reservations"
							 | 
						||
| 
								 | 
							
								SN="$BASEDIR/shownotes"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Check arguments
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								if [[ $# -ne 2 ]]; then
							 | 
						||
| 
								 | 
							
								    _usage 1
							 | 
						||
| 
								 | 
							
								fi
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Check the arguments and standardise them
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								declare -a ARGS
							 | 
						||
| 
								 | 
							
								re="^(hpr|HPR)?([0-9]{1,4})$"
							 | 
						||
| 
								 | 
							
								for arg; do
							 | 
						||
| 
								 | 
							
								    if [[ $arg =~ $re ]]; then
							 | 
						||
| 
								 | 
							
								        printf -v n '%04d' "${BASH_REMATCH[2]}"
							 | 
						||
| 
								 | 
							
								        ARGS+=("hpr$n")
							 | 
						||
| 
								 | 
							
								    else
							 | 
						||
| 
								 | 
							
								        coloured 'red' "Invalid show specification: $arg"
							 | 
						||
| 
								 | 
							
								    fi
							 | 
						||
| 
								 | 
							
								done
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								if [[ ${#ARGS[@]} -ne 2 ]]; then
							 | 
						||
| 
								 | 
							
								    coloured 'red' "Unable to continue with invalid arguments"
							 | 
						||
| 
								 | 
							
								    exit 1
							 | 
						||
| 
								 | 
							
								fi
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Save the parsed show details
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								original_show="${ARGS[0]}"
							 | 
						||
| 
								 | 
							
								new_show="${ARGS[1]}"
							 | 
						||
| 
								 | 
							
								coloured 'blue' "Moving from $original_show to $new_show"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#-------------------------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								# Consistency checks
							 | 
						||
| 
								 | 
							
								#-------------------------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# We expect the original show to have been moved into the reservations/
							 | 
						||
| 
								 | 
							
								# directory
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								if [[ ! -e "$RES/$original_show" ]]; then
							 | 
						||
| 
								 | 
							
								    coloured 'red' "Did not find the moved original show as $RES/$original_show."
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    #
							 | 
						||
| 
								 | 
							
								    # Perhaps the original show hasn't been moved yet, otherwise there's an
							 | 
						||
| 
								 | 
							
								    # error - the wrong show has been specified.
							 | 
						||
| 
								 | 
							
								    #
							 | 
						||
| 
								 | 
							
								    if [[ -e "$SN/$original_show" ]]; then
							 | 
						||
| 
								 | 
							
								        coloured 'red' "Found the original show as $SN/$original_show."
							 | 
						||
| 
								 | 
							
								        coloured 'yellow' "Double check that this show has been moved on the HPR server."
							 | 
						||
| 
								 | 
							
								        coloured 'yellow' "If so, wait for 'scan_HPR' to move it locally."
							 | 
						||
| 
								 | 
							
								        coloured 'yellow' "If not, the show numbers you used are wrong."
							 | 
						||
| 
								 | 
							
								    else
							 | 
						||
| 
								 | 
							
								        coloured 'red' "Did not find the original show as $SN/$original_show."
							 | 
						||
| 
								 | 
							
								        coloured 'yellow' "It looks as if the show numbers you used are wrong."
							 | 
						||
| 
								 | 
							
								    fi
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    coloured 'red' "Unable to continue"
							 | 
						||
| 
								 | 
							
								    exit
							 | 
						||
| 
								 | 
							
								fi
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Is the destination free? It may have been filled with a dummy show by
							 | 
						||
| 
								 | 
							
								# 'scrape_HPR' or there may have been a mistake in the arguments.
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								if [[ -e "$SN/$new_show" ]]; then
							 | 
						||
| 
								 | 
							
								    coloured 'yellow' "Found a directory at $SN/$new_show"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    #
							 | 
						||
| 
								 | 
							
								    # A dummy show directory will only contain 'shownotes.txt', 'hpr1234.out'
							 | 
						||
| 
								 | 
							
								    # and 'hpr1234.html' to keep other scripts happy and a file called .dummy
							 | 
						||
| 
								 | 
							
								    # to be detected by this script. So look for this signature, and if not
							 | 
						||
| 
								 | 
							
								    # found halt with an error.
							 | 
						||
| 
								 | 
							
								    #
							 | 
						||
| 
								 | 
							
								    if [[ ! -e "$SN/$new_show/.dummy" ]]; then
							 | 
						||
| 
								 | 
							
								        coloured 'red' "The directory seems to hold a live show!"
							 | 
						||
| 
								 | 
							
								        coloured 'red' "Cannot continue; please check the situation"
							 | 
						||
| 
								 | 
							
								        exit
							 | 
						||
| 
								 | 
							
								    fi
							 | 
						||
| 
								 | 
							
								fi
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Now we should have found the original show has been placed in the
							 | 
						||
| 
								 | 
							
								# reservations/ directory and the new slot should have had a dummy show placed
							 | 
						||
| 
								 | 
							
								# in it. We now need to move the reserved show into the destination slot after
							 | 
						||
| 
								 | 
							
								# removing the dummy show. Once done we need to rename files and change the
							 | 
						||
| 
								 | 
							
								# contents of some files.
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exit
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# vim: syntax=sh:ts=8:sw=4:ai:et:tw=78:fo=tcrqn21
							 | 
						||
| 
								 | 
							
								
							 |