forked from HPR/hpr-tools
		
	
		
			
				
	
	
		
			223 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			223 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/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
 | 
						|
 |