forked from HPR/hpr-tools
Moved project directories and files to an empty local repo
This commit is contained in:
390
Show_Submission/do_upload
Executable file
390
Show_Submission/do_upload
Executable file
@@ -0,0 +1,390 @@
|
||||
#!/bin/bash -
|
||||
#===============================================================================
|
||||
#
|
||||
# FILE: do_upload
|
||||
#
|
||||
# USAGE: ./do_upload <epno> [files...]
|
||||
#
|
||||
# DESCRIPTION: Uploads the processed HTML back to the HPR server. Also
|
||||
# capable of uploading supplementary files such as a missed
|
||||
# audio file, pictures, etc.
|
||||
#
|
||||
# There are two main types of uploads:
|
||||
# 1) Extracted and edited show notes to go back to the server as
|
||||
# HTML. Possiblly altered 'shotnotes.txt' as a means of
|
||||
# fixing errors in the title, summary or tags.
|
||||
# 2) Assets collected by 'parse_JSON' and possibly changed by
|
||||
# 'do_pictures' if there are pictures provided and referenced
|
||||
# in the notes. Any archives will have had files extracted so
|
||||
# that there is much less to do on the server.
|
||||
#
|
||||
# Assets are sent to a directory under '~hpr/www/eps/' named
|
||||
# 'hprNNNN'. This is created here and files copied with 'rsync'.
|
||||
# There is a local directory in the show directory which is
|
||||
# called 'uploads'. Unless the host has provided archives to be
|
||||
# downloaded with their show we will not send such files to the
|
||||
# server. We ask that such files be enclosed in an archive when
|
||||
# sent - so we never extract the archives we have extracted from
|
||||
# the sent archives!
|
||||
#
|
||||
# OPTIONS: ---
|
||||
# REQUIREMENTS: ---
|
||||
# BUGS: ---
|
||||
# NOTES: 2021-03-15: Added code to place the "assets" in the final
|
||||
# directory on the server. This will be 'www/eps/hprNNNN/'.
|
||||
# AUTHOR: Dave Morriss (djm), Dave.Morriss@gmail.com
|
||||
# VERSION: 0.1.2
|
||||
# CREATED: 2017-03-06 19:11:51
|
||||
# REVISION: 2023-06-14 23:12:04
|
||||
#
|
||||
#===============================================================================
|
||||
|
||||
set -o nounset # Treat unset variables as an error
|
||||
|
||||
SCRIPT=${0##*/}
|
||||
# DIR=${0%/*}
|
||||
|
||||
VERSION="0.1.2"
|
||||
|
||||
STDOUT="/dev/fd/2"
|
||||
|
||||
#
|
||||
# Load library functions
|
||||
#
|
||||
LIB="$HOME/bin/function_lib.sh"
|
||||
[ -e "$LIB" ] || { echo "$SCRIPT: ${red}Unable to source functions${reset}"; exit 1; }
|
||||
# shellcheck source=/home/cendjm/bin/function_lib.sh
|
||||
source "$LIB"
|
||||
|
||||
#
|
||||
# Colour codes
|
||||
#
|
||||
define_colours
|
||||
|
||||
# {{{ --- Functions: usage, dryrun ---
|
||||
|
||||
#=== FUNCTION ================================================================
|
||||
# NAME: _usage
|
||||
# DESCRIPTION: Report usage
|
||||
# PARAMETERS: None
|
||||
# RETURNS: Nothing
|
||||
#===============================================================================
|
||||
_usage () {
|
||||
cat >$STDOUT <<-endusage
|
||||
Usage: ./${SCRIPT} [-h] [-a] [-d] [-D] shownumber [file1 file2...]
|
||||
|
||||
Version: $VERSION
|
||||
|
||||
Uploads the processed HTML back to the HPR server. Also
|
||||
capable of uploading supplementary files such as a missed
|
||||
audio file.
|
||||
|
||||
Options:
|
||||
-h Print this help
|
||||
-a Send any assets to the show sub-directory on the HPR
|
||||
server
|
||||
-d Select dry run mode
|
||||
-D Select debug mode (works the same; more output)
|
||||
|
||||
Arguments:
|
||||
shownumber
|
||||
list of files to be uploaded in addition
|
||||
|
||||
Examples
|
||||
./${SCRIPT} -h
|
||||
./${SCRIPT} -d 3099
|
||||
./${SCRIPT} -d 3123 otherfile1.txt otherfile2.dat
|
||||
|
||||
endusage
|
||||
exit
|
||||
}
|
||||
|
||||
#=== FUNCTION ================================================================
|
||||
# NAME: _dryrun
|
||||
# DESCRIPTION: Output a dry run message
|
||||
# PARAMETERS: List of messages
|
||||
# RETURNS: Nothing
|
||||
#===============================================================================
|
||||
_dryrun () {
|
||||
for msg in "$@"; do
|
||||
printf 'Dry run: %s\n' "$msg"
|
||||
done
|
||||
}
|
||||
|
||||
#=== FUNCTION ================================================================
|
||||
# NAME: trimpath
|
||||
# DESCRIPTION: Trim a file path to its last few components for display
|
||||
# PARAMETERS: $1 - path to trim
|
||||
# $2 - number of elements to retain
|
||||
# RETURNS: Trimmed path
|
||||
#===============================================================================
|
||||
# trimpath () {
|
||||
# local path=${1:?Usage: mpath path elements}
|
||||
# local elements=${2:?Usage: mpath path elements}
|
||||
# local -a arr1 arr2
|
||||
#
|
||||
# # Split the path
|
||||
# # IFS='/' arr1=($path)
|
||||
# IFS='/' mapfile -d'/' -t arr1 <<<"$path"
|
||||
#
|
||||
# if [[ ${#arr1[@]} -gt $elements ]]; then
|
||||
# # Put the last elements in another array
|
||||
# # arr2=(${arr1[@]: -$elements})
|
||||
# mapfile -t arr2 < <(printf '%s\n' "${arr1[@]: -$elements}")
|
||||
#
|
||||
# # return the second array interleaved with '/'
|
||||
# echo "${arr2[*]/#/}"
|
||||
# else
|
||||
# echo "$path"
|
||||
# fi
|
||||
# }
|
||||
|
||||
# }}}
|
||||
|
||||
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
#
|
||||
# Option defaults
|
||||
#
|
||||
ASSETUPLOAD=0
|
||||
DEBUG=0
|
||||
DRYRUN=0
|
||||
|
||||
#
|
||||
# Process options
|
||||
#
|
||||
while getopts :ahdD opt
|
||||
do
|
||||
case "${opt}" in
|
||||
a) ASSETUPLOAD=1;;
|
||||
h) _usage;;
|
||||
d) DRYRUN=1;;
|
||||
D) DEBUG=1;;
|
||||
?) echo "$SCRIPT: Invalid option; aborting"; exit 1;;
|
||||
esac
|
||||
done
|
||||
shift $((OPTIND - 1))
|
||||
|
||||
#
|
||||
# Check there's at least one argument after removing any options. Abort if not
|
||||
#
|
||||
if [[ $# -eq 0 ]]; then
|
||||
echo "Missing argument(s)"
|
||||
_usage
|
||||
fi
|
||||
|
||||
#
|
||||
# Paths to files
|
||||
#
|
||||
# 2021-02-12 Not using the .format file any more
|
||||
BASEDIR="$HOME/HPR/Show_Submission"
|
||||
LOCAL_UPLOAD="$BASEDIR/upload"
|
||||
SHOWDIR="$BASEDIR/shownotes/hpr${1}"
|
||||
FROM="$SHOWDIR/hpr${1}.html"
|
||||
# FORMAT="$SHOWDIR/.format"
|
||||
ORIGIN="$SHOWDIR/.origin"
|
||||
UPLOADED="$SHOWDIR/.uploaded"
|
||||
STATUSFILE="$SHOWDIR/.status"
|
||||
|
||||
# If there are HTML errors
|
||||
REPORT="$SHOWDIR/errors.txt"
|
||||
|
||||
# For differences
|
||||
# 2021-02-12 $RE removed since we find differences for all formats
|
||||
RAWNOTES="$SHOWDIR/hpr${1}.orig"
|
||||
PROCESSED="$SHOWDIR/hpr${1}.out"
|
||||
# RE='plain_text|markdown_standard|Markdown_GitHub|Markdown_Pandoc|restructured_text|txt2tags'
|
||||
DIFFFILE="$SHOWDIR/hpr${1}.diff"
|
||||
|
||||
# PORT=22074
|
||||
PORT=22
|
||||
|
||||
#
|
||||
# Asset locations for upload
|
||||
#
|
||||
# If there are supplementary files
|
||||
# SUPPDIR="$SHOWDIR/hpr${1}"
|
||||
TARFILE="$SHOWDIR/hpr${1}.tgz"
|
||||
PICLIST="$SHOWDIR/.pictures"
|
||||
ASSETLIST="$SHOWDIR/.assets"
|
||||
|
||||
# Where any "assets" (pictures, scripts, etc) come from and will go on the server
|
||||
LOCAL_ASSETDIR="$SHOWDIR/uploads"
|
||||
REMOTE_ASSETDIR="www/eps/hpr${1}"
|
||||
CMDTPL='ssh hpr@hackerpublicradio.org -p %d %s'
|
||||
|
||||
# Use to build the rsync command, assuming the tunnel is open:
|
||||
# rsync -a -e 'ssh -p 22' $SHOWDIR/hpr3656/ hpr@hpr:www/eps/hpr3656/
|
||||
#
|
||||
RSYNCTPL="rsync -a -e 'ssh -p %d' %s hpr@hpr:www/eps/%s"
|
||||
|
||||
# Did the following by hand for uploading
|
||||
# ssh -p $PORT hpr@hpr 'mkdir ~/www/eps/hpr3685'
|
||||
# scp -P $PORT shownotes/hpr3685/Budget_sample_2022-9-9.ods hpr@hpr:www/eps/hpr3685/
|
||||
|
||||
EXTRA=0
|
||||
|
||||
#
|
||||
# Is there a marker to indicate the show has already been uploaded? This
|
||||
# isn't an error, but a warning is in order.
|
||||
#
|
||||
if [[ -e $UPLOADED ]]; then
|
||||
echo "$SCRIPT: ${yellow}Warning - the notes have already been uploaded${reset}"
|
||||
fi
|
||||
|
||||
#
|
||||
# Check we actually have a file to upload
|
||||
#
|
||||
if [[ ! -e $FROM ]]; then
|
||||
echo "$SCRIPT: ${red}File not found: ${FROM}${reset}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
#
|
||||
# If there's an error report then add it to the list of supplementary files
|
||||
# (which may be none)
|
||||
#
|
||||
if [[ -e $REPORT ]]; then
|
||||
_DEBUG "Error report being added"
|
||||
set -- "$@" "${REPORT##*/}"
|
||||
fi
|
||||
|
||||
#
|
||||
# Deal with the raw notes extracted by 'parse_shownotes' and saved in
|
||||
# hprXXXX.orig and the edited notes in hprXXXX.out
|
||||
#
|
||||
# 2021-02-12 Now using the same code for all formats
|
||||
#
|
||||
# if [[ -e $RAWNOTES && -e $PROCESSED ]]; then
|
||||
# FMT="$(cat "$FORMAT")"
|
||||
# if [[ $FMT =~ $RE ]]; then
|
||||
# diff "$RAWNOTES" "$PROCESSED" > "$DIFFFILE"
|
||||
# if [[ -s $DIFFFILE ]]; then
|
||||
# set -- "$@" "${DIFFFILE##*/}"
|
||||
# else
|
||||
# echo "$SCRIPT: ${red}No differences found${reset}"
|
||||
# fi
|
||||
# fi
|
||||
# fi
|
||||
|
||||
if [[ -e $RAWNOTES && -e $PROCESSED ]]; then
|
||||
_DEBUG "Differences being determined:" "$RAWNOTES vs $PROCESSED"
|
||||
diff "$RAWNOTES" "$PROCESSED" > "$DIFFFILE"
|
||||
if [[ -s $DIFFFILE ]]; then
|
||||
_DEBUG "Differences found"
|
||||
set -- "$@" "${DIFFFILE##*/}"
|
||||
else
|
||||
_DEBUG "Differences file is empty"
|
||||
echo "$SCRIPT: ${red}No differences found${reset}"
|
||||
fi
|
||||
fi
|
||||
|
||||
#
|
||||
# If there's a picture list and a tarfile has been made add the latter to the
|
||||
# upload list
|
||||
# TODO: Not needed in next iteration
|
||||
#
|
||||
if [[ -e $PICLIST && -e $TARFILE ]]; then
|
||||
_DEBUG "Tar file being added"
|
||||
set -- "$@" "${TARFILE##*/}"
|
||||
fi
|
||||
|
||||
#
|
||||
# Check any supplementary files in the argument list (added by the user or
|
||||
# this script)
|
||||
#
|
||||
if [[ $# -gt 1 ]]; then
|
||||
EXTRA=1
|
||||
shift # Delete argument 1, the show number
|
||||
for arg; do
|
||||
if [[ ! -e "$SHOWDIR/$arg" ]]; then
|
||||
echo "$SCRIPT: ${red}File missing: $SHOWDIR/$arg${reset}"
|
||||
echo "Can't continue"
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
echo "$SCRIPT: ${blue}Number of supplementary files to upload: $#${reset}"
|
||||
fi
|
||||
|
||||
#
|
||||
# Check we have a record of where the files are to go
|
||||
#
|
||||
if [[ ! -e $ORIGIN ]]; then
|
||||
echo "$SCRIPT: ${red}Unable to find the .origin file${reset}"
|
||||
echo "(This holds the directory on the server where the files are to be sent)"
|
||||
exit
|
||||
fi
|
||||
|
||||
#
|
||||
# Check there's a local copy of the upload directory. If not, then the rsync
|
||||
# run has deleted it because the directory on the server has been deleted.
|
||||
# This implies the show has been processed on the server.
|
||||
#
|
||||
upload_dir="$(cat "$ORIGIN")"
|
||||
_DEBUG "upload_dir = $upload_dir"
|
||||
if [[ ! -e "$LOCAL_UPLOAD/$upload_dir" ]]; then
|
||||
echo "$SCRIPT: ${red}The upload directory seems to have been deleted${reset}"
|
||||
echo "(This happens after the show is processed on the server)"
|
||||
exit
|
||||
fi
|
||||
|
||||
#
|
||||
# Upload the processed show notes
|
||||
#
|
||||
if [[ $DRYRUN -eq 0 ]]; then
|
||||
echo "Copying $FROM to upload/$upload_dir/shownotes.html on the HPR server"
|
||||
scp -P $PORT "$FROM" "hpr@hackerpublicradio.org:upload/$upload_dir/shownotes.html"
|
||||
RES=$?
|
||||
|
||||
if [[ $RES -eq 0 ]]; then
|
||||
echo "$SCRIPT: ${green}Uploaded successfully${reset}"
|
||||
touch "$UPLOADED"
|
||||
else
|
||||
echo "$SCRIPT: ${red}Oops! Something went wrong!${reset}"
|
||||
echo "$SCRIPT: Aborting now"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
_dryrun "would have copied $FROM to the server"
|
||||
fi
|
||||
|
||||
#
|
||||
# Handle supplementary files if there are any. The remaining arguments are
|
||||
# these file names without any path information. Variable 'EXTRA' is
|
||||
# true/false if there are/are not extra arguments. If there are we have
|
||||
# already deleted the first argument and we've checked the existence of the
|
||||
# file(s).
|
||||
#
|
||||
if [[ $EXTRA -eq 1 ]]; then
|
||||
_DEBUG "Uploading supplementary files"
|
||||
for arg; do
|
||||
FROM="$SHOWDIR/$arg"
|
||||
if [[ $DRYRUN -eq 0 ]]; then
|
||||
echo "Copying $FROM to upload/$upload_dir/$arg on the HPR server"
|
||||
scp -P $PORT "$FROM" "hpr@hackerpublicradio.org:upload/$upload_dir/$arg"
|
||||
RES=$?
|
||||
|
||||
if [[ $RES -eq 0 ]]; then
|
||||
echo "$SCRIPT: ${green}Uploaded ${arg} successfully${reset}"
|
||||
else
|
||||
echo "$SCRIPT: ${red}Oops! Something went wrong with ${arg}!${reset}"
|
||||
echo "$SCRIPT: Aborting now"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
_dryrun "would have copied $FROM to the server"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
#
|
||||
# Update the status file
|
||||
#
|
||||
if [[ $DRYRUN -eq 0 ]]; then
|
||||
echo "uploaded" >> "$STATUSFILE" || \
|
||||
{ echo "Failed to update $STATUSFILE"; exit 1; }
|
||||
fi
|
||||
|
||||
exit
|
||||
|
||||
# vim: syntax=sh:ts=8:sw=4:ai:et:tw=78:fo=tcrqn21:fdm=marker
|
Reference in New Issue
Block a user