use yet even more bin/jval-wrapper.sh instead of direct grep of JSON files

We use the `bin/jval-wrapper.sh` tool to obtain information from JSON
files instead of attempting using a "GROSS HACK" that involved using
`grep(1)` (and friends) as those "GROSS HACK"s assumed that the layout of
the JSON was canonical.  The `bin/jval-wrapper.sh` tool is able to deal
with various layouts of JSON including non-canonical layouts.  Moreover,
by using the `bin/jval-wrapper.sh` tool we greatly reduce the places in
bin tools that contain "GROSS HACK"s.

Adjusted `bin/gen-status.sh` to use `bin/jval-wrapper.sh`.

Changed `bin/gen-status.sh` VERSION from "1.5.8 2024-08-05"
to "1.6 2024-08-17".

Performed `make gen_status` to test the above under macOS.

Adjusted `bin/gen-years.sh` to use `bin/jval-wrapper.sh`.

Changed `bin/gen-years.sh` VERSION from "1.3.7 2024-08-05"
to "1.4 2024-08-17".

Performed `make gen_years` to test the above under macOS.

Adjusted `bin/output-index-author.sh` to use `bin/jval-wrapper.sh`.

Changed `bin/output-index-author.sh` VERSION from "1.7.3 2024-08-05"
to "1.8 2024-08-17".

Performed `make entry_index` to test the above under macOS.

Added `make quick_year_index` to generate year level index.html files
when year level `YYYY/README.md` is newer.

The `make quick_www` calls `quick_year_index` instead of `make gen_year_index`.

The `bin` directory is now sat as `BIN_PATH=$TOPDIR/bin`, where
`$TOPDIR` is determined by top of the git repo (as determined by
the command: `git rev-parse --is-inside-work-tree`) and potentially
modified by `-d topdir`.  After `cd $TOPDIR`, we set `BIN_DIR=bin`.

All tools from this repo are now assumed to under "$BIN_DIR".  Removed
command like options such as `-T md2html.sh`, and `-p tool` that used
to be able to change the location of a `bin` tool.

Changed `bin/gen-authors.sh` VERSION from "1.11 2024-08-13"
to "1.12 2024-08-18".

Changed `bin/gen-location.sh` VERSION from "1.5 2024-08-17"
to "1.6 2024-08-18".

Changed `bin/readme2index.sh` VERSION from "1.2.7 2024-08-05"
to "1.3 2024-08-17".

Modified `bin/all-run.sh` to use the `bin` directory mechanism.
Modified `bin/all-years.sh` to use the `bin` directory mechanism.
Modified `bin/gen-other-html.sh` to use the `bin` directory mechanism.
Modified `bin/gen-year-index.sh` to use the `bin` directory mechanism.
Modified `bin/md2html.sh` to use the `bin` directory mechanism.
Modified `bin/quick-readme2index.sh` to use the `bin` directory mechanism.
Modified `bin/readme2index.sh` to use the `bin` directory mechanism.

Changed `bin/all-run.sh` VERSION from "1.3.6 2024-08-05"
to "1.4 2024-08-17".

Changed `bin/all-years.sh` VERSION from "1.0.5 2024-08-05"
to "1.1 2024-08-17".

Changed `bin/gen-other-html.sh` VERSION from "1.3 2024-08-11"
to "1.4 2024-08-17".

Changed `bin/gen-year-index.sh` VERSION from "1.1.2 2024-08-05"
to "1.2 2024-08-17".

Changed `bin/quick-readme2index.sh` VERSION from "1.1.7 2024-08-05"
to "1.2 2024-08-17".

Changed `bin/md2html.sh` VERSION from "1.5.5 2024-08-05"
to "1.6 2024-08-17".

Added some whitespace in the form of empty lines to tools.

Made checks for tools under `bin` directory more consistent.

When using `-Q` (quick mode) and the prerequisite files are newer,
we force the target to be touched so that a later run will not
have to build the target HTML file.

Performed `make quick_www` to test the above under macOS.

Performed `make www` to test the above under macOS.
This commit is contained in:
Landon Curt Noll committed 2024-08-18 02:10:25 -07:00
1 parent f159369a0a
commit 0e5864b8b0
39 files changed
+1694 -795

No files matched your search

+13 -2
View File
@@ -303,7 +303,7 @@ indent.c:
.PHONY: help genpath genfilelist verify_entry_files gen_authors quick_authors \ .PHONY: help genpath genfilelist verify_entry_files gen_authors quick_authors \
gen_location quick_location gen_years find_missing_links test entry_index gen_top_html \ gen_location quick_location gen_years find_missing_links test entry_index gen_top_html \
thanks gen_other_html quick_other_html quick_entry_index \ thanks gen_other_html quick_other_html quick_entry_index \
gen_year_index quick_www www untar_entry_tarball untar_year_tarball \ gen_year_index quick_year_index quick_www www untar_entry_tarball untar_year_tarball \
form_entry_tarball form_year_tarball tar gen_status gen_sitemap \ form_entry_tarball form_year_tarball tar gen_status gen_sitemap \
sitemap timestamp update csv2entry entry2csv sitemap timestamp update csv2entry entry2csv
@@ -344,6 +344,7 @@ help:
@echo 'make gen_other_html ;: build entry HTML files from markdown other than README.md' @echo 'make gen_other_html ;: build entry HTML files from markdown other than README.md'
@echo 'make quick_other_html ;: build entry non-index.html files that might be out of date' @echo 'make quick_other_html ;: build entry non-index.html files that might be out of date'
@echo 'make gen_year_index ;: generate year level index.html files using from README.md files' @echo 'make gen_year_index ;: generate year level index.html files using from README.md files'
@echo 'make quick_year_index ;: generate year level index.html when year level README.md is newer'
@echo 'make gen_top_html ;: generate a number of the top level HTML files from markdown' @echo 'make gen_top_html ;: generate a number of the top level HTML files from markdown'
@echo 'make gen_next ;: generate the HTML files in next/' @echo 'make gen_next ;: generate the HTML files in next/'
@echo 'make quick_entry_index ;: build winner index.html files that might be out of date' @echo 'make quick_entry_index ;: build winner index.html files that might be out of date'
@@ -551,6 +552,16 @@ gen_year_index: ${ALL_YEARS} ${GEN_YEAR_INDEX}
${ALL_YEARS} -v 1 ${GEN_YEAR_INDEX} -v 1 ${ALL_YEARS} -v 1 ${GEN_YEAR_INDEX} -v 1
@echo '=-=-=-=-= IOCCC complete make $@ =-=-=-=-=' @echo '=-=-=-=-= IOCCC complete make $@ =-=-=-=-='
# generate year level index.html files when year level README.md is newer
#
# generate year level index.html files using the
# ${GEN_YEAR_INDEX} tool (bin/gen-year-index.sh).
#
quick_year_index: ${ALL_YEARS} ${GEN_YEAR_INDEX}
@echo '=-=-=-=-= IOCCC begin make $@ =-=-=-=-='
${ALL_YEARS} -v 1 -Q ${GEN_YEAR_INDEX} -v 1
@echo '=-=-=-=-= IOCCC complete make $@ =-=-=-=-='
# build winner index.html files that might be out of date # build winner index.html files that might be out of date
# #
# This rule uses the ${QUICK_README2INDEX} tool # This rule uses the ${QUICK_README2INDEX} tool
@@ -690,7 +701,7 @@ quick_www:
${MAKE} quick_authors ${MAKE} quick_authors
${MAKE} quick_location ${MAKE} quick_location
${MAKE} gen_years ${MAKE} gen_years
${MAKE} gen_year_index ${MAKE} quick_year_index
${MAKE} gen_top_html ${MAKE} gen_top_html
${MAKE} quick_entry_index ${MAKE} quick_entry_index
${MAKE} quick_other_html ${MAKE} quick_other_html
+65 -22
View File
@@ -17,7 +17,7 @@
# #
# Each tool run with command line of the form: # Each tool run with command line of the form:
# #
# tool [any -D, -t tagline, -T md2html.sh, -p tool, -w site_url] [more_options] YYYY/dir # tool [any -D, -t tagline, -w site_url] [more_options] YYYY/dir
# #
# For example: # For example:
# #
@@ -55,6 +55,7 @@
# #
# Share and enjoy! :-) # Share and enjoy! :-)
# firewall - run only with a bash that is version 5.1.8 or later # firewall - run only with a bash that is version 5.1.8 or later
# #
# The "/usr/bin/env bash" command must result in using a bash that # The "/usr/bin/env bash" command must result in using a bash that
@@ -111,9 +112,10 @@ shopt -u nocaseglob # disable strict case matching
shopt -u extglob # enable extended globbing patterns shopt -u extglob # enable extended globbing patterns
shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories
# set variables referenced in the usage message # set variables referenced in the usage message
# #
export VERSION="1.3.6 2024-08-05" export VERSION="1.4 2024-08-17"
NAME=$(basename "$0") NAME=$(basename "$0")
export NAME export NAME
export V_FLAG=0 export V_FLAG=0
@@ -131,8 +133,6 @@ fi
export TOPDIR export TOPDIR
export DOCROOT_SLASH="../../" export DOCROOT_SLASH="../../"
export TAGLINE="unspecified" export TAGLINE="unspecified"
export MD2HTML_SH="bin/md2html.sh"
export PANDOC_WRAPPER="bin/pandoc-wrapper.sh"
export REPO_TOP_URL="https://github.com/ioccc-src/temp-test-ioccc" export REPO_TOP_URL="https://github.com/ioccc-src/temp-test-ioccc"
# GitHub puts individual files under the "blob/master" sub-directory. # GitHub puts individual files under the "blob/master" sub-directory.
export REPO_URL="$REPO_TOP_URL/blob/master" export REPO_URL="$REPO_TOP_URL/blob/master"
@@ -142,15 +142,17 @@ export NOOP=
export DO_NOT_PROCESS= export DO_NOT_PROCESS=
export EXIT_CODE="0" export EXIT_CODE="0"
# clear options we will add to tools # clear options we will add to tools
# #
unset TOOL_OPTION unset TOOL_OPTION
declare -ag TOOL_OPTION declare -ag TOOL_OPTION
# usage # usage
# #
export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N] export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N]
[-t tagline] [-T md2html.sh] [-p tool] [-w site_url] [-t tagline] [-w site_url]
tool [more_options] tool [more_options]
-h print help message and exit -h print help message and exit
@@ -167,10 +169,6 @@ export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N]
-t tagline string to write about the tool that formed the markdown content (def: $TAGLINE) -t tagline string to write about the tool that formed the markdown content (def: $TAGLINE)
NOTE: The '-t tagline' is passed as leading options on tool command lines. NOTE: The '-t tagline' is passed as leading options on tool command lines.
-T md2html.sh run 'markdown to html tool' to convert markdown into HTML (def: $MD2HTML_SH)
NOTE: The '-T md2html.sh' is passed as leading options on tool command lines.
-p tool run 'pandoc wrapper tool' (not pandoc path) during HTML phase number 21 (def: use $PANDOC_WRAPPER)
-w site_url Base URL of the website (def: $SITE_URL) -w site_url Base URL of the website (def: $SITE_URL)
NOTE: The '-w site_url' is passed as leading options on tool command lines. NOTE: The '-w site_url' is passed as leading options on tool command lines.
@@ -178,7 +176,7 @@ export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N]
tool the tool to run over all entries tool the tool to run over all entries
[more_options] additional tool command line options to use before the YYYY/dir argument [more_options] additional tool command line options to use before the YYYY/dir argument
NOTE: Any '-D docroot/', '-t tagline', '-T md2html.sh', '-p tool', '-w site_url' NOTE: Any '-D docroot/', '-t tagline', '-w site_url'
are passed to the 'tool' at the beginning of the command line, and are passed to the 'tool' at the beginning of the command line, and
before any optional 'more_options' and before the final YYYY/dir argument. before any optional 'more_options' and before the final YYYY/dir argument.
@@ -195,9 +193,10 @@ Exit codes:
$NAME version: $VERSION" $NAME version: $VERSION"
# parse command line # parse command line
# #
while getopts :hv:Vd:D:nNt:T:p:w: flag; do while getopts :hv:Vd:D:nNt:w: flag; do
case "$flag" in case "$flag" in
h) echo "$USAGE" 1>&2 h) echo "$USAGE" 1>&2
exit 2 exit 2
@@ -246,14 +245,6 @@ while getopts :hv:Vd:D:nNt:T:p:w: flag; do
TOOL_OPTION+=("-t") TOOL_OPTION+=("-t")
TOOL_OPTION+=("$TAGLINE") TOOL_OPTION+=("$TAGLINE")
;; ;;
T) MD2HTML_SH="$OPTARG"
TOOL_OPTION+=("-T")
TOOL_OPTION+=("$MD2HTML_SH")
;;
p) PANDOC_WRAPPER="$OPTARG"
TOOL_OPTION+=("-p")
TOOL_OPTION+=("$PANDOC_WRAPPER")
;;
w) SITE_URL="$OPTARG" w) SITE_URL="$OPTARG"
TOOL_OPTION+=("-w") TOOL_OPTION+=("-w")
TOOL_OPTION+=("$SITE_URL") TOOL_OPTION+=("$SITE_URL")
@@ -275,7 +266,7 @@ while getopts :hv:Vd:D:nNt:T:p:w: flag; do
;; ;;
esac esac
done done
#
# remove the options # remove the options
# #
shift $(( OPTIND - 1 )); shift $(( OPTIND - 1 ));
@@ -303,6 +294,7 @@ case "$#" in
;; ;;
esac esac
# verify that we have a topdir directory # verify that we have a topdir directory
# #
REPO_NAME=$(basename "$REPO_TOP_URL") REPO_NAME=$(basename "$REPO_TOP_URL")
@@ -323,6 +315,7 @@ if [[ ! -d $TOPDIR ]]; then
exit 6 exit 6
fi fi
# cd to topdir # cd to topdir
# #
if [[ ! -e $TOPDIR ]]; then if [[ ! -e $TOPDIR ]]; then
@@ -346,6 +339,51 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2 echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2
fi fi
# verify that we have a bin subdirectory
#
export BIN_PATH="$TOPDIR/bin"
if [[ ! -d $BIN_PATH ]]; then
echo "$0: ERROR: bin is not a directory under topdir: $BIN_PATH" 1>&2
exit 6
fi
export BIN_DIR="bin"
# verify that the bin/md2html.sh tool is executable
#
export MD2HTML_SH="$BIN_DIR/md2html.sh"
if [[ ! -e $MD2HTML_SH ]]; then
echo "$0: ERROR: bin/md2html.sh does not exist: $MD2HTML_SH" 1>&2
exit 5
fi
if [[ ! -f $MD2HTML_SH ]]; then
echo "$0: ERROR: bin/md2html.sh is not a regular file: $MD2HTML_SH" 1>&2
exit 5
fi
if [[ ! -x $MD2HTML_SH ]]; then
echo "$0: ERROR: bin/md2html.sh is not an executable file: $MD2HTML_SH" 1>&2
exit 5
fi
# verify that the bin/pandoc-wrapper.sh tool is executable
#
export PANDOC_WRAPPER="$BIN_DIR/pandoc-wrapper.sh"
if [[ ! -e $PANDOC_WRAPPER ]]; then
echo "$0: ERROR: bin/md2html.sh does not exist: $PANDOC_WRAPPER" 1>&2
exit 5
fi
if [[ ! -f $PANDOC_WRAPPER ]]; then
echo "$0: ERROR: bin/md2html.sh is not a regular file: $PANDOC_WRAPPER" 1>&2
exit 5
fi
if [[ ! -x $PANDOC_WRAPPER ]]; then
echo "$0: ERROR: bin/md2html.sh is not an executable file: $PANDOC_WRAPPER" 1>&2
exit 5
fi
# verify we have a non-empty readable .top file # verify we have a non-empty readable .top file
# #
export TOP_FILE=".top" export TOP_FILE=".top"
@@ -408,8 +446,6 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: TOPDIR=$TOPDIR" 1>&2 echo "$0: debug[3]: TOPDIR=$TOPDIR" 1>&2
echo "$0: debug[3]: DOCROOT_SLASH=$DOCROOT_SLASH" 1>&2 echo "$0: debug[3]: DOCROOT_SLASH=$DOCROOT_SLASH" 1>&2
echo "$0: debug[3]: TAGLINE=$TAGLINE" 1>&2 echo "$0: debug[3]: TAGLINE=$TAGLINE" 1>&2
echo "$0: debug[3]: MD2HTML_SH=$MD2HTML_SH" 1>&2
echo "$0: debug[3]: PANDOC_WRAPPER=$PANDOC_WRAPPER" 1>&2
echo "$0: debug[3]: REPO_TOP_URL=$REPO_TOP_URL" 1>&2 echo "$0: debug[3]: REPO_TOP_URL=$REPO_TOP_URL" 1>&2
echo "$0: debug[3]: REPO_URL=$REPO_URL" 1>&2 echo "$0: debug[3]: REPO_URL=$REPO_URL" 1>&2
echo "$0: debug[3]: SITE_URL=$SITE_URL" 1>&2 echo "$0: debug[3]: SITE_URL=$SITE_URL" 1>&2
@@ -422,9 +458,14 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: TOOL=$TOOL" 1>&2 echo "$0: debug[3]: TOOL=$TOOL" 1>&2
echo "$0: debug[3]: REPO_NAME=$REPO_NAME" 1>&2 echo "$0: debug[3]: REPO_NAME=$REPO_NAME" 1>&2
echo "$0: debug[3]: CD_FAILED=$CD_FAILED" 1>&2 echo "$0: debug[3]: CD_FAILED=$CD_FAILED" 1>&2
echo "$0: debug[3]: BIN_PATH=$BIN_PATH" 1>&2
echo "$0: debug[3]: BIN_DIR=$BIN_DIR" 1>&2
echo "$0: debug[3]: MD2HTML_SH=$MD2HTML_SH" 1>&2
echo "$0: debug[3]: PANDOC_WRAPPER=$PANDOC_WRAPPER" 1>&2
echo "$0: debug[3]: TOP_FILE=$TOP_FILE" 1>&2 echo "$0: debug[3]: TOP_FILE=$TOP_FILE" 1>&2
fi fi
# -N stops early before any processing is performed # -N stops early before any processing is performed
# #
if [[ -n $DO_NOT_PROCESS ]]; then if [[ -n $DO_NOT_PROCESS ]]; then
@@ -434,6 +475,7 @@ if [[ -n $DO_NOT_PROCESS ]]; then
exit 0 exit 0
fi fi
# process each year # process each year
# #
export YYYY export YYYY
@@ -620,6 +662,7 @@ for YYYY in $(< "$TOP_FILE"); do
done done
done done
# All Done!!! All Done!!! -- Jessica Noll, Age 2 # All Done!!! All Done!!! -- Jessica Noll, Age 2
# #
if [[ $EXIT_CODE -ne 0 ]]; then if [[ $EXIT_CODE -ne 0 ]]; then
+74 -36
View File
@@ -16,7 +16,7 @@
# #
# Each tool run with command line of the form: # Each tool run with command line of the form:
# #
# tool [any -D, -t tagline, -T md2html.sh, -p tool, -w site_url] [more_options] YYYY # tool [any -D, -t tagline, -w site_url] [more_options] YYYY
# #
# For example: # For example:
# #
@@ -54,6 +54,7 @@
# #
# Share and enjoy! :-) # Share and enjoy! :-)
# firewall - run only with a bash that is version 5.1.8 or later # firewall - run only with a bash that is version 5.1.8 or later
# #
# The "/usr/bin/env bash" command must result in using a bash that # The "/usr/bin/env bash" command must result in using a bash that
@@ -97,6 +98,7 @@ if [[ -z ${BASH_VERSINFO[0]} ||
exit 4 exit 4
fi fi
# setup bash file matching # setup bash file matching
# #
# We must declare arrays with -ag or -Ag, and we need loops to "export" modified variables. # We must declare arrays with -ag or -Ag, and we need loops to "export" modified variables.
@@ -109,9 +111,10 @@ shopt -u nocaseglob # disable strict case matching
shopt -u extglob # enable extended globbing patterns shopt -u extglob # enable extended globbing patterns
shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories
# set variables referenced in the usage message # set variables referenced in the usage message
# #
export VERSION="1.0.5 2024-08-05" export VERSION="1.1 2024-08-17"
NAME=$(basename "$0") NAME=$(basename "$0")
export NAME export NAME
export V_FLAG=0 export V_FLAG=0
@@ -129,8 +132,6 @@ fi
export TOPDIR export TOPDIR
export DOCROOT_SLASH="../../" export DOCROOT_SLASH="../../"
export TAGLINE="unspecified" export TAGLINE="unspecified"
export MD2HTML_SH="bin/md2html.sh"
export PANDOC_WRAPPER="bin/pandoc-wrapper.sh"
export REPO_TOP_URL="https://github.com/ioccc-src/temp-test-ioccc" export REPO_TOP_URL="https://github.com/ioccc-src/temp-test-ioccc"
# GitHub puts individual files under the "blob/master" sub-directory. # GitHub puts individual files under the "blob/master" sub-directory.
export REPO_URL="$REPO_TOP_URL/blob/master" export REPO_URL="$REPO_TOP_URL/blob/master"
@@ -138,17 +139,20 @@ export SITE_URL="https://ioccc-src.github.io/temp-test-ioccc"
# #
export NOOP= export NOOP=
export DO_NOT_PROCESS= export DO_NOT_PROCESS=
export QUICK_MODE=
export EXIT_CODE="0" export EXIT_CODE="0"
# clear options we will add to tools # clear options we will add to tools
# #
unset TOOL_OPTION unset TOOL_OPTION
declare -ag TOOL_OPTION declare -ag TOOL_OPTION
# usage # usage
# #
export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N] export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N]
[-t tagline] [-T md2html.sh] [-p tool] [-w site_url] [-Q] [-t tagline] [-w site_url]
tool [more_options] tool [more_options]
-h print help message and exit -h print help message and exit
@@ -164,12 +168,10 @@ export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N]
-n go thru the actions, but do not update any files (def: do the action) -n go thru the actions, but do not update any files (def: do the action)
-N do not process anything, just parse arguments (def: process something) -N do not process anything, just parse arguments (def: process something)
-Q quick mode, do not run $MD2HTML_SH unless markdown is out of date (def: do)
-t tagline string to write about the tool that formed the markdown content (def: $TAGLINE) -t tagline string to write about the tool that formed the markdown content (def: $TAGLINE)
NOTE: The '-t tagline' is passed as leading options on tool command lines. NOTE: The '-t tagline' is passed as leading options on tool command lines.
-T md2html.sh run 'markdown to html tool' to convert markdown into HTML (def: $MD2HTML_SH)
NOTE: The '-T md2html.sh' is passed as leading options on tool command lines.
-p tool run 'pandoc wrapper tool' (not pandoc path) during HTML phase number 21 (def: use $PANDOC_WRAPPER)
-w site_url Base URL of the website (def: $SITE_URL) -w site_url Base URL of the website (def: $SITE_URL)
NOTE: The '-w site_url' is passed as leading options on tool command lines. NOTE: The '-w site_url' is passed as leading options on tool command lines.
@@ -177,7 +179,7 @@ export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N]
tool the tool to run over all entries tool the tool to run over all entries
[more_options] additional tool command line options to use before the YYYY/dir argument [more_options] additional tool command line options to use before the YYYY/dir argument
NOTE: Any '-t tagline', '-T md2html.sh', '-p tool', '-w site_url' NOTE: Any '-Q', '-t tagline', '-w site_url'
are passed to the 'tool' at the beginning of the command line, and are passed to the 'tool' at the beginning of the command line, and
before any optional 'more_options' and before the final YYYY/dir argument. before any optional 'more_options' and before the final YYYY/dir argument.
@@ -194,9 +196,10 @@ Exit codes:
$NAME version: $VERSION" $NAME version: $VERSION"
# parse command line # parse command line
# #
while getopts :hv:Vd:D:nNt:T:p:w: flag; do while getopts :hv:Vd:D:nNQt:w: flag; do
case "$flag" in case "$flag" in
h) echo "$USAGE" 1>&2 h) echo "$USAGE" 1>&2
exit 2 exit 2
@@ -225,6 +228,9 @@ while getopts :hv:Vd:D:nNt:T:p:w: flag; do
;; ;;
N) DO_NOT_PROCESS="-N" N) DO_NOT_PROCESS="-N"
;; ;;
Q) QUICK_MODE="-Q"
TOOL_OPTION+=("-Q")
;;
t) # parse -t tagline t) # parse -t tagline
case "$OPTARG" in case "$OPTARG" in
*"'"*) *"'"*)
@@ -245,14 +251,6 @@ while getopts :hv:Vd:D:nNt:T:p:w: flag; do
TOOL_OPTION+=("-t") TOOL_OPTION+=("-t")
TOOL_OPTION+=("$TAGLINE") TOOL_OPTION+=("$TAGLINE")
;; ;;
T) MD2HTML_SH="$OPTARG"
TOOL_OPTION+=("-T")
TOOL_OPTION+=("$MD2HTML_SH")
;;
p) PANDOC_WRAPPER="$OPTARG"
TOOL_OPTION+=("-p")
TOOL_OPTION+=("$PANDOC_WRAPPER")
;;
w) SITE_URL="$OPTARG" w) SITE_URL="$OPTARG"
TOOL_OPTION+=("-w") TOOL_OPTION+=("-w")
TOOL_OPTION+=("$SITE_URL") TOOL_OPTION+=("$SITE_URL")
@@ -274,7 +272,7 @@ while getopts :hv:Vd:D:nNt:T:p:w: flag; do
;; ;;
esac esac
done done
#
# remove the options # remove the options
# #
shift $(( OPTIND - 1 )); shift $(( OPTIND - 1 ));
@@ -302,6 +300,7 @@ case "$#" in
;; ;;
esac esac
# verify that we have a topdir directory # verify that we have a topdir directory
# #
REPO_NAME=$(basename "$REPO_TOP_URL") REPO_NAME=$(basename "$REPO_TOP_URL")
@@ -322,6 +321,7 @@ if [[ ! -d $TOPDIR ]]; then
exit 6 exit 6
fi fi
# cd to topdir # cd to topdir
# #
if [[ ! -e $TOPDIR ]]; then if [[ ! -e $TOPDIR ]]; then
@@ -345,6 +345,51 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2 echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2
fi fi
# verify that we have a bin subdirectory
#
export BIN_PATH="$TOPDIR/bin"
if [[ ! -d $BIN_PATH ]]; then
echo "$0: ERROR: bin is not a directory under topdir: $BIN_PATH" 1>&2
exit 6
fi
export BIN_DIR="bin"
# verify that the bin/md2html.sh tool is executable
#
export MD2HTML_SH="$BIN_DIR/md2html.sh"
if [[ ! -e $MD2HTML_SH ]]; then
echo "$0: ERROR: bin/md2html.sh does not exist: $MD2HTML_SH" 1>&2
exit 5
fi
if [[ ! -f $MD2HTML_SH ]]; then
echo "$0: ERROR: bin/md2html.sh is not a regular file: $MD2HTML_SH" 1>&2
exit 5
fi
if [[ ! -x $MD2HTML_SH ]]; then
echo "$0: ERROR: bin/md2html.sh is not an executable file: $MD2HTML_SH" 1>&2
exit 5
fi
# verify that the bin/pandoc-wrapper.sh tool is executable
#
export PANDOC_WRAPPER="$BIN_DIR/pandoc-wrapper.sh"
if [[ ! -e $PANDOC_WRAPPER ]]; then
echo "$0: ERROR: bin/md2html.sh does not exist: $PANDOC_WRAPPER" 1>&2
exit 5
fi
if [[ ! -f $PANDOC_WRAPPER ]]; then
echo "$0: ERROR: bin/md2html.sh is not a regular file: $PANDOC_WRAPPER" 1>&2
exit 5
fi
if [[ ! -x $PANDOC_WRAPPER ]]; then
echo "$0: ERROR: bin/md2html.sh is not an executable file: $PANDOC_WRAPPER" 1>&2
exit 5
fi
# verify we have a non-empty readable .top file # verify we have a non-empty readable .top file
# #
export TOP_FILE=".top" export TOP_FILE=".top"
@@ -365,6 +410,7 @@ if [[ ! -s $TOP_FILE ]]; then
exit 6 exit 6
fi fi
# verify tool is executable # verify tool is executable
# #
if [[ ! -e $TOOL ]]; then if [[ ! -e $TOOL ]]; then
@@ -380,20 +426,6 @@ if [[ ! -x $TOOL ]]; then
exit 5 exit 5
fi fi
# verify that the md2html.sh is an executable file
#
if [[ ! -e $MD2HTML_SH ]]; then
echo "$0: ERROR: md2html.sh does not exist: $MD2HTML_SH" 1>&2
exit 5
fi
if [[ ! -f $MD2HTML_SH ]]; then
echo "$0: ERROR: md2html.sh is not a regular file: $MD2HTML_SH" 1>&2
exit 5
fi
if [[ ! -x $MD2HTML_SH ]]; then
echo "$0: ERROR: md2html.sh is not an executable file: $MD2HTML_SH" 1>&2
exit 5
fi
# print running info if verbose # print running info if verbose
# #
@@ -407,13 +439,12 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: TOPDIR=$TOPDIR" 1>&2 echo "$0: debug[3]: TOPDIR=$TOPDIR" 1>&2
echo "$0: debug[3]: DOCROOT_SLASH=$DOCROOT_SLASH" 1>&2 echo "$0: debug[3]: DOCROOT_SLASH=$DOCROOT_SLASH" 1>&2
echo "$0: debug[3]: TAGLINE=$TAGLINE" 1>&2 echo "$0: debug[3]: TAGLINE=$TAGLINE" 1>&2
echo "$0: debug[3]: MD2HTML_SH=$MD2HTML_SH" 1>&2
echo "$0: debug[3]: PANDOC_WRAPPER=$PANDOC_WRAPPER" 1>&2
echo "$0: debug[3]: REPO_TOP_URL=$REPO_TOP_URL" 1>&2 echo "$0: debug[3]: REPO_TOP_URL=$REPO_TOP_URL" 1>&2
echo "$0: debug[3]: REPO_URL=$REPO_URL" 1>&2 echo "$0: debug[3]: REPO_URL=$REPO_URL" 1>&2
echo "$0: debug[3]: SITE_URL=$SITE_URL" 1>&2 echo "$0: debug[3]: SITE_URL=$SITE_URL" 1>&2
echo "$0: debug[3]: NOOP=$NOOP" 1>&2 echo "$0: debug[3]: NOOP=$NOOP" 1>&2
echo "$0: debug[3]: DO_NOT_PROCESS=$DO_NOT_PROCESS" 1>&2 echo "$0: debug[3]: DO_NOT_PROCESS=$DO_NOT_PROCESS" 1>&2
echo "$0: debug[3]: QUICK_MODE=$QUICK_MODE" 1>&2
echo "$0: debug[3]: EXIT_CODE=$EXIT_CODE" 1>&2 echo "$0: debug[3]: EXIT_CODE=$EXIT_CODE" 1>&2
for index in "${!TOOL_OPTION[@]}"; do for index in "${!TOOL_OPTION[@]}"; do
echo "$0: debug[3]: TOOL_OPTION[$index]=${TOOL_OPTION[$index]}" 1>&2 echo "$0: debug[3]: TOOL_OPTION[$index]=${TOOL_OPTION[$index]}" 1>&2
@@ -421,9 +452,14 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: TOOL=$TOOL" 1>&2 echo "$0: debug[3]: TOOL=$TOOL" 1>&2
echo "$0: debug[3]: REPO_NAME=$REPO_NAME" 1>&2 echo "$0: debug[3]: REPO_NAME=$REPO_NAME" 1>&2
echo "$0: debug[3]: CD_FAILED=$CD_FAILED" 1>&2 echo "$0: debug[3]: CD_FAILED=$CD_FAILED" 1>&2
echo "$0: debug[3]: BIN_PATH=$BIN_PATH" 1>&2
echo "$0: debug[3]: BIN_DIR=$BIN_DIR" 1>&2
echo "$0: debug[3]: MD2HTML_SH=$MD2HTML_SH" 1>&2
echo "$0: debug[3]: PANDOC_WRAPPER=$PANDOC_WRAPPER" 1>&2
echo "$0: debug[3]: TOP_FILE=$TOP_FILE" 1>&2 echo "$0: debug[3]: TOP_FILE=$TOP_FILE" 1>&2
fi fi
# -N stops early before any processing is performed # -N stops early before any processing is performed
# #
if [[ -n $DO_NOT_PROCESS ]]; then if [[ -n $DO_NOT_PROCESS ]]; then
@@ -433,6 +469,7 @@ if [[ -n $DO_NOT_PROCESS ]]; then
exit 0 exit 0
fi fi
# process each year # process each year
# #
export YYYY export YYYY
@@ -515,6 +552,7 @@ for YYYY in $(< "$TOP_FILE"); do
fi fi
done done
# All Done!!! All Done!!! -- Jessica Noll, Age 2 # All Done!!! All Done!!! -- Jessica Noll, Age 2
# #
if [[ $EXIT_CODE -ne 0 ]]; then if [[ $EXIT_CODE -ne 0 ]]; then
+42 -27
View File
@@ -28,6 +28,7 @@
# #
# Share and enjoy! :-) # Share and enjoy! :-)
# firewall - run only with a bash that is version 5.1.8 or later # firewall - run only with a bash that is version 5.1.8 or later
# #
# The "/usr/bin/env bash" command must result in using a bash that # The "/usr/bin/env bash" command must result in using a bash that
@@ -71,6 +72,7 @@ if [[ -z ${BASH_VERSINFO[0]} ||
exit 4 exit 4
fi fi
# setup bash file matching # setup bash file matching
# #
# We must declare arrays with -ag or -Ag, and we need loops to "export" modified variables. # We must declare arrays with -ag or -Ag, and we need loops to "export" modified variables.
@@ -83,6 +85,7 @@ shopt -u nocaseglob # disable strict case matching
shopt -u extglob # enable extended globbing patterns shopt -u extglob # enable extended globbing patterns
shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories
# set variables referenced in the usage message # set variables referenced in the usage message
# #
export VERSION="1.1.10 2024-08-05" export VERSION="1.1.10 2024-08-05"
@@ -105,10 +108,10 @@ export REPO_TOP_URL="https://github.com/ioccc-src/temp-test-ioccc"
# GitHub puts individual files under the "blob/master" sub-directory. # GitHub puts individual files under the "blob/master" sub-directory.
export REPO_URL="$REPO_TOP_URL/blob/master" export REPO_URL="$REPO_TOP_URL/blob/master"
# set usage message # set usage message
# #
export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N] export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N] [-w site_url]
[-p tool] [-w site_url]
YYYY/dir YYYY/dir
-h print help message and exit -h print help message and exit
@@ -121,8 +124,6 @@ export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N]
-n go thru the actions, but do not update any files (def: do the action) -n go thru the actions, but do not update any files (def: do the action)
-N do not process file, just parse arguments and ignore the file (def: process the file) -N do not process file, just parse arguments and ignore the file (def: process the file)
-p tool This option is ignored
-w site_url This option is ignored -w site_url This option is ignored
YYYY/dir path from topdir to entry directory: must contain the files: README.md, .path and .entry.json YYYY/dir path from topdir to entry directory: must contain the files: README.md, .path and .entry.json
@@ -140,15 +141,17 @@ Exit codes:
$NAME version: $VERSION" $NAME version: $VERSION"
# setup # setup
# #
export NOOP= export NOOP=
export DO_NOT_PROCESS= export DO_NOT_PROCESS=
export EXIT_CODE="0" export EXIT_CODE="0"
# parse command line # parse command line
# #
while getopts :hv:Vd:D:nNp:U:w: flag; do while getopts :hv:Vd:D:nNU:w: flag; do
case "$flag" in case "$flag" in
h) echo "$USAGE" 1>&2 h) echo "$USAGE" 1>&2
exit 2 exit 2
@@ -165,7 +168,6 @@ while getopts :hv:Vd:D:nNp:U:w: flag; do
;; ;;
N) DO_NOT_PROCESS="-N" N) DO_NOT_PROCESS="-N"
;; ;;
p) ;;
U) ;; U) ;;
w) ;; w) ;;
\?) echo "$0: ERROR: invalid option: -$OPTARG" 1>&2 \?) echo "$0: ERROR: invalid option: -$OPTARG" 1>&2
@@ -185,7 +187,7 @@ while getopts :hv:Vd:D:nNp:U:w: flag; do
;; ;;
esac esac
done done
#
# parse the command line arguments # parse the command line arguments
# #
if [[ $V_FLAG -ge 3 ]]; then if [[ $V_FLAG -ge 3 ]]; then
@@ -204,6 +206,7 @@ fi
# #
export ENTRY_PATH="$1" export ENTRY_PATH="$1"
# verify that we have a topdir directory # verify that we have a topdir directory
# #
REPO_NAME=$(basename "$REPO_TOP_URL") REPO_NAME=$(basename "$REPO_TOP_URL")
@@ -224,6 +227,7 @@ if [[ ! -d $TOPDIR ]]; then
exit 6 exit 6
fi fi
# cd to topdir # cd to topdir
# #
if [[ ! -e $TOPDIR ]]; then if [[ ! -e $TOPDIR ]]; then
@@ -247,6 +251,7 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2 echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2
fi fi
# verify that we have a bin subdirectory # verify that we have a bin subdirectory
# #
export BIN_PATH="$TOPDIR/bin" export BIN_PATH="$TOPDIR/bin"
@@ -256,6 +261,28 @@ if [[ ! -d $BIN_PATH ]]; then
fi fi
export BIN_DIR="bin" export BIN_DIR="bin"
# verify we have our awk tool
#
export FILELIST_ENTRY_JSON_AWK="$BIN_DIR/filelist.entry.json.awk"
if [[ ! -e $FILELIST_ENTRY_JSON_AWK ]]; then
echo "$0: ERROR: filelist.entry.json.awk does not exist: $FILELIST_ENTRY_JSON_AWK" 1>&2
exit 5
fi
if [[ ! -f $FILELIST_ENTRY_JSON_AWK ]]; then
echo "$0: ERROR: filelist.entry.json.awk is not a file: $FILELIST_ENTRY_JSON_AWK" 1>&2
exit 5
fi
if [[ ! -r $FILELIST_ENTRY_JSON_AWK ]]; then
echo "$0: ERROR: filelist.entry.json.awk is not a readable file: $FILELIST_ENTRY_JSON_AWK" 1>&2
exit 5
fi
if [[ ! -s $FILELIST_ENTRY_JSON_AWK ]]; then
echo "$0: ERROR: filelist.entry.json.awk is not a not a non-empty readable file: $FILELIST_ENTRY_JSON_AWK" 1>&2
exit 5
fi
# verify that ENTRY_PATH is a entry directory # verify that ENTRY_PATH is a entry directory
# #
if [[ ! -d $ENTRY_PATH ]]; then if [[ ! -d $ENTRY_PATH ]]; then
@@ -329,25 +356,6 @@ if [[ ! -r $ENTRY_JSON ]]; then
exit 7 exit 7
fi fi
# verify we have our awk tool
#
export FILELIST_ENTRY_JSON_AWK="$BIN_DIR/filelist.entry.json.awk"
if [[ ! -e $FILELIST_ENTRY_JSON_AWK ]]; then
echo "$0: ERROR: filelist.entry.json.awk does not exist: $FILELIST_ENTRY_JSON_AWK" 1>&2
exit 5
fi
if [[ ! -f $FILELIST_ENTRY_JSON_AWK ]]; then
echo "$0: ERROR: filelist.entry.json.awk is not a file: $FILELIST_ENTRY_JSON_AWK" 1>&2
exit 5
fi
if [[ ! -r $FILELIST_ENTRY_JSON_AWK ]]; then
echo "$0: ERROR: filelist.entry.json.awk is not a readable file: $FILELIST_ENTRY_JSON_AWK" 1>&2
exit 5
fi
if [[ ! -s $FILELIST_ENTRY_JSON_AWK ]]; then
echo "$0: ERROR: filelist.entry.json.awk is not a not a non-empty readable file: $FILELIST_ENTRY_JSON_AWK" 1>&2
exit 5
fi
# parameter debugging # parameter debugging
# #
@@ -367,6 +375,7 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: CD_FAILED=$CD_FAILED" 1>&2 echo "$0: debug[3]: CD_FAILED=$CD_FAILED" 1>&2
echo "$0: debug[3]: BIN_PATH=$BIN_PATH" 1>&2 echo "$0: debug[3]: BIN_PATH=$BIN_PATH" 1>&2
echo "$0: debug[3]: BIN_DIR=$BIN_DIR" 1>&2 echo "$0: debug[3]: BIN_DIR=$BIN_DIR" 1>&2
echo "$0: debug[3]: FILELIST_ENTRY_JSON_AWK=$FILELIST_ENTRY_JSON_AWK" 1>&2
echo "$0: debug[3]: YEAR_DIR=$YEAR_DIR" 1>&2 echo "$0: debug[3]: YEAR_DIR=$YEAR_DIR" 1>&2
echo "$0: debug[3]: ENTRY_DIR=$ENTRY_DIR" 1>&2 echo "$0: debug[3]: ENTRY_DIR=$ENTRY_DIR" 1>&2
echo "$0: debug[3]: ENTRY_ID=$ENTRY_ID" 1>&2 echo "$0: debug[3]: ENTRY_ID=$ENTRY_ID" 1>&2
@@ -375,9 +384,9 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: DOT_PATH=$DOT_PATH" 1>&2 echo "$0: debug[3]: DOT_PATH=$DOT_PATH" 1>&2
echo "$0: debug[3]: DOT_PATH_CONTENT=$DOT_PATH_CONTENT" 1>&2 echo "$0: debug[3]: DOT_PATH_CONTENT=$DOT_PATH_CONTENT" 1>&2
echo "$0: debug[3]: ENTRY_JSON=$ENTRY_JSON" 1>&2 echo "$0: debug[3]: ENTRY_JSON=$ENTRY_JSON" 1>&2
echo "$0: debug[3]: FILELIST_ENTRY_JSON_AWK=$FILELIST_ENTRY_JSON_AWK" 1>&2
fi fi
# If -N, time to exit # If -N, time to exit
# #
if [[ -n $DO_NOT_PROCESS ]]; then if [[ -n $DO_NOT_PROCESS ]]; then
@@ -387,6 +396,7 @@ if [[ -n $DO_NOT_PROCESS ]]; then
exit 0 exit 0
fi fi
# create a temporary file manifest list # create a temporary file manifest list
# #
export TMP_MANIFEST_LIST=".tmp.$NAME.MANIFEST_LIST.$$.tmp" export TMP_MANIFEST_LIST=".tmp.$NAME.MANIFEST_LIST.$$.tmp"
@@ -409,6 +419,7 @@ elif [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: because of -n, temporary file manifest list is not used: $TMP_MANIFEST_LIST" 1>&2 echo "$0: debug[3]: because of -n, temporary file manifest list is not used: $TMP_MANIFEST_LIST" 1>&2
fi fi
# create a temporary find files list # create a temporary find files list
# #
export TMP_FILE_LIST=".tmp.$NAME.FILE_LIST.$$.tmp" export TMP_FILE_LIST=".tmp.$NAME.FILE_LIST.$$.tmp"
@@ -431,6 +442,7 @@ elif [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: because of -n, temporary file manifest list is not used: $TMP_FILE_LIST" 1>&2 echo "$0: debug[3]: because of -n, temporary file manifest list is not used: $TMP_FILE_LIST" 1>&2
fi fi
# generate sorted list of entry files from the entry's manifest # generate sorted list of entry files from the entry's manifest
# #
# We also add ioccc.css and var.mk from the top level. # We also add ioccc.css and var.mk from the top level.
@@ -448,6 +460,7 @@ if [[ $status -ne 0 ]]; then
exit 1 exit 1
fi fi
# generate sorted list of found entry files # generate sorted list of found entry files
# #
# We also add ioccc.css and var.mk from the top level. # We also add ioccc.css and var.mk from the top level.
@@ -470,6 +483,7 @@ if [[ $status -ne 0 ]]; then
exit 1 exit 1
fi fi
# note if the manifest does NOT match the file list # note if the manifest does NOT match the file list
# #
if [[ $V_FLAG -ge 5 ]]; then if [[ $V_FLAG -ge 5 ]]; then
@@ -495,6 +509,7 @@ else
EXIT_CODE=1 # exit 1 EXIT_CODE=1 # exit 1
fi fi
# All Done!!! All Done!!! -- Jessica Noll, Age 2 # All Done!!! All Done!!! -- Jessica Noll, Age 2
# #
if [[ -z $NOOP ]]; then if [[ -z $NOOP ]]; then
+12 -5
View File
@@ -360,8 +360,7 @@ while getopts :hv:Vd:D:nNj: flag; do
;; ;;
esac esac
done done
#
# remove the options # remove the options
# #
shift $(( OPTIND - 1 )); shift $(( OPTIND - 1 ));
@@ -489,11 +488,19 @@ fi
export BIN_DIR="bin" export BIN_DIR="bin"
# find the jval-wrapper.sh tool # verify that the bin/jval-wrapper.sh tool is executable
# #
JVAL_WRAPPER="$BIN_PATH/jval-wrapper.sh" JVAL_WRAPPER="$BIN_DIR/jval-wrapper.sh"
if [[ ! -e $JVAL_WRAPPER ]]; then
echo "$0: ERROR: bin/jval-wrapper.sh does not exist: $JVAL_WRAPPER" 1>&2
exit 5
fi
if [[ ! -f $JVAL_WRAPPER ]]; then
echo "$0: ERROR: bin/jval-wrapper.sh is not a regular file: $JVAL_WRAPPER" 1>&2
exit 5
fi
if [[ ! -x $JVAL_WRAPPER ]]; then if [[ ! -x $JVAL_WRAPPER ]]; then
echo "$0: ERROR: cannot find the bin/jval-wrapper.sh executable" 1>&2 echo "$0: ERROR: bin/jval-wrapper.sh is not an executable file: $JVAL_WRAPPER" 1>&2
exit 5 exit 5
fi fi
+33 -25
View File
@@ -43,6 +43,7 @@
# #
# Share and enjoy! :-) # Share and enjoy! :-)
# firewall - run only with a bash that is version 5.1.8 or later # firewall - run only with a bash that is version 5.1.8 or later
# #
# The "/usr/bin/env bash" command must result in using a bash that # The "/usr/bin/env bash" command must result in using a bash that
@@ -161,6 +162,7 @@ unset TAR_FILE_SET
declare -ag TAR_FILE_SET declare -ag TAR_FILE_SET
export TARBALL_DIR="/var/tmp" export TARBALL_DIR="/var/tmp"
# usage # usage
# #
export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir]
@@ -402,7 +404,6 @@ function manifest_entry
} }
# parse command line # parse command line
# #
while getopts :hv:Vd:c:s:i:T:nN flag; do while getopts :hv:Vd:c:s:i:T:nN flag; do
@@ -446,7 +447,7 @@ while getopts :hv:Vd:c:s:i:T:nN flag; do
;; ;;
esac esac
done done
#
# remove the options # remove the options
# #
shift $(( OPTIND - 1 )); shift $(( OPTIND - 1 ));
@@ -465,6 +466,7 @@ if [[ $# -ne 1 ]]; then
fi fi
export ENTRY_PATH="$1" export ENTRY_PATH="$1"
# if -i input_data, replace stdin with the input data file # if -i input_data, replace stdin with the input data file
# #
if [[ -n $INPUT_DATA_FILE ]]; then if [[ -n $INPUT_DATA_FILE ]]; then
@@ -561,32 +563,38 @@ if [[ ! -d $BIN_PATH ]]; then
exit 6 exit 6
fi fi
export BIN_DIR="bin" export BIN_DIR="bin"
# verify that the bin/md2html.sh tool is executable
# #
export JVAL_WRAPPER="$BIN_DIR/jval-wrapper.sh" export MD2HTML_SH="$BIN_DIR/md2html.sh"
if [[ ! -e $MD2HTML_SH ]]; then
echo "$0: ERROR: bin/md2html.sh does not exist: $MD2HTML_SH" 1>&2
exit 5
fi
if [[ ! -f $MD2HTML_SH ]]; then
echo "$0: ERROR: bin/md2html.sh is not a regular file: $MD2HTML_SH" 1>&2
exit 5
fi
if [[ ! -x $MD2HTML_SH ]]; then
echo "$0: ERROR: bin/md2html.sh is not an executable file: $MD2HTML_SH" 1>&2
exit 5
fi
# verify that the bin/jval-wrapper.sh tool is executable
#
JVAL_WRAPPER="$BIN_DIR/jval-wrapper.sh"
if [[ ! -e $JVAL_WRAPPER ]]; then if [[ ! -e $JVAL_WRAPPER ]]; then
echo "$0: ERROR: bin/jval-wrapper.sh file does not exist: $JVAL_WRAPPER" 1>&2 echo "$0: ERROR: bin/jval-wrapper.sh does not exist: $JVAL_WRAPPER" 1>&2
exit 5 exit 5
fi fi
if [[ ! -f $JVAL_WRAPPER ]]; then if [[ ! -f $JVAL_WRAPPER ]]; then
echo "$0: ERROR: bin/jval-wrapper.sh is not a file: $JVAL_WRAPPER" 1>&2 echo "$0: ERROR: bin/jval-wrapper.sh is not a regular file: $JVAL_WRAPPER" 1>&2
exit 5 exit 5
fi fi
if [[ ! -x $JVAL_WRAPPER ]]; then if [[ ! -x $JVAL_WRAPPER ]]; then
echo "$0: ERROR: cannot find an executable bin/jval-wrapper.sh tool: $JVAL_WRAPPER" 1>&2 echo "$0: ERROR: bin/jval-wrapper.sh is not an executable file: $JVAL_WRAPPER" 1>&2
exit 5
fi
#
export MD2HTML="$BIN_DIR/md2html.sh"
if [[ ! -e $MD2HTML ]]; then
echo "$0: ERROR: bin/md2html.sh file does not exist: $MD2HTML" 1>&2
exit 5
fi
if [[ ! -f $MD2HTML ]]; then
echo "$0: ERROR: bin/md2html.sh is not a file: $MD2HTML" 1>&2
exit 5
fi
if [[ ! -x $MD2HTML ]]; then
echo "$0: ERROR: cannot find an executable bin/md2html.sh tool: $MD2HTML" 1>&2
exit 5 exit 5
fi fi
@@ -684,7 +692,7 @@ done
# determine TARBALL filename # determine TARBALL filename
# #
NOW=$(/bin/date '+%Y%m%d.%H%M%S') NOW=$(date '+%Y%m%d.%H%M%S')
export NOW export NOW
export TARBALL="$TARBALL_DIR/$ENTRY_ID.mods.$NOW.tar.bz2" export TARBALL="$TARBALL_DIR/$ENTRY_ID.mods.$NOW.tar.bz2"
@@ -718,7 +726,7 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: BIN_PATH=$BIN_PATH" 1>&2 echo "$0: debug[3]: BIN_PATH=$BIN_PATH" 1>&2
echo "$0: debug[3]: BIN_DIR=$BIN_DIR" 1>&2 echo "$0: debug[3]: BIN_DIR=$BIN_DIR" 1>&2
echo "$0: debug[3]: JVAL_WRAPPER=$JVAL_WRAPPER" 1>&2 echo "$0: debug[3]: JVAL_WRAPPER=$JVAL_WRAPPER" 1>&2
echo "$0: debug[3]: MD2HTML=$MD2HTML" 1>&2 echo "$0: debug[3]: MD2HTML_SH=$MD2HTML_SH" 1>&2
echo "$0: debug[3]: YEAR_DIR=$YEAR_DIR" 1>&2 echo "$0: debug[3]: YEAR_DIR=$YEAR_DIR" 1>&2
echo "$0: debug[3]: ENTRY_DIR=$ENTRY_DIR" 1>&2 echo "$0: debug[3]: ENTRY_DIR=$ENTRY_DIR" 1>&2
echo "$0: debug[3]: ENTRY_ID=$ENTRY_ID" 1>&2 echo "$0: debug[3]: ENTRY_ID=$ENTRY_ID" 1>&2
@@ -1521,12 +1529,12 @@ if [[ -z $NOOP ]]; then
if [[ ! -f $INDEX_HTML ]]; then if [[ ! -f $INDEX_HTML ]]; then
if [[ $V_FLAG -ge 3 ]]; then if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: about to run: $MD2HTML -v $V_FLAG -- $README_MD $INDEX_HTML" 1>&2 echo "$0: debug[3]: about to run: $MD2HTML_SH -v $V_FLAG -- $README_MD $INDEX_HTML" 1>&2
fi fi
"$MD2HTML" -v "$V_FLAG" -- "$README_MD" "$INDEX_HTML" "$MD2HTML_SH" -v "$V_FLAG" -- "$README_MD" "$INDEX_HTML"
status="$?" status="$?"
if [[ $status -ne 0 ]]; then if [[ $status -ne 0 ]]; then
echo "$0: ERROR: $MD2HTML -v $V_FLAG -- $README_MD $INDEX_HTML filed," \ echo "$0: ERROR: $MD2HTML_SH -v $V_FLAG -- $README_MD $INDEX_HTML filed," \
"error code: $status" 1>&2 "error code: $status" 1>&2
exit 32 exit 32
fi fi
+12 -5
View File
@@ -304,8 +304,7 @@ while getopts :hv:Vd:D:nNj: flag; do
;; ;;
esac esac
done done
#
# remove the options # remove the options
# #
shift $(( OPTIND - 1 )); shift $(( OPTIND - 1 ));
@@ -433,11 +432,19 @@ fi
export BIN_DIR="bin" export BIN_DIR="bin"
# find the jval-wrapper.sh tool # verify that the bin/jval-wrapper.sh tool is executable
# #
JVAL_WRAPPER="$BIN_PATH/jval-wrapper.sh" JVAL_WRAPPER="$BIN_DIR/jval-wrapper.sh"
if [[ ! -e $JVAL_WRAPPER ]]; then
echo "$0: ERROR: bin/jval-wrapper.sh does not exist: $JVAL_WRAPPER" 1>&2
exit 5
fi
if [[ ! -f $JVAL_WRAPPER ]]; then
echo "$0: ERROR: bin/jval-wrapper.sh is not a regular file: $JVAL_WRAPPER" 1>&2
exit 5
fi
if [[ ! -x $JVAL_WRAPPER ]]; then if [[ ! -x $JVAL_WRAPPER ]]; then
echo "$0: ERROR: cannot find the bin/jval-wrapper.sh executable" 1>&2 echo "$0: ERROR: bin/jval-wrapper.sh is not an executable file: $JVAL_WRAPPER" 1>&2
exit 5 exit 5
fi fi
+6 -1
View File
@@ -45,6 +45,7 @@
# #
# Share and enjoy! :-) # Share and enjoy! :-)
# firewall - run only with a bash that is version 5.1.8 or later # firewall - run only with a bash that is version 5.1.8 or later
# #
# The "/usr/bin/env bash" command must result in using a bash that # The "/usr/bin/env bash" command must result in using a bash that
@@ -233,7 +234,7 @@ while getopts :hv:Vd:nN flag; do
;; ;;
esac esac
done done
#
# remove the options # remove the options
# #
shift $(( OPTIND - 1 )); shift $(( OPTIND - 1 ));
@@ -257,6 +258,7 @@ if [[ $V_FLAG -ge 1 ]]; then
echo "$0: debug[1]: start scan for missing links" 1>&2 echo "$0: debug[1]: start scan for missing links" 1>&2
fi fi
# print running info if verbose # print running info if verbose
# #
# If -v 3 or higher, print exported variables in order that they were exported. # If -v 3 or higher, print exported variables in order that they were exported.
@@ -505,18 +507,21 @@ find . -name '*.md' ! -name markdown.md ! -path './tmp/*' -print |
done done
done > "$TMP_MISSING_LINK" done > "$TMP_MISSING_LINK"
# count the missing links # count the missing links
# #
MISSING_LINK_COUNT=$(wc -l < "$TMP_MISSING_LINK" | tr -d ' ') MISSING_LINK_COUNT=$(wc -l < "$TMP_MISSING_LINK" | tr -d ' ')
export MISSING_LINK_COUNT export MISSING_LINK_COUNT
((MISSING_LINK_COUNT=MISSING_LINK_COUNT/4)) ((MISSING_LINK_COUNT=MISSING_LINK_COUNT/4))
# report on any missing links # report on any missing links
# #
if [[ -s $TMP_MISSING_LINK ]]; then if [[ -s $TMP_MISSING_LINK ]]; then
sed -e "s;^$TOPDIR/;;" "$TMP_MISSING_LINK" 1>&2 sed -e "s;^$TOPDIR/;;" "$TMP_MISSING_LINK" 1>&2
fi fi
# All Done!!! All Done!!! -- Jessica Noll, Age 2 # All Done!!! All Done!!! -- Jessica Noll, Age 2
# #
if [[ -s $TMP_MISSING_LINK ]]; then if [[ -s $TMP_MISSING_LINK ]]; then
+3
View File
@@ -33,6 +33,9 @@
# #
# Share and enjoy! :-) # Share and enjoy! :-)
# modify well known markdown headers that are not in canonical form
#
for i in $(git ls-files '[0-9][0-9][0-9][0-9]/*README.md'); do for i in $(git ls-files '[0-9][0-9][0-9][0-9]/*README.md'); do
perl -0777 -p -i -e 's/([^\n]\n)\n*##*[[:space:]]*(To build):?\n\n*([^\n])?/$1\n\n## $2:\n\n$3/' "$i" perl -0777 -p -i -e 's/([^\n]\n)\n*##*[[:space:]]*(To build):?\n\n*([^\n])?/$1\n\n## $2:\n\n$3/' "$i"
perl -0777 -p -i -e 's/([^\n]\n)\n*##*[[:space:]]*(Bugs and \(Mis\)features):?\n\n*([^\n])?/$1\n\n### $2:\n\n$3/' "$i" perl -0777 -p -i -e 's/([^\n]\n)\n*##*[[:space:]]*(Bugs and \(Mis\)features):?\n\n*([^\n])?/$1\n\n### $2:\n\n$3/' "$i"
+74 -29
View File
@@ -28,6 +28,7 @@
# #
# Share and enjoy! :-) # Share and enjoy! :-)
# firewall - run only with a bash that is version 5.1.8 or later # firewall - run only with a bash that is version 5.1.8 or later
# #
# The "/usr/bin/env bash" command must result in using a bash that # The "/usr/bin/env bash" command must result in using a bash that
@@ -71,6 +72,7 @@ if [[ -z ${BASH_VERSINFO[0]} ||
exit 4 exit 4
fi fi
# setup bash file matching # setup bash file matching
# #
# We must declare arrays with -ag or -Ag, and we need loops to "export" modified variables. # We must declare arrays with -ag or -Ag, and we need loops to "export" modified variables.
@@ -83,9 +85,10 @@ shopt -u nocaseglob # disable strict case matching
shopt -u extglob # enable extended globbing patterns shopt -u extglob # enable extended globbing patterns
shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories
# set variables referenced in the usage message # set variables referenced in the usage message
# #
export VERSION="1.11 2024-08-13" export VERSION="1.12 2024-08-18"
NAME=$(basename "$0") NAME=$(basename "$0")
export NAME export NAME
export V_FLAG=0 export V_FLAG=0
@@ -115,6 +118,7 @@ export DO_NOT_PROCESS=
export QUICK_MODE= export QUICK_MODE=
export EXIT_CODE="0" export EXIT_CODE="0"
# Letter "is for" text # Letter "is for" text
# #
unset IS_FOR unset IS_FOR
@@ -146,15 +150,17 @@ IS_FOR[x]="<i>x</i> is for <code>xor</code>"
IS_FOR[y]="<i>y</i> is for <code>y0</code>" IS_FOR[y]="<i>y</i> is for <code>y0</code>"
IS_FOR[z]="<i>z</i> is for <code>zlib</code>" IS_FOR[z]="<i>z</i> is for <code>zlib</code>"
# clear options we will add to tools # clear options we will add to tools
# #
unset TOOL_OPTION unset TOOL_OPTION
declare -ag TOOL_OPTION declare -ag TOOL_OPTION
# usage # usage
# #
export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N] export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N]
[-t tagline] [-T md2html.sh] [-p tool] [-Q] [-t tagline] [-Q]
-h print help message and exit -h print help message and exit
-v level set verbosity level (def level: 0) -v level set verbosity level (def level: 0)
@@ -172,10 +178,6 @@ export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N]
-t tagline string to write about the tool that formed the markdown content (def: $TAGLINE) -t tagline string to write about the tool that formed the markdown content (def: $TAGLINE)
NOTE: 'tagline' may be enclosed within, but may NOT contain an internal single-quote, or double-quote. NOTE: 'tagline' may be enclosed within, but may NOT contain an internal single-quote, or double-quote.
-T md2html.sh run 'markdown to html tool' to convert markdown into HTML (def: $MD2HTML_SH)
-p tool run 'pandoc wrapper tool' (not pandoc path) during HTML phase number 21 (def: use $PANDOC_WRAPPER)
NOTE: The '-p tool' is passed as leading options on tool command lines.
-Q quick mode, do not run $MD2HTML_SH unless markdown is out of date (def: do) -Q quick mode, do not run $MD2HTML_SH unless markdown is out of date (def: do)
@@ -184,7 +186,7 @@ export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N]
NOTE: The '-v level' is passed as initial command line options to the 'markdown to html tool' (md2html.sh). NOTE: The '-v level' is passed as initial command line options to the 'markdown to html tool' (md2html.sh).
The 'tagline' is passed as '-t tagline' to the 'markdown to html tool' (md2html.sh), after the '-v level'. The 'tagline' is passed as '-t tagline' to the 'markdown to html tool' (md2html.sh), after the '-v level'.
Any '-T md2html.sh', '-p tool', '-P pandoc_opts', '-U top_url' Any '-P pandoc_opts', '-U top_url'
are passed to the 'markdown to html tool' (md2html.sh), and will be before any command line arguments. are passed to the 'markdown to html tool' (md2html.sh), and will be before any command line arguments.
Exit codes: Exit codes:
@@ -200,6 +202,7 @@ Exit codes:
$NAME version: $VERSION" $NAME version: $VERSION"
# output_entry_ids # output_entry_ids
# #
# Write the entry ids from an author/author_handle.json file to standard output (stdout) # Write the entry ids from an author/author_handle.json file to standard output (stdout)
@@ -242,6 +245,7 @@ function output_entry_ids
return 0 return 0
} }
# output_author_handle # output_author_handle
# #
# Write the author handles from an author/author_handle.json file to standard output (stdout) # Write the author handles from an author/author_handle.json file to standard output (stdout)
@@ -283,6 +287,7 @@ function output_author_handle
return 0 return 0
} }
# output_full_name # output_full_name
# #
# Write the Full Name from an author/author_handle.json file to standard output (stdout) # Write the Full Name from an author/author_handle.json file to standard output (stdout)
@@ -324,6 +329,7 @@ function output_full_name
return 0 return 0
} }
# output_location_code # output_location_code
# #
# Write the Location Code from an author/author_handle.json file to standard output (stdout) # Write the Location Code from an author/author_handle.json file to standard output (stdout)
@@ -365,6 +371,7 @@ function output_location_code
return 0 return 0
} }
# output_award # output_award
# #
# Write the award name to standard output (stdout) # Write the award name to standard output (stdout)
@@ -406,6 +413,7 @@ function output_award
return 0 return 0
} }
# output_url # output_url
# #
# Write the url from an author/author_handle.json file to standard output (stdout) # Write the url from an author/author_handle.json file to standard output (stdout)
@@ -451,6 +459,7 @@ function output_url
return 0 return 0
} }
# output_alt_url # output_alt_url
# #
# Write the alternate url from an author/author_handle.json file to standard output (stdout) # Write the alternate url from an author/author_handle.json file to standard output (stdout)
@@ -496,6 +505,7 @@ function output_alt_url
return 0 return 0
} }
# output_mastodon # output_mastodon
# #
# Write the mastodon handle from an author/author_handle.json file to standard output (stdout) # Write the mastodon handle from an author/author_handle.json file to standard output (stdout)
@@ -541,6 +551,7 @@ function output_mastodon
return 0 return 0
} }
# output_mastodon_url # output_mastodon_url
# #
# Write the mastodon handle from an author/author_handle.json file to standard output (stdout) # Write the mastodon handle from an author/author_handle.json file to standard output (stdout)
@@ -586,6 +597,7 @@ function output_mastodon_url
return 0 return 0
} }
# output_github # output_github
# #
# Write the GitHub handle from an author/author_handle.json file to standard output (stdout) # Write the GitHub handle from an author/author_handle.json file to standard output (stdout)
@@ -631,6 +643,7 @@ function output_github
return 0 return 0
} }
# output_affiliation # output_affiliation
# #
# Write the affiliation from an author/author_handle.json file to standard output (stdout) # Write the affiliation from an author/author_handle.json file to standard output (stdout)
@@ -676,9 +689,10 @@ function output_affiliation
return 0 return 0
} }
# parse command line # parse command line
# #
while getopts :hv:Vd:D:nNt:T:p:Qw: flag; do while getopts :hv:Vd:D:nNt:Qw: flag; do
case "$flag" in case "$flag" in
h) echo "$USAGE" 1>&2 h) echo "$USAGE" 1>&2
exit 2 exit 2
@@ -727,14 +741,6 @@ while getopts :hv:Vd:D:nNt:T:p:Qw: flag; do
TAGLINE="$OPTARG" TAGLINE="$OPTARG"
# -t tagline always added after arg parsing # -t tagline always added after arg parsing
;; ;;
T) MD2HTML_SH="$OPTARG"
TOOL_OPTION+=("-T")
TOOL_OPTION+=("$MD2HTML_SH")
;;
p) PANDOC_WRAPPER="$OPTARG"
TOOL_OPTION+=("-p")
TOOL_OPTION+=("$PANDOC_WRAPPER")
;;
Q) QUICK_MODE="-Q" Q) QUICK_MODE="-Q"
;; ;;
w) SITE_URL="$OPTARG" w) SITE_URL="$OPTARG"
@@ -758,7 +764,7 @@ while getopts :hv:Vd:D:nNt:T:p:Qw: flag; do
;; ;;
esac esac
done done
#
# remove the options # remove the options
# #
shift $(( OPTIND - 1 )); shift $(( OPTIND - 1 ));
@@ -774,6 +780,7 @@ if [[ $# -ne 0 ]]; then
exit 3 exit 3
fi fi
# always add the '-v level' option, unless level is empty, to the set of options passed to the md2html.sh tool # always add the '-v level' option, unless level is empty, to the set of options passed to the md2html.sh tool
# #
if [[ -n $V_FLAG ]]; then if [[ -n $V_FLAG ]]; then
@@ -788,16 +795,19 @@ if [[ -n $TAGLINE ]]; then
TOOL_OPTION+=("$TAGLINE") TOOL_OPTION+=("$TAGLINE")
fi fi
# always add the '-U URL' for the top level authors.html file # always add the '-U URL' for the top level authors.html file
# #
TOOL_OPTION+=("-U") TOOL_OPTION+=("-U")
TOOL_OPTION+=("$SITE_URL/authors.html") TOOL_OPTION+=("$SITE_URL/authors.html")
# always add the '-D docroot/' for the top level authors.html file # always add the '-D docroot/' for the top level authors.html file
# #
TOOL_OPTION+=("-D") TOOL_OPTION+=("-D")
TOOL_OPTION+=("$DOCROOT_SLASH") TOOL_OPTION+=("$DOCROOT_SLASH")
# verify that we have a topdir directory # verify that we have a topdir directory
# #
REPO_NAME=$(basename "$REPO_TOP_URL") REPO_NAME=$(basename "$REPO_TOP_URL")
@@ -818,6 +828,7 @@ if [[ ! -d $TOPDIR ]]; then
exit 6 exit 6
fi fi
# cd to topdir # cd to topdir
# #
if [[ ! -e $TOPDIR ]]; then if [[ ! -e $TOPDIR ]]; then
@@ -841,6 +852,7 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2 echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2
fi fi
# verify that the md2html tool is executable # verify that the md2html tool is executable
# #
if [[ ! -e $MD2HTML_SH ]]; then if [[ ! -e $MD2HTML_SH ]]; then
@@ -856,6 +868,7 @@ if [[ ! -x $MD2HTML_SH ]]; then
exit 5 exit 5
fi fi
# verify that we have an author subdirectory # verify that we have an author subdirectory
# #
export AUTHOR_PATH="$TOPDIR/author" export AUTHOR_PATH="$TOPDIR/author"
@@ -865,6 +878,7 @@ if [[ ! -d $AUTHOR_PATH ]]; then
fi fi
export AUTHOR_DIR="author" export AUTHOR_DIR="author"
# verify that we have a bin subdirectory # verify that we have a bin subdirectory
# #
export BIN_PATH="$TOPDIR/bin" export BIN_PATH="$TOPDIR/bin"
@@ -874,33 +888,40 @@ if [[ ! -d $BIN_PATH ]]; then
fi fi
export BIN_DIR="bin" export BIN_DIR="bin"
# find the jval-wrapper.sh tool
# verify that the bin/jval-wrapper.sh tool is executable
# #
JVAL_WRAPPER="$BIN_PATH/jval-wrapper.sh" JVAL_WRAPPER="$BIN_DIR/jval-wrapper.sh"
if [[ ! -x $JVAL_WRAPPER ]]; then if [[ ! -e $JVAL_WRAPPER ]]; then
echo "$0: ERROR: cannot find the bin/jval-wrapper.sh executable" 1>&2 echo "$0: ERROR: bin/jval-wrapper.sh does not exist: $JVAL_WRAPPER" 1>&2
exit 5 exit 5
fi fi
if [[ ! -f $JVAL_WRAPPER ]]; then
echo "$0: ERROR: bin/jval-wrapper.sh is not a regular file: $JVAL_WRAPPER" 1>&2
exit 5
fi
if [[ ! -x $JVAL_WRAPPER ]]; then
echo "$0: ERROR: bin/jval-wrapper.sh is not an executable file: $JVAL_WRAPPER" 1>&2
exit 5
fi
# find the location tool # find the location tool
# #
LOCATION_TOOL=$(type -P location) LOCATION_TOOL=$(type -P location)
export LOCATION_TOOL export LOCATION_TOOL
if [[ -z $LOCATION_TOOL ]]; then
# guess we have a location tool in bin
#
LOCATION_TOOL="$BIN_DIR/location"
fi
if [[ ! -x $LOCATION_TOOL ]]; then if [[ ! -x $LOCATION_TOOL ]]; then
echo "$0: ERROR: cannot find the location executable" 1>&2 echo "$0: ERROR: cannot find the location executable along \$PATH" 1>&2
echo "$0: notice: location tool comes from this repo: https://github.com/ioccc-src/mkiocccentry" 1>&2 echo "$0: notice: location tool comes from this repo: https://github.com/ioccc-src/mkiocccentry" 1>&2
exit 5 exit 5
fi fi
# note authors.html file # note authors.html file
# #
export AUTHORS_HTML="authors.html" export AUTHORS_HTML="authors.html"
# print running info if verbose # print running info if verbose
# #
# If -v 3 or higher, print exported variables in order that they were exported. # If -v 3 or higher, print exported variables in order that they were exported.
@@ -939,6 +960,7 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: AUTHORS_HTML=$AUTHORS_HTML" 1>&2 echo "$0: debug[3]: AUTHORS_HTML=$AUTHORS_HTML" 1>&2
fi fi
# -N stops early before any processing is performed # -N stops early before any processing is performed
# #
if [[ -n $DO_NOT_PROCESS ]]; then if [[ -n $DO_NOT_PROCESS ]]; then
@@ -948,7 +970,8 @@ if [[ -n $DO_NOT_PROCESS ]]; then
exit 0 exit 0
fi fi
# case: -Q
# case: -Q (quick mode)
# #
# Do nothing if authors.html is newer than all author/author_handle.json files. # Do nothing if authors.html is newer than all author/author_handle.json files.
# #
@@ -959,6 +982,7 @@ if [[ -n $QUICK_MODE ]]; then
fi fi
fi fi
# create a temporary entry markdown file # create a temporary entry markdown file
# #
export TMP_AUTHORS_MD=".tmp.$NAME.AUTHORS_MD.$$.tmp" export TMP_AUTHORS_MD=".tmp.$NAME.AUTHORS_MD.$$.tmp"
@@ -981,6 +1005,7 @@ elif [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: because of -n, temporary entry markdown file is not used: $TMP_AUTHORS_MD" 1>&2 echo "$0: debug[3]: because of -n, temporary entry markdown file is not used: $TMP_AUTHORS_MD" 1>&2
fi fi
# create a temporary sort word list file # create a temporary sort word list file
# #
export TMP_SORT_WORD=".tmp.$NAME.SORT_WORD.$$.tmp" export TMP_SORT_WORD=".tmp.$NAME.SORT_WORD.$$.tmp"
@@ -1003,12 +1028,14 @@ elif [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: because of -n, temporary sort word list file is not used: $TMP_SORT_WORD" 1>&2 echo "$0: debug[3]: because of -n, temporary sort word list file is not used: $TMP_SORT_WORD" 1>&2
fi fi
# load initial letter . lines into the temporary sort word list file # load initial letter . lines into the temporary sort word list file
# #
for letter in "${!IS_FOR[@]}"; do for letter in "${!IS_FOR[@]}"; do
echo "$letter ." echo "$letter ."
done > "$TMP_SORT_WORD" done > "$TMP_SORT_WORD"
# add author sort_word filename to the temporary sort word list file # add author sort_word filename to the temporary sort word list file
# #
if [[ $V_FLAG -ge 1 ]]; then if [[ $V_FLAG -ge 1 ]]; then
@@ -1018,6 +1045,7 @@ find "$AUTHOR_DIR" -mindepth 1 -maxdepth 1 -type f -name '*.json' 2>/dev/null |
echo "$(bin/jval-wrapper.sh -w -b "$json_file" '$..sort_word') $json_file" echo "$(bin/jval-wrapper.sh -w -b "$json_file" '$..sort_word') $json_file"
done >> "$TMP_SORT_WORD" done >> "$TMP_SORT_WORD"
# sort the temporary sort word list file # sort the temporary sort word list file
# #
LC_ALL=C sort -f -d "$TMP_SORT_WORD" -o "$TMP_SORT_WORD" LC_ALL=C sort -f -d "$TMP_SORT_WORD" -o "$TMP_SORT_WORD"
@@ -1027,6 +1055,7 @@ if [[ $status -ne 0 ]]; then
exit 14 exit 14
fi fi
# generate the temporary entry markdown file # generate the temporary entry markdown file
# #
{ {
@@ -1299,9 +1328,13 @@ else
fi fi
fi fi
# use the md2html.sh tool to form a location HTML file, unless -n
# use the md2html.sh tool to update authors.html, unless -n
# #
if [[ -z $NOOP ]]; then if [[ -z $NOOP ]]; then
# possibly update authors.html
#
if [[ $V_FLAG -ge 1 ]]; then if [[ $V_FLAG -ge 1 ]]; then
echo "$0: debug[1]: about to run: $MD2HTML_SH ${TOOL_OPTION[*]} -- authors.md $TMP_AUTHORS_MD $AUTHORS_HTML" 1>&2 echo "$0: debug[1]: about to run: $MD2HTML_SH ${TOOL_OPTION[*]} -- authors.md $TMP_AUTHORS_MD $AUTHORS_HTML" 1>&2
fi fi
@@ -1316,12 +1349,23 @@ if [[ -z $NOOP ]]; then
echo "$0: debug[3]: now up to date: $AUTHORS_HTML" 1>&2 echo "$0: debug[3]: now up to date: $AUTHORS_HTML" 1>&2
fi fi
# case -Q: (quick mode)
#
# If we are here, then the early quick mode test indicated that the prerequisite files are newer.
# We will force the authors.html file to be touched so that a later run with -Q will quickly exit.
# We do this because by default, the md2html.sh tool does not modify the target HTML unless it was modified.
#
if [[ -n $QUICK_MODE ]]; then
touch "$AUTHORS_HTML"
fi
# report disabled by -n # report disabled by -n
# #
elif [[ $V_FLAG -ge 5 ]]; then elif [[ $V_FLAG -ge 5 ]]; then
echo "$0: debug[5]: because of -n, did not run: $MD2HTML_SH ${TOOL_OPTION[*]} -- authors.md $TMP_AUTHORS_MD $AUTHORS_HTML" 1>&2 echo "$0: debug[5]: because of -n, did not run: $MD2HTML_SH ${TOOL_OPTION[*]} -- authors.md $TMP_AUTHORS_MD $AUTHORS_HTML" 1>&2
fi fi
# file cleanup # file cleanup
# #
if [[ -z $NOOP ]]; then if [[ -z $NOOP ]]; then
@@ -1330,6 +1374,7 @@ elif [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: because of -n, disabled: rm -f -- $TMP_AUTHORS_MD" 1>&2 echo "$0: debug[3]: because of -n, disabled: rm -f -- $TMP_AUTHORS_MD" 1>&2
fi fi
# All Done!!! All Done!!! -- Jessica Noll, Age 2 # All Done!!! All Done!!! -- Jessica Noll, Age 2
# #
if [[ $EXIT_CODE -ne 0 ]]; then if [[ $EXIT_CODE -ne 0 ]]; then
+48 -27
View File
@@ -26,6 +26,7 @@
# #
# Share and enjoy! :-) # Share and enjoy! :-)
# firewall - run only with a bash that is version 5.1.8 or later # firewall - run only with a bash that is version 5.1.8 or later
# #
# The "/usr/bin/env bash" command must result in using a bash that # The "/usr/bin/env bash" command must result in using a bash that
@@ -84,7 +85,7 @@ shopt -s globstar # enable ** to match all files and zero or more directories an
# set variables referenced in the usage message # set variables referenced in the usage message
# #
export VERSION="1.5 2024-08-17" export VERSION="1.6 2024-08-18"
NAME=$(basename "$0") NAME=$(basename "$0")
export NAME export NAME
export V_FLAG=0 export V_FLAG=0
@@ -110,17 +111,19 @@ export SITE_URL="https://ioccc-src.github.io/temp-test-ioccc"
# #
export NOOP= export NOOP=
export DO_NOT_PROCESS= export DO_NOT_PROCESS=
QUICK_MODE= export QUICK_MODE=
# clear options we will add to tools # clear options we will add to tools
# #
unset TOOL_OPTION unset TOOL_OPTION
declare -ag TOOL_OPTION declare -ag TOOL_OPTION
# usage # usage
# #
export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N] export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N]
[-t tagline] [-p tool] [-Q] [-w site_url] [-t tagline] [-Q] [-w site_url]
-h print help message and exit -h print help message and exit
-v level set verbosity level (def level: 0) -v level set verbosity level (def level: 0)
@@ -139,9 +142,6 @@ export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N]
-t tagline string to write about the tool that formed the markdown content (def: $TAGLINE) -t tagline string to write about the tool that formed the markdown content (def: $TAGLINE)
NOTE: 'tagline' may be enclosed within, but may NOT contain an internal single-quote, or double-quote. NOTE: 'tagline' may be enclosed within, but may NOT contain an internal single-quote, or double-quote.
-p tool run 'pandoc wrapper tool' (not pandoc path) during HTML phase number 21 (def: use $PANDOC_WRAPPER)
NOTE: The '-p tool' is passed as leading options on tool command lines.
-Q quick mode, do not run $MD2HTML_SH unless markdown is out of date (def: do) -Q quick mode, do not run $MD2HTML_SH unless markdown is out of date (def: do)
-w site_url Base URL of the website (def: $SITE_URL) -w site_url Base URL of the website (def: $SITE_URL)
@@ -149,7 +149,7 @@ export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N]
NOTE: The '-v level' is passed as initial command line options to the 'markdown to html tool' (md2html.sh). NOTE: The '-v level' is passed as initial command line options to the 'markdown to html tool' (md2html.sh).
The 'tagline' is passed as '-t tagline' to the 'markdown to html tool' (md2html.sh), after the '-v level'. The 'tagline' is passed as '-t tagline' to the 'markdown to html tool' (md2html.sh), after the '-v level'.
Any '-T md2html.sh', '-p tool', '-P pandoc_opts', '-U top_url' Any '-P pandoc_opts', '-U top_url'
are passed to the 'markdown to html tool' (md2html.sh), and will be before any command line arguments. are passed to the 'markdown to html tool' (md2html.sh), and will be before any command line arguments.
Exit codes: Exit codes:
@@ -165,9 +165,10 @@ Exit codes:
$NAME version: $VERSION" $NAME version: $VERSION"
# parse command line # parse command line
# #
while getopts :hv:Vd:D:nNt:p:Qw: flag; do while getopts :hv:Vd:D:nNt:Qw: flag; do
case "$flag" in case "$flag" in
h) echo "$USAGE" 1>&2 h) echo "$USAGE" 1>&2
exit 2 exit 2
@@ -216,10 +217,6 @@ while getopts :hv:Vd:D:nNt:p:Qw: flag; do
TAGLINE="$OPTARG" TAGLINE="$OPTARG"
# -t tagline always added after arg parsing # -t tagline always added after arg parsing
;; ;;
p) PANDOC_WRAPPER="$OPTARG"
TOOL_OPTION+=("-p")
TOOL_OPTION+=("$PANDOC_WRAPPER")
;;
Q) QUICK_MODE="-Q" Q) QUICK_MODE="-Q"
;; ;;
w) SITE_URL="$OPTARG" w) SITE_URL="$OPTARG"
@@ -243,7 +240,7 @@ while getopts :hv:Vd:D:nNt:p:Qw: flag; do
;; ;;
esac esac
done done
#
# remove the options # remove the options
# #
shift $(( OPTIND - 1 )); shift $(( OPTIND - 1 ));
@@ -259,6 +256,7 @@ if [[ $# -ne 0 ]]; then
exit 3 exit 3
fi fi
# always add the '-v level' option, unless level is empty, to the set of options passed to the md2html.sh tool # always add the '-v level' option, unless level is empty, to the set of options passed to the md2html.sh tool
# #
if [[ -n $V_FLAG ]]; then if [[ -n $V_FLAG ]]; then
@@ -266,6 +264,7 @@ if [[ -n $V_FLAG ]]; then
TOOL_OPTION+=("$V_FLAG") TOOL_OPTION+=("$V_FLAG")
fi fi
# always add the '-t tagline' option, unless tagline is empty, to the set of options passed to the md2html.sh tool # always add the '-t tagline' option, unless tagline is empty, to the set of options passed to the md2html.sh tool
# #
if [[ -n $TAGLINE ]]; then if [[ -n $TAGLINE ]]; then
@@ -273,16 +272,19 @@ if [[ -n $TAGLINE ]]; then
TOOL_OPTION+=("$TAGLINE") TOOL_OPTION+=("$TAGLINE")
fi fi
# always add the '-U URL' for the top level location.html file # always add the '-U URL' for the top level location.html file
# #
TOOL_OPTION+=("-U") TOOL_OPTION+=("-U")
TOOL_OPTION+=("$SITE_URL/location.html") TOOL_OPTION+=("$SITE_URL/location.html")
# always add the '-D docroot/' for the top level location.html file # always add the '-D docroot/' for the top level location.html file
# #
TOOL_OPTION+=("-D") TOOL_OPTION+=("-D")
TOOL_OPTION+=("$DOCROOT_SLASH") TOOL_OPTION+=("$DOCROOT_SLASH")
# verify that we have a topdir directory # verify that we have a topdir directory
# #
REPO_NAME=$(basename "$REPO_TOP_URL") REPO_NAME=$(basename "$REPO_TOP_URL")
@@ -303,6 +305,7 @@ if [[ ! -d $TOPDIR ]]; then
exit 6 exit 6
fi fi
# cd to topdir # cd to topdir
# #
if [[ ! -e $TOPDIR ]]; then if [[ ! -e $TOPDIR ]]; then
@@ -326,6 +329,7 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2 echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2
fi fi
# verify that we have an author subdirectory # verify that we have an author subdirectory
# #
export AUTHOR_PATH="$TOPDIR/author" export AUTHOR_PATH="$TOPDIR/author"
@@ -335,6 +339,7 @@ if [[ ! -d $AUTHOR_PATH ]]; then
fi fi
export AUTHOR_DIR="author" export AUTHOR_DIR="author"
# verify that we have a bin subdirectory # verify that we have a bin subdirectory
# #
export BIN_PATH="$TOPDIR/bin" export BIN_PATH="$TOPDIR/bin"
@@ -344,7 +349,8 @@ if [[ ! -d $BIN_PATH ]]; then
fi fi
export BIN_DIR="bin" export BIN_DIR="bin"
# verify that the md2html tool is executable
# verify that the bin/md2html.sh tool is executable
# #
export MD2HTML_SH="$BIN_DIR/md2html.sh" export MD2HTML_SH="$BIN_DIR/md2html.sh"
if [[ ! -e $MD2HTML_SH ]]; then if [[ ! -e $MD2HTML_SH ]]; then
@@ -360,42 +366,40 @@ if [[ ! -x $MD2HTML_SH ]]; then
exit 5 exit 5
fi fi
# verify jval-wrapper tool is executable
# verify that the bin/jval-wrapper.sh tool is executable
# #
export JVAL_WRAPPER="$BIN_DIR/jval-wrapper.sh" JVAL_WRAPPER="$BIN_DIR/jval-wrapper.sh"
if [[ ! -e $JVAL_WRAPPER ]]; then if [[ ! -e $JVAL_WRAPPER ]]; then
echo "$0: ERROR: bin/jval-wrapper.sh file does not exist: $JVAL_WRAPPER" 1>&2 echo "$0: ERROR: bin/jval-wrapper.sh does not exist: $JVAL_WRAPPER" 1>&2
exit 5 exit 5
fi fi
if [[ ! -f $JVAL_WRAPPER ]]; then if [[ ! -f $JVAL_WRAPPER ]]; then
echo "$0: ERROR: bin/jval-wrapper.sh is not a file: $JVAL_WRAPPER" 1>&2 echo "$0: ERROR: bin/jval-wrapper.sh is not a regular file: $JVAL_WRAPPER" 1>&2
exit 5 exit 5
fi fi
if [[ ! -x $JVAL_WRAPPER ]]; then if [[ ! -x $JVAL_WRAPPER ]]; then
echo "$0: ERROR: cannot find an executable bin/jval-wrapper.sh tool: $JVAL_WRAPPER" 1>&2 echo "$0: ERROR: bin/jval-wrapper.sh is not an executable file: $JVAL_WRAPPER" 1>&2
exit 5 exit 5
fi fi
#
# find the location tool # find the location tool
# #
LOCATION_TOOL=$(type -P location) LOCATION_TOOL=$(type -P location)
export LOCATION_TOOL export LOCATION_TOOL
if [[ -z $LOCATION_TOOL ]]; then
# guess we have a location tool in bin
#
LOCATION_TOOL="$BIN_DIR/location"
fi
if [[ ! -x $LOCATION_TOOL ]]; then if [[ ! -x $LOCATION_TOOL ]]; then
echo "$0: ERROR: cannot find the location executable" 1>&2 echo "$0: ERROR: cannot find the location executable along \$PATH" 1>&2
echo "$0: notice: location tool comes from this repo: https://github.com/ioccc-src/mkiocccentry" 1>&2 echo "$0: notice: location tool comes from this repo: https://github.com/ioccc-src/mkiocccentry" 1>&2
exit 5 exit 5
fi fi
# note location.html file # note location.html file
# #
export LOCATION_HTML="location.html" export LOCATION_HTML="location.html"
# print running info if verbose # print running info if verbose
# #
# If -v 3 or higher, print exported variables in order that they were exported. # If -v 3 or higher, print exported variables in order that they were exported.
@@ -440,7 +444,8 @@ if [[ -n $DO_NOT_PROCESS ]]; then
exit 0 exit 0
fi fi
# case: -Q
# case: -Q (quick mode)
# #
# Do nothing if authors.html is newer than all author/author_handle.json files. # Do nothing if authors.html is newer than all author/author_handle.json files.
# #
@@ -451,6 +456,7 @@ if [[ -n $QUICK_MODE ]]; then
fi fi
fi fi
# create a temporary location markdown file # create a temporary location markdown file
# #
export TMP_LOC_MD=".tmp.$NAME.LOC_MD.$$.tmp" export TMP_LOC_MD=".tmp.$NAME.LOC_MD.$$.tmp"
@@ -473,6 +479,7 @@ elif [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: because of -n, temporary location markdown file is not used: $TMP_LOC_MD" 1>&2 echo "$0: debug[3]: because of -n, temporary location markdown file is not used: $TMP_LOC_MD" 1>&2
fi fi
# create a temporary location sort_word handle name set # create a temporary location sort_word handle name set
# #
export TMP_LOC_WORD_HANDLE_NAME_SET=".tmp.$NAME.LOC_AUTHOR_HANDLE.$$.tmp" export TMP_LOC_WORD_HANDLE_NAME_SET=".tmp.$NAME.LOC_AUTHOR_HANDLE.$$.tmp"
@@ -495,6 +502,7 @@ elif [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: because of -n, temporary location sort_word handle name set is not used: $TMP_LOC_WORD_HANDLE_NAME_SET" 1>&2 echo "$0: debug[3]: because of -n, temporary location sort_word handle name set is not used: $TMP_LOC_WORD_HANDLE_NAME_SET" 1>&2
fi fi
# create a temporary location count set # create a temporary location count set
# #
export TMP_LOC_COUNT=".tmp.$NAME.LOC_COUNT.$$.tmp" export TMP_LOC_COUNT=".tmp.$NAME.LOC_COUNT.$$.tmp"
@@ -722,6 +730,9 @@ done < "$TMP_LOC_WORD_HANDLE_NAME_SET" > "$TMP_LOC_MD"
# use the md2html.sh tool to form a location HTML file, unless -n # use the md2html.sh tool to form a location HTML file, unless -n
# #
if [[ -z $NOOP ]]; then if [[ -z $NOOP ]]; then
# possibly update location.html
#
if [[ $V_FLAG -ge 1 ]]; then if [[ $V_FLAG -ge 1 ]]; then
echo "$0: debug[1]: about to run: $MD2HTML_SH ${TOOL_OPTION[*]} -- location.md $TMP_LOC_MD $LOCATION_HTML" 1>&2 echo "$0: debug[1]: about to run: $MD2HTML_SH ${TOOL_OPTION[*]} -- location.md $TMP_LOC_MD $LOCATION_HTML" 1>&2
fi fi
@@ -735,6 +746,16 @@ if [[ -z $NOOP ]]; then
echo "$0: debug[3]: now up to date: $LOCATION_HTML" 1>&2 echo "$0: debug[3]: now up to date: $LOCATION_HTML" 1>&2
fi fi
# case -Q: (quick mode)
#
# If we are here, then the early quick mode test indicated that the prerequisite files are newer.
# We will force the authors.html file to be touched so that a later run with -Q will quickly exit.
# We do this because by default, the md2html.sh tool does not modify the target HTML unless it was modified.
#
if [[ -n $QUICK_MODE ]]; then
touch "$LOCATION_HTML"
fi
# report disabled by -n # report disabled by -n
# #
elif [[ $V_FLAG -ge 5 ]]; then elif [[ $V_FLAG -ge 5 ]]; then
+69 -32
View File
@@ -26,6 +26,7 @@
# #
# Share and enjoy! :-) # Share and enjoy! :-)
# firewall - run only with a bash that is version 5.1.8 or later # firewall - run only with a bash that is version 5.1.8 or later
# #
# The "/usr/bin/env bash" command must result in using a bash that # The "/usr/bin/env bash" command must result in using a bash that
@@ -82,9 +83,10 @@ shopt -u nocaseglob # disable strict case matching
shopt -u extglob # enable extended globbing patterns shopt -u extglob # enable extended globbing patterns
shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories
# set variables referenced in the usage message # set variables referenced in the usage message
# #
export VERSION="1.3 2024-08-11" export VERSION="1.4 2024-08-17"
NAME=$(basename "$0") NAME=$(basename "$0")
export NAME export NAME
export V_FLAG=0 export V_FLAG=0
@@ -114,15 +116,17 @@ export DO_NOT_PROCESS=
export QUICK_MODE= export QUICK_MODE=
export EXIT_CODE="0" export EXIT_CODE="0"
# clear options we will add to tools # clear options we will add to tools
# #
unset TOOL_OPTION unset TOOL_OPTION
declare -ag TOOL_OPTION declare -ag TOOL_OPTION
# usage # usage
# #
export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N] export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N]
[-t tagline] [-T md2html.sh] [-p tool] [-Q] [-w site_url] [-t tagline] [-Q] [-w site_url]
-h print help message and exit -h print help message and exit
-v level set verbosity level (def level: 0) -v level set verbosity level (def level: 0)
@@ -138,17 +142,13 @@ export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N]
-t tagline string to write about the tool that formed the markdown content (def: $TAGLINE) -t tagline string to write about the tool that formed the markdown content (def: $TAGLINE)
NOTE: The '-t tagline' is passed as leading options on tool command lines. NOTE: The '-t tagline' is passed as leading options on tool command lines.
-T md2html.sh run 'markdown to html tool' to convert markdown into HTML (def: $MD2HTML_SH)
NOTE: The '-T md2html.sh' is passed as leading options on tool command lines.
-Q quick mode, do not run $MD2HTML_SH unless markdown is out of date (def: do) -Q quick mode, do not run $MD2HTML_SH unless markdown is out of date (def: do)
-p tool run 'pandoc wrapper tool' (not pandoc path) during HTML phase number 21 (def: use $PANDOC_WRAPPER)
-w site_url Base URL of the website (def: $SITE_URL) -w site_url Base URL of the website (def: $SITE_URL)
NOTE: The '-w site_url' is passed as leading options on tool command lines. NOTE: The '-w site_url' is passed as leading options on tool command lines.
NOTE: Any '-D docroot/', '-t tagline', '-T md2html.sh', '-p tool', '-w site_url' NOTE: Any '-D docroot/', '-t tagline', '-w site_url'
are passed to the 'tool' at the beginning of the command line, and are passed to the 'tool' at the beginning of the command line, and
before any optional 'more_options' and before the final YYYY/dir argument. before any optional 'more_options' and before the final YYYY/dir argument.
@@ -168,7 +168,7 @@ $NAME version: $VERSION"
# parse command line # parse command line
# #
while getopts :hv:Vd:D:nNt:T:p:Qw: flag; do while getopts :hv:Vd:D:nNt:Qw: flag; do
case "$flag" in case "$flag" in
h) echo "$USAGE" 1>&2 h) echo "$USAGE" 1>&2
exit 2 exit 2
@@ -215,14 +215,6 @@ while getopts :hv:Vd:D:nNt:T:p:Qw: flag; do
esac esac
TAGLINE="$OPTARG" TAGLINE="$OPTARG"
;; ;;
T) MD2HTML_SH="$OPTARG"
TOOL_OPTION+=("-T")
TOOL_OPTION+=("$MD2HTML_SH")
;;
p) PANDOC_WRAPPER="$OPTARG"
TOOL_OPTION+=("-p")
TOOL_OPTION+=("$PANDOC_WRAPPER")
;;
Q) QUICK_MODE="-Q" Q) QUICK_MODE="-Q"
;; ;;
w) SITE_URL="$OPTARG" w) SITE_URL="$OPTARG"
@@ -244,7 +236,7 @@ while getopts :hv:Vd:D:nNt:T:p:Qw: flag; do
;; ;;
esac esac
done done
#
# remove the options # remove the options
# #
shift $(( OPTIND - 1 )); shift $(( OPTIND - 1 ));
@@ -259,6 +251,7 @@ if [[ $# -ne 0 ]]; then
exit 3 exit 3
fi fi
# verify that we have a topdir directory # verify that we have a topdir directory
# #
REPO_NAME=$(basename "$REPO_TOP_URL") REPO_NAME=$(basename "$REPO_TOP_URL")
@@ -279,6 +272,7 @@ if [[ ! -d $TOPDIR ]]; then
exit 6 exit 6
fi fi
# cd to topdir # cd to topdir
# #
if [[ ! -e $TOPDIR ]]; then if [[ ! -e $TOPDIR ]]; then
@@ -302,6 +296,34 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2 echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2
fi fi
# verify that we have a bin subdirectory
#
export BIN_PATH="$TOPDIR/bin"
if [[ ! -d $BIN_PATH ]]; then
echo "$0: ERROR: bin is not a directory under topdir: $BIN_PATH" 1>&2
exit 6
fi
export BIN_DIR="bin"
# verify that the bin/md2html.sh tool is executable
#
export MD2HTML_SH="$BIN_DIR/md2html.sh"
if [[ ! -e $MD2HTML_SH ]]; then
echo "$0: ERROR: bin/md2html.sh does not exist: $MD2HTML_SH" 1>&2
exit 5
fi
if [[ ! -f $MD2HTML_SH ]]; then
echo "$0: ERROR: bin/md2html.sh is not a regular file: $MD2HTML_SH" 1>&2
exit 5
fi
if [[ ! -x $MD2HTML_SH ]]; then
echo "$0: ERROR: bin/md2html.sh is not an executable file: $MD2HTML_SH" 1>&2
exit 5
fi
# verify we have a non-empty readable .top file # verify we have a non-empty readable .top file
# #
export TOP_FILE=".top" export TOP_FILE=".top"
@@ -322,20 +344,6 @@ if [[ ! -s $TOP_FILE ]]; then
exit 6 exit 6
fi fi
# verify that the md2html.sh is an executable file
#
if [[ ! -e $MD2HTML_SH ]]; then
echo "$0: ERROR: md2html.sh does not exist: $MD2HTML_SH" 1>&2
exit 5
fi
if [[ ! -f $MD2HTML_SH ]]; then
echo "$0: ERROR: md2html.sh is not a regular file: $MD2HTML_SH" 1>&2
exit 5
fi
if [[ ! -x $MD2HTML_SH ]]; then
echo "$0: ERROR: md2html.sh is not an executable file: $MD2HTML_SH" 1>&2
exit 5
fi
# always set the tagline # always set the tagline
# #
@@ -344,6 +352,7 @@ TOOL_OPTION+=("$TAGLINE")
TOOL_OPTION+=("-w") TOOL_OPTION+=("-w")
TOOL_OPTION+=("$SITE_URL") TOOL_OPTION+=("$SITE_URL")
# print running info if verbose # print running info if verbose
# #
# If -v 3 or higher, print exported variables in order that they were exported. # If -v 3 or higher, print exported variables in order that they were exported.
@@ -356,7 +365,6 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: TOPDIR=$TOPDIR" 1>&2 echo "$0: debug[3]: TOPDIR=$TOPDIR" 1>&2
echo "$0: debug[3]: DOCROOT_SLASH=$DOCROOT_SLASH" 1>&2 echo "$0: debug[3]: DOCROOT_SLASH=$DOCROOT_SLASH" 1>&2
echo "$0: debug[3]: TAGLINE=$TAGLINE" 1>&2 echo "$0: debug[3]: TAGLINE=$TAGLINE" 1>&2
echo "$0: debug[3]: MD2HTML_SH=$MD2HTML_SH" 1>&2
echo "$0: debug[3]: PANDOC_WRAPPER=$PANDOC_WRAPPER" 1>&2 echo "$0: debug[3]: PANDOC_WRAPPER=$PANDOC_WRAPPER" 1>&2
echo "$0: debug[3]: REPO_TOP_URL=$REPO_TOP_URL" 1>&2 echo "$0: debug[3]: REPO_TOP_URL=$REPO_TOP_URL" 1>&2
echo "$0: debug[3]: REPO_URL=$REPO_URL" 1>&2 echo "$0: debug[3]: REPO_URL=$REPO_URL" 1>&2
@@ -370,9 +378,13 @@ if [[ $V_FLAG -ge 3 ]]; then
done done
echo "$0: debug[3]: REPO_NAME=$REPO_NAME" 1>&2 echo "$0: debug[3]: REPO_NAME=$REPO_NAME" 1>&2
echo "$0: debug[3]: CD_FAILED=$CD_FAILED" 1>&2 echo "$0: debug[3]: CD_FAILED=$CD_FAILED" 1>&2
echo "$0: debug[3]: BIN_PATH=$BIN_PATH" 1>&2
echo "$0: debug[3]: BIN_DIR=$BIN_DIR" 1>&2
echo "$0: debug[3]: MD2HTML_SH=$MD2HTML_SH" 1>&2
echo "$0: debug[3]: TOP_FILE=$TOP_FILE" 1>&2 echo "$0: debug[3]: TOP_FILE=$TOP_FILE" 1>&2
fi fi
# -N stops early before any processing is performed # -N stops early before any processing is performed
# #
if [[ -n $DO_NOT_PROCESS ]]; then if [[ -n $DO_NOT_PROCESS ]]; then
@@ -382,6 +394,7 @@ if [[ -n $DO_NOT_PROCESS ]]; then
exit 0 exit 0
fi fi
# create a temporary exit code # create a temporary exit code
# #
# It is a pain to set the EXIT_CODE deep inside a loop, so we write the EXIT_CODE into a file # It is a pain to set the EXIT_CODE deep inside a loop, so we write the EXIT_CODE into a file
@@ -407,6 +420,7 @@ elif [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: because of -n, temporary exit code is not used: $TMP_EXIT_CODE" 1>&2 echo "$0: debug[3]: because of -n, temporary exit code is not used: $TMP_EXIT_CODE" 1>&2
fi fi
# process each year # process each year
# #
export YYYY export YYYY
@@ -585,6 +599,8 @@ for YYYY in $(< "$TOP_FILE"); do
HTML_BASENAME=$(basename "$HTML_FILE") HTML_BASENAME=$(basename "$HTML_FILE")
export HTML_BASENAME export HTML_BASENAME
# case: -Q (quick mode)
#
# determine if we need to run the tool # determine if we need to run the tool
# #
# Check if the non-empty foo.html is newer than foo.md. # Check if the non-empty foo.html is newer than foo.md.
@@ -599,6 +615,14 @@ for YYYY in $(< "$TOP_FILE"); do
if [[ $V_FLAG -ge 3 ]]; then if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: does not need to be updated: $HTML_FILE" 1>&2 echo "$0: debug[3]: does not need to be updated: $HTML_FILE" 1>&2
fi fi
# case -Q: (quick mode)
#
# If we are here, then the early quick mode test indicated that the prerequisite files are newer.
# We will force the authors.html file to be touched so that a later run with -Q will quickly exit.
# We do this because by default, the md2html.sh tool does not modify the target HTML unless it was modified.
#
touch "$HTML_FILE"
continue continue
fi fi
fi fi
@@ -651,6 +675,8 @@ for YYYY in $(< "$TOP_FILE"); do
# #
if [[ -z $NOOP ]]; then if [[ -z $NOOP ]]; then
# possibly update the HTML file
#
if [[ $V_FLAG -ge 3 ]]; then if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: about to run: $MD2HTML_SH ${TOOL_OPTION[*]}" \ echo "$0: debug[3]: about to run: $MD2HTML_SH ${TOOL_OPTION[*]}" \
"-U $SITE_URL/$HTML_FILE" \ "-U $SITE_URL/$HTML_FILE" \
@@ -678,6 +704,16 @@ for YYYY in $(< "$TOP_FILE"); do
continue continue
fi fi
# case -Q: (quick mode)
#
# If we are here, then the early quick mode test indicated that the prerequisite files are newer.
# We will force the authors.html file to be touched so that a later run with -Q will quickly exit.
# We do this because by default, the md2html.sh tool does not modify the target HTML unless it was modified.
#
if [[ -n $QUICK_MODE ]]; then
touch "$HTML_FILE"
fi
# report disabled by -n # report disabled by -n
# #
elif [[ $V_FLAG -ge 5 ]]; then elif [[ $V_FLAG -ge 5 ]]; then
@@ -697,6 +733,7 @@ if [[ -z $NOOP ]]; then
fi fi
fi fi
# All Done!!! All Done!!! -- Jessica Noll, Age 2 # All Done!!! All Done!!! -- Jessica Noll, Age 2
# #
if [[ $EXIT_CODE -ne 0 ]]; then if [[ $EXIT_CODE -ne 0 ]]; then
+42 -15
View File
@@ -26,6 +26,7 @@
# #
# Share and enjoy! :-) # Share and enjoy! :-)
# firewall - run only with a bash that is version 5.1.8 or later # firewall - run only with a bash that is version 5.1.8 or later
# #
# The "/usr/bin/env bash" command must result in using a bash that # The "/usr/bin/env bash" command must result in using a bash that
@@ -82,6 +83,7 @@ shopt -u nocaseglob # disable strict case matching
shopt -u extglob # enable extended globbing patterns shopt -u extglob # enable extended globbing patterns
shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories
# set variables referenced in the usage message # set variables referenced in the usage message
# #
export VERSION="1.3.14 2024-08-19" export VERSION="1.3.14 2024-08-19"
@@ -194,6 +196,7 @@ function output_modtime
return 0 return 0
} }
# set usage message # set usage message
# #
export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-n] [-N] export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-n] [-N]
@@ -228,12 +231,14 @@ Exit codes:
$NAME version: $VERSION" $NAME version: $VERSION"
# setup # setup
# #
export NOOP= export NOOP=
export DO_NOT_PROCESS= export DO_NOT_PROCESS=
export EXIT_CODE="0" export EXIT_CODE="0"
# parse command line # parse command line
# #
while getopts :hv:Vd:nNw:W flag; do while getopts :hv:Vd:nNw:W flag; do
@@ -273,7 +278,7 @@ while getopts :hv:Vd:nNw:W flag; do
;; ;;
esac esac
done done
#
# parse the command line arguments # parse the command line arguments
# #
if [[ $V_FLAG -ge 3 ]]; then if [[ $V_FLAG -ge 3 ]]; then
@@ -289,7 +294,7 @@ if [[ $# -ne 0 ]]; then
echo "$0: ERROR: expected 0 args, found: $#" 1>&2 echo "$0: ERROR: expected 0 args, found: $#" 1>&2
exit 3 exit 3
fi fi
#
# verify that we have a topdir directory # verify that we have a topdir directory
# #
@@ -311,6 +316,7 @@ if [[ ! -d $TOPDIR ]]; then
exit 6 exit 6
fi fi
# cd to topdir # cd to topdir
# #
if [[ ! -e $TOPDIR ]]; then if [[ ! -e $TOPDIR ]]; then
@@ -334,6 +340,7 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2 echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2
fi fi
# verify that we have an archive/historic subdirectory # verify that we have an archive/historic subdirectory
# #
export ARCHIVE_HISTORIC_PATH="$TOPDIR/archive/historic" export ARCHIVE_HISTORIC_PATH="$TOPDIR/archive/historic"
@@ -343,6 +350,7 @@ if [[ ! -d $ARCHIVE_HISTORIC_PATH ]]; then
fi fi
export ARCHIVE_HISTORIC_DIR="archive/historic" export ARCHIVE_HISTORIC_DIR="archive/historic"
# verify that we have an author subdirectory # verify that we have an author subdirectory
# #
export AUTHOR_PATH="$TOPDIR/author" export AUTHOR_PATH="$TOPDIR/author"
@@ -352,6 +360,7 @@ if [[ ! -d $AUTHOR_PATH ]]; then
fi fi
export AUTHOR_DIR="author" export AUTHOR_DIR="author"
# verify that we have a bin subdirectory # verify that we have a bin subdirectory
# #
export BIN_PATH="$TOPDIR/bin" export BIN_PATH="$TOPDIR/bin"
@@ -361,18 +370,6 @@ if [[ ! -d $BIN_PATH ]]; then
fi fi
export BIN_DIR="bin" export BIN_DIR="bin"
# verify that we have an inc subdirectory
#
export INC_PATH="$TOPDIR/inc"
if [[ ! -d $INC_PATH ]]; then
echo "$0: ERROR: inc is not a directory under topdir: $INC_PATH" 1>&2
exit 6
fi
export INC_DIR="inc"
# determine the name of sitemap
#
export SITEMAP="sitemap.xml"
# verify we have our awk tool # verify we have our awk tool
# #
@@ -394,6 +391,22 @@ if [[ ! -s $FILELIST_ENTRY_JSON_AWK ]]; then
exit 5 exit 5
fi fi
# verify that we have an inc subdirectory
#
export INC_PATH="$TOPDIR/inc"
if [[ ! -d $INC_PATH ]]; then
echo "$0: ERROR: inc is not a directory under topdir: $INC_PATH" 1>&2
exit 6
fi
export INC_DIR="inc"
# determine the name of sitemap
#
export SITEMAP="sitemap.xml"
# verify we have a non-empty readable .top file # verify we have a non-empty readable .top file
# #
export TOP_FILE=".top" export TOP_FILE=".top"
@@ -414,6 +427,7 @@ if [[ ! -s $TOP_FILE ]]; then
exit 6 exit 6
fi fi
# determine how we can determine the file modification time in W3C Datetime format: # determine how we can determine the file modification time in W3C Datetime format:
# #
# https://www.w3.org/TR/NOTE-datetime # https://www.w3.org/TR/NOTE-datetime
@@ -471,6 +485,7 @@ else
fi fi
fi fi
# parameter debugging # parameter debugging
# #
if [[ $V_FLAG -ge 3 ]]; then if [[ $V_FLAG -ge 3 ]]; then
@@ -498,12 +513,13 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: BIN_PATH=$BIN_PATH" 1>&2 echo "$0: debug[3]: BIN_PATH=$BIN_PATH" 1>&2
echo "$0: debug[3]: BIN_DIR=$BIN_DIR" 1>&2 echo "$0: debug[3]: BIN_DIR=$BIN_DIR" 1>&2
echo "$0: debug[3]: INC_PATH=$INC_PATH" 1>&2 echo "$0: debug[3]: INC_PATH=$INC_PATH" 1>&2
echo "$0: debug[3]: FILELIST_ENTRY_JSON_AWK=$FILELIST_ENTRY_JSON_AWK" 1>&2
echo "$0: debug[3]: INC_DIR=$INC_DIR" 1>&2 echo "$0: debug[3]: INC_DIR=$INC_DIR" 1>&2
echo "$0: debug[3]: SITEMAP=$SITEMAP" 1>&2 echo "$0: debug[3]: SITEMAP=$SITEMAP" 1>&2
echo "$0: debug[3]: FILELIST_ENTRY_JSON_AWK=$FILELIST_ENTRY_JSON_AWK" 1>&2
echo "$0: debug[3]: TOP_FILE=$TOP_FILE" 1>&2 echo "$0: debug[3]: TOP_FILE=$TOP_FILE" 1>&2
fi fi
# If -N, time to exit # If -N, time to exit
# #
if [[ -n $DO_NOT_PROCESS ]]; then if [[ -n $DO_NOT_PROCESS ]]; then
@@ -513,6 +529,7 @@ if [[ -n $DO_NOT_PROCESS ]]; then
exit 0 exit 0
fi fi
# create a temporary file manifest list # create a temporary file manifest list
# #
export TMP_MANIFEST_LIST=".tmp.$NAME.MANIFEST_LIST.$$.tmp" export TMP_MANIFEST_LIST=".tmp.$NAME.MANIFEST_LIST.$$.tmp"
@@ -531,6 +548,7 @@ if [[ ! -e $TMP_MANIFEST_LIST ]]; then
exit 11 exit 11
fi fi
# create a temporary exit code # create a temporary exit code
# #
# It is a pain to set the EXIT_CODE deep inside a loop, so we write the EXIT_CODE into a file # It is a pain to set the EXIT_CODE deep inside a loop, so we write the EXIT_CODE into a file
@@ -552,6 +570,7 @@ if [[ ! -e $TMP_EXIT_CODE ]]; then
exit 15 exit 15
fi fi
# create a temporary sitemap # create a temporary sitemap
# #
export TMP_SITEMAP=".tmp.$NAME.SITEMAP.$$.tmp" export TMP_SITEMAP=".tmp.$NAME.SITEMAP.$$.tmp"
@@ -570,6 +589,7 @@ if [[ ! -e $TMP_SITEMAP ]]; then
exit 17 exit 17
fi fi
# add top level files to the file manifest list # add top level files to the file manifest list
# #
# We do not (yet?) include these files: # We do not (yet?) include these files:
@@ -611,10 +631,12 @@ winners.html
years.html years.html
EOF0 EOF0
# add files from selected sub-directories # add files from selected sub-directories
# #
find "$ARCHIVE_HISTORIC_DIR" "$AUTHOR_DIR" "$BIN_DIR" "$INC_DIR" -type f -print >> "$TMP_MANIFEST_LIST" find "$ARCHIVE_HISTORIC_DIR" "$AUTHOR_DIR" "$BIN_DIR" "$INC_DIR" -type f -print >> "$TMP_MANIFEST_LIST"
# generate sorted list of entry files from the full IOCCC manifest # generate sorted list of entry files from the full IOCCC manifest
# #
# We also include the YYYY/.filelist contents. # We also include the YYYY/.filelist contents.
@@ -796,6 +818,7 @@ if [[ $EXIT_CODE -ne 0 ]]; then
exit "$EXIT_CODE" exit "$EXIT_CODE"
fi fi
# sort the manifest list # sort the manifest list
# #
LC_ALL=C sort -d "$TMP_MANIFEST_LIST" -o "$TMP_MANIFEST_LIST" LC_ALL=C sort -d "$TMP_MANIFEST_LIST" -o "$TMP_MANIFEST_LIST"
@@ -805,6 +828,7 @@ if [[ $status -ne 0 ]]; then
exit 1 exit 1
fi fi
# verify that the manifest list contains only readable files # verify that the manifest list contains only readable files
# #
for FILE in $(< "$TMP_MANIFEST_LIST"); do for FILE in $(< "$TMP_MANIFEST_LIST"); do
@@ -844,6 +868,7 @@ if [[ $EXIT_CODE -ne 0 ]]; then
exit "$EXIT_CODE" exit "$EXIT_CODE"
fi fi
# form the sitemap # form the sitemap
# #
if [[ -z $NOOP ]]; then if [[ -z $NOOP ]]; then
@@ -897,6 +922,7 @@ if [[ -z $EXIT_CODE ]]; then
exit 19 exit 19
fi fi
# move the sitemap in place only if different # move the sitemap in place only if different
# #
if [[ -z $NOOP ]]; then if [[ -z $NOOP ]]; then
@@ -938,6 +964,7 @@ elif [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: because of -n, temporary file manifest list was not formed: $TMP_MANIFEST_LIST" 1>&2 echo "$0: debug[3]: because of -n, temporary file manifest list was not formed: $TMP_MANIFEST_LIST" 1>&2
fi fi
# All Done!!! All Done!!! -- Jessica Noll, Age 2 # All Done!!! All Done!!! -- Jessica Noll, Age 2
# #
if [[ -z $NOOP ]]; then if [[ -z $NOOP ]]; then
+90 -36
View File
@@ -26,6 +26,7 @@
# #
# Share and enjoy! :-) # Share and enjoy! :-)
# firewall - run only with a bash that is version 5.1.8 or later # firewall - run only with a bash that is version 5.1.8 or later
# #
# The "/usr/bin/env bash" command must result in using a bash that # The "/usr/bin/env bash" command must result in using a bash that
@@ -82,9 +83,10 @@ shopt -u nocaseglob # disable strict case matching
shopt -u extglob # enable extended globbing patterns shopt -u extglob # enable extended globbing patterns
shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories
# set variables referenced in the usage message # set variables referenced in the usage message
# #
export VERSION="1.5.8 2024-08-05" export VERSION="1.6 2024-08-17"
NAME=$(basename "$0") NAME=$(basename "$0")
export NAME export NAME
export V_FLAG=0 export V_FLAG=0
@@ -102,7 +104,6 @@ fi
export TOPDIR export TOPDIR
export DOCROOT_SLASH="./" export DOCROOT_SLASH="./"
export TAGLINE="bin/$NAME" export TAGLINE="bin/$NAME"
export MD2HTML_SH="bin/md2html.sh"
export REPO_TOP_URL="https://github.com/ioccc-src/temp-test-ioccc" export REPO_TOP_URL="https://github.com/ioccc-src/temp-test-ioccc"
# GitHub puts individual files under the "blob/master" sub-directory. # GitHub puts individual files under the "blob/master" sub-directory.
export REPO_URL="$REPO_TOP_URL/blob/master" export REPO_URL="$REPO_TOP_URL/blob/master"
@@ -124,19 +125,21 @@ if [[ -z "$LS_TOOL" ]]; then
echo "$0: FATAL: ls tool is not installed or not in \$PATH" 1>&2 echo "$0: FATAL: ls tool is not installed or not in \$PATH" 1>&2
exit 5 exit 5
fi fi
#
export IOCCC_STATUS_VERSION="1.0 2024-03-09" export IOCCC_STATUS_VERSION="1.0 2024-03-09"
# #
export NOOP= export NOOP=
export DO_NOT_PROCESS= export DO_NOT_PROCESS=
export EXIT_CODE="0" export EXIT_CODE="0"
# clear options we will add to tools # clear options we will add to tools
# #
unset TOOL_OPTION unset TOOL_OPTION
declare -ag TOOL_OPTION declare -ag TOOL_OPTION
export MODTIME_METHOD="" export MODTIME_METHOD=""
# output_modtime - file modification time in W3C Datetime format: # output_modtime - file modification time in W3C Datetime format:
# #
# https://www.w3.org/TR/NOTE-datetime # https://www.w3.org/TR/NOTE-datetime
@@ -212,6 +215,7 @@ function output_modtime
return 0 return 0
} }
# output_status_json # output_status_json
# #
# write a status.json file to standard output (stdout) # write a status.json file to standard output (stdout)
@@ -290,13 +294,11 @@ function output_status_json
# determine the "contest_status" that was in status.json # determine the "contest_status" that was in status.json
# #
OLD_CONTEST_STATUS=$(grep '"contest_status"[[:space:]]*:[[:space:]]*"' "$STATUS_PATH" | OLD_CONTEST_STATUS=$("$JVAL_WRAPPER" -w -b "$STATUS_PATH" '$..contest_status')
sed -e 's/^.*:[[:space:]]*"//' -e 's/",*//')
# determine the "status_update" that was in status.json # determine the "status_update" that was in status.json
# #
OLD_STATUS_UPDATE=$(grep '"status_update"[[:space:]]*:[[:space:]]*"' "$STATUS_PATH" | OLD_STATUS_UPDATE=$("$JVAL_WRAPPER" -w -b "$STATUS_PATH" '$..status_update')
sed -e 's/^.*:[[:space:]]*"//' -e 's/",*//')
# update the status.json file modification date if the "contest_status" changed # update the status.json file modification date if the "contest_status" changed
# #
@@ -333,11 +335,11 @@ function output_status_json
return 0 return 0
} }
# usage # usage
# #
export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-n] [-N] export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-n] [-N]
[-t tagline] [-T md2html.sh] [-t tagline] [p | pending | o | open | j | judging | c | closed]
[p | pending | o | open | j | judging | c | closed]
-h print help message and exit -h print help message and exit
-v level set verbosity level (def level: 0) -v level set verbosity level (def level: 0)
@@ -355,7 +357,6 @@ export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-n] [-N]
-t tagline string to write about the tool that formed the markdown content (def: $TAGLINE) -t tagline string to write about the tool that formed the markdown content (def: $TAGLINE)
NOTE: 'tagline' may be enclosed within, but may NOT contain an internal single-quote, or double-quote. NOTE: 'tagline' may be enclosed within, but may NOT contain an internal single-quote, or double-quote.
-T md2html.sh run 'markdown to html tool' to convert markdown into HTML (def: $MD2HTML_SH)
-w site_url Base URL of the website (def: $SITE_URL) -w site_url Base URL of the website (def: $SITE_URL)
NOTE: The '-w site_url' is passed as leading options on tool command lines. NOTE: The '-w site_url' is passed as leading options on tool command lines.
@@ -368,7 +369,7 @@ export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-n] [-N]
NOTE: The '-v level' is passed as initial command line options to the 'markdown to html tool' (md2html.sh). NOTE: The '-v level' is passed as initial command line options to the 'markdown to html tool' (md2html.sh).
The 'tagline' is passed as '-t tagline' to the 'markdown to html tool' (md2html.sh), after the '-v level'. The 'tagline' is passed as '-t tagline' to the 'markdown to html tool' (md2html.sh), after the '-v level'.
Any '-T md2html.sh', '-p tool', '-P pandoc_opts', '-U top_url' Any '-P pandoc_opts', '-U top_url'
are passed to the 'markdown to html tool' (md2html.sh), and will be before any command line arguments. are passed to the 'markdown to html tool' (md2html.sh), and will be before any command line arguments.
Exit codes: Exit codes:
@@ -383,9 +384,10 @@ Exit codes:
$NAME version: $VERSION" $NAME version: $VERSION"
# parse command line # parse command line
# #
while getopts :hv:Vd:D:nNt:T:w: flag; do while getopts :hv:Vd:D:nNt:w: flag; do
case "$flag" in case "$flag" in
h) echo "$USAGE" 1>&2 h) echo "$USAGE" 1>&2
exit 2 exit 2
@@ -434,10 +436,6 @@ while getopts :hv:Vd:D:nNt:T:w: flag; do
TAGLINE="$OPTARG" TAGLINE="$OPTARG"
# -t tagline always added after arg parsing # -t tagline always added after arg parsing
;; ;;
T) MD2HTML_SH="$OPTARG"
TOOL_OPTION+=("-T")
TOOL_OPTION+=("$MD2HTML_SH")
;;
w) SITE_URL="$OPTARG" w) SITE_URL="$OPTARG"
TOOL_OPTION+=("-w") TOOL_OPTION+=("-w")
TOOL_OPTION+=("$SITE_URL") TOOL_OPTION+=("$SITE_URL")
@@ -459,7 +457,7 @@ while getopts :hv:Vd:D:nNt:T:w: flag; do
;; ;;
esac esac
done done
#
# remove the options # remove the options
# #
shift $(( OPTIND - 1 )); shift $(( OPTIND - 1 ));
@@ -493,6 +491,7 @@ if [[ $# -eq 1 ]]; then
esac esac
fi fi
# always add the '-v level' option, unless level is empty, to the set of options passed to the md2html.sh tool # always add the '-v level' option, unless level is empty, to the set of options passed to the md2html.sh tool
# #
if [[ -n $V_FLAG ]]; then if [[ -n $V_FLAG ]]; then
@@ -500,6 +499,7 @@ if [[ -n $V_FLAG ]]; then
TOOL_OPTION+=("$V_FLAG") TOOL_OPTION+=("$V_FLAG")
fi fi
# always add the '-t tagline' option, unless tagline is empty, to the set of options passed to the md2html.sh tool # always add the '-t tagline' option, unless tagline is empty, to the set of options passed to the md2html.sh tool
# #
if [[ -n $TAGLINE ]]; then if [[ -n $TAGLINE ]]; then
@@ -507,16 +507,19 @@ if [[ -n $TAGLINE ]]; then
TOOL_OPTION+=("$TAGLINE") TOOL_OPTION+=("$TAGLINE")
fi fi
# always add the '-U URL' for the top level status.html file # always add the '-U URL' for the top level status.html file
# #
TOOL_OPTION+=("-U") TOOL_OPTION+=("-U")
TOOL_OPTION+=("$SITE_URL/status.html") TOOL_OPTION+=("$SITE_URL/status.html")
# always add the '-D docroot/' for the top level status.html file # always add the '-D docroot/' for the top level status.html file
# #
TOOL_OPTION+=("-D") TOOL_OPTION+=("-D")
TOOL_OPTION+=("$DOCROOT_SLASH") TOOL_OPTION+=("$DOCROOT_SLASH")
# verify that we have a topdir directory # verify that we have a topdir directory
# #
REPO_NAME=$(basename "$REPO_TOP_URL") REPO_NAME=$(basename "$REPO_TOP_URL")
@@ -537,6 +540,7 @@ if [[ ! -d $TOPDIR ]]; then
exit 6 exit 6
fi fi
# cd to topdir # cd to topdir
# #
if [[ ! -e $TOPDIR ]]; then if [[ ! -e $TOPDIR ]]; then
@@ -560,21 +564,51 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2 echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2
fi fi
# verify that the md2html tool is executable
# verify that we have a bin subdirectory
# #
export BIN_PATH="$TOPDIR/bin"
if [[ ! -d $BIN_PATH ]]; then
echo "$0: ERROR: bin is not a directory under topdir: $BIN_PATH" 1>&2
exit 6
fi
export BIN_DIR="bin"
# verify that the bin/md2html.sh tool is executable
#
export MD2HTML_SH="$BIN_DIR/md2html.sh"
if [[ ! -e $MD2HTML_SH ]]; then if [[ ! -e $MD2HTML_SH ]]; then
echo "$0: ERROR: md2html.sh does not exist: $MD2HTML_SH" 1>&2 echo "$0: ERROR: bin/md2html.sh does not exist: $MD2HTML_SH" 1>&2
exit 5 exit 5
fi fi
if [[ ! -f $MD2HTML_SH ]]; then if [[ ! -f $MD2HTML_SH ]]; then
echo "$0: ERROR: md2html.sh is not a regular file: $MD2HTML_SH" 1>&2 echo "$0: ERROR: bin/md2html.sh is not a regular file: $MD2HTML_SH" 1>&2
exit 5 exit 5
fi fi
if [[ ! -x $MD2HTML_SH ]]; then if [[ ! -x $MD2HTML_SH ]]; then
echo "$0: ERROR: md2html.sh is not an executable file: $MD2HTML_SH" 1>&2 echo "$0: ERROR: bin/md2html.sh is not an executable file: $MD2HTML_SH" 1>&2
exit 5 exit 5
fi fi
# verify that the bin/jval-wrapper.sh tool is executable
#
JVAL_WRAPPER="$BIN_DIR/jval-wrapper.sh"
if [[ ! -e $JVAL_WRAPPER ]]; then
echo "$0: ERROR: bin/jval-wrapper.sh does not exist: $JVAL_WRAPPER" 1>&2
exit 5
fi
if [[ ! -f $JVAL_WRAPPER ]]; then
echo "$0: ERROR: bin/jval-wrapper.sh is not a regular file: $JVAL_WRAPPER" 1>&2
exit 5
fi
if [[ ! -x $JVAL_WRAPPER ]]; then
echo "$0: ERROR: bin/jval-wrapper.sh is not an executable file: $JVAL_WRAPPER" 1>&2
exit 5
fi
# verify readable non-empty news.md file # verify readable non-empty news.md file
# #
export NEWS_MD="news.md" export NEWS_MD="news.md"
@@ -595,6 +629,7 @@ if [[ ! -s $NEWS_MD ]]; then
exit 1 exit 1
fi fi
# verify readable non-empty status.json file # verify readable non-empty status.json file
# #
export STATUS_JSON="status.json" export STATUS_JSON="status.json"
@@ -615,6 +650,7 @@ if [[ ! -s $STATUS_JSON ]]; then
exit 1 exit 1
fi fi
# verify readable non-empty status.md file # verify readable non-empty status.md file
# #
export STATUS_MD="status.md" export STATUS_MD="status.md"
@@ -635,10 +671,12 @@ if [[ ! -s $STATUS_MD ]]; then
exit 1 exit 1
fi fi
# note status.html file # note status.html file
# #
export STATUS_HTML="status.html" export STATUS_HTML="status.html"
# verify we have a non-empty readable .top file # verify we have a non-empty readable .top file
# #
export TOP_FILE=".top" export TOP_FILE=".top"
@@ -659,6 +697,7 @@ if [[ ! -s $TOP_FILE ]]; then
exit 6 exit 6
fi fi
# verify that we have an inc subdirectory # verify that we have an inc subdirectory
# #
export INC_PATH="$TOPDIR/inc" export INC_PATH="$TOPDIR/inc"
@@ -668,6 +707,7 @@ if [[ ! -d $INC_PATH ]]; then
fi fi
export INC_DIR="inc" export INC_DIR="inc"
# verify that we have an next subdirectory # verify that we have an next subdirectory
# #
export NEXT_PATH="$TOPDIR/next" export NEXT_PATH="$TOPDIR/next"
@@ -677,6 +717,7 @@ if [[ ! -d $NEXT_PATH ]]; then
fi fi
export NEXT_DIR="next" export NEXT_DIR="next"
# determine how we can determine the file modification time in W3C Datetime format: # determine how we can determine the file modification time in W3C Datetime format:
# #
# https://www.w3.org/TR/NOTE-datetime # https://www.w3.org/TR/NOTE-datetime
@@ -734,6 +775,7 @@ else
fi fi
fi fi
# print running info if verbose # print running info if verbose
# #
# If -v 3 or higher, print exported variables in order that they were exported. # If -v 3 or higher, print exported variables in order that they were exported.
@@ -746,13 +788,10 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: TOPDIR=$TOPDIR" 1>&2 echo "$0: debug[3]: TOPDIR=$TOPDIR" 1>&2
echo "$0: debug[3]: DOCROOT_SLASH=$DOCROOT_SLASH" 1>&2 echo "$0: debug[3]: DOCROOT_SLASH=$DOCROOT_SLASH" 1>&2
echo "$0: debug[3]: TAGLINE=$TAGLINE" 1>&2 echo "$0: debug[3]: TAGLINE=$TAGLINE" 1>&2
echo "$0: debug[3]: MD2HTML_SH=$MD2HTML_SH" 1>&2
echo "$0: debug[3]: REPO_TOP_URL=$REPO_TOP_URL" 1>&2 echo "$0: debug[3]: REPO_TOP_URL=$REPO_TOP_URL" 1>&2
echo "$0: debug[3]: REPO_URL=$REPO_URL" 1>&2 echo "$0: debug[3]: REPO_URL=$REPO_URL" 1>&2
echo "$0: debug[3]: SITE_URL=$SITE_URL" 1>&2 echo "$0: debug[3]: SITE_URL=$SITE_URL" 1>&2
echo "$0: debug[3]: JPARSE_TOOL=$JPARSE_TOOL" 1>&2 echo "$0: debug[3]: JPARSE_TOOL=$JPARSE_TOOL" 1>&2
echo "$0: debug[3]: STAT_TOOL=$STAT_TOOL" 1>&2
echo "$0: debug[3]: LS_TOOL=$LS_TOOL" 1>&2
echo "$0: debug[3]: IOCCC_STATUS_VERSION=$IOCCC_STATUS_VERSION" 1>&2 echo "$0: debug[3]: IOCCC_STATUS_VERSION=$IOCCC_STATUS_VERSION" 1>&2
echo "$0: debug[3]: NOOP=$NOOP" 1>&2 echo "$0: debug[3]: NOOP=$NOOP" 1>&2
echo "$0: debug[3]: DO_NOT_PROCESS=$DO_NOT_PROCESS" 1>&2 echo "$0: debug[3]: DO_NOT_PROCESS=$DO_NOT_PROCESS" 1>&2
@@ -761,9 +800,16 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: TOOL_OPTION[$index]=${TOOL_OPTION[$index]}" 1>&2 echo "$0: debug[3]: TOOL_OPTION[$index]=${TOOL_OPTION[$index]}" 1>&2
done done
echo "$0: debug[3]: MODTIME_METHOD=$MODTIME_METHOD" 1>&2 echo "$0: debug[3]: MODTIME_METHOD=$MODTIME_METHOD" 1>&2
echo "$0: debug[3]: STAT_TOOL=$STAT_TOOL" 1>&2
echo "$0: debug[3]: LS_TOOL=$LS_TOOL" 1>&2
echo "$0: debug[3]: IOCCC_STATUS_VERSION=$IOCCC_STATUS_VERSION" 1>&2
echo "$0: debug[3]: CONTEST_STATUS=$CONTEST_STATUS" 1>&2 echo "$0: debug[3]: CONTEST_STATUS=$CONTEST_STATUS" 1>&2
echo "$0: debug[3]: REPO_NAME=$REPO_NAME" 1>&2 echo "$0: debug[3]: REPO_NAME=$REPO_NAME" 1>&2
echo "$0: debug[3]: CD_FAILED=$CD_FAILED" 1>&2 echo "$0: debug[3]: CD_FAILED=$CD_FAILED" 1>&2
echo "$0: debug[3]: BIN_DIR=$BIN_DIR" 1>&2
echo "$0: debug[3]: BIN_PATH=$BIN_PATH" 1>&2
echo "$0: debug[3]: MD2HTML_SH=$MD2HTML_SH" 1>&2
echo "$0: debug[3]: JVAL_WRAPPER=$JVAL_WRAPPER" 1>&2
echo "$0: debug[3]: NEWS_MD=$NEWS_MD" 1>&2 echo "$0: debug[3]: NEWS_MD=$NEWS_MD" 1>&2
echo "$0: debug[3]: STATUS_JSON=$STATUS_JSON" 1>&2 echo "$0: debug[3]: STATUS_JSON=$STATUS_JSON" 1>&2
echo "$0: debug[3]: STATUS_MD=$STATUS_MD" 1>&2 echo "$0: debug[3]: STATUS_MD=$STATUS_MD" 1>&2
@@ -775,6 +821,7 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: NEXT_DIR=$NEXT_DIR" 1>&2 echo "$0: debug[3]: NEXT_DIR=$NEXT_DIR" 1>&2
fi fi
# validate JSON in status.json # validate JSON in status.json
# #
"$JPARSE_TOOL" -q "$STATUS_JSON" "$JPARSE_TOOL" -q "$STATUS_JSON"
@@ -786,18 +833,11 @@ fi
# obtain contest_status if CONTEST_STATUS was not set in the arg # obtain contest_status if CONTEST_STATUS was not set in the arg
# #
# XXX - XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX - XXX
# XXX - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - XXX
# XXX - until we have the jnamval command, we must FAKE PARSE the author/author_handle.json file - XXX
# XXX - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - XXX
# XXX - XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX - XXX
#
if [[ -z $CONTEST_STATUS ]]; then if [[ -z $CONTEST_STATUS ]]; then
# obtain the contest_status from status.json # obtain the contest_status from status.json
# #
CONTEST_STATUS=$(grep '"contest_status"[[:space:]]*:[[:space:]]*"' "$STATUS_JSON" | CONTEST_STATUS=$("$JVAL_WRAPPER" -w -b "$STATUS_JSON" '$..contest_status')
sed -e 's/^.*:[[:space:]]*"//' -e 's/",*//')
if [[ -z $CONTEST_STATUS ]]; then if [[ -z $CONTEST_STATUS ]]; then
echo "$0: ERROR: cannot determine contest_status from status.json: $STATUS_JSON" 1>&2 echo "$0: ERROR: cannot determine contest_status from status.json: $STATUS_JSON" 1>&2
exit 1 exit 1
@@ -806,13 +846,13 @@ if [[ -z $CONTEST_STATUS ]]; then
# validate and normalize the contest_status from status.json # validate and normalize the contest_status from status.json
# #
case "$CONTEST_STATUS" in case "$CONTEST_STATUS" in
p|pending) CONTEST_STATUS="pending" pending) CONTEST_STATUS="pending"
;; ;;
o|open) CONTEST_STATUS="open" open) CONTEST_STATUS="open"
;; ;;
j|judging) CONTEST_STATUS="judging" judging) CONTEST_STATUS="judging"
;; ;;
c|closed) CONTEST_STATUS="closed" closed) CONTEST_STATUS="closed"
;; ;;
*) echo "$0: ERROR: unexpected status from $status.json: $CONTEST_STATUS" 1>&2 *) echo "$0: ERROR: unexpected status from $status.json: $CONTEST_STATUS" 1>&2
echo 1>&2 echo 1>&2
@@ -822,6 +862,7 @@ if [[ -z $CONTEST_STATUS ]]; then
esac esac
fi fi
# determine the rules.md markdown file # determine the rules.md markdown file
# #
export RULES_MD="$NEXT_DIR/rules.md" export RULES_MD="$NEXT_DIR/rules.md"
@@ -843,6 +884,7 @@ if [[ ! -s $RULES_MD ]]; then
fi fi
export RULES_HTML="$NEXT_DIR/rules.html" export RULES_HTML="$NEXT_DIR/rules.html"
# determine the rules.md markdown file # determine the rules.md markdown file
# #
export GUIDELINES_MD="$NEXT_DIR/guidelines.md" export GUIDELINES_MD="$NEXT_DIR/guidelines.md"
@@ -864,6 +906,7 @@ if [[ ! -s $GUIDELINES_MD ]]; then
fi fi
export GUIDELINES_HTML="$NEXT_DIR/guidelines.html" export GUIDELINES_HTML="$NEXT_DIR/guidelines.html"
# determine the rules hdr file # determine the rules hdr file
# #
export RULES_HDR="$INC_PATH/rules.$CONTEST_STATUS.hdr" export RULES_HDR="$INC_PATH/rules.$CONTEST_STATUS.hdr"
@@ -884,6 +927,7 @@ if [[ ! -s $RULES_HDR ]]; then
exit 1 exit 1
fi fi
# determine the guidelines hdr file # determine the guidelines hdr file
# #
export GUIDELINES_HDR="$INC_PATH/guidelines.$CONTEST_STATUS.hdr" export GUIDELINES_HDR="$INC_PATH/guidelines.$CONTEST_STATUS.hdr"
@@ -904,6 +948,7 @@ if [[ ! -s $GUIDELINES_HDR ]]; then
exit 1 exit 1
fi fi
# -N stops early before any processing is performed # -N stops early before any processing is performed
# #
if [[ -n $DO_NOT_PROCESS ]]; then if [[ -n $DO_NOT_PROCESS ]]; then
@@ -913,6 +958,7 @@ if [[ -n $DO_NOT_PROCESS ]]; then
exit 0 exit 0
fi fi
# create a temporary status.json file # create a temporary status.json file
# #
export TMP_STATUS_JSON=".tmp.$NAME.STATUS_JSON.$$.tmp" export TMP_STATUS_JSON=".tmp.$NAME.STATUS_JSON.$$.tmp"
@@ -935,6 +981,7 @@ elif [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: because of -n, temporary status.json file is not used: $TMP_STATUS_JSON" 1>&2 echo "$0: debug[3]: because of -n, temporary status.json file is not used: $TMP_STATUS_JSON" 1>&2
fi fi
# create a temporary rules.md file # create a temporary rules.md file
# #
export TMP_RULES_MD=".tmp.$NAME.RULES_MD.$$.tmp" export TMP_RULES_MD=".tmp.$NAME.RULES_MD.$$.tmp"
@@ -957,6 +1004,7 @@ elif [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: because of -n, temporary rules.md file is not used: $TMP_RULES_MD" 1>&2 echo "$0: debug[3]: because of -n, temporary rules.md file is not used: $TMP_RULES_MD" 1>&2
fi fi
# create a temporary guidelines.md file # create a temporary guidelines.md file
# #
export TMP_GUIDELINES_MD=".tmp.$NAME.GUIDELINES_MD.$$.tmp" export TMP_GUIDELINES_MD=".tmp.$NAME.GUIDELINES_MD.$$.tmp"
@@ -979,6 +1027,7 @@ elif [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: because of -n, temporary guidelines.md file is not used: $TMP_GUIDELINES_MD" 1>&2 echo "$0: debug[3]: because of -n, temporary guidelines.md file is not used: $TMP_GUIDELINES_MD" 1>&2
fi fi
# generate the temporary status.json file # generate the temporary status.json file
# #
# In this stage, we use the date of the actual status.json file. # In this stage, we use the date of the actual status.json file.
@@ -1069,6 +1118,7 @@ elif [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: because of -n, temporary status.json file is NOT written into: $TMP_STATUS_JSON" 1>&2 echo "$0: debug[3]: because of -n, temporary status.json file is NOT written into: $TMP_STATUS_JSON" 1>&2
fi fi
# use the md2html.sh tool to form the status.html file, unless -n # use the md2html.sh tool to form the status.html file, unless -n
# #
if [[ -z $NOOP ]]; then if [[ -z $NOOP ]]; then
@@ -1095,6 +1145,7 @@ elif [[ $V_FLAG -ge 5 ]]; then
"status.md $STATUS_HTML" 1>&2 "status.md $STATUS_HTML" 1>&2
fi fi
# update rules.md # update rules.md
# #
if [[ -z $NOOP ]]; then if [[ -z $NOOP ]]; then
@@ -1179,6 +1230,7 @@ elif [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: because of -n, rules.md was not updated: $RULES_MD" 1>&2 echo "$0: debug[3]: because of -n, rules.md was not updated: $RULES_MD" 1>&2
fi fi
# update guidelines.md # update guidelines.md
# #
if [[ -z $NOOP ]]; then if [[ -z $NOOP ]]; then
@@ -1263,6 +1315,7 @@ elif [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: because of -n, guidelines.md was not updated: $GUIDELINES_MD" 1>&2 echo "$0: debug[3]: because of -n, guidelines.md was not updated: $GUIDELINES_MD" 1>&2
fi fi
# file cleanup # file cleanup
# #
if [[ -z $NOOP ]]; then if [[ -z $NOOP ]]; then
@@ -1271,6 +1324,7 @@ elif [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: because of -n, disabled: rm -f -- $TMP_STATUS_JSON" 1>&2 echo "$0: debug[3]: because of -n, disabled: rm -f -- $TMP_STATUS_JSON" 1>&2
fi fi
# All Done!!! All Done!!! -- Jessica Noll, Age 2 # All Done!!! All Done!!! -- Jessica Noll, Age 2
# #
exit 0 exit 0
+49 -30
View File
@@ -36,6 +36,7 @@
# #
# Share and enjoy! :-) # Share and enjoy! :-)
# firewall - run only with a bash that is version 5.1.8 or later # firewall - run only with a bash that is version 5.1.8 or later
# #
# The "/usr/bin/env bash" command must result in using a bash that # The "/usr/bin/env bash" command must result in using a bash that
@@ -79,6 +80,7 @@ if [[ -z ${BASH_VERSINFO[0]} ||
exit 4 exit 4
fi fi
# setup bash file matching # setup bash file matching
# #
# We must declare arrays with -ag or -Ag, and we need loops to "export" modified variables. # We must declare arrays with -ag or -Ag, and we need loops to "export" modified variables.
@@ -91,6 +93,7 @@ shopt -u nocaseglob # disable strict case matching
shopt -u extglob # enable extended globbing patterns shopt -u extglob # enable extended globbing patterns
shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories
# set variables referenced in the usage message # set variables referenced in the usage message
# #
export VERSION="1.4.9 2024-08-11" export VERSION="1.4.9 2024-08-11"
@@ -111,8 +114,6 @@ fi
export TOPDIR export TOPDIR
export DOCROOT_SLASH="./" export DOCROOT_SLASH="./"
export TAGLINE="bin/$NAME" export TAGLINE="bin/$NAME"
export MD2HTML_SH="bin/md2html.sh"
export PANDOC_WRAPPER="bin/pandoc-wrapper.sh"
export REPO_TOP_URL="https://github.com/ioccc-src/temp-test-ioccc" export REPO_TOP_URL="https://github.com/ioccc-src/temp-test-ioccc"
# GitHub puts individual files under the "blob/master" sub-directory. # GitHub puts individual files under the "blob/master" sub-directory.
export REPO_URL="$REPO_TOP_URL/blob/master" export REPO_URL="$REPO_TOP_URL/blob/master"
@@ -147,15 +148,17 @@ export NOOP=
export DO_NOT_PROCESS= export DO_NOT_PROCESS=
export EXIT_CODE="0" export EXIT_CODE="0"
# clear options we will add to tools # clear options we will add to tools
# #
unset TOOL_OPTION unset TOOL_OPTION
declare -ag TOOL_OPTION declare -ag TOOL_OPTION
# usage # usage
# #
export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N] export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N]
[-t tagline] [-T md2html.sh] [-p tool] [file...] [-t tagline] [file...]
-h print help message and exit -h print help message and exit
-v level set verbosity level (def level: 0) -v level set verbosity level (def level: 0)
@@ -173,17 +176,13 @@ export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N]
-t tagline string to write about the tool that formed the markdown content (def: $TAGLINE) -t tagline string to write about the tool that formed the markdown content (def: $TAGLINE)
NOTE: 'tagline' may be enclosed within, but may NOT contain an internal single-quote, or double-quote. NOTE: 'tagline' may be enclosed within, but may NOT contain an internal single-quote, or double-quote.
-T md2html.sh run 'markdown to html tool' to convert markdown into HTML (def: $MD2HTML_SH)
-p tool run 'pandoc wrapper tool' (not pandoc path) during HTML phase number 21 (def: use $PANDOC_WRAPPER)
NOTE: The '-p tool' is passed as leading options on tool command lines.
-w site_url Base URL of the website (def: $SITE_URL) -w site_url Base URL of the website (def: $SITE_URL)
NOTE: The '-w site_url' is passed as leading options on tool command lines. NOTE: The '-w site_url' is passed as leading options on tool command lines.
NOTE: The '-v level' is passed as initial command line options to the 'markdown to html tool' (md2html.sh). NOTE: The '-v level' is passed as initial command line options to the 'markdown to html tool' (md2html.sh).
The 'tagline' is passed as '-t tagline' to the 'markdown to html tool' (md2html.sh), after the '-v level'. The 'tagline' is passed as '-t tagline' to the 'markdown to html tool' (md2html.sh), after the '-v level'.
Any '-T md2html.sh', '-p tool', '-P pandoc_opts', '-U top_url' Any '-P pandoc_opts', '-U top_url'
are passed to the 'markdown to html tool' (md2html.sh), and will be before any command line arguments. are passed to the 'markdown to html tool' (md2html.sh), and will be before any command line arguments.
Exit codes: Exit codes:
@@ -199,9 +198,10 @@ Exit codes:
$NAME version: $VERSION" $NAME version: $VERSION"
# parse command line # parse command line
# #
while getopts :hv:Vd:D:nNt:T:p:w: flag; do while getopts :hv:Vd:D:nNt:w: flag; do
case "$flag" in case "$flag" in
h) echo "$USAGE" 1>&2 h) echo "$USAGE" 1>&2
exit 2 exit 2
@@ -250,14 +250,6 @@ while getopts :hv:Vd:D:nNt:T:p:w: flag; do
TAGLINE="$OPTARG" TAGLINE="$OPTARG"
# -t tagline always added after arg parsing # -t tagline always added after arg parsing
;; ;;
T) MD2HTML_SH="$OPTARG"
TOOL_OPTION+=("-T")
TOOL_OPTION+=("$MD2HTML_SH")
;;
p) PANDOC_WRAPPER="$OPTARG"
TOOL_OPTION+=("-p")
TOOL_OPTION+=("$PANDOC_WRAPPER")
;;
w) SITE_URL="$OPTARG" w) SITE_URL="$OPTARG"
TOOL_OPTION+=("-w") TOOL_OPTION+=("-w")
TOOL_OPTION+=("$SITE_URL") TOOL_OPTION+=("$SITE_URL")
@@ -279,7 +271,7 @@ while getopts :hv:Vd:D:nNt:T:p:w: flag; do
;; ;;
esac esac
done done
#
# remove the options # remove the options
# #
shift $(( OPTIND - 1 )); shift $(( OPTIND - 1 ));
@@ -289,8 +281,9 @@ shift $(( OPTIND - 1 ));
if [[ $V_FLAG -ge 5 ]]; then if [[ $V_FLAG -ge 5 ]]; then
echo "$0: debug[5]: file argument count: $#" 1>&2 echo "$0: debug[5]: file argument count: $#" 1>&2
fi fi
#
# allow specifying specific files to generate # allow specifying specific files to generate
#
FILE_COUNT="$#" FILE_COUNT="$#"
while [[ $# -ne 0 ]]; do while [[ $# -ne 0 ]]; do
for (( index=0; index < ${#TOP_MD_SET[@]}; index++ )); do for (( index=0; index < ${#TOP_MD_SET[@]}; index++ )); do
@@ -304,12 +297,13 @@ if [[ "$FILE_COUNT" != 0 && ${#TOP_MD_SELECT_SET[@]} = 0 ]]; then
echo "$0: ERROR: no select files specified are in allowed set" 1>&2 echo "$0: ERROR: no select files specified are in allowed set" 1>&2
exit 3 exit 3
fi fi
#
if [[ $# -ne 0 ]]; then if [[ $# -ne 0 ]]; then
echo "$0: ERROR: expected 0 args, found: $#" 1>&2 echo "$0: ERROR: expected 0 args, found: $#" 1>&2
exit 3 exit 3
fi fi
# always add the '-v level' option, unless level is empty, to the set of options passed to the md2html.sh tool # always add the '-v level' option, unless level is empty, to the set of options passed to the md2html.sh tool
# #
if [[ -n $V_FLAG ]]; then if [[ -n $V_FLAG ]]; then
@@ -317,6 +311,7 @@ if [[ -n $V_FLAG ]]; then
TOOL_OPTION+=("$V_FLAG") TOOL_OPTION+=("$V_FLAG")
fi fi
# always add the '-t tagline' option, unless tagline is empty, to the set of options passed to the md2html.sh tool # always add the '-t tagline' option, unless tagline is empty, to the set of options passed to the md2html.sh tool
# #
if [[ -n $TAGLINE ]]; then if [[ -n $TAGLINE ]]; then
@@ -324,11 +319,13 @@ if [[ -n $TAGLINE ]]; then
TOOL_OPTION+=("$TAGLINE") TOOL_OPTION+=("$TAGLINE")
fi fi
# always add the '-D docroot/' for the top level files # always add the '-D docroot/' for the top level files
# #
TOOL_OPTION+=("-D") TOOL_OPTION+=("-D")
TOOL_OPTION+=("$DOCROOT_SLASH") TOOL_OPTION+=("$DOCROOT_SLASH")
# verify that we have a topdir directory # verify that we have a topdir directory
# #
REPO_NAME=$(basename "$REPO_TOP_URL") REPO_NAME=$(basename "$REPO_TOP_URL")
@@ -349,6 +346,7 @@ if [[ ! -d $TOPDIR ]]; then
exit 6 exit 6
fi fi
# cd to topdir # cd to topdir
# #
if [[ ! -e $TOPDIR ]]; then if [[ ! -e $TOPDIR ]]; then
@@ -372,6 +370,7 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2 echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2
fi fi
# verify that we have an author subdirectory # verify that we have an author subdirectory
# #
export AUTHOR_PATH="$TOPDIR/author" export AUTHOR_PATH="$TOPDIR/author"
@@ -381,6 +380,7 @@ if [[ ! -d $AUTHOR_PATH ]]; then
fi fi
export AUTHOR_DIR="author" export AUTHOR_DIR="author"
# verify that we have a bin subdirectory # verify that we have a bin subdirectory
# #
export BIN_PATH="$TOPDIR/bin" export BIN_PATH="$TOPDIR/bin"
@@ -390,35 +390,51 @@ if [[ ! -d $BIN_PATH ]]; then
fi fi
export BIN_DIR="bin" export BIN_DIR="bin"
# verify that the md2html tool is executable
# verify that the bin/md2html.sh tool is executable
# #
export MD2HTML_SH="$BIN_DIR/md2html.sh"
if [[ ! -e $MD2HTML_SH ]]; then if [[ ! -e $MD2HTML_SH ]]; then
echo "$0: ERROR: md2html.sh does not exist: $MD2HTML_SH" 1>&2 echo "$0: ERROR: bin/md2html.sh does not exist: $MD2HTML_SH" 1>&2
exit 5 exit 5
fi fi
if [[ ! -f $MD2HTML_SH ]]; then if [[ ! -f $MD2HTML_SH ]]; then
echo "$0: ERROR: md2html.sh is not a regular file: $MD2HTML_SH" 1>&2 echo "$0: ERROR: bin/md2html.sh is not a regular file: $MD2HTML_SH" 1>&2
exit 5 exit 5
fi fi
if [[ ! -x $MD2HTML_SH ]]; then if [[ ! -x $MD2HTML_SH ]]; then
echo "$0: ERROR: md2html.sh is not an executable file: $MD2HTML_SH" 1>&2 echo "$0: ERROR: bin/md2html.sh is not an executable file: $MD2HTML_SH" 1>&2
exit 5 exit 5
fi fi
# verify that the bin/pandoc-wrapper.sh tool is executable
#
export PANDOC_WRAPPER="$BIN_DIR/pandoc-wrapper.sh"
if [[ ! -e $PANDOC_WRAPPER ]]; then
echo "$0: ERROR: bin/md2html.sh does not exist: $PANDOC_WRAPPER" 1>&2
exit 5
fi
if [[ ! -f $PANDOC_WRAPPER ]]; then
echo "$0: ERROR: bin/md2html.sh is not a regular file: $PANDOC_WRAPPER" 1>&2
exit 5
fi
if [[ ! -x $PANDOC_WRAPPER ]]; then
echo "$0: ERROR: bin/md2html.sh is not an executable file: $PANDOC_WRAPPER" 1>&2
exit 5
fi
# find the location tool # find the location tool
# #
LOCATION_TOOL=$(type -P location) LOCATION_TOOL=$(type -P location)
if [[ -z $LOCATION_TOOL ]]; then
# guess we have a location tool in bin
#
LOCATION_TOOL="$BIN_DIR/location"
fi
if [[ ! -x $LOCATION_TOOL ]]; then if [[ ! -x $LOCATION_TOOL ]]; then
echo "$0: ERROR: cannot find the location executable" 1>&2 echo "$0: ERROR: cannot find the location executable" 1>&2
echo "$0: notice: location tool comes from this repo: https://github.com/ioccc-src/mkiocccentry" 1>&2 echo "$0: notice: location tool comes from this repo: https://github.com/ioccc-src/mkiocccentry" 1>&2
exit 5 exit 5
fi fi
# print running info if verbose # print running info if verbose
# #
# If -v 3 or higher, print exported variables in order that they were exported. # If -v 3 or higher, print exported variables in order that they were exported.
@@ -431,7 +447,6 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: TOPDIR=$TOPDIR" 1>&2 echo "$0: debug[3]: TOPDIR=$TOPDIR" 1>&2
echo "$0: debug[3]: DOCROOT_SLASH=$DOCROOT_SLASH" 1>&2 echo "$0: debug[3]: DOCROOT_SLASH=$DOCROOT_SLASH" 1>&2
echo "$0: debug[3]: TAGLINE=$TAGLINE" 1>&2 echo "$0: debug[3]: TAGLINE=$TAGLINE" 1>&2
echo "$0: debug[3]: MD2HTML_SH=$MD2HTML_SH" 1>&2
echo "$0: debug[3]: PANDOC_WRAPPER=$PANDOC_WRAPPER" 1>&2 echo "$0: debug[3]: PANDOC_WRAPPER=$PANDOC_WRAPPER" 1>&2
echo "$0: debug[3]: REPO_TOP_URL=$REPO_TOP_URL" 1>&2 echo "$0: debug[3]: REPO_TOP_URL=$REPO_TOP_URL" 1>&2
echo "$0: debug[3]: REPO_URL=$REPO_URL" 1>&2 echo "$0: debug[3]: REPO_URL=$REPO_URL" 1>&2
@@ -456,8 +471,10 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: AUTHOR_DIR=$AUTHOR_DIR" 1>&2 echo "$0: debug[3]: AUTHOR_DIR=$AUTHOR_DIR" 1>&2
echo "$0: debug[3]: BIN_PATH=$BIN_PATH" 1>&2 echo "$0: debug[3]: BIN_PATH=$BIN_PATH" 1>&2
echo "$0: debug[3]: BIN_DIR=$BIN_DIR" 1>&2 echo "$0: debug[3]: BIN_DIR=$BIN_DIR" 1>&2
echo "$0: debug[3]: MD2HTML_SH=$MD2HTML_SH" 1>&2
fi fi
# -N stops early before any processing is performed # -N stops early before any processing is performed
# #
if [[ -n $DO_NOT_PROCESS ]]; then if [[ -n $DO_NOT_PROCESS ]]; then
@@ -467,6 +484,7 @@ if [[ -n $DO_NOT_PROCESS ]]; then
exit 0 exit 0
fi fi
# process the entire markdown set # process the entire markdown set
# #
if (( ${#TOP_MD_SELECT_SET[@]} )); then if (( ${#TOP_MD_SELECT_SET[@]} )); then
@@ -629,6 +647,7 @@ else
done done
fi fi
# All Done!!! All Done!!! -- Jessica Noll, Age 2 # All Done!!! All Done!!! -- Jessica Noll, Age 2
# #
if [[ $EXIT_CODE -ne 0 ]]; then if [[ $EXIT_CODE -ne 0 ]]; then
+79 -25
View File
@@ -28,6 +28,7 @@
# #
# Share and enjoy! :-) # Share and enjoy! :-)
# firewall - run only with a bash that is version 5.1.8 or later # firewall - run only with a bash that is version 5.1.8 or later
# #
# The "/usr/bin/env bash" command must result in using a bash that # The "/usr/bin/env bash" command must result in using a bash that
@@ -71,6 +72,7 @@ if [[ -z ${BASH_VERSINFO[0]} ||
exit 4 exit 4
fi fi
# setup bash file matching # setup bash file matching
# #
# We must declare arrays with -ag or -Ag, and we need loops to "export" modified variables. # We must declare arrays with -ag or -Ag, and we need loops to "export" modified variables.
@@ -83,9 +85,10 @@ shopt -u nocaseglob # disable strict case matching
shopt -u extglob # enable extended globbing patterns shopt -u extglob # enable extended globbing patterns
shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories
# set variables referenced in the usage message # set variables referenced in the usage message
# #
export VERSION="1.1.2 2024-08-05" export VERSION="1.2 2024-08-17"
NAME=$(basename "$0") NAME=$(basename "$0")
export NAME export NAME
export V_FLAG=0 export V_FLAG=0
@@ -103,21 +106,22 @@ fi
export TOPDIR export TOPDIR
export DOCROOT_SLASH="../../" export DOCROOT_SLASH="../../"
export TAGLINE="bin/$NAME" export TAGLINE="bin/$NAME"
export MD2HTML_SH="bin/md2html.sh"
export REPO_TOP_URL="https://github.com/ioccc-src/temp-test-ioccc" export REPO_TOP_URL="https://github.com/ioccc-src/temp-test-ioccc"
# GitHub puts individual files under the "blob/master" sub-directory. # GitHub puts individual files under the "blob/master" sub-directory.
export REPO_URL="$REPO_TOP_URL/blob/master" export REPO_URL="$REPO_TOP_URL/blob/master"
export SITE_URL="https://ioccc-src.github.io/temp-test-ioccc" export SITE_URL="https://ioccc-src.github.io/temp-test-ioccc"
# clear options we will add to tools # clear options we will add to tools
# #
unset TOOL_OPTION unset TOOL_OPTION
declare -ag TOOL_OPTION declare -ag TOOL_OPTION
# set usage message # set usage message
# #
export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-n] [-N] export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-n] [-N]
[-t tagline] [-T md2html.sh] [-w site_url] [-Q] [-t tagline] [-w site_url]
YYYY [more_options] YYYY [more_options]
-h print help message and exit -h print help message and exit
@@ -131,8 +135,9 @@ export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-n] [-N]
-n go thru the actions, but do not update any files (def: do the action) -n go thru the actions, but do not update any files (def: do the action)
-N do not process file, just parse arguments and ignore the file (def: process the file) -N do not process file, just parse arguments and ignore the file (def: process the file)
-Q quick mode, do not run $MD2HTML_SH unless markdown is out of date (def: do)
-t tagline string to write about the tool that formed the markdown content (def: $TAGLINE) -t tagline string to write about the tool that formed the markdown content (def: $TAGLINE)
-T md2html.sh run 'markdown to html tool' to convert markdown into HTML (def: $MD2HTML_SH)
-w site_url Base URL of the website (def: $SITE_URL) -w site_url Base URL of the website (def: $SITE_URL)
NOTE: The '-w site_url' is passed as leading options on tool command lines. NOTE: The '-w site_url' is passed as leading options on tool command lines.
@@ -153,14 +158,17 @@ Exit codes:
$NAME version: $VERSION" $NAME version: $VERSION"
# setup # setup
# #
export NOOP= export NOOP=
export DO_NOT_PROCESS= export DO_NOT_PROCESS=
export QUICK_MODE=
# parse command line # parse command line
# #
while getopts :hv:Vd:D:nNt:T:w: flag; do while getopts :hv:Vd:D:nNQt:w: flag; do
case "$flag" in case "$flag" in
h) echo "$USAGE" 1>&2 h) echo "$USAGE" 1>&2
exit 2 exit 2
@@ -189,6 +197,8 @@ while getopts :hv:Vd:D:nNt:T:w: flag; do
;; ;;
N) DO_NOT_PROCESS="-N" N) DO_NOT_PROCESS="-N"
;; ;;
Q) QUICK_MODE="-Q"
;;
t) # parse -t tagline t) # parse -t tagline
case "$OPTARG" in case "$OPTARG" in
*"'"*) *"'"*)
@@ -208,10 +218,6 @@ while getopts :hv:Vd:D:nNt:T:w: flag; do
TAGLINE="$OPTARG" TAGLINE="$OPTARG"
# -t tagline is always added further down # -t tagline is always added further down
;; ;;
T) MD2HTML_SH="$OPTARG"
TOOL_OPTION+=("-T")
TOOL_OPTION+=("$MD2HTML_SH")
;;
w) SITE_URL="$OPTARG" w) SITE_URL="$OPTARG"
TOOL_OPTION+=("-w") TOOL_OPTION+=("-w")
TOOL_OPTION+=("$SITE_URL") TOOL_OPTION+=("$SITE_URL")
@@ -233,7 +239,7 @@ while getopts :hv:Vd:D:nNt:T:w: flag; do
;; ;;
esac esac
done done
#
# parse the command line arguments # parse the command line arguments
# #
if [[ $V_FLAG -ge 3 ]]; then if [[ $V_FLAG -ge 3 ]]; then
@@ -267,6 +273,7 @@ if [[ -z $YYYY ]]; then
exit 3 exit 3
fi fi
# verify that we have a topdir directory # verify that we have a topdir directory
# #
REPO_NAME=$(basename "$REPO_TOP_URL") REPO_NAME=$(basename "$REPO_TOP_URL")
@@ -287,6 +294,7 @@ if [[ ! -d $TOPDIR ]]; then
exit 6 exit 6
fi fi
# cd to topdir # cd to topdir
# #
if [[ ! -e $TOPDIR ]]; then if [[ ! -e $TOPDIR ]]; then
@@ -310,6 +318,34 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2 echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2
fi fi
# verify that we have a bin subdirectory
#
export BIN_PATH="$TOPDIR/bin"
if [[ ! -d $BIN_PATH ]]; then
echo "$0: ERROR: bin is not a directory under topdir: $BIN_PATH" 1>&2
exit 6
fi
export BIN_DIR="bin"
# verify that the bin/md2html.sh tool is executable
#
export MD2HTML_SH="$BIN_DIR/md2html.sh"
if [[ ! -e $MD2HTML_SH ]]; then
echo "$0: ERROR: bin/md2html.sh does not exist: $MD2HTML_SH" 1>&2
exit 5
fi
if [[ ! -f $MD2HTML_SH ]]; then
echo "$0: ERROR: bin/md2html.sh is not a regular file: $MD2HTML_SH" 1>&2
exit 5
fi
if [[ ! -x $MD2HTML_SH ]]; then
echo "$0: ERROR: bin/md2html.sh is not an executable file: $MD2HTML_SH" 1>&2
exit 5
fi
# verify that YYYY is an IOCCC year directory # verify that YYYY is an IOCCC year directory
# #
if [[ ! -e $YYYY ]]; then if [[ ! -e $YYYY ]]; then
@@ -325,6 +361,7 @@ if [[ ! -r $YYYY ]]; then
exit 6 exit 6
fi fi
# verify that YYYY has a non-empty readable .year file # verify that YYYY has a non-empty readable .year file
# #
export DOT_YEAR="$YYYY/.year" export DOT_YEAR="$YYYY/.year"
@@ -345,6 +382,7 @@ if [[ ! -s $DOT_YEAR ]]; then
exit 6 exit 6
fi fi
# verify that YYYY/README.md is a non-empty readable file # verify that YYYY/README.md is a non-empty readable file
# #
export README_FILE="$YYYY/README.md" export README_FILE="$YYYY/README.md"
@@ -365,26 +403,13 @@ if [[ ! -s $README_FILE ]]; then
exit 6 exit 6
fi fi
# verify that the md2html.sh is an executable file
#
if [[ ! -e $MD2HTML_SH ]]; then
echo "$0: ERROR: md2html.sh does not exist: $MD2HTML_SH" 1>&2
exit 5
fi
if [[ ! -f $MD2HTML_SH ]]; then
echo "$0: ERROR: md2html.sh is not a regular file: $MD2HTML_SH" 1>&2
exit 5
fi
if [[ ! -x $MD2HTML_SH ]]; then
echo "$0: ERROR: md2html.sh is not an executable file: $MD2HTML_SH" 1>&2
exit 5
fi
# always add -t tagline # always add -t tagline
# #
TOOL_OPTION+=("-t") TOOL_OPTION+=("-t")
TOOL_OPTION+=("$TAGLINE") TOOL_OPTION+=("$TAGLINE")
# parameter debugging # parameter debugging
# #
if [[ $V_FLAG -ge 3 ]]; then if [[ $V_FLAG -ge 3 ]]; then
@@ -395,7 +420,6 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: TOPDIR=$TOPDIR" 1>&2 echo "$0: debug[3]: TOPDIR=$TOPDIR" 1>&2
echo "$0: debug[3]: DOCROOT_SLASH=$DOCROOT_SLASH" 1>&2 echo "$0: debug[3]: DOCROOT_SLASH=$DOCROOT_SLASH" 1>&2
echo "$0: debug[3]: TAGLINE=$TAGLINE" 1>&2 echo "$0: debug[3]: TAGLINE=$TAGLINE" 1>&2
echo "$0: debug[3]: MD2HTML_SH=$MD2HTML_SH" 1>&2
echo "$0: debug[3]: REPO_TOP_URL=$REPO_TOP_URL" 1>&2 echo "$0: debug[3]: REPO_TOP_URL=$REPO_TOP_URL" 1>&2
echo "$0: debug[3]: REPO_URL=$REPO_URL" 1>&2 echo "$0: debug[3]: REPO_URL=$REPO_URL" 1>&2
echo "$0: debug[3]: SITE_URL=$SITE_URL" 1>&2 echo "$0: debug[3]: SITE_URL=$SITE_URL" 1>&2
@@ -404,13 +428,18 @@ if [[ $V_FLAG -ge 3 ]]; then
done done
echo "$0: debug[3]: NOOP=$NOOP" 1>&2 echo "$0: debug[3]: NOOP=$NOOP" 1>&2
echo "$0: debug[3]: DO_NOT_PROCESS=$DO_NOT_PROCESS" 1>&2 echo "$0: debug[3]: DO_NOT_PROCESS=$DO_NOT_PROCESS" 1>&2
echo "$0: debug[3]: QUICK_MODE=$QUICK_MODE" 1>&2
echo "$0: debug[3]: YYYY=$YYYY" 1>&2 echo "$0: debug[3]: YYYY=$YYYY" 1>&2
echo "$0: debug[3]: REPO_NAME=$REPO_NAME" 1>&2 echo "$0: debug[3]: REPO_NAME=$REPO_NAME" 1>&2
echo "$0: debug[3]: CD_FAILED=$CD_FAILED" 1>&2 echo "$0: debug[3]: CD_FAILED=$CD_FAILED" 1>&2
echo "$0: debug[3]: BIN_PATH=$BIN_PATH" 1>&2
echo "$0: debug[3]: BIN_DIR=$BIN_DIR" 1>&2
echo "$0: debug[3]: MD2HTML_SH=$MD2HTML_SH" 1>&2
echo "$0: debug[3]: DOT_YEAR=$DOT_YEAR" 1>&2 echo "$0: debug[3]: DOT_YEAR=$DOT_YEAR" 1>&2
echo "$0: debug[3]: README_FILE=$README_FILE" 1>&2 echo "$0: debug[3]: README_FILE=$README_FILE" 1>&2
fi fi
# If -N, time to exit # If -N, time to exit
# #
if [[ -n $DO_NOT_PROCESS ]]; then if [[ -n $DO_NOT_PROCESS ]]; then
@@ -420,10 +449,24 @@ if [[ -n $DO_NOT_PROCESS ]]; then
exit 0 exit 0
fi fi
# case: -Q (quick mode)
#
# Do nothing if authors.html is newer than all author/author_handle.json files.
#
if [[ -n $QUICK_MODE ]]; then
if [[ $YYYY/index.html -nt $YYYY/README.md ]]; then
exit 0
fi
fi
# form the YYYY index.html unless -n # form the YYYY index.html unless -n
# #
if [[ -z $NOOP ]]; then if [[ -z $NOOP ]]; then
# possibly update YYYY index.html
#
if [[ $V_FLAG -ge 1 ]]; then if [[ $V_FLAG -ge 1 ]]; then
echo "$0: debug[1]: about to run: $MD2HTML_SH -U $SITE_URL/$YYYY/index.html ${TOOL_OPTION[*]}" \ echo "$0: debug[1]: about to run: $MD2HTML_SH -U $SITE_URL/$YYYY/index.html ${TOOL_OPTION[*]}" \
"-m $YYYY/README.md -- $YYYY/README.md $YYYY/index.html" 1>&2 "-m $YYYY/README.md -- $YYYY/README.md $YYYY/index.html" 1>&2
@@ -437,6 +480,16 @@ if [[ -z $NOOP ]]; then
exit 1 exit 1
fi fi
# case -Q: (quick mode)
#
# If we are here, then the early quick mode test indicated that the prerequisite files are newer.
# We will force the authors.html file to be touched so that a later run with -Q will quickly exit.
# We do this because by default, the md2html.sh tool does not modify the target HTML unless it was modified.
#
if [[ -n $QUICK_MODE ]]; then
touch "$YYYY/index.html"
fi
# report disabled by -n # report disabled by -n
# #
elif [[ $V_FLAG -ge 5 ]]; then elif [[ $V_FLAG -ge 5 ]]; then
@@ -444,6 +497,7 @@ elif [[ $V_FLAG -ge 5 ]]; then
"$YYYY/README.md $YYYY/index.html" 1>&2 "$YYYY/README.md $YYYY/index.html" 1>&2
fi fi
# All Done!!! All Done!!! -- Jessica Noll, Age 2 # All Done!!! All Done!!! -- Jessica Noll, Age 2
# #
exit 0 exit 0
+86 -28
View File
@@ -28,6 +28,7 @@
# #
# Share and enjoy! :-) # Share and enjoy! :-)
# firewall - run only with a bash that is version 5.1.8 or later # firewall - run only with a bash that is version 5.1.8 or later
# #
# The "/usr/bin/env bash" command must result in using a bash that # The "/usr/bin/env bash" command must result in using a bash that
@@ -71,6 +72,7 @@ if [[ -z ${BASH_VERSINFO[0]} ||
exit 4 exit 4
fi fi
# setup bash file matching # setup bash file matching
# #
# We must declare arrays with -ag or -Ag, and we need loops to "export" modified variables. # We must declare arrays with -ag or -Ag, and we need loops to "export" modified variables.
@@ -83,9 +85,10 @@ shopt -u nocaseglob # disable strict case matching
shopt -u extglob # enable extended globbing patterns shopt -u extglob # enable extended globbing patterns
shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories
# set variables referenced in the usage message # set variables referenced in the usage message
# #
export VERSION="1.3.7 2024-08-05" export VERSION="1.4 2024-08-17"
NAME=$(basename "$0") NAME=$(basename "$0")
export NAME export NAME
export V_FLAG=0 export V_FLAG=0
@@ -115,8 +118,6 @@ if [[ ! -x $FMT_TOOL ]]; then
fi fi
export DOCROOT_SLASH="./" export DOCROOT_SLASH="./"
export TAGLINE="bin/$NAME" export TAGLINE="bin/$NAME"
export MD2HTML_SH="bin/md2html.sh"
export PANDOC_WRAPPER="bin/pandoc-wrapper.sh"
export REPO_TOP_URL="https://github.com/ioccc-src/temp-test-ioccc" export REPO_TOP_URL="https://github.com/ioccc-src/temp-test-ioccc"
# GitHub puts individual files under the "blob/master" sub-directory. # GitHub puts individual files under the "blob/master" sub-directory.
export REPO_URL="$REPO_TOP_URL/blob/master" export REPO_URL="$REPO_TOP_URL/blob/master"
@@ -126,15 +127,17 @@ export NOOP=
export DO_NOT_PROCESS= export DO_NOT_PROCESS=
export EXIT_CODE="0" export EXIT_CODE="0"
# clear options we will add to tools # clear options we will add to tools
# #
unset TOOL_OPTION unset TOOL_OPTION
declare -ag TOOL_OPTION declare -ag TOOL_OPTION
# usage # usage
# #
export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N] export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N]
[-t tagline] [-T md2html.sh] [-p tool] [-t tagline] [-w site_url]
-h print help message and exit -h print help message and exit
-v level set verbosity level (def level: 0) -v level set verbosity level (def level: 0)
@@ -152,17 +155,13 @@ export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N]
-t tagline string to write about the tool that formed the markdown content (def: $TAGLINE) -t tagline string to write about the tool that formed the markdown content (def: $TAGLINE)
NOTE: 'tagline' may be enclosed within, but may NOT contain an internal single-quote, or double-quote. NOTE: 'tagline' may be enclosed within, but may NOT contain an internal single-quote, or double-quote.
-T md2html.sh run 'markdown to html tool' to convert markdown into HTML (def: $MD2HTML_SH)
-p tool run 'pandoc wrapper tool' (not pandoc path) during HTML phase number 21 (def: use $PANDOC_WRAPPER)
NOTE: The '-p tool' is passed as leading options on tool command lines.
-w site_url Base URL of the website (def: $SITE_URL) -w site_url Base URL of the website (def: $SITE_URL)
NOTE: The '-w site_url' is passed as leading options on tool command lines. NOTE: The '-w site_url' is passed as leading options on tool command lines.
NOTE: The '-v level' is passed as initial command line options to the 'markdown to html tool' (md2html.sh). NOTE: The '-v level' is passed as initial command line options to the 'markdown to html tool' (md2html.sh).
The 'tagline' is passed as '-t tagline' to the 'markdown to html tool' (md2html.sh), after the '-v level'. The 'tagline' is passed as '-t tagline' to the 'markdown to html tool' (md2html.sh), after the '-v level'.
Any '-T md2html.sh', '-p tool', '-P pandoc_opts', '-U top_url' Any '-P pandoc_opts', '-U top_url'
are passed to the 'markdown to html tool' (md2html.sh), and will be before any command line arguments. are passed to the 'markdown to html tool' (md2html.sh), and will be before any command line arguments.
Exit codes: Exit codes:
@@ -178,16 +177,11 @@ Exit codes:
$NAME version: $VERSION" $NAME version: $VERSION"
# output_award # output_award
# #
# Write the award name to standard output (stdout) # Write the award name to standard output (stdout)
# #
# XXX - XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX - XXX
# XXX - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - XXX
# XXX - until we have the jnamval command, we must FAKE PARSE the .entry.json file - XXX
# XXX - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - XXX
# XXX - XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX - XXX
#
# usage: # usage:
# output_award YYYY/dir/.entry.json # output_award YYYY/dir/.entry.json
# #
@@ -222,7 +216,7 @@ function output_award
# obtain the award string # obtain the award string
# #
AWARD_STRING=$(grep -F '"award" : "' "$ENTRY_JSON_PATH" | sed -e 's/^.*"award" : "//' -e 's/",//') AWARD_STRING=$("$JVAL_WRAPPER" -w -b "$ENTRY_JSON_PATH" '$..award')
if [[ -z $AWARD_STRING ]]; then if [[ -z $AWARD_STRING ]]; then
echo "$0: ERROR: in output_award: no award found in .entry.json file: $ENTRY_JSON_PATH" 1>&2 echo "$0: ERROR: in output_award: no award found in .entry.json file: $ENTRY_JSON_PATH" 1>&2
return 5 return 5
@@ -231,6 +225,7 @@ function output_award
return 0 return 0
} }
# output_ordinal # output_ordinal
# #
# Write the numerical ordinal form of a non-negative integer to standard output (stdout) # Write the numerical ordinal form of a non-negative integer to standard output (stdout)
@@ -292,9 +287,10 @@ function output_ordinal
return 0 return 0
} }
# parse command line # parse command line
# #
while getopts :hv:Vd:D:nNt:T:p:w: flag; do while getopts :hv:Vd:D:nNt:w: flag; do
case "$flag" in case "$flag" in
h) echo "$USAGE" 1>&2 h) echo "$USAGE" 1>&2
exit 2 exit 2
@@ -343,14 +339,6 @@ while getopts :hv:Vd:D:nNt:T:p:w: flag; do
TAGLINE="$OPTARG" TAGLINE="$OPTARG"
# -t tagline always added after arg parsing # -t tagline always added after arg parsing
;; ;;
T) MD2HTML_SH="$OPTARG"
TOOL_OPTION+=("-T")
TOOL_OPTION+=("$MD2HTML_SH")
;;
p) PANDOC_WRAPPER="$OPTARG"
TOOL_OPTION+=("-p")
TOOL_OPTION+=("$PANDOC_WRAPPER")
;;
w) SITE_URL="$OPTARG" w) SITE_URL="$OPTARG"
TOOL_OPTION+=("-w") TOOL_OPTION+=("-w")
TOOL_OPTION+=("$SITE_URL") TOOL_OPTION+=("$SITE_URL")
@@ -372,7 +360,7 @@ while getopts :hv:Vd:D:nNt:T:p:w: flag; do
;; ;;
esac esac
done done
#
# remove the options # remove the options
# #
shift $(( OPTIND - 1 )); shift $(( OPTIND - 1 ));
@@ -388,6 +376,7 @@ if [[ $# -ne 0 ]]; then
exit 3 exit 3
fi fi
# always add the '-v level' option, unless level is empty, to the set of options passed to the md2html.sh tool # always add the '-v level' option, unless level is empty, to the set of options passed to the md2html.sh tool
# #
if [[ -n $V_FLAG ]]; then if [[ -n $V_FLAG ]]; then
@@ -395,6 +384,7 @@ if [[ -n $V_FLAG ]]; then
TOOL_OPTION+=("$V_FLAG") TOOL_OPTION+=("$V_FLAG")
fi fi
# always add the '-t tagline' option, unless tagline is empty, to the set of options passed to the md2html.sh tool # always add the '-t tagline' option, unless tagline is empty, to the set of options passed to the md2html.sh tool
# #
if [[ -n $TAGLINE ]]; then if [[ -n $TAGLINE ]]; then
@@ -402,16 +392,19 @@ if [[ -n $TAGLINE ]]; then
TOOL_OPTION+=("$TAGLINE") TOOL_OPTION+=("$TAGLINE")
fi fi
# always add the '-U URL' for the top level location.html file # always add the '-U URL' for the top level location.html file
# #
TOOL_OPTION+=("-U") TOOL_OPTION+=("-U")
TOOL_OPTION+=("$SITE_URL/years.html") TOOL_OPTION+=("$SITE_URL/years.html")
# always add the '-D docroot/' for the top level location.html file # always add the '-D docroot/' for the top level location.html file
# #
TOOL_OPTION+=("-D") TOOL_OPTION+=("-D")
TOOL_OPTION+=("$DOCROOT_SLASH") TOOL_OPTION+=("$DOCROOT_SLASH")
# verify that we have a topdir directory # verify that we have a topdir directory
# #
REPO_NAME=$(basename "$REPO_TOP_URL") REPO_NAME=$(basename "$REPO_TOP_URL")
@@ -432,6 +425,7 @@ if [[ ! -d $TOPDIR ]]; then
exit 6 exit 6
fi fi
# cd to topdir # cd to topdir
# #
if [[ ! -e $TOPDIR ]]; then if [[ ! -e $TOPDIR ]]; then
@@ -455,6 +449,7 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2 echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2
fi fi
# verify that we have a bin subdirectory # verify that we have a bin subdirectory
# #
export BIN_PATH="$TOPDIR/bin" export BIN_PATH="$TOPDIR/bin"
@@ -464,6 +459,58 @@ if [[ ! -d $BIN_PATH ]]; then
fi fi
export BIN_DIR="bin" export BIN_DIR="bin"
# verify that the bin/md2html.sh tool is executable
#
export MD2HTML_SH="$BIN_DIR/md2html.sh"
if [[ ! -e $MD2HTML_SH ]]; then
echo "$0: ERROR: bin/md2html.sh does not exist: $MD2HTML_SH" 1>&2
exit 5
fi
if [[ ! -f $MD2HTML_SH ]]; then
echo "$0: ERROR: bin/md2html.sh is not a regular file: $MD2HTML_SH" 1>&2
exit 5
fi
if [[ ! -x $MD2HTML_SH ]]; then
echo "$0: ERROR: bin/md2html.sh is not an executable file: $MD2HTML_SH" 1>&2
exit 5
fi
# verify that the bin/pandoc-wrapper.sh tool is executable
#
export PANDOC_WRAPPER="$BIN_DIR/pandoc-wrapper.sh"
if [[ ! -e $PANDOC_WRAPPER ]]; then
echo "$0: ERROR: bin/md2html.sh does not exist: $PANDOC_WRAPPER" 1>&2
exit 5
fi
if [[ ! -f $PANDOC_WRAPPER ]]; then
echo "$0: ERROR: bin/md2html.sh is not a regular file: $PANDOC_WRAPPER" 1>&2
exit 5
fi
if [[ ! -x $PANDOC_WRAPPER ]]; then
echo "$0: ERROR: bin/md2html.sh is not an executable file: $PANDOC_WRAPPER" 1>&2
exit 5
fi
# verify that the bin/jval-wrapper.sh tool is executable
#
JVAL_WRAPPER="$BIN_DIR/jval-wrapper.sh"
if [[ ! -e $JVAL_WRAPPER ]]; then
echo "$0: ERROR: bin/jval-wrapper.sh does not exist: $JVAL_WRAPPER" 1>&2
exit 5
fi
if [[ ! -f $JVAL_WRAPPER ]]; then
echo "$0: ERROR: bin/jval-wrapper.sh is not a regular file: $JVAL_WRAPPER" 1>&2
exit 5
fi
if [[ ! -x $JVAL_WRAPPER ]]; then
echo "$0: ERROR: bin/jval-wrapper.sh is not an executable file: $JVAL_WRAPPER" 1>&2
exit 5
fi
# verify we have a non-empty readable .top file # verify we have a non-empty readable .top file
# #
export TOP_FILE=".top" export TOP_FILE=".top"
@@ -484,6 +531,7 @@ if [[ ! -s $TOP_FILE ]]; then
exit 6 exit 6
fi fi
# verify that the md2html tool is executable # verify that the md2html tool is executable
# #
if [[ ! -e $MD2HTML_SH ]]; then if [[ ! -e $MD2HTML_SH ]]; then
@@ -499,10 +547,12 @@ if [[ ! -x $MD2HTML_SH ]]; then
exit 5 exit 5
fi fi
# note years.html file # note years.html file
# #
export YEARS_HTML="years.html" export YEARS_HTML="years.html"
# print running info if verbose # print running info if verbose
# #
# If -v 3 or higher, print exported variables in order that they were exported. # If -v 3 or higher, print exported variables in order that they were exported.
@@ -517,8 +567,6 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: FMT_TOOL=$FMT_TOOL" 1>&2 echo "$0: debug[3]: FMT_TOOL=$FMT_TOOL" 1>&2
echo "$0: debug[3]: DOCROOT_SLASH=$DOCROOT_SLASH" 1>&2 echo "$0: debug[3]: DOCROOT_SLASH=$DOCROOT_SLASH" 1>&2
echo "$0: debug[3]: TAGLINE=$TAGLINE" 1>&2 echo "$0: debug[3]: TAGLINE=$TAGLINE" 1>&2
echo "$0: debug[3]: MD2HTML_SH=$MD2HTML_SH" 1>&2
echo "$0: debug[3]: PANDOC_WRAPPER=$PANDOC_WRAPPER" 1>&2
echo "$0: debug[3]: REPO_TOP_URL=$REPO_TOP_URL" 1>&2 echo "$0: debug[3]: REPO_TOP_URL=$REPO_TOP_URL" 1>&2
echo "$0: debug[3]: REPO_URL=$REPO_URL" 1>&2 echo "$0: debug[3]: REPO_URL=$REPO_URL" 1>&2
echo "$0: debug[3]: SITE_URL=$SITE_URL" 1>&2 echo "$0: debug[3]: SITE_URL=$SITE_URL" 1>&2
@@ -532,10 +580,14 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: CD_FAILED=$CD_FAILED" 1>&2 echo "$0: debug[3]: CD_FAILED=$CD_FAILED" 1>&2
echo "$0: debug[3]: BIN_PATH=$BIN_PATH" 1>&2 echo "$0: debug[3]: BIN_PATH=$BIN_PATH" 1>&2
echo "$0: debug[3]: BIN_DIR=$BIN_DIR" 1>&2 echo "$0: debug[3]: BIN_DIR=$BIN_DIR" 1>&2
echo "$0: debug[3]: MD2HTML_SH=$MD2HTML_SH" 1>&2
echo "$0: debug[3]: PANDOC_WRAPPER=$PANDOC_WRAPPER" 1>&2
echo "$0: debug[3]: JVAL_WRAPPER=$JVAL_WRAPPER" 1>&2
echo "$0: debug[3]: TOP_FILE=$TOP_FILE" 1>&2 echo "$0: debug[3]: TOP_FILE=$TOP_FILE" 1>&2
echo "$0: debug[3]: YEARS_HTML=$YEARS_HTML" 1>&2 echo "$0: debug[3]: YEARS_HTML=$YEARS_HTML" 1>&2
fi fi
# -N stops early before any processing is performed # -N stops early before any processing is performed
# #
if [[ -n $DO_NOT_PROCESS ]]; then if [[ -n $DO_NOT_PROCESS ]]; then
@@ -545,6 +597,7 @@ if [[ -n $DO_NOT_PROCESS ]]; then
exit 0 exit 0
fi fi
# create a temporary years markdown file # create a temporary years markdown file
# #
export TMP_YEARS_MD=".tmp.$NAME.YEARS_MD.$$.tmp" export TMP_YEARS_MD=".tmp.$NAME.YEARS_MD.$$.tmp"
@@ -567,6 +620,7 @@ elif [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: because of -n, temporary years markdown file is not used: $TMP_YEARS_MD" 1>&2 echo "$0: debug[3]: because of -n, temporary years markdown file is not used: $TMP_YEARS_MD" 1>&2
fi fi
# write All IOCCC years markdown data # write All IOCCC years markdown data
# #
{ {
@@ -851,6 +905,7 @@ for YYYY in $("$TAC_TOOL" "$TOP_FILE"); do
((--YEAR_COUNT)) ((--YEAR_COUNT))
done done
# write year_level links to all the year level tarballs # write year_level links to all the year level tarballs
# #
{ {
@@ -874,6 +929,7 @@ else
fi fi
fi fi
# use the md2html.sh tool to form a location HTML file, unless -n # use the md2html.sh tool to form a location HTML file, unless -n
# #
if [[ -z $NOOP ]]; then if [[ -z $NOOP ]]; then
@@ -897,6 +953,7 @@ elif [[ $V_FLAG -ge 5 ]]; then
echo "$0: debug[5]: because of -n, did not run: $MD2HTML_SH ${TOOL_OPTION[*]} -- years.md $TMP_YEARS_MD $YEARS_HTML" 1>&2 echo "$0: debug[5]: because of -n, did not run: $MD2HTML_SH ${TOOL_OPTION[*]} -- years.md $TMP_YEARS_MD $YEARS_HTML" 1>&2
fi fi
# file cleanup # file cleanup
# #
if [[ -z $NOOP ]]; then if [[ -z $NOOP ]]; then
@@ -905,6 +962,7 @@ elif [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: because of -n, disabled: rm -f -- $TMP_YEARS_MD" 1>&2 echo "$0: debug[3]: because of -n, disabled: rm -f -- $TMP_YEARS_MD" 1>&2
fi fi
# All Done!!! All Done!!! -- Jessica Noll, Age 2 # All Done!!! All Done!!! -- Jessica Noll, Age 2
# #
if [[ $EXIT_CODE -ne 0 ]]; then if [[ $EXIT_CODE -ne 0 ]]; then
+7 -1
View File
@@ -35,6 +35,7 @@
# #
# Share and enjoy! :-) # Share and enjoy! :-)
# firewall - run only with a bash that is version 5.1.8 or later # firewall - run only with a bash that is version 5.1.8 or later
# #
# The "/usr/bin/env bash" command must result in using a bash that # The "/usr/bin/env bash" command must result in using a bash that
@@ -78,6 +79,7 @@ if [[ -z ${BASH_VERSINFO[0]} ||
exit 4 exit 4
fi fi
# setup bash file matching # setup bash file matching
# #
# We must declare arrays with -ag or -Ag, and we need loops to "export" modified variables. # We must declare arrays with -ag or -Ag, and we need loops to "export" modified variables.
@@ -90,6 +92,7 @@ shopt -u nocaseglob # disable strict case matching
shopt -u extglob # enable extended globbing patterns shopt -u extglob # enable extended globbing patterns
shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories
# set variables referenced in the usage message # set variables referenced in the usage message
# #
export VERSION="1.0.2 2024-08-08" export VERSION="1.0.2 2024-08-08"
@@ -100,6 +103,7 @@ export V_FLAG=0
JPARSE_TOOL=$(type -P jparse) JPARSE_TOOL=$(type -P jparse)
export JPARSE_TOOL export JPARSE_TOOL
# Until we have a true jfmt tool, we will use the modified JSONPath.sh # Until we have a true jfmt tool, we will use the modified JSONPath.sh
# #
# XXX - XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX - XXX # XXX - XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX - XXX
@@ -153,11 +157,13 @@ Exit codes:
$NAME version: $VERSION" $NAME version: $VERSION"
# setup # setup
# #
export NOOP= export NOOP=
export DO_NOT_PROCESS= export DO_NOT_PROCESS=
# parse command line # parse command line
# #
while getopts :hv:VnNj: flag; do while getopts :hv:VnNj: flag; do
@@ -193,7 +199,7 @@ while getopts :hv:VnNj: flag; do
;; ;;
esac esac
done done
#
# parse the command line arguments # parse the command line arguments
# #
if [[ $V_FLAG -ge 1 ]]; then if [[ $V_FLAG -ge 1 ]]; then
+8 -1
View File
@@ -32,6 +32,7 @@
# #
# Share and enjoy! :-) # Share and enjoy! :-)
# firewall - run only with a bash that is version 5.1.8 or later # firewall - run only with a bash that is version 5.1.8 or later
# #
# The "/usr/bin/env bash" command must result in using a bash that # The "/usr/bin/env bash" command must result in using a bash that
@@ -75,6 +76,7 @@ if [[ -z ${BASH_VERSINFO[0]} ||
exit 4 exit 4
fi fi
# setup bash file matching # setup bash file matching
# #
# We must declare arrays with -ag or -Ag, and we need loops to "export" modified variables. # We must declare arrays with -ag or -Ag, and we need loops to "export" modified variables.
@@ -87,6 +89,7 @@ shopt -u nocaseglob # disable strict case matching
shopt -u extglob # enable extended globbing patterns shopt -u extglob # enable extended globbing patterns
shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories
# set variables referenced in the usage message # set variables referenced in the usage message
# #
export VERSION="1.0.2 2024-08-08" export VERSION="1.0.2 2024-08-08"
@@ -94,6 +97,7 @@ NAME=$(basename "$0")
export NAME export NAME
export V_FLAG=0 export V_FLAG=0
# Until we have a true jprint tool, we will use the modified JSONPath.sh # Until we have a true jprint tool, we will use the modified JSONPath.sh
# #
# BTW: A jprint tool might be a special case of a jfmt tool, with a command line # BTW: A jprint tool might be a special case of a jfmt tool, with a command line
@@ -121,6 +125,7 @@ if ! "$JSONPATH_SH" -S -A -T -p >/dev/null 2>&1; then
exit 5 exit 5
fi <<< "$FIZZBIN_JSON" fi <<< "$FIZZBIN_JSON"
# set usage message # set usage message
# #
export USAGE="usage: $0 [-h] [-v level] [-V] [-n] [-N] [-j JSONPath.sh] [file.json] export USAGE="usage: $0 [-h] [-v level] [-V] [-n] [-N] [-j JSONPath.sh] [file.json]
@@ -148,11 +153,13 @@ Exit codes:
$NAME version: $VERSION" $NAME version: $VERSION"
# setup # setup
# #
export NOOP= export NOOP=
export DO_NOT_PROCESS= export DO_NOT_PROCESS=
# parse command line # parse command line
# #
while getopts :hv:VnNj: flag; do while getopts :hv:VnNj: flag; do
@@ -188,7 +195,7 @@ while getopts :hv:VnNj: flag; do
;; ;;
esac esac
done done
#
# parse the command line arguments # parse the command line arguments
# #
if [[ $V_FLAG -ge 1 ]]; then if [[ $V_FLAG -ge 1 ]]; then
+9 -1
View File
@@ -46,6 +46,7 @@
# #
# Share and enjoy! :-) # Share and enjoy! :-)
# firewall - run only with a bash that is version 5.1.8 or later # firewall - run only with a bash that is version 5.1.8 or later
# #
# The "/usr/bin/env bash" command must result in using a bash that # The "/usr/bin/env bash" command must result in using a bash that
@@ -89,6 +90,7 @@ if [[ -z ${BASH_VERSINFO[0]} ||
exit 4 exit 4
fi fi
# setup bash file matching # setup bash file matching
# #
# We must declare arrays with -ag or -Ag, and we need loops to "export" modified variables. # We must declare arrays with -ag or -Ag, and we need loops to "export" modified variables.
@@ -101,6 +103,7 @@ shopt -u nocaseglob # disable strict case matching
shopt -u extglob # enable extended globbing patterns shopt -u extglob # enable extended globbing patterns
shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories
# set variables referenced in the usage message # set variables referenced in the usage message
# #
export VERSION="1.0.3 2024-08-11" export VERSION="1.0.3 2024-08-11"
@@ -108,6 +111,7 @@ NAME=$(basename "$0")
export NAME export NAME
export V_FLAG=0 export V_FLAG=0
# Until we have a true jval tool, we will use the modified JSONPath.sh # Until we have a true jval tool, we will use the modified JSONPath.sh
# #
# XXX - XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX - XXX # XXX - XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX - XXX
@@ -137,6 +141,7 @@ export PATTERN='$*'
unset OPTION unset OPTION
declare -ag OPTION declare -ag OPTION
# set usage message # set usage message
# #
export USAGE="usage: $0 [-h] [-v level] [-V] [-n] [-N] export USAGE="usage: $0 [-h] [-v level] [-V] [-n] [-N]
@@ -172,11 +177,13 @@ Exit codes:
$NAME version: $VERSION" $NAME version: $VERSION"
# setup # setup
# #
export NOOP= export NOOP=
export DO_NOT_PROCESS= export DO_NOT_PROCESS=
# parse command line # parse command line
# #
while getopts :hv:VnNwbiuj: flag; do while getopts :hv:VnNwbiuj: flag; do
@@ -220,7 +227,7 @@ while getopts :hv:VnNwbiuj: flag; do
;; ;;
esac esac
done done
#
# parse the command line arguments # parse the command line arguments
# #
if [[ $V_FLAG -ge 1 ]]; then if [[ $V_FLAG -ge 1 ]]; then
@@ -281,6 +288,7 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: PATTERN=$PATTERN" 1>&2 echo "$0: debug[3]: PATTERN=$PATTERN" 1>&2
fi fi
# -N stops early before any processing is performed # -N stops early before any processing is performed
# #
if [[ -n $DO_NOT_PROCESS ]]; then if [[ -n $DO_NOT_PROCESS ]]; then
+200 -134
View File
@@ -78,6 +78,7 @@
# #
# Share and enjoy! :-) # Share and enjoy! :-)
# firewall - run only with a bash that is version 5.1.8 or later # firewall - run only with a bash that is version 5.1.8 or later
# #
# The "/usr/bin/env bash" command must result in using a bash that # The "/usr/bin/env bash" command must result in using a bash that
@@ -121,6 +122,7 @@ if [[ -z ${BASH_VERSINFO[0]} ||
exit 4 exit 4
fi fi
# setup bash file matching # setup bash file matching
# #
# We must declare arrays with -ag or -Ag, and we need loops to "export" modified variables. # We must declare arrays with -ag or -Ag, and we need loops to "export" modified variables.
@@ -133,15 +135,17 @@ shopt -u nocaseglob # disable strict case matching
shopt -u extglob # enable extended globbing patterns shopt -u extglob # enable extended globbing patterns
shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories
# other required bash options # other required bash options
# #
# Requires bash with a version 4.2 or later # Requires bash with a version 4.2 or later
# #
shopt -s lastpipe # run last command of a pipeline not executed in the background in the current shell environment shopt -s lastpipe # run last command of a pipeline not executed in the background in the current shell environment
# set variables referenced in the usage message # set variables referenced in the usage message
# #
export VERSION="1.5.5 2024-08-05" export VERSION="1.6 2024-08-17"
NAME=$(basename "$0") NAME=$(basename "$0")
export NAME export NAME
export V_FLAG=0 export V_FLAG=0
@@ -164,18 +168,18 @@ if [[ -z "$PERL_TOOL" ]]; then
fi fi
export TOPDIR export TOPDIR
export DOCROOT_SLASH="./" export DOCROOT_SLASH="./"
export PANDOC_WRAPPER="bin/pandoc-wrapper.sh"
export REPO_TOP_URL="https://github.com/ioccc-src/temp-test-ioccc" export REPO_TOP_URL="https://github.com/ioccc-src/temp-test-ioccc"
# GitHub puts individual files under the "blob/master" sub-directory. # GitHub puts individual files under the "blob/master" sub-directory.
export REPO_URL="$REPO_TOP_URL/blob/master" export REPO_URL="$REPO_TOP_URL/blob/master"
export SITE_URL="https://ioccc-src.github.io/temp-test-ioccc" export SITE_URL="https://ioccc-src.github.io/temp-test-ioccc"
export URL="#" export URL="#"
# set usage message # set usage message
# #
export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N] export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N]
[-c md2html.cfg] [-H phase=name ..] [-t tagline] [-c md2html.cfg] [-H phase=name ..] [-t tagline]
[-b tool] [-p tool] [-a tool] [-b tool] [-a tool]
[-s token=value ..] [-S] [-o tool ..] [-s token=value ..] [-S] [-o tool ..]
[-U url] [-w site_url] [-m mdtag] [-e string ..] [-E exitcode] [-U url] [-w site_url] [-m mdtag] [-e string ..] [-E exitcode]
[match.md] input.md output.html [match.md] input.md output.html
@@ -208,10 +212,6 @@ export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N]
-b tool run 'before tool' during HTML phase number 20 (def: do not output before pandoc wrapper tool) -b tool run 'before tool' during HTML phase number 20 (def: do not output before pandoc wrapper tool)
-b . skip HTML phase number 20 (def: do nothing during HTML phase number 20) -b . skip HTML phase number 20 (def: do nothing during HTML phase number 20)
-p tool run 'pandoc wrapper tool' (not pandoc path) during HTML phase number 21 (def: use $PANDOC_WRAPPER)
-p . skip HTML phase number 21 (def: do nothing during HTML phase number 21)
NOTE: The '-p tool' will be passed as leading options on the -b tool and -a tool command lines.
-a tool run 'after tool' during HTML phase number 20 (def: do not output after pandoc wrapper tool) -a tool run 'after tool' during HTML phase number 20 (def: do not output after pandoc wrapper tool)
-a . skip HTML phase number 22 (def: do nothing during HTML phase number 22) -a . skip HTML phase number 22 (def: do nothing during HTML phase number 22)
@@ -256,10 +256,12 @@ Exit codes:
$NAME version: $VERSION" $NAME version: $VERSION"
################################## ##################################
# command line parsing functions # # command line parsing functions #
################################## ##################################
# global_variable_setup - setup global variables # global_variable_setup - setup global variables
# #
# Call this once at the start of the shell script. # Call this once at the start of the shell script.
@@ -338,7 +340,7 @@ function global_variable_setup
unset PHASE_NAME unset PHASE_NAME
declare -ag PHASE_NAME declare -ag PHASE_NAME
PHASE_NAME=(top head body topbar header navbar before-content PHASE_NAME=(top head body topbar header navbar before-content
after-content footer bottom) after-content footer bottom)
unset HTML_PHASE_NAME unset HTML_PHASE_NAME
declare -Ag HTML_PHASE_NAME declare -Ag HTML_PHASE_NAME
for n in "${PHASE_NAME[@]}"; do for n in "${PHASE_NAME[@]}"; do
@@ -351,6 +353,7 @@ function global_variable_setup
return 0 return 0
} }
# print_usage - print the usage message, exit code and version information # print_usage - print the usage message, exit code and version information
# #
# Call this to print the usage message, by default to stdout. # Call this to print the usage message, by default to stdout.
@@ -366,6 +369,7 @@ function print_usage
return 0 return 0
} }
# parse_command_line - parse command line arguments # parse_command_line - parse command line arguments
# #
# You MUST call this function at least once AND after calling global_variable_setup. # You MUST call this function at least once AND after calling global_variable_setup.
@@ -412,7 +416,7 @@ function parse_command_line
# parse command line # parse command line
# #
while getopts :hv:VnNd:D:c:H:t:m:b:p:a:s:So:U:w:e:E: flag; do while getopts :hv:VnNd:D:c:H:t:m:b:a:s:So:U:w:e:E: flag; do
case "$flag" in case "$flag" in
h) print_usage 1>&2 h) print_usage 1>&2
exit 2 exit 2
@@ -546,7 +550,7 @@ function parse_command_line
;; ;;
m) MDTAG="$OPTARG" m) MDTAG="$OPTARG"
;; ;;
b) # parse: -p tool b) # parse: -b tool
if [[ $OPTARG == . ]]; then if [[ $OPTARG == . ]]; then
# unset before tool # unset before tool
BEFORE_TOOL= BEFORE_TOOL=
@@ -555,19 +559,6 @@ function parse_command_line
BEFORE_TOOL="$OPTARG" BEFORE_TOOL="$OPTARG"
fi fi
;; ;;
p) # parse -p tool
if [[ $OPTARG == . ]]; then
# unset pandoc wrapper tool
PANDOC_WRAPPER=
else
# change pandoc wrapper tool
PANDOC_WRAPPER="$OPTARG"
fi
B_OPTION+=("-p")
B_OPTION+=("$PANDOC_WRAPPER")
A_OPTION+=("-p")
A_OPTION+=("$PANDOC_WRAPPER")
;;
a) # parse: -a tool a) # parse: -a tool
if [[ $OPTARG == . ]]; then if [[ $OPTARG == . ]]; then
# unset after tool # unset after tool
@@ -678,6 +669,7 @@ function parse_command_line
return 0 return 0
} }
# debug_parameters - if verbose enough, print parameters # debug_parameters - if verbose enough, print parameters
# #
# usage: # usage:
@@ -716,7 +708,6 @@ function debug_parameters
echo "$0: debug[$DEBUG_LEVEL]: $DBG_PREFIX: PERL_TOOL=$PERL_TOOL" 1>&2 echo "$0: debug[$DEBUG_LEVEL]: $DBG_PREFIX: PERL_TOOL=$PERL_TOOL" 1>&2
echo "$0: debug[$DEBUG_LEVEL]: $DBG_PREFIX: TOPDIR=$TOPDIR" 1>&2 echo "$0: debug[$DEBUG_LEVEL]: $DBG_PREFIX: TOPDIR=$TOPDIR" 1>&2
echo "$0: debug[$DEBUG_LEVEL]: $DBG_PREFIX: DOCROOT_SLASH=$DOCROOT_SLASH" 1>&2 echo "$0: debug[$DEBUG_LEVEL]: $DBG_PREFIX: DOCROOT_SLASH=$DOCROOT_SLASH" 1>&2
echo "$0: debug[$DEBUG_LEVEL]: $DBG_PREFIX: PANDOC_WRAPPER=$PANDOC_WRAPPER" 1>&2
echo "$0: debug[$DEBUG_LEVEL]: $DBG_PREFIX: REPO_TOP_URL=$REPO_TOP_URL" 1>&2 echo "$0: debug[$DEBUG_LEVEL]: $DBG_PREFIX: REPO_TOP_URL=$REPO_TOP_URL" 1>&2
echo "$0: debug[$DEBUG_LEVEL]: $DBG_PREFIX: REPO_URL=$REPO_URL" 1>&2 echo "$0: debug[$DEBUG_LEVEL]: $DBG_PREFIX: REPO_URL=$REPO_URL" 1>&2
echo "$0: debug[$DEBUG_LEVEL]: $DBG_PREFIX: SITE_URL=$SITE_URL" 1>&2 echo "$0: debug[$DEBUG_LEVEL]: $DBG_PREFIX: SITE_URL=$SITE_URL" 1>&2
@@ -766,10 +757,12 @@ function debug_parameters
return 0 return 0
} }
################################# #################################
# md2html.cfg related functions # # md2html.cfg related functions #
################################# #################################
# match_md2html - first file_glob match for md2html.cfg file # match_md2html - first file_glob match for md2html.cfg file
# #
# usage: # usage:
@@ -897,10 +890,12 @@ function match_md2html
return 1 return 1
} }
################################ ################################
# HTML phase related functions # # HTML phase related functions #
################################ ################################
# append_html_phase - append a sed modified HTML phase file to a growing temporary HTML file # append_html_phase - append a sed modified HTML phase file to a growing temporary HTML file
# #
# usage: # usage:
@@ -1033,24 +1028,30 @@ function append_html_phase
return 0 return 0
} }
################################### ###################################
# required initial variable setup # # required initial variable setup #
################################### ###################################
global_variable_setup global_variable_setup
################## ##################
# getopt phase 0 # # getopt phase 0 #
################## ##################
# set getopt phase to 0 # set getopt phase to 0
# #
GETOPT_PHASE=0 GETOPT_PHASE=0
# process command line options # process command line options
# #
parse_command_line "$@" parse_command_line "$@"
# parse the command line arguments # parse the command line arguments
# #
if [[ $V_FLAG -ge 3 ]]; then if [[ $V_FLAG -ge 3 ]]; then
@@ -1088,6 +1089,7 @@ if [[ $MATCH_MD == - ]]; then
exit 3 exit 3
fi fi
# determine working directory # determine working directory
# #
# We will use the dirname of match.md as our working directory. This is path from # We will use the dirname of match.md as our working directory. This is path from
@@ -1099,6 +1101,7 @@ fi
WORKING_DIR=$(dirname "$MATCH_MD") WORKING_DIR=$(dirname "$MATCH_MD")
export WORKING_DIR export WORKING_DIR
# verify that we have a topdir directory # verify that we have a topdir directory
# #
REPO_NAME=$(basename "$REPO_TOP_URL") REPO_NAME=$(basename "$REPO_TOP_URL")
@@ -1119,6 +1122,7 @@ if [[ ! -d $TOPDIR ]]; then
exit 6 exit 6
fi fi
# cd to topdir # cd to topdir
# #
if [[ ! -e $TOPDIR ]]; then if [[ ! -e $TOPDIR ]]; then
@@ -1142,14 +1146,6 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2 echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2
fi fi
# verify that we have an inc subdirectory
#
export INC_PATH="$TOPDIR/inc"
if [[ ! -d $INC_PATH ]]; then
echo "$0: ERROR: inc is not a directory under topdir: $INC_PATH" 1>&2
exit 6
fi
export INC_DIR="inc"
# verify that we have a bin subdirectory # verify that we have a bin subdirectory
# #
@@ -1161,6 +1157,33 @@ fi
export BIN_DIR="bin" export BIN_DIR="bin"
# verify that the bin/pandoc-wrapper.sh tool is executable
#
export PANDOC_WRAPPER="$BIN_DIR/pandoc-wrapper.sh"
if [[ ! -e $PANDOC_WRAPPER ]]; then
echo "$0: ERROR: bin/md2html.sh does not exist: $PANDOC_WRAPPER" 1>&2
exit 5
fi
if [[ ! -f $PANDOC_WRAPPER ]]; then
echo "$0: ERROR: bin/md2html.sh is not a regular file: $PANDOC_WRAPPER" 1>&2
exit 5
fi
if [[ ! -x $PANDOC_WRAPPER ]]; then
echo "$0: ERROR: bin/md2html.sh is not an executable file: $PANDOC_WRAPPER" 1>&2
exit 5
fi
# verify that we have an inc subdirectory
#
export INC_PATH="$TOPDIR/inc"
if [[ ! -d $INC_PATH ]]; then
echo "$0: ERROR: inc is not a directory under topdir: $INC_PATH" 1>&2
exit 6
fi
export INC_DIR="inc"
# verify that we have a readable .top file # verify that we have a readable .top file
# #
export TOP="$TOPDIR/.top" export TOP="$TOPDIR/.top"
@@ -1177,6 +1200,7 @@ if [[ ! -r $TOP ]]; then
exit 6 exit 6
fi fi
# verify we have a readable md2html.cfg file # verify we have a readable md2html.cfg file
# #
if [[ -z $MD2HTML_CFG ]]; then if [[ -z $MD2HTML_CFG ]]; then
@@ -1195,6 +1219,7 @@ if [[ ! -r $MD2HTML_CFG ]]; then
exit 5 exit 5
fi fi
# new parameter debugging # new parameter debugging
# #
debug_parameters 5 "after parse in getopt phase: $GETOPT_PHASE" debug_parameters 5 "after parse in getopt phase: $GETOPT_PHASE"
@@ -1203,10 +1228,12 @@ if [[ $V_FLAG -ge 5 ]]; then
echo "$0: debug[5]: end getopt phase ${GETOPT_PHASE} debug level: $V_FLAG" 1>&2 echo "$0: debug[5]: end getopt phase ${GETOPT_PHASE} debug level: $V_FLAG" 1>&2
fi fi
################## ##################
# getopt phase 1 # # getopt phase 1 #
################## ##################
# set getopt phase to 1 # set getopt phase to 1
# #
GETOPT_PHASE=1 GETOPT_PHASE=1
@@ -1215,6 +1242,7 @@ if [[ $V_FLAG -ge 5 ]]; then
echo "$0: debug[5]: begin getopt phase ${GETOPT_PHASE} debug level: $V_FLAG" 1>&2 echo "$0: debug[5]: begin getopt phase ${GETOPT_PHASE} debug level: $V_FLAG" 1>&2
fi fi
# run output tools and parse output as more options # run output tools and parse output as more options
# #
# report output tools and output tool options # report output tools and output tool options
@@ -1224,6 +1252,7 @@ if [[ $V_FLAG -ge 5 ]]; then
done done
fi fi
# verify output tools are executable # verify output tools are executable
# #
for n in "${!OUTPUT_TOOL[@]}"; do for n in "${!OUTPUT_TOOL[@]}"; do
@@ -1242,6 +1271,7 @@ for n in "${!OUTPUT_TOOL[@]}"; do
fi fi
done done
# pre-clear our output tool options array # pre-clear our output tool options array
# #
# NOTE: The OUTPUT_TOOL_OPTIONS array contains the options that an "output tool" produces. # NOTE: The OUTPUT_TOOL_OPTIONS array contains the options that an "output tool" produces.
@@ -1250,6 +1280,7 @@ done
unset OUTPUT_TOOL_OPTIONS unset OUTPUT_TOOL_OPTIONS
declare -ag OUTPUT_TOOL_OPTIONS declare -ag OUTPUT_TOOL_OPTIONS
# execute each output tool and parse the output tool's options and arguments # execute each output tool and parse the output tool's options and arguments
# #
for n in "${!OUTPUT_TOOL[@]}"; do for n in "${!OUTPUT_TOOL[@]}"; do
@@ -1272,6 +1303,7 @@ for n in "${!OUTPUT_TOOL[@]}"; do
done done
done done
# process command line arguments from all output tools # process command line arguments from all output tools
# #
if [[ ${#OUTPUT_TOOL_OPTIONS[@]} -gt 0 ]]; then if [[ ${#OUTPUT_TOOL_OPTIONS[@]} -gt 0 ]]; then
@@ -1286,6 +1318,7 @@ fi
# #
debug_parameters 5 "after parse in getopt phase: $GETOPT_PHASE" debug_parameters 5 "after parse in getopt phase: $GETOPT_PHASE"
# clear output tools and output tool options # clear output tools and output tool options
# #
unset OUTPUT_TOOL unset OUTPUT_TOOL
@@ -1297,10 +1330,12 @@ if [[ $V_FLAG -ge 5 ]]; then
echo "$0: debug[5]: end getopt phase ${GETOPT_PHASE} debug level: $V_FLAG" 1>&2 echo "$0: debug[5]: end getopt phase ${GETOPT_PHASE} debug level: $V_FLAG" 1>&2
fi fi
################## ##################
# getopt phase 2 # # getopt phase 2 #
################## ##################
# set getopt phase to 2 # set getopt phase to 2
# #
GETOPT_PHASE=2 GETOPT_PHASE=2
@@ -1309,11 +1344,13 @@ if [[ $V_FLAG -ge 5 ]]; then
echo "$0: debug[5]: begin getopt phase ${GETOPT_PHASE} debug level: $V_FLAG" 1>&2 echo "$0: debug[5]: begin getopt phase ${GETOPT_PHASE} debug level: $V_FLAG" 1>&2
fi fi
# setup an empty MATCH_OPTIONS array for match_md2html to append options # setup an empty MATCH_OPTIONS array for match_md2html to append options
# #
unset MATCH_OPTIONS unset MATCH_OPTIONS
declare -ag MATCH_OPTIONS declare -ag MATCH_OPTIONS
# find the first match md2html.cfg for the 'match.md' argument # find the first match md2html.cfg for the 'match.md' argument
# #
match_md2html "$MD2HTML_CFG" "$MATCH_MD" match_md2html "$MD2HTML_CFG" "$MATCH_MD"
@@ -1323,6 +1360,7 @@ status="$?"
if [[ $status -ne 0 ]]; then if [[ $status -ne 0 ]]; then
echo "$0: Warning: $MATCH_MD does not match any lines in: $MD2HTML_CFG, match_md2html return code: $status" 1>&2 echo "$0: Warning: $MATCH_MD does not match any lines in: $MD2HTML_CFG, match_md2html return code: $status" 1>&2
# case: MATCH_MD matched and command line options were appended to MATCH_OPTIONS # case: MATCH_MD matched and command line options were appended to MATCH_OPTIONS
# #
elif [[ ${#MATCH_OPTIONS[@]} -gt 0 ]]; then elif [[ ${#MATCH_OPTIONS[@]} -gt 0 ]]; then
@@ -1341,6 +1379,7 @@ elif [[ ${#MATCH_OPTIONS[@]} -gt 0 ]]; then
# #
parse_command_line "${MATCH_OPTIONS[@]}" parse_command_line "${MATCH_OPTIONS[@]}"
# case: MATCH_MD matched and no command line options found # case: MATCH_MD matched and no command line options found
# #
elif [[ $V_FLAG -ge 5 ]]; then elif [[ $V_FLAG -ge 5 ]]; then
@@ -1353,10 +1392,12 @@ if [[ $V_FLAG -ge 5 ]]; then
echo "$0: debug[5]: end getopt phase ${GETOPT_PHASE} debug level: $V_FLAG" 1>&2 echo "$0: debug[5]: end getopt phase ${GETOPT_PHASE} debug level: $V_FLAG" 1>&2
fi fi
################## ##################
# getopt phase 3 # # getopt phase 3 #
################## ##################
# set getopt phase to 3 # set getopt phase to 3
# #
GETOPT_PHASE=3 GETOPT_PHASE=3
@@ -1365,6 +1406,7 @@ if [[ $V_FLAG -ge 5 ]]; then
echo "$0: debug[5]: begin getopt phase ${GETOPT_PHASE} debug level: $V_FLAG" 1>&2 echo "$0: debug[5]: begin getopt phase ${GETOPT_PHASE} debug level: $V_FLAG" 1>&2
fi fi
# run output tools and parse output as more options # run output tools and parse output as more options
# #
# report output tools and output tool options # report output tools and output tool options
@@ -1374,6 +1416,7 @@ if [[ $V_FLAG -ge 5 ]]; then
done done
fi fi
# verify output tools are executable # verify output tools are executable
# #
for n in "${!OUTPUT_TOOL[@]}"; do for n in "${!OUTPUT_TOOL[@]}"; do
@@ -1392,6 +1435,7 @@ for n in "${!OUTPUT_TOOL[@]}"; do
fi fi
done done
# pre-clear our output tool options array # pre-clear our output tool options array
# #
# NOTE: The OUTPUT_TOOL_OPTIONS array contains the options that an "output tool" produces. # NOTE: The OUTPUT_TOOL_OPTIONS array contains the options that an "output tool" produces.
@@ -1400,6 +1444,7 @@ done
unset OUTPUT_TOOL_OPTIONS unset OUTPUT_TOOL_OPTIONS
declare -ag OUTPUT_TOOL_OPTIONS declare -ag OUTPUT_TOOL_OPTIONS
# execute each output tool and parse the output tool's options and arguments # execute each output tool and parse the output tool's options and arguments
# #
for n in "${!OUTPUT_TOOL[@]}"; do for n in "${!OUTPUT_TOOL[@]}"; do
@@ -1422,6 +1467,7 @@ for n in "${!OUTPUT_TOOL[@]}"; do
done done
done done
# process command line arguments from all output tools # process command line arguments from all output tools
# #
if [[ ${#OUTPUT_TOOL_OPTIONS[@]} -gt 0 ]]; then if [[ ${#OUTPUT_TOOL_OPTIONS[@]} -gt 0 ]]; then
@@ -1436,6 +1482,7 @@ fi
# #
debug_parameters 5 "after parse in getopt phase: $GETOPT_PHASE" debug_parameters 5 "after parse in getopt phase: $GETOPT_PHASE"
# clear output tools and output tool options # clear output tools and output tool options
# #
unset OUTPUT_TOOL unset OUTPUT_TOOL
@@ -1447,10 +1494,12 @@ if [[ $V_FLAG -ge 5 ]]; then
echo "$0: debug[5]: end getopt phase ${GETOPT_PHASE} debug level: $V_FLAG" 1>&2 echo "$0: debug[5]: end getopt phase ${GETOPT_PHASE} debug level: $V_FLAG" 1>&2
fi fi
############################################ ############################################
# debugging after getopt phase is complete # # debugging after getopt phase is complete #
############################################ ############################################
# set getopt phase to 4 # set getopt phase to 4
# #
GETOPT_PHASE=4 GETOPT_PHASE=4
@@ -1464,7 +1513,6 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: after parse in getopt phase: $GETOPT_PHASE: V_FLAG=$V_FLAG" 1>&2 echo "$0: debug[3]: after parse in getopt phase: $GETOPT_PHASE: V_FLAG=$V_FLAG" 1>&2
echo "$0: debug[3]: after parse in getopt phase: $GETOPT_PHASE: GIT_TOOL=$GIT_TOOL" 1>&2 echo "$0: debug[3]: after parse in getopt phase: $GETOPT_PHASE: GIT_TOOL=$GIT_TOOL" 1>&2
echo "$0: debug[3]: after parse in getopt phase: $GETOPT_PHASE: DOCROOT_SLASH=$DOCROOT_SLASH" 1>&2 echo "$0: debug[3]: after parse in getopt phase: $GETOPT_PHASE: DOCROOT_SLASH=$DOCROOT_SLASH" 1>&2
echo "$0: debug[3]: after parse in getopt phase: $GETOPT_PHASE: PANDOC_WRAPPER=$PANDOC_WRAPPER" 1>&2
echo "$0: debug[3]: after parse in getopt phase: $GETOPT_PHASE: REPO_TOP_URL=$REPO_TOP_URL" 1>&2 echo "$0: debug[3]: after parse in getopt phase: $GETOPT_PHASE: REPO_TOP_URL=$REPO_TOP_URL" 1>&2
echo "$0: debug[3]: after parse in getopt phase: $GETOPT_PHASE: REPO_URL=$REPO_URL" 1>&2 echo "$0: debug[3]: after parse in getopt phase: $GETOPT_PHASE: REPO_URL=$REPO_URL" 1>&2
echo "$0: debug[3]: after parse in getopt phase: $GETOPT_PHASE: SITE_URL=$SITE_URL" 1>&2 echo "$0: debug[3]: after parse in getopt phase: $GETOPT_PHASE: SITE_URL=$SITE_URL" 1>&2
@@ -1473,12 +1521,16 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: after parse in getopt phase: $GETOPT_PHASE: REPO_NAME=$REPO_NAME" 1>&2 echo "$0: debug[3]: after parse in getopt phase: $GETOPT_PHASE: REPO_NAME=$REPO_NAME" 1>&2
echo "$0: debug[3]: after parse in getopt phase: $GETOPT_PHASE: INC_PATH=$INC_PATH" 1>&2 echo "$0: debug[3]: after parse in getopt phase: $GETOPT_PHASE: INC_PATH=$INC_PATH" 1>&2
echo "$0: debug[3]: after parse in getopt phase: $GETOPT_PHASE: INC_DIR=$INC_DIR" 1>&2 echo "$0: debug[3]: after parse in getopt phase: $GETOPT_PHASE: INC_DIR=$INC_DIR" 1>&2
echo "$0: debug[3]: after parse in getopt phase: $GETOPT_PHASE: BIN_PATH=$BIN_PATH" 1>&2
echo "$0: debug[3]: after parse in getopt phase: $GETOPT_PHASE: BIN_DIR=$BIN_DIR" 1>&2
echo "$0: debug[3]: after parse in getopt phase: $GETOPT_PHASE: PANDOC_WRAPPER=$PANDOC_WRAPPER" 1>&2
echo "$0: debug[3]: after parse in getopt phase: $GETOPT_PHASE: TOP=$TOP" 1>&2 echo "$0: debug[3]: after parse in getopt phase: $GETOPT_PHASE: TOP=$TOP" 1>&2
fi fi
if [[ $V_FLAG -ge 3 ]]; then if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: finished all getopt parsing" 1>&2 echo "$0: debug[3]: finished all getopt parsing" 1>&2
fi fi
# validate HTML phase names # validate HTML phase names
# #
for n in "${PHASE_NAME[@]}"; do for n in "${PHASE_NAME[@]}"; do
@@ -1506,6 +1558,7 @@ for n in "${PHASE_NAME[@]}"; do
fi fi
done done
# validate before tool # validate before tool
# #
if [[ -n $BEFORE_TOOL ]]; then if [[ -n $BEFORE_TOOL ]]; then
@@ -1528,27 +1581,6 @@ if [[ -n $BEFORE_TOOL ]]; then
fi fi
fi fi
# validate pandoc wrapper tool
#
if [[ -n $PANDOC_WRAPPER ]]; then
if [[ $V_FLAG -ge 5 ]]; then
if [[ -n $PANDOC_WRAPPER ]]; then
echo "$0: debug[5]: -p pandoc wrapper tool: $PANDOC_WRAPPER" 1>&2
fi
fi
if [[ ! -e "$PANDOC_WRAPPER" ]]; then
echo "$0: ERROR: -p pandoc wrapper tool not found: $PANDOC_WRAPPER" 1>&2
exit 5
fi
if [[ ! -f "$PANDOC_WRAPPER" ]]; then
echo "$0: ERROR: -p pandoc wrapper tool not a file: $PANDOC_WRAPPER" 1>&2
exit 5
fi
if [[ ! -x "$PANDOC_WRAPPER" ]]; then
echo "$0: ERROR: -p pandoc wrapper tool not an executable file: $PANDOC_WRAPPER" 1>&2
exit 5
fi
fi
# validate after tool # validate after tool
# #
@@ -1572,6 +1604,7 @@ if [[ -n $AFTER_TOOL ]]; then
fi fi
fi fi
# report TOKEN sed patterns # report TOKEN sed patterns
# #
if [[ $V_FLAG -ge 7 ]]; then if [[ $V_FLAG -ge 7 ]]; then
@@ -1589,10 +1622,12 @@ if [[ -n $DO_NOT_PROCESS ]]; then
exit 0 exit 0
fi fi
########################## ##########################
# HTML pre-0 phase setup # # HTML pre-0 phase setup #
########################## ##########################
# create a temporary sed script # create a temporary sed script
# #
export TMP_SED_SCRIPT=".tmp.$NAME.SED_SCRIPT.$$.tmp" export TMP_SED_SCRIPT=".tmp.$NAME.SED_SCRIPT.$$.tmp"
@@ -1634,6 +1669,7 @@ elif [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: the temporary sed script that would have been written ends above: $TMP_SED_SCRIPT" 1>&2 echo "$0: debug[3]: the temporary sed script that would have been written ends above: $TMP_SED_SCRIPT" 1>&2
fi fi
# create a temporary HTML phase file # create a temporary HTML phase file
# #
# NOTE: This file, when we are finished building it, will be come the final index.html file. # NOTE: This file, when we are finished building it, will be come the final index.html file.
@@ -1661,6 +1697,7 @@ elif [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: because of -n, temporary HTML file is not formed: $TMP_PHASE" 1>&2 echo "$0: debug[3]: because of -n, temporary HTML file is not formed: $TMP_PHASE" 1>&2
fi fi
# create a temporary index HTML file # create a temporary index HTML file
# #
# NOTE: This file, when we are finished building it, will be come the final index.html file. # NOTE: This file, when we are finished building it, will be come the final index.html file.
@@ -1688,6 +1725,7 @@ elif [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: because of -n, temporary index HTML file is not formed: $TMP_INDEX_HTML" 1>&2 echo "$0: debug[3]: because of -n, temporary index HTML file is not formed: $TMP_INDEX_HTML" 1>&2
fi fi
# input.md is -, we will need to capture standard input into a new temporary file # input.md is -, we will need to capture standard input into a new temporary file
# #
export ORIG_INPUT_MD="$MATCH_MD" export ORIG_INPUT_MD="$MATCH_MD"
@@ -1733,6 +1771,7 @@ elif [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: because of -n, temporary stdin file is not formed: $TMP_INPUT_MD" 1>&2 echo "$0: debug[3]: because of -n, temporary stdin file is not formed: $TMP_INPUT_MD" 1>&2
fi fi
# strip commented language after markdown code block # strip commented language after markdown code block
# #
if [[ -z $NOOP ]]; then if [[ -z $NOOP ]]; then
@@ -1784,6 +1823,7 @@ fi
# HTML phase 0: inc/top.__name__.html # # HTML phase 0: inc/top.__name__.html #
####################################### #######################################
# NOTE: See bin/md2html.cfg for details on HTML phase numbers, HTML phase names, and HTML phase files # NOTE: See bin/md2html.cfg for details on HTML phase numbers, HTML phase names, and HTML phase files
# #
export CUR_PHASE_NUM=0 export CUR_PHASE_NUM=0
@@ -1799,10 +1839,12 @@ if [[ $status -ne 0 ]]; then
exit "$status" exit "$status"
fi fi
######################################## ########################################
# HTML phase 1: inc/head.__name__.html # # HTML phase 1: inc/head.__name__.html #
######################################## ########################################
# NOTE: See bin/md2html.cfg for details on HTML phase numbers, HTML phase names, and HTML phase files # NOTE: See bin/md2html.cfg for details on HTML phase numbers, HTML phase names, and HTML phase files
# #
CUR_PHASE_NUM=1 CUR_PHASE_NUM=1
@@ -1818,6 +1860,7 @@ if [[ $status -ne 0 ]]; then
exit "$status" exit "$status"
fi fi
# Special output to indicate which tool was used # Special output to indicate which tool was used
# #
if [[ -z $NOOP && ${HTML_PHASE_NAME[$CUR_PHASE_NAME]} != . ]]; then if [[ -z $NOOP && ${HTML_PHASE_NAME[$CUR_PHASE_NAME]} != . ]]; then
@@ -1849,10 +1892,12 @@ fi
} >> "$TMP_INDEX_HTML" } >> "$TMP_INDEX_HTML"
fi fi
######################################## ########################################
# HTML phase 2: inc/body.__name__.html # # HTML phase 2: inc/body.__name__.html #
######################################## ########################################
# NOTE: See bin/md2html.cfg for details on HTML phase numbers, HTML phase names, and HTML phase files # NOTE: See bin/md2html.cfg for details on HTML phase numbers, HTML phase names, and HTML phase files
# #
CUR_PHASE_NUM=2 CUR_PHASE_NUM=2
@@ -1868,10 +1913,12 @@ if [[ $status -ne 0 ]]; then
exit "$status" exit "$status"
fi fi
######################################## ########################################
# HTML phase 3: inc/topbar.__name__.html # # HTML phase 3: inc/topbar.__name__.html #
######################################## ########################################
# NOTE: See bin/md2html.cfg for details on HTML phase numbers, HTML phase names, and HTML phase files # NOTE: See bin/md2html.cfg for details on HTML phase numbers, HTML phase names, and HTML phase files
# #
CUR_PHASE_NUM=3 CUR_PHASE_NUM=3
@@ -1887,10 +1934,12 @@ if [[ $status -ne 0 ]]; then
exit "$status" exit "$status"
fi fi
########################################## ##########################################
# HTML phase 4: inc/header.__name__.html # # HTML phase 4: inc/header.__name__.html #
########################################## ##########################################
# NOTE: See bin/md2html.cfg for details on HTML phase numbers, HTML phase names, and HTML phase files # NOTE: See bin/md2html.cfg for details on HTML phase numbers, HTML phase names, and HTML phase files
# #
CUR_PHASE_NUM=4 CUR_PHASE_NUM=4
@@ -1906,10 +1955,12 @@ if [[ $status -ne 0 ]]; then
exit "$status" exit "$status"
fi fi
########################################## ##########################################
# HTML phase 5: inc/navbar.__name__.html # # HTML phase 5: inc/navbar.__name__.html #
########################################## ##########################################
# NOTE: See bin/md2html.cfg for details on HTML phase numbers, HTML phase names, and HTML phase files # NOTE: See bin/md2html.cfg for details on HTML phase numbers, HTML phase names, and HTML phase files
# #
CUR_PHASE_NUM=5 CUR_PHASE_NUM=5
@@ -1925,10 +1976,12 @@ if [[ $status -ne 0 ]]; then
exit "$status" exit "$status"
fi fi
################################################### ###################################################
# HTML phase 6: inc/before-content.__name__.html # # HTML phase 6: inc/before-content.__name__.html #
################################################### ###################################################
# NOTE: See bin/md2html.cfg for details on HTML phase numbers, HTML phase names, and HTML phase files # NOTE: See bin/md2html.cfg for details on HTML phase numbers, HTML phase names, and HTML phase files
# #
CUR_PHASE_NUM=6 CUR_PHASE_NUM=6
@@ -1944,10 +1997,12 @@ if [[ $status -ne 0 ]]; then
exit "$status" exit "$status"
fi fi
############################## ##############################
# HTML phase 20: before tool # # HTML phase 20: before tool #
############################## ##############################
# NOTE: See bin/md2html.cfg for details on HTML phase numbers, HTML phase names, and HTML phase files # NOTE: See bin/md2html.cfg for details on HTML phase numbers, HTML phase names, and HTML phase files
# #
CUR_PHASE_NUM=20 CUR_PHASE_NUM=20
@@ -2004,10 +2059,12 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: successfully completed HTML phase $CUR_PHASE_NUM ($CUR_PHASE_NAME)" 1>&2 echo "$0: debug[3]: successfully completed HTML phase $CUR_PHASE_NUM ($CUR_PHASE_NAME)" 1>&2
fi fi
###################################### ######################################
# HTML phase 21: pandoc wrapper tool # # HTML phase 21: pandoc wrapper tool #
###################################### ######################################
# NOTE: See bin/md2html.cfg for details on HTML phase numbers, HTML phase names, and HTML phase files # NOTE: See bin/md2html.cfg for details on HTML phase numbers, HTML phase names, and HTML phase files
# #
CUR_PHASE_NUM=21 CUR_PHASE_NUM=21
@@ -2019,100 +2076,98 @@ if [[ $V_FLAG -ge 5 ]]; then
done done
fi fi
# #
if [[ -n $PANDOC_WRAPPER ]]; then if [[ -z $NOOP ]]; then
if [[ -z $NOOP ]]; then
# write START of section comment # write START of section comment
# #
{ {
echo "<!-- START: this line starts content for HTML phase $CUR_PHASE_NUM" \ echo "<!-- START: this line starts content for HTML phase $CUR_PHASE_NUM" \
"by: $PANDOC_WRAPPER via bin/$NAME -->" "by: $PANDOC_WRAPPER via bin/$NAME -->"
echo echo
} >> "$TMP_INDEX_HTML" } >> "$TMP_INDEX_HTML"
# append pandoc wrapper tool output # append pandoc wrapper tool output
# #
if [[ $V_FLAG -ge 5 ]]; then if [[ $V_FLAG -ge 5 ]]; then
echo "$0: debug[5]: about to execute:" \ echo "$0: debug[5]: about to execute:" \
"$PANDOC_WRAPPER ${P_OPTION[*]} -- $TMP_STRIPPED_MD - >> $TMP_INDEX_HTML" 1>&2 "$PANDOC_WRAPPER ${P_OPTION[*]} -- $TMP_STRIPPED_MD - >> $TMP_INDEX_HTML" 1>&2
fi
"$PANDOC_WRAPPER" "${P_OPTION[@]}" -- "$TMP_STRIPPED_MD" - >> "$TMP_INDEX_HTML"
status="$?"
if [[ $status -ne 0 ]]; then
echo "$0: ERROR: pandoc wrapper tool:" \
"$PANDOC_WRAPPER ${P_OPTION[*]} -- $TMP_STRIPPED_MD - failed," \
"error code: $status" 1>&2
exit 100
fi
# fix any pandoc footnote bogons
#
# The pandoc(1) tool will generate the following BOGUS HTML 5 code
# when any markdown footnotes are used:
#
# <!-- AFTER: last line of markdown file: PATH/FILE/NAME -->
# <section id="footnotes" class="footnotes footnotes-end-of-document" role="doc-endnotes">
# <hr />
#
# The section element lacks any HTML h1..h6 heading element inside it,
# and "<hr />" has no effect in standard HTML 5 and interacts badly with
# unquoted attribute values.
#
# We replace such HTML 5 with HTML 5 code as follows:
#
# <!-- AFTER: last line of markdown file: PATH/FILE/NAME -->
# <hr style="width:10%;text-align:left;margin-left:0">
# <section id="footnotes" class="footnotes footnotes-end-of-document" role="doc-endnotes">
# <h5>Footnotes</h5>
#
# It is easier to compose a perl script inline than to use an external file
# because we then have to test for that perl script to be a non-empty readable file,
# and perhaps allow some arg to specify an alternate location for the perl script/
# So instead we just build the perl script inline.
#
PERL_LINE='s|(<!-- AFTER: last line of markdown file: \S+ -->)\n'
PERL_LINE="$PERL_LINE"'(<section id="footnotes" class="footnotes footnotes-end-of-document" role="doc-endnotes">)\n'
PERL_LINE="$PERL_LINE"'<hr />|'
PERL_LINE="$PERL_LINE\$1"'\n'
PERL_LINE="$PERL_LINE"'<hr style="width:10%;text-align:left;margin-left:0">\n'
PERL_LINE="$PERL_LINE\$2"'\n'
PERL_LINE="$PERL_LINE"'<h5>Footnotes</h5>|gms'
if [[ $V_FLAG -ge 5 ]]; then
echo "$0: debug[5]: about to execute:" \
"$PERL_TOOL -0 -p -i -e $PERL_LINE -- $TMP_INDEX_HTML" 1>&2
fi
"$PERL_TOOL" -0 -p -i -e "$PERL_LINE" -- "$TMP_INDEX_HTML"
if [[ $status -ne 0 ]]; then
echo "$0: ERROR: pandoc wrapper tool:" \
"$PERL_TOOL -0 -p -i -e $PERL_LINE -- $TMP_INDEX_HTML - failed," \
"error code: $status" 1>&2
exit 101
fi
# write START of section comment
#
{
echo
echo "<!-- END: this line ends content for HTML phase $CUR_PHASE_NUM" \
"by: $PANDOC_WRAPPER via bin/$NAME -->"
} >> "$TMP_INDEX_HTML"
elif [[ $V_FLAG -ge 5 ]]; then
echo "$0: debug[5]: because of -n, disabled use of pandoc wrapper tool: $PANDOC_WRAPPER" 1>&2
fi fi
"$PANDOC_WRAPPER" "${P_OPTION[@]}" -- "$TMP_STRIPPED_MD" - >> "$TMP_INDEX_HTML"
status="$?"
if [[ $status -ne 0 ]]; then
echo "$0: ERROR: pandoc wrapper tool:" \
"$PANDOC_WRAPPER ${P_OPTION[*]} -- $TMP_STRIPPED_MD - failed," \
"error code: $status" 1>&2
exit 100
fi
# fix any pandoc footnote bogons
#
# The pandoc(1) tool will generate the following BOGUS HTML 5 code
# when any markdown footnotes are used:
#
# <!-- AFTER: last line of markdown file: PATH/FILE/NAME -->
# <section id="footnotes" class="footnotes footnotes-end-of-document" role="doc-endnotes">
# <hr />
#
# The section element lacks any HTML h1..h6 heading element inside it,
# and "<hr />" has no effect in standard HTML 5 and interacts badly with
# unquoted attribute values.
#
# We replace such HTML 5 with HTML 5 code as follows:
#
# <!-- AFTER: last line of markdown file: PATH/FILE/NAME -->
# <hr style="width:10%;text-align:left;margin-left:0">
# <section id="footnotes" class="footnotes footnotes-end-of-document" role="doc-endnotes">
# <h5>Footnotes</h5>
#
# It is easier to compose a perl script inline than to use an external file
# because we then have to test for that perl script to be a non-empty readable file,
# and perhaps allow some arg to specify an alternate location for the perl script/
# So instead we just build the perl script inline.
#
PERL_LINE='s|(<!-- AFTER: last line of markdown file: \S+ -->)\n'
PERL_LINE="$PERL_LINE"'(<section id="footnotes" class="footnotes footnotes-end-of-document" role="doc-endnotes">)\n'
PERL_LINE="$PERL_LINE"'<hr />|'
PERL_LINE="$PERL_LINE\$1"'\n'
PERL_LINE="$PERL_LINE"'<hr style="width:10%;text-align:left;margin-left:0">\n'
PERL_LINE="$PERL_LINE\$2"'\n'
PERL_LINE="$PERL_LINE"'<h5>Footnotes</h5>|gms'
if [[ $V_FLAG -ge 5 ]]; then
echo "$0: debug[5]: about to execute:" \
"$PERL_TOOL -0 -p -i -e $PERL_LINE -- $TMP_INDEX_HTML" 1>&2
fi
"$PERL_TOOL" -0 -p -i -e "$PERL_LINE" -- "$TMP_INDEX_HTML"
if [[ $status -ne 0 ]]; then
echo "$0: ERROR: pandoc wrapper tool:" \
"$PERL_TOOL -0 -p -i -e $PERL_LINE -- $TMP_INDEX_HTML - failed," \
"error code: $status" 1>&2
exit 101
fi
# write START of section comment
#
{
echo
echo "<!-- END: this line ends content for HTML phase $CUR_PHASE_NUM" \
"by: $PANDOC_WRAPPER via bin/$NAME -->"
} >> "$TMP_INDEX_HTML"
elif [[ $V_FLAG -ge 5 ]]; then elif [[ $V_FLAG -ge 5 ]]; then
echo "$0: debug[5]: because of -p ., use of pandoc wrapper tool was disabled" 1>&2 echo "$0: debug[5]: because of -n, disabled use of pandoc wrapper tool: $PANDOC_WRAPPER" 1>&2
fi fi
# #
if [[ $V_FLAG -ge 3 ]]; then if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: successfully completed HTML phase $CUR_PHASE_NUM ($CUR_PHASE_NAME)" 1>&2 echo "$0: debug[3]: successfully completed HTML phase $CUR_PHASE_NUM ($CUR_PHASE_NAME)" 1>&2
fi fi
############################# #############################
# HTML phase 22: after tool # # HTML phase 22: after tool #
############################# #############################
# NOTE: See bin/md2html.cfg for details on HTML phase numbers, HTML phase names, and HTML phase files # NOTE: See bin/md2html.cfg for details on HTML phase numbers, HTML phase names, and HTML phase files
# #
CUR_PHASE_NUM=22 CUR_PHASE_NUM=22
@@ -2169,10 +2224,12 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: successfully completed HTML phase $CUR_PHASE_NUM" 1>&2 echo "$0: debug[3]: successfully completed HTML phase $CUR_PHASE_NUM" 1>&2
fi fi
################################################## ##################################################
# HTML phase 30: inc/after-content.__name__.html # # HTML phase 30: inc/after-content.__name__.html #
################################################## ##################################################
# NOTE: See bin/md2html.cfg for details on HTML phase numbers, HTML phase names, and HTML phase files # NOTE: See bin/md2html.cfg for details on HTML phase numbers, HTML phase names, and HTML phase files
# #
CUR_PHASE_NUM=30 CUR_PHASE_NUM=30
@@ -2188,10 +2245,12 @@ if [[ $status -ne 0 ]]; then
exit "$status" exit "$status"
fi fi
########################################### ###########################################
# HTML phase 31: inc/footer.__name__.html # # HTML phase 31: inc/footer.__name__.html #
########################################### ###########################################
# NOTE: See bin/md2html.cfg for details on HTML phase numbers, HTML phase names, and HTML phase files # NOTE: See bin/md2html.cfg for details on HTML phase numbers, HTML phase names, and HTML phase files
# #
CUR_PHASE_NUM=31 CUR_PHASE_NUM=31
@@ -2207,10 +2266,12 @@ if [[ $status -ne 0 ]]; then
exit "$status" exit "$status"
fi fi
########################################### ###########################################
# HTML phase 32: inc/bottom.__name__.html # # HTML phase 32: inc/bottom.__name__.html #
########################################### ###########################################
# NOTE: See bin/md2html.cfg for details on HTML phase numbers, HTML phase names, and HTML phase files # NOTE: See bin/md2html.cfg for details on HTML phase numbers, HTML phase names, and HTML phase files
# #
CUR_PHASE_NUM=32 CUR_PHASE_NUM=32
@@ -2226,10 +2287,12 @@ if [[ $status -ne 0 ]]; then
exit "$status" exit "$status"
fi fi
################################ ################################
# finalize the index.html file # # finalize the index.html file #
################################ ################################
# sanity check - temporary index HTML file must be a readable file # sanity check - temporary index HTML file must be a readable file
# #
if [[ -z $NOOP ]]; then if [[ -z $NOOP ]]; then
@@ -2252,6 +2315,7 @@ elif [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: because of -n, disabled readable file check of: $TMP_PHASE_FILE 2>/dev/null" 1>&2 echo "$0: debug[3]: because of -n, disabled readable file check of: $TMP_PHASE_FILE 2>/dev/null" 1>&2
fi fi
# move temporary index HTML in place # move temporary index HTML in place
# #
if [[ -z $NOOP ]]; then if [[ -z $NOOP ]]; then
@@ -2312,6 +2376,7 @@ elif [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: because of -n, disabled: mv -f -- $TMP_INDEX_HTML $OUTPUT_HTML" 1>&2 echo "$0: debug[3]: because of -n, disabled: mv -f -- $TMP_INDEX_HTML $OUTPUT_HTML" 1>&2
fi fi
# file cleanup # file cleanup
# #
if [[ -z $NOOP ]]; then if [[ -z $NOOP ]]; then
@@ -2321,6 +2386,7 @@ elif [[ $V_FLAG -ge 3 ]]; then
"$TMP_SED_SCRIPT $TMP_PHASE $TMP_INDEX_HTML $TMP_INPUT_MD $TMP_STRIPPED_MD" 1>&2 "$TMP_SED_SCRIPT $TMP_PHASE $TMP_INDEX_HTML $TMP_INPUT_MD $TMP_STRIPPED_MD" 1>&2
fi fi
# All Done!!! All Done!!! -- Jessica Noll, Age 2 # All Done!!! All Done!!! -- Jessica Noll, Age 2
# #
if [[ -n $NOOP ]]; then if [[ -n $NOOP ]]; then
+7 -11
View File
@@ -29,6 +29,7 @@
# #
# Share and enjoy! :-) # Share and enjoy! :-)
# firewall - run only with a bash that is version 5.1.8 or later # firewall - run only with a bash that is version 5.1.8 or later
# #
# The "/usr/bin/env bash" command must result in using a bash that # The "/usr/bin/env bash" command must result in using a bash that
@@ -139,6 +140,7 @@ Exit codes:
$NAME version: $VERSION" $NAME version: $VERSION"
# parse command line # parse command line
# #
while getopts :hv:Vd:nN flag; do while getopts :hv:Vd:nN flag; do
@@ -174,7 +176,7 @@ while getopts :hv:Vd:nN flag; do
;; ;;
esac esac
done done
#
# remove the options # remove the options
# #
shift $(( OPTIND - 1 )); shift $(( OPTIND - 1 ));
@@ -193,6 +195,7 @@ if [[ $# -ne 1 ]]; then
fi fi
export ENTRY_PATH="$1" export ENTRY_PATH="$1"
# verify that we have a topdir directory # verify that we have a topdir directory
# #
REPO_NAME=$(basename "$REPO_TOP_URL") REPO_NAME=$(basename "$REPO_TOP_URL")
@@ -213,6 +216,7 @@ if [[ ! -d $TOPDIR ]]; then
exit 6 exit 6
fi fi
# cd to topdir # cd to topdir
# #
if [[ ! -e $TOPDIR ]]; then if [[ ! -e $TOPDIR ]]; then
@@ -236,6 +240,7 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2 echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2
fi fi
# verify we have a non-empty readable .top file # verify we have a non-empty readable .top file
# #
export TOP_FILE=".top" export TOP_FILE=".top"
@@ -256,14 +261,6 @@ if [[ ! -s $TOP_FILE ]]; then
exit 6 exit 6
fi fi
# verify that we have a bin subdirectory
#
export BIN_PATH="$TOPDIR/bin"
if [[ ! -d $BIN_PATH ]]; then
echo "$0: ERROR: bin is not a directory under topdir: $BIN_PATH" 1>&2
exit 6
fi
export BIN_DIR="bin"
# verify that ENTRY_PATH is a entry directory # verify that ENTRY_PATH is a entry directory
# #
@@ -350,8 +347,6 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: REPO_NAME=$REPO_NAME" 1>&2 echo "$0: debug[3]: REPO_NAME=$REPO_NAME" 1>&2
echo "$0: debug[3]: CD_FAILED=$CD_FAILED" 1>&2 echo "$0: debug[3]: CD_FAILED=$CD_FAILED" 1>&2
echo "$0: debug[3]: TOP_FILE=$TOP_FILE" 1>&2 echo "$0: debug[3]: TOP_FILE=$TOP_FILE" 1>&2
echo "$0: debug[3]: BIN_PATH=$BIN_PATH" 1>&2
echo "$0: debug[3]: BIN_DIR=$BIN_DIR" 1>&2
echo "$0: debug[3]: YEAR_DIR=$YEAR_DIR" 1>&2 echo "$0: debug[3]: YEAR_DIR=$YEAR_DIR" 1>&2
echo "$0: debug[3]: ENTRY_DIR=$ENTRY_DIR" 1>&2 echo "$0: debug[3]: ENTRY_DIR=$ENTRY_DIR" 1>&2
echo "$0: debug[3]: ENTRY_ID=$ENTRY_ID" 1>&2 echo "$0: debug[3]: ENTRY_ID=$ENTRY_ID" 1>&2
@@ -360,6 +355,7 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: MAKE_FILE=$MAKE_FILE" 1>&2 echo "$0: debug[3]: MAKE_FILE=$MAKE_FILE" 1>&2
fi fi
# -N stops early before any processing is performed # -N stops early before any processing is performed
# #
if [[ -n $DO_NOT_PROCESS ]]; then if [[ -n $DO_NOT_PROCESS ]]; then
+4 -1
View File
@@ -28,6 +28,7 @@
# #
# Share and enjoy! :-) # Share and enjoy! :-)
# firewall - run only with a bash that is version 5.1.8 or later # firewall - run only with a bash that is version 5.1.8 or later
# #
# The "/usr/bin/env bash" command must result in using a bash that # The "/usr/bin/env bash" command must result in using a bash that
@@ -233,6 +234,7 @@ Exit codes:
$NAME version: $VERSION" $NAME version: $VERSION"
# parse command line # parse command line
# #
while getopts :hv:Vd:nN flag; do while getopts :hv:Vd:nN flag; do
@@ -268,7 +270,7 @@ while getopts :hv:Vd:nN flag; do
;; ;;
esac esac
done done
#
# remove the options # remove the options
# #
shift $(( OPTIND - 1 )); shift $(( OPTIND - 1 ));
@@ -400,6 +402,7 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: MAKE_FILE=$MAKE_FILE" 1>&2 echo "$0: debug[3]: MAKE_FILE=$MAKE_FILE" 1>&2
fi fi
# -N stops early before any processing is performed # -N stops early before any processing is performed
# #
if [[ -n $DO_NOT_PROCESS ]]; then if [[ -n $DO_NOT_PROCESS ]]; then
+92 -64
View File
@@ -44,6 +44,7 @@
# #
# Share and enjoy! :-) # Share and enjoy! :-)
# firewall - run only with a bash that is version 5.1.8 or later # firewall - run only with a bash that is version 5.1.8 or later
# #
# The "/usr/bin/env bash" command must result in using a bash that # The "/usr/bin/env bash" command must result in using a bash that
@@ -87,6 +88,7 @@ if [[ -z ${BASH_VERSINFO[0]} ||
exit 4 exit 4
fi fi
# setup bash file matching # setup bash file matching
# #
# We must declare arrays with -ag or -Ag, and we need loops to "export" modified variables. # We must declare arrays with -ag or -Ag, and we need loops to "export" modified variables.
@@ -99,9 +101,10 @@ shopt -u nocaseglob # disable strict case matching
shopt -u extglob # enable extended globbing patterns shopt -u extglob # enable extended globbing patterns
shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories
# set variables referenced in the usage message # set variables referenced in the usage message
# #
export VERSION="1.7.3 2024-08-05" export VERSION="1.8 2024-08-17"
NAME=$(basename "$0") NAME=$(basename "$0")
export NAME export NAME
export V_FLAG=0 export V_FLAG=0
@@ -118,17 +121,17 @@ if [[ $status -eq 0 ]]; then
fi fi
export TOPDIR export TOPDIR
export DOCROOT_SLASH="../../" export DOCROOT_SLASH="../../"
export PANDOC_WRAPPER="bin/pandoc-wrapper.sh"
export REPO_TOP_URL="https://github.com/ioccc-src/temp-test-ioccc" export REPO_TOP_URL="https://github.com/ioccc-src/temp-test-ioccc"
# GitHub puts individual files under the "blob/master" sub-directory. # GitHub puts individual files under the "blob/master" sub-directory.
export REPO_URL="$REPO_TOP_URL/blob/master" export REPO_URL="$REPO_TOP_URL/blob/master"
export SITE_URL="https://ioccc-src.github.io/temp-test-ioccc" export SITE_URL="https://ioccc-src.github.io/temp-test-ioccc"
export URL="#" export URL="#"
# set usage message # set usage message
# #
export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N] export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N]
[-p tool] [-U url] [-w site_url] [-e string ..] [-E exitcode] [-U url] [-w site_url] [-e string ..] [-E exitcode]
YYYY/dir YYYY/dir
-h print help message and exit -h print help message and exit
@@ -142,8 +145,6 @@ export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N]
-n go thru the actions, but do not update any files (def: do the action) -n go thru the actions, but do not update any files (def: do the action)
-N do not process file, just parse arguments and ignore the file (def: process the file) -N do not process file, just parse arguments and ignore the file (def: process the file)
-p tool run 'pandoc wrapper tool' (not pandoc path) during HTML phase number 21 (def: use $PANDOC_WRAPPER)
-U url URL of HTML file being formed (def: $URL) -U url URL of HTML file being formed (def: $URL)
-w site_url Base URL of the website (def: $SITE_URL) -w site_url Base URL of the website (def: $SITE_URL)
@@ -166,21 +167,17 @@ Exit codes:
$NAME version: $VERSION" $NAME version: $VERSION"
# setup # setup
# #
export NOOP= export NOOP=
export DO_NOT_PROCESS= export DO_NOT_PROCESS=
# output_author_handles # output_author_handles
# #
# Write the author handle(s) for the YYYY/dir entry to standard output (stdout) # Write the author handle(s) for the YYYY/dir entry to standard output (stdout)
# #
# XXX - XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX - XXX
# XXX - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - XXX
# XXX - until we have the jnamval command, we must FAKE PARSE the .entry.json file - XXX
# XXX - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - XXX
# XXX - XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX - XXX
#
# usage: # usage:
# output_author_handles YYYY/dir/.entry.json # output_author_handles YYYY/dir/.entry.json
# #
@@ -191,7 +188,6 @@ export DO_NOT_PROCESS=
function output_author_handles function output_author_handles
{ {
local ENTRY_JSON_PATH; # the .entry.json path local ENTRY_JSON_PATH; # the .entry.json path
local author_handle; # a found author handle
# parse args # parse args
# #
@@ -215,25 +211,21 @@ function output_author_handles
# extract author handles from .entry.json # extract author handles from .entry.json
# #
grep -F author_handle "$ENTRY_JSON_PATH" | "$JVAL_WRAPPER" -w -b "$ENTRY_JSON_PATH" '$..author_handle'
awk 'NF == 5 { print $4; }' | status="$?"
tr -d '"' | if [[ $status -ne 0 ]]; then
while read -r author_handle; do echo "$0: ERROR: $JVAL_WRAPPER -w -b $ENTRY_JSON_PATH \$..author_handle failed," \
echo "$author_handle" "error: $status" 1>&2
done return 5
fi
return 0 return 0
} }
# output_entry_ids # output_entry_ids
# #
# Write the entry ids from an author/author_handle.json file to standard output (stdout) # Write the entry ids from an author/author_handle.json file to standard output (stdout)
# #
# XXX - XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX - XXX
# XXX - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - XXX
# XXX - until we have the jnamval command, we must FAKE PARSE the author/author_handle.json file - XXX
# XXX - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - XXX
# XXX - XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX - XXX
#
# usage: # usage:
# output_entry_ids author/author_handle.json # output_entry_ids author/author_handle.json
# #
@@ -244,7 +236,6 @@ function output_author_handles
function output_entry_ids function output_entry_ids
{ {
local AUTHOR_HANDLE_JSON_PATH; # the .entry.json path local AUTHOR_HANDLE_JSON_PATH; # the .entry.json path
local entry_id; # a found entry id
# parse args # parse args
# #
@@ -268,12 +259,13 @@ function output_entry_ids
# extract entry ids from the author/author_handle.json file # extract entry ids from the author/author_handle.json file
# #
grep -F entry_id "$AUTHOR_HANDLE_JSON_PATH" | "$JVAL_WRAPPER" -w -b "$AUTHOR_HANDLE_JSON_PATH" '$..entry_id'
awk 'NF == 5 { print $4; }' | status="$?"
tr -d '"' | if [[ $status -ne 0 ]]; then
while read -r entry_id; do echo "$0: ERROR: $JVAL_WRAPPER -w -b $AUTHOR_HANDLE_JSON_PATH \$..entry_id failed," \
echo "$entry_id" "error: $status" 1>&2
done return 5
fi
return 0 return 0
} }
@@ -281,12 +273,6 @@ function output_entry_ids
# #
# Write the Full Name from an author/author_handle.json file to standard output (stdout) # Write the Full Name from an author/author_handle.json file to standard output (stdout)
# #
# XXX - XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX - XXX
# XXX - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - XXX
# XXX - until we have the jnamval command, we must FAKE PARSE the author/author_handle.json file - XXX
# XXX - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - XXX
# XXX - XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX - XXX
#
# usage: # usage:
# output_full_name author/author_handle.json # output_full_name author/author_handle.json
# #
@@ -320,20 +306,21 @@ function output_full_name
# extract Full Name from the author/author_handle.json file # extract Full Name from the author/author_handle.json file
# #
grep -F full_name "$AUTHOR_HANDLE_JSON_PATH" | sed -e 's/.*"full_name" : "//' -e 's/",.*//' "$JVAL_WRAPPER" -w -b "$AUTHOR_HANDLE_JSON_PATH" '$..full_name'
status="$?"
if [[ $status -ne 0 ]]; then
echo "$0: ERROR: $JVAL_WRAPPER -w -b $AUTHOR_HANDLE_JSON_PATH \$..full_name failed," \
"error: $status" 1>&2
return 5
fi
return 0 return 0
} }
# output_location_code # output_location_code
# #
# Write the Location Code from an author/author_handle.json file to standard output (stdout) # Write the Location Code from an author/author_handle.json file to standard output (stdout)
# #
# XXX - XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX - XXX
# XXX - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - XXX
# XXX - until we have the jnamval command, we must FAKE PARSE the author/author_handle.json file - XXX
# XXX - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - XXX
# XXX - XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX - XXX
#
# usage: # usage:
# output_location_code author/author_handle.json # output_location_code author/author_handle.json
# #
@@ -367,13 +354,20 @@ function output_location_code
# extract Location Code from the author/author_handle.json file # extract Location Code from the author/author_handle.json file
# #
grep -F location_code "$AUTHOR_HANDLE_JSON_PATH" | sed -e 's/.*"location_code" : "*//' -e 's/"*,.*//' "$JVAL_WRAPPER" -w -b "$AUTHOR_HANDLE_JSON_PATH" '$..location_code'
status="$?"
if [[ $status -ne 0 ]]; then
echo "$0: ERROR: $JVAL_WRAPPER -w -b $ENTRY_JSON_PATH \$..location_code failed," \
"error: $status" 1>&2
return 5
fi
return 0 return 0
} }
# parse command line # parse command line
# #
while getopts :hv:Vd:D:nNp:U:w:e:E: flag; do while getopts :hv:Vd:D:nNU:w:e:E: flag; do
case "$flag" in case "$flag" in
h) echo "$USAGE" 1>&2 h) echo "$USAGE" 1>&2
exit 2 exit 2
@@ -400,8 +394,6 @@ while getopts :hv:Vd:D:nNp:U:w:e:E: flag; do
;; ;;
N) DO_NOT_PROCESS="-N" N) DO_NOT_PROCESS="-N"
;; ;;
p) PANDOC_WRAPPER="$OPTARG"
;;
U) URL="$OPTARG" U) URL="$OPTARG"
;; ;;
w) SITE_URL="$OPTARG" w) SITE_URL="$OPTARG"
@@ -427,7 +419,7 @@ while getopts :hv:Vd:D:nNp:U:w:e:E: flag; do
;; ;;
esac esac
done done
#
# parse the command line arguments # parse the command line arguments
# #
if [[ $V_FLAG -ge 1 ]]; then if [[ $V_FLAG -ge 1 ]]; then
@@ -446,6 +438,7 @@ fi
# #
export ENTRY_PATH="$1" export ENTRY_PATH="$1"
# verify that we have a topdir directory # verify that we have a topdir directory
# #
REPO_NAME=$(basename "$REPO_TOP_URL") REPO_NAME=$(basename "$REPO_TOP_URL")
@@ -466,6 +459,7 @@ if [[ ! -d $TOPDIR ]]; then
exit 6 exit 6
fi fi
# cd to topdir # cd to topdir
# #
if [[ ! -e $TOPDIR ]]; then if [[ ! -e $TOPDIR ]]; then
@@ -489,6 +483,7 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2 echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2
fi fi
# verify that we have an author subdirectory # verify that we have an author subdirectory
# #
export AUTHOR_PATH="$TOPDIR/author" export AUTHOR_PATH="$TOPDIR/author"
@@ -498,6 +493,7 @@ if [[ ! -d $AUTHOR_PATH ]]; then
fi fi
export AUTHOR_DIR="author" export AUTHOR_DIR="author"
# verify that we have an inc subdirectory # verify that we have an inc subdirectory
# #
export INC_PATH="$TOPDIR/inc" export INC_PATH="$TOPDIR/inc"
@@ -507,6 +503,7 @@ if [[ ! -d $INC_PATH ]]; then
fi fi
export INC_DIR="inc" export INC_DIR="inc"
# verify that we have a bin subdirectory # verify that we have a bin subdirectory
# #
export BIN_PATH="$TOPDIR/bin" export BIN_PATH="$TOPDIR/bin"
@@ -516,6 +513,41 @@ if [[ ! -d $BIN_PATH ]]; then
fi fi
export BIN_DIR="bin" export BIN_DIR="bin"
# verify that the bin/pandoc-wrapper.sh tool is executable
#
export PANDOC_WRAPPER="$BIN_DIR/pandoc-wrapper.sh"
if [[ ! -e $PANDOC_WRAPPER ]]; then
echo "$0: ERROR: bin/md2html.sh does not exist: $PANDOC_WRAPPER" 1>&2
exit 5
fi
if [[ ! -f $PANDOC_WRAPPER ]]; then
echo "$0: ERROR: bin/md2html.sh is not a regular file: $PANDOC_WRAPPER" 1>&2
exit 5
fi
if [[ ! -x $PANDOC_WRAPPER ]]; then
echo "$0: ERROR: bin/md2html.sh is not an executable file: $PANDOC_WRAPPER" 1>&2
exit 5
fi
# verify that the bin/jval-wrapper.sh tool is executable
#
JVAL_WRAPPER="$BIN_DIR/jval-wrapper.sh"
if [[ ! -e $JVAL_WRAPPER ]]; then
echo "$0: ERROR: bin/jval-wrapper.sh does not exist: $JVAL_WRAPPER" 1>&2
exit 5
fi
if [[ ! -f $JVAL_WRAPPER ]]; then
echo "$0: ERROR: bin/jval-wrapper.sh is not a regular file: $JVAL_WRAPPER" 1>&2
exit 5
fi
if [[ ! -x $JVAL_WRAPPER ]]; then
echo "$0: ERROR: bin/jval-wrapper.sh is not an executable file: $JVAL_WRAPPER" 1>&2
exit 5
fi
# verify that ENTRY_PATH is a entry directory # verify that ENTRY_PATH is a entry directory
# #
if [[ ! -d $ENTRY_PATH ]]; then if [[ ! -d $ENTRY_PATH ]]; then
@@ -589,20 +621,6 @@ if [[ ! -r $ENTRY_JSON ]]; then
exit 7 exit 7
fi fi
# verify pandoc wrapper tool
#
if [[ ! -e $PANDOC_WRAPPER ]]; then
echo "$0: ERROR: pandoc wrapper tool does not exist: $PANDOC_WRAPPER" 1>&2
exit 5
fi
if [[ ! -f $PANDOC_WRAPPER ]]; then
echo "$0: ERROR: pandoc wrapper tool is not a file: $PANDOC_WRAPPER" 1>&2
exit 5
fi
if [[ ! -x $PANDOC_WRAPPER ]]; then
echo "$0: ERROR: pandoc wrapper tool is not an executable file: $PANDOC_WRAPPER" 1>&2
exit 5
fi
# find the location tool # find the location tool
# #
@@ -619,6 +637,7 @@ if [[ ! -x $LOCATION_TOOL ]]; then
exit 5 exit 5
fi fi
# parameter debugging # parameter debugging
# #
if [[ $V_FLAG -ge 3 ]]; then if [[ $V_FLAG -ge 3 ]]; then
@@ -628,7 +647,6 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: GIT_TOOL=$GIT_TOOL" 1>&2 echo "$0: debug[3]: GIT_TOOL=$GIT_TOOL" 1>&2
echo "$0: debug[3]: TOPDIR=$TOPDIR" 1>&2 echo "$0: debug[3]: TOPDIR=$TOPDIR" 1>&2
echo "$0: debug[3]: DOCROOT_SLASH=$DOCROOT_SLASH" 1>&2 echo "$0: debug[3]: DOCROOT_SLASH=$DOCROOT_SLASH" 1>&2
echo "$0: debug[3]: PANDOC_WRAPPER=$PANDOC_WRAPPER" 1>&2
echo "$0: debug[3]: REPO_TOP_URL=$REPO_TOP_URL" 1>&2 echo "$0: debug[3]: REPO_TOP_URL=$REPO_TOP_URL" 1>&2
echo "$0: debug[3]: REPO_URL=$REPO_URL" 1>&2 echo "$0: debug[3]: REPO_URL=$REPO_URL" 1>&2
echo "$0: debug[3]: SITE_URL=$SITE_URL" 1>&2 echo "$0: debug[3]: SITE_URL=$SITE_URL" 1>&2
@@ -644,6 +662,8 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: INC_DIR=$INC_DIR" 1>&2 echo "$0: debug[3]: INC_DIR=$INC_DIR" 1>&2
echo "$0: debug[3]: BIN_PATH=$BIN_PATH" 1>&2 echo "$0: debug[3]: BIN_PATH=$BIN_PATH" 1>&2
echo "$0: debug[3]: BIN_DIR=$BIN_DIR" 1>&2 echo "$0: debug[3]: BIN_DIR=$BIN_DIR" 1>&2
echo "$0: debug[3]: PANDOC_WRAPPER=$PANDOC_WRAPPER" 1>&2
echo "$0: debug[3]: JVAL_WRAPPER=$JVAL_WRAPPER" 1>&2
echo "$0: debug[3]: YEAR_DIR=$YEAR_DIR" 1>&2 echo "$0: debug[3]: YEAR_DIR=$YEAR_DIR" 1>&2
echo "$0: debug[3]: ENTRY_DIR=$ENTRY_DIR" 1>&2 echo "$0: debug[3]: ENTRY_DIR=$ENTRY_DIR" 1>&2
echo "$0: debug[3]: ENTRY_ID=$ENTRY_ID" 1>&2 echo "$0: debug[3]: ENTRY_ID=$ENTRY_ID" 1>&2
@@ -655,6 +675,7 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: LOCATION_TOOL=$LOCATION_TOOL" 1>&2 echo "$0: debug[3]: LOCATION_TOOL=$LOCATION_TOOL" 1>&2
fi fi
# Set AUTHOR_HANDLE_SET with author handles from .entry.json # Set AUTHOR_HANDLE_SET with author handles from .entry.json
# #
AUTHOR_HANDLE_SET=$(output_author_handles "$ENTRY_JSON") AUTHOR_HANDLE_SET=$(output_author_handles "$ENTRY_JSON")
@@ -670,6 +691,7 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: author handles found in $ENTRY_JSON end above" 1>&2 echo "$0: debug[3]: author handles found in $ENTRY_JSON end above" 1>&2
fi fi
# verify each author handle has a readable author/author_handle.json file # verify each author handle has a readable author/author_handle.json file
# #
for author_handle in $AUTHOR_HANDLE_SET; do for author_handle in $AUTHOR_HANDLE_SET; do
@@ -736,6 +758,7 @@ for author_handle in $AUTHOR_HANDLE_SET; do
fi fi
done done
# If -N, time to exit # If -N, time to exit
# #
if [[ -n $DO_NOT_PROCESS ]]; then if [[ -n $DO_NOT_PROCESS ]]; then
@@ -745,6 +768,7 @@ if [[ -n $DO_NOT_PROCESS ]]; then
exit 0 exit 0
fi fi
# create a temporary markdown for pandoc to process # create a temporary markdown for pandoc to process
# #
export TMP_FILE=".tmp.$NAME.FILE.$$.tmp" export TMP_FILE=".tmp.$NAME.FILE.$$.tmp"
@@ -767,6 +791,7 @@ elif [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: because of -n, temporary markdown file is not used: $TMP_FILE" 1>&2 echo "$0: debug[3]: because of -n, temporary markdown file is not used: $TMP_FILE" 1>&2
fi fi
# write author header to temporary markdown file # write author header to temporary markdown file
# #
{ {
@@ -788,6 +813,7 @@ else
fi fi
fi fi
# write each author's information to temporary markdown file # write each author's information to temporary markdown file
# #
export NOT_FIRST_AUTHOR export NOT_FIRST_AUTHOR
@@ -872,6 +898,7 @@ for author_handle in $AUTHOR_HANDLE_SET; do
NOT_FIRST_AUTHOR="true" NOT_FIRST_AUTHOR="true"
done done
# convert temporary markdown file into HTML # convert temporary markdown file into HTML
# #
if [[ -z $NOOP ]]; then if [[ -z $NOOP ]]; then
@@ -892,6 +919,7 @@ elif [[ $V_FLAG -ge 1 ]]; then
echo "$0: debug[1]: -n disabled execution of: $PANDOC_WRAPPER $TMP_FILE -" 1>&2 echo "$0: debug[1]: -n disabled execution of: $PANDOC_WRAPPER $TMP_FILE -" 1>&2
fi fi
# All Done!!! All Done!!! -- Jessica Noll, Age 2 # All Done!!! All Done!!! -- Jessica Noll, Age 2
# #
if [[ -z $NOOP ]]; then if [[ -z $NOOP ]]; then
+58 -24
View File
@@ -44,6 +44,7 @@
# #
# Share and enjoy! :-) # Share and enjoy! :-)
# firewall - run only with a bash that is version 5.1.8 or later # firewall - run only with a bash that is version 5.1.8 or later
# #
# The "/usr/bin/env bash" command must result in using a bash that # The "/usr/bin/env bash" command must result in using a bash that
@@ -87,6 +88,7 @@ if [[ -z ${BASH_VERSINFO[0]} ||
exit 4 exit 4
fi fi
# setup bash file matching # setup bash file matching
# #
# We must declare arrays with -ag or -Ag, and we need loops to "export" modified variables. # We must declare arrays with -ag or -Ag, and we need loops to "export" modified variables.
@@ -99,6 +101,7 @@ shopt -u nocaseglob # disable strict case matching
shopt -u extglob # enable extended globbing patterns shopt -u extglob # enable extended globbing patterns
shopt -s globstar # enable '**' to match all files and zero or more directories and subdirectories shopt -s globstar # enable '**' to match all files and zero or more directories and subdirectories
# set variables referenced in the usage message # set variables referenced in the usage message
# #
export VERSION="1.4.3 2024-08-05" export VERSION="1.4.3 2024-08-05"
@@ -117,7 +120,6 @@ if [[ $status -eq 0 ]]; then
TOPDIR=$("$GIT_TOOL" rev-parse --show-toplevel) TOPDIR=$("$GIT_TOOL" rev-parse --show-toplevel)
fi fi
export TOPDIR export TOPDIR
export PANDOC_WRAPPER="bin/pandoc-wrapper.sh"
export DOCROOT_SLASH="../../" export DOCROOT_SLASH="../../"
export REPO_TOP_URL="https://github.com/ioccc-src/temp-test-ioccc" export REPO_TOP_URL="https://github.com/ioccc-src/temp-test-ioccc"
# GitHub puts individual files under the "blob/master" sub-directory. # GitHub puts individual files under the "blob/master" sub-directory.
@@ -125,10 +127,11 @@ export REPO_URL="$REPO_TOP_URL/blob/master"
export SITE_URL="https://ioccc-src.github.io/temp-test-ioccc" export SITE_URL="https://ioccc-src.github.io/temp-test-ioccc"
export URL="#" export URL="#"
# set usage message # set usage message
# #
export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N] export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N]
[-p tool] [-U url] [-w site_url] [-e string ..] [-E exitcode] [-U url] [-w site_url] [-e string ..] [-E exitcode]
YYYY/dir YYYY/dir
-h print help message and exit -h print help message and exit
@@ -142,8 +145,6 @@ export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N]
-n go thru the actions, but do not update any files (def: do the action) -n go thru the actions, but do not update any files (def: do the action)
-N do not process file, just parse arguments and ignore the file (def: process the file) -N do not process file, just parse arguments and ignore the file (def: process the file)
-p tool run 'pandoc wrapper tool' (not pandoc path) during HTML phase number 21 (def: use $PANDOC_WRAPPER)
-U url URL of HTML file being formed (def: $URL) -U url URL of HTML file being formed (def: $URL)
-w site_url Base URL of the website (def: $SITE_URL) -w site_url Base URL of the website (def: $SITE_URL)
@@ -164,14 +165,16 @@ Exit codes:
$NAME version: $VERSION" $NAME version: $VERSION"
# setup # setup
# #
export NOOP= export NOOP=
export DO_NOT_PROCESS= export DO_NOT_PROCESS=
# parse command line # parse command line
# #
while getopts :hv:Vd:D:nNp:U:w:e:E: flag; do while getopts :hv:Vd:D:nNU:w:e:E: flag; do
case "$flag" in case "$flag" in
h) echo "$USAGE" 1>&2 h) echo "$USAGE" 1>&2
exit 2 exit 2
@@ -198,8 +201,6 @@ while getopts :hv:Vd:D:nNp:U:w:e:E: flag; do
;; ;;
N) DO_NOT_PROCESS="-N" N) DO_NOT_PROCESS="-N"
;; ;;
p) PANDOC_WRAPPER="$OPTARG"
;;
U) URL="$OPTARG" U) URL="$OPTARG"
;; ;;
w) SITE_URL="$OPTARG" w) SITE_URL="$OPTARG"
@@ -226,6 +227,7 @@ while getopts :hv:Vd:D:nNp:U:w:e:E: flag; do
esac esac
done done
# parse the command line arguments # parse the command line arguments
# #
if [[ $V_FLAG -ge 1 ]]; then if [[ $V_FLAG -ge 1 ]]; then
@@ -244,6 +246,7 @@ fi
# #
export ENTRY_PATH="$1" export ENTRY_PATH="$1"
# verify that we have a topdir directory # verify that we have a topdir directory
# #
REPO_NAME=$(basename "$REPO_TOP_URL") REPO_NAME=$(basename "$REPO_TOP_URL")
@@ -264,6 +267,7 @@ if [[ ! -d $TOPDIR ]]; then
exit 6 exit 6
fi fi
# cd to topdir # cd to topdir
# #
if [[ ! -e $TOPDIR ]]; then if [[ ! -e $TOPDIR ]]; then
@@ -287,6 +291,7 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2 echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2
fi fi
# verify that we have an author subdirectory # verify that we have an author subdirectory
# #
export AUTHOR_PATH="$TOPDIR/author" export AUTHOR_PATH="$TOPDIR/author"
@@ -296,6 +301,7 @@ if [[ ! -d $AUTHOR_PATH ]]; then
fi fi
export AUTHOR_DIR="author" export AUTHOR_DIR="author"
# verify that we have an inc subdirectory # verify that we have an inc subdirectory
# #
export INC_PATH="$TOPDIR/inc" export INC_PATH="$TOPDIR/inc"
@@ -305,6 +311,7 @@ if [[ ! -d $INC_PATH ]]; then
fi fi
export INC_DIR="inc" export INC_DIR="inc"
# verify that we have a bin subdirectory # verify that we have a bin subdirectory
# #
export BIN_PATH="$TOPDIR/bin" export BIN_PATH="$TOPDIR/bin"
@@ -314,6 +321,41 @@ if [[ ! -d $BIN_PATH ]]; then
fi fi
export BIN_DIR="bin" export BIN_DIR="bin"
# verify that the bin/pandoc-wrapper.sh tool is executable
#
export PANDOC_WRAPPER="$BIN_DIR/pandoc-wrapper.sh"
if [[ ! -e $PANDOC_WRAPPER ]]; then
echo "$0: ERROR: bin/md2html.sh does not exist: $PANDOC_WRAPPER" 1>&2
exit 5
fi
if [[ ! -f $PANDOC_WRAPPER ]]; then
echo "$0: ERROR: bin/md2html.sh is not a regular file: $PANDOC_WRAPPER" 1>&2
exit 5
fi
if [[ ! -x $PANDOC_WRAPPER ]]; then
echo "$0: ERROR: bin/md2html.sh is not an executable file: $PANDOC_WRAPPER" 1>&2
exit 5
fi
# verify we have our awk script
#
export MANIFEST_ENTRY_JSON_AWK="$BIN_DIR/manifest.entry.json.awk"
if [[ ! -e $MANIFEST_ENTRY_JSON_AWK ]]; then
echo "$0: ERROR: bin/manifest.entry.json.awk does not exist: $MANIFEST_ENTRY_JSON_AWK" 1>&2
exit 6
fi
if [[ ! -f $MANIFEST_ENTRY_JSON_AWK ]]; then
echo "$0: ERROR: bin/manifest.entry.json.awk is not a regular file: $MANIFEST_ENTRY_JSON_AWK" 1>&2
exit 6
fi
if [[ ! -r $MANIFEST_ENTRY_JSON_AWK ]]; then
echo "$0: ERROR: bin/manifest.entry.json.awk is not a readable file: $MANIFEST_ENTRY_JSON_AWK" 1>&2
exit 6
fi
# verify that ENTRY_PATH is a entry directory # verify that ENTRY_PATH is a entry directory
# #
if [[ ! -d $ENTRY_PATH ]]; then if [[ ! -d $ENTRY_PATH ]]; then
@@ -387,6 +429,7 @@ if [[ ! -r $ENTRY_JSON ]]; then
exit 7 exit 7
fi fi
# verify pandoc wrapper tool # verify pandoc wrapper tool
# #
if [[ ! -e $PANDOC_WRAPPER ]]; then if [[ ! -e $PANDOC_WRAPPER ]]; then
@@ -402,21 +445,6 @@ if [[ ! -x $PANDOC_WRAPPER ]]; then
exit 6 exit 6
fi fi
# verify we have our awk script
#
export MANIFEST_ENTRY_JSON_AWK="$BIN_DIR/manifest.entry.json.awk"
if [[ ! -e $MANIFEST_ENTRY_JSON_AWK ]]; then
echo "$0: ERROR: bin/manifest.entry.json.awk does not exist: $MANIFEST_ENTRY_JSON_AWK" 1>&2
exit 6
fi
if [[ ! -f $MANIFEST_ENTRY_JSON_AWK ]]; then
echo "$0: ERROR: bin/manifest.entry.json.awk is not a regular file: $MANIFEST_ENTRY_JSON_AWK" 1>&2
exit 6
fi
if [[ ! -r $MANIFEST_ENTRY_JSON_AWK ]]; then
echo "$0: ERROR: bin/manifest.entry.json.awk is not a readable file: $MANIFEST_ENTRY_JSON_AWK" 1>&2
exit 6
fi
# parameter debugging # parameter debugging
# #
@@ -426,7 +454,6 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: V_FLAG=$V_FLAG" 1>&2 echo "$0: debug[3]: V_FLAG=$V_FLAG" 1>&2
echo "$0: debug[3]: GIT_TOOL=$GIT_TOOL" 1>&2 echo "$0: debug[3]: GIT_TOOL=$GIT_TOOL" 1>&2
echo "$0: debug[3]: TOPDIR=$TOPDIR" 1>&2 echo "$0: debug[3]: TOPDIR=$TOPDIR" 1>&2
echo "$0: debug[3]: PANDOC_WRAPPER=$PANDOC_WRAPPER" 1>&2
echo "$0: debug[3]: DOCROOT_SLASH=$DOCROOT_SLASH" 1>&2 echo "$0: debug[3]: DOCROOT_SLASH=$DOCROOT_SLASH" 1>&2
echo "$0: debug[3]: REPO_TOP_URL=$REPO_TOP_URL" 1>&2 echo "$0: debug[3]: REPO_TOP_URL=$REPO_TOP_URL" 1>&2
echo "$0: debug[3]: REPO_URL=$REPO_URL" 1>&2 echo "$0: debug[3]: REPO_URL=$REPO_URL" 1>&2
@@ -443,6 +470,8 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: INC_DIR=$INC_DIR" 1>&2 echo "$0: debug[3]: INC_DIR=$INC_DIR" 1>&2
echo "$0: debug[3]: BIN_PATH=$BIN_PATH" 1>&2 echo "$0: debug[3]: BIN_PATH=$BIN_PATH" 1>&2
echo "$0: debug[3]: BIN_DIR=$BIN_DIR" 1>&2 echo "$0: debug[3]: BIN_DIR=$BIN_DIR" 1>&2
echo "$0: debug[3]: PANDOC_WRAPPER=$PANDOC_WRAPPER" 1>&2
echo "$0: debug[3]: MANIFEST_ENTRY_JSON_AWK=$MANIFEST_ENTRY_JSON_AWK" 1>&2
echo "$0: debug[3]: YEAR_DIR=$YEAR_DIR" 1>&2 echo "$0: debug[3]: YEAR_DIR=$YEAR_DIR" 1>&2
echo "$0: debug[3]: ENTRY_DIR=$ENTRY_DIR" 1>&2 echo "$0: debug[3]: ENTRY_DIR=$ENTRY_DIR" 1>&2
echo "$0: debug[3]: ENTRY_ID=$ENTRY_ID" 1>&2 echo "$0: debug[3]: ENTRY_ID=$ENTRY_ID" 1>&2
@@ -451,9 +480,9 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: DOT_PATH=$DOT_PATH" 1>&2 echo "$0: debug[3]: DOT_PATH=$DOT_PATH" 1>&2
echo "$0: debug[3]: DOT_PATH_CONTENT=$DOT_PATH_CONTENT" 1>&2 echo "$0: debug[3]: DOT_PATH_CONTENT=$DOT_PATH_CONTENT" 1>&2
echo "$0: debug[3]: ENTRY_JSON=$ENTRY_JSON" 1>&2 echo "$0: debug[3]: ENTRY_JSON=$ENTRY_JSON" 1>&2
echo "$0: debug[3]: MANIFEST_ENTRY_JSON_AWK=$MANIFEST_ENTRY_JSON_AWK" 1>&2
fi fi
# If -N, time to exit # If -N, time to exit
# #
if [[ -n $DO_NOT_PROCESS ]]; then if [[ -n $DO_NOT_PROCESS ]]; then
@@ -463,6 +492,7 @@ if [[ -n $DO_NOT_PROCESS ]]; then
exit 0 exit 0
fi fi
# create a temporary markdown for pandoc to process # create a temporary markdown for pandoc to process
# #
export TMP_FILE=".tmp.$NAME.FILE.$$.tmp" export TMP_FILE=".tmp.$NAME.FILE.$$.tmp"
@@ -485,6 +515,7 @@ elif [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: because of -n, temporary markdown file is not used: $TMP_FILE" 1>&2 echo "$0: debug[3]: because of -n, temporary markdown file is not used: $TMP_FILE" 1>&2
fi fi
# create a temporary manifest file # create a temporary manifest file
# #
export TMP_MANIFEST=".tmp.$NAME.MANIFEST.$$.tmp" export TMP_MANIFEST=".tmp.$NAME.MANIFEST.$$.tmp"
@@ -507,6 +538,7 @@ elif [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: because of -n, temporary manifest file is not used: $TMP_MANIFEST" 1>&2 echo "$0: debug[3]: because of -n, temporary manifest file is not used: $TMP_MANIFEST" 1>&2
fi fi
# generate the temporary manifest file # generate the temporary manifest file
# #
if [[ -z $NOOP ]]; then if [[ -z $NOOP ]]; then
@@ -542,6 +574,7 @@ elif [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: because of -n, temporary manifest markdown is NOT written into: $TMP_FILE" 1>&2 echo "$0: debug[3]: because of -n, temporary manifest markdown is NOT written into: $TMP_FILE" 1>&2
fi fi
# convert temporary markdown file into HTML # convert temporary markdown file into HTML
# #
if [[ -z $NOOP ]]; then if [[ -z $NOOP ]]; then
@@ -562,6 +595,7 @@ elif [[ $V_FLAG -ge 1 ]]; then
echo "$0: debug[1]: -n disabled execution of: $PANDOC_WRAPPER $TMP_FILE -" 1>&2 echo "$0: debug[1]: -n disabled execution of: $PANDOC_WRAPPER $TMP_FILE -" 1>&2
fi fi
# All Done!!! All Done!!! -- Jessica Noll, Age 2 # All Done!!! All Done!!! -- Jessica Noll, Age 2
# #
if [[ -z $NOOP ]]; then if [[ -z $NOOP ]]; then
+59 -25
View File
@@ -53,6 +53,7 @@
# #
# Share and enjoy! :-) # Share and enjoy! :-)
# firewall - run only with a bash that is version 5.1.8 or later # firewall - run only with a bash that is version 5.1.8 or later
# #
# The "/usr/bin/env bash" command must result in using a bash that # The "/usr/bin/env bash" command must result in using a bash that
@@ -96,6 +97,7 @@ if [[ -z ${BASH_VERSINFO[0]} ||
exit 4 exit 4
fi fi
# setup bash file matching # setup bash file matching
# #
# We must declare arrays with -ag or -Ag, and we need loops to "export" modified variables. # We must declare arrays with -ag or -Ag, and we need loops to "export" modified variables.
@@ -108,6 +110,7 @@ shopt -u nocaseglob # disable strict case matching
shopt -u extglob # enable extended globbing patterns shopt -u extglob # enable extended globbing patterns
shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories
# set variables referenced in the usage message # set variables referenced in the usage message
# #
export VERSION="1.4.4 2024-08-05" export VERSION="1.4.4 2024-08-05"
@@ -131,12 +134,12 @@ export REPO_TOP_URL="https://github.com/ioccc-src/temp-test-ioccc"
# GitHub puts individual files under the "blob/master" sub-directory. # GitHub puts individual files under the "blob/master" sub-directory.
export REPO_URL="$REPO_TOP_URL/blob/master" export REPO_URL="$REPO_TOP_URL/blob/master"
export SITE_URL="https://ioccc-src.github.io/temp-test-ioccc" export SITE_URL="https://ioccc-src.github.io/temp-test-ioccc"
export PANDOC_WRAPPER="bin/pandoc-wrapper.sh"
# set usage message # set usage message
# #
export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-n] [-N] export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-n] [-N]
[-p tool] [-U URL] [-w site_url] [-e string ..] [-E exitcode] [-U URL] [-w site_url] [-e string ..] [-E exitcode]
YYYY [more_options] YYYY [more_options]
-h print help message and exit -h print help message and exit
@@ -150,8 +153,6 @@ export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-n] [-N]
-n go thru the actions, but do not update any files (def: do the action) -n go thru the actions, but do not update any files (def: do the action)
-N do not process file, just parse arguments and ignore the file (def: process the file) -N do not process file, just parse arguments and ignore the file (def: process the file)
-p tool run 'pandoc wrapper tool' (not pandoc path) during HTML phase number 21 (def: use $PANDOC_WRAPPER)
-U url URL of HTML file being formed (def: $URL) -U url URL of HTML file being formed (def: $URL)
-w site_url Base URL of the website (def: $SITE_URL) -w site_url Base URL of the website (def: $SITE_URL)
@@ -174,16 +175,11 @@ Exit codes:
$NAME version: $VERSION" $NAME version: $VERSION"
# output_award # output_award
# #
# Write the award name to standard output (stdout) # Write the award name to standard output (stdout)
# #
# XXX - XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX - XXX
# XXX - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - XXX
# XXX - until we have the jnamval command, we must FAKE PARSE the .entry.json file - XXX
# XXX - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - XXX
# XXX - XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX - XXX
#
# usage: # usage:
# output_award YYYY/dir/.entry.json # output_award YYYY/dir/.entry.json
# #
@@ -194,7 +190,6 @@ $NAME version: $VERSION"
function output_award function output_award
{ {
local ENTRY_JSON_PATH; # the .entry.json path local ENTRY_JSON_PATH; # the .entry.json path
local AWARD_STRING; # winning entry award string
# parse args # parse args
# #
@@ -218,15 +213,11 @@ function output_award
# obtain the award string # obtain the award string
# #
AWARD_STRING=$(grep -F '"award" : "' "$ENTRY_JSON_PATH" | sed -e 's/^.*"award" : "//' -e 's/",//') "$JVAL_WRAPPER" -w -b "$ENTRY_JSON_PATH" '$..award'
if [[ -z $AWARD_STRING ]]; then
echo "$0: ERROR: in output_award: no award found in .entry.json file: $ENTRY_JSON_PATH" 1>&2
return 5
fi
echo "$AWARD_STRING"
return 0 return 0
} }
# output_ordinal # output_ordinal
# #
# Write the numerical ordinal form of a non-negative integer to standard output (stdout) # Write the numerical ordinal form of a non-negative integer to standard output (stdout)
@@ -288,14 +279,16 @@ function output_ordinal
return 0 return 0
} }
# setup # setup
# #
export NOOP= export NOOP=
export DO_NOT_PROCESS= export DO_NOT_PROCESS=
# parse command line # parse command line
# #
while getopts :hv:Vd:D:nNp:U:w:e:E: flag; do while getopts :hv:Vd:D:nNU:w:e:E: flag; do
case "$flag" in case "$flag" in
h) echo "$USAGE" 1>&2 h) echo "$USAGE" 1>&2
exit 2 exit 2
@@ -322,8 +315,6 @@ while getopts :hv:Vd:D:nNp:U:w:e:E: flag; do
;; ;;
N) DO_NOT_PROCESS="-N" N) DO_NOT_PROCESS="-N"
;; ;;
p) PANDOC_WRAPPER="$OPTARG"
;;
U) URL="$OPTARG" U) URL="$OPTARG"
;; ;;
w) SITE_URL="$OPTARG" w) SITE_URL="$OPTARG"
@@ -349,7 +340,7 @@ while getopts :hv:Vd:D:nNp:U:w:e:E: flag; do
;; ;;
esac esac
done done
#
# parse the command line arguments # parse the command line arguments
# #
if [[ $V_FLAG -ge 1 ]]; then if [[ $V_FLAG -ge 1 ]]; then
@@ -372,6 +363,7 @@ if [[ -z $YYYY ]]; then
exit 3 exit 3
fi fi
# verify that we have a topdir directory # verify that we have a topdir directory
# #
REPO_NAME=$(basename "$REPO_TOP_URL") REPO_NAME=$(basename "$REPO_TOP_URL")
@@ -392,6 +384,7 @@ if [[ ! -d $TOPDIR ]]; then
exit 6 exit 6
fi fi
# cd to topdir # cd to topdir
# #
if [[ ! -e $TOPDIR ]]; then if [[ ! -e $TOPDIR ]]; then
@@ -415,21 +408,51 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2 echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2
fi fi
# verify we have the pandoc wrapper
# verify that we have a bin subdirectory
# #
export BIN_PATH="$TOPDIR/bin"
if [[ ! -d $BIN_PATH ]]; then
echo "$0: ERROR: bin is not a directory under topdir: $BIN_PATH" 1>&2
exit 6
fi
export BIN_DIR="bin"
# verify that the bin/pandoc-wrapper.sh tool is executable
#
export PANDOC_WRAPPER="$BIN_DIR/pandoc-wrapper.sh"
if [[ ! -e $PANDOC_WRAPPER ]]; then if [[ ! -e $PANDOC_WRAPPER ]]; then
echo "$0: ERROR: pandoc wrapper tool does not exist: $PANDOC_WRAPPER" 1>&2 echo "$0: ERROR: bin/md2html.sh does not exist: $PANDOC_WRAPPER" 1>&2
exit 5 exit 5
fi fi
if [[ ! -f $PANDOC_WRAPPER ]]; then if [[ ! -f $PANDOC_WRAPPER ]]; then
echo "$0: ERROR: pandoc wrapper tool is not a file: $PANDOC_WRAPPER" 1>&2 echo "$0: ERROR: bin/md2html.sh is not a regular file: $PANDOC_WRAPPER" 1>&2
exit 5 exit 5
fi fi
if [[ ! -x $PANDOC_WRAPPER ]]; then if [[ ! -x $PANDOC_WRAPPER ]]; then
echo "$0: ERROR: pandoc wrapper tool is not an executable file: $PANDOC_WRAPPER" 1>&2 echo "$0: ERROR: bin/md2html.sh is not an executable file: $PANDOC_WRAPPER" 1>&2
exit 5 exit 5
fi fi
# verify that the bin/jval-wrapper.sh tool is executable
#
JVAL_WRAPPER="$BIN_DIR/jval-wrapper.sh"
if [[ ! -e $JVAL_WRAPPER ]]; then
echo "$0: ERROR: bin/jval-wrapper.sh does not exist: $JVAL_WRAPPER" 1>&2
exit 5
fi
if [[ ! -f $JVAL_WRAPPER ]]; then
echo "$0: ERROR: bin/jval-wrapper.sh is not a regular file: $JVAL_WRAPPER" 1>&2
exit 5
fi
if [[ ! -x $JVAL_WRAPPER ]]; then
echo "$0: ERROR: bin/jval-wrapper.sh is not an executable file: $JVAL_WRAPPER" 1>&2
exit 5
fi
# verify that YYYY is an entry directory # verify that YYYY is an entry directory
# #
if [[ ! -d $YYYY ]]; then if [[ ! -d $YYYY ]]; then
@@ -441,6 +464,7 @@ if [[ ! -r $YYYY ]]; then
exit 6 exit 6
fi fi
# verify we have a non-empty readable .top file # verify we have a non-empty readable .top file
# #
export TOP_FILE=".top" export TOP_FILE=".top"
@@ -461,6 +485,7 @@ if [[ ! -s $TOP_FILE ]]; then
exit 6 exit 6
fi fi
# verify that YYYY has a non-empty readable .year file # verify that YYYY has a non-empty readable .year file
# #
export YEAR_FILE="$YYYY/.year" export YEAR_FILE="$YYYY/.year"
@@ -481,6 +506,7 @@ if [[ ! -s $YEAR_FILE ]]; then
exit 6 exit 6
fi fi
# determine The N-th IOCCC string # determine The N-th IOCCC string
# #
LINE_NUM=$(sed -n "/$YYYY/=" "$TOP_FILE" | head -1) LINE_NUM=$(sed -n "/$YYYY/=" "$TOP_FILE" | head -1)
@@ -496,6 +522,7 @@ if [[ -z $ORDINAL ]]; then
exit 11 exit 11
fi fi
# parameter debugging # parameter debugging
# #
if [[ $V_FLAG -ge 3 ]]; then if [[ $V_FLAG -ge 3 ]]; then
@@ -519,6 +546,7 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: ORDINAL=$ORDINAL" 1>&2 echo "$0: debug[3]: ORDINAL=$ORDINAL" 1>&2
fi fi
# If -N, time to exit # If -N, time to exit
# #
if [[ -n $DO_NOT_PROCESS ]]; then if [[ -n $DO_NOT_PROCESS ]]; then
@@ -528,6 +556,7 @@ if [[ -n $DO_NOT_PROCESS ]]; then
exit 0 exit 0
fi fi
# create a temporary markdown for pandoc to process # create a temporary markdown for pandoc to process
# #
export TMP_FILE=".tmp.$NAME.FILE.$$.tmp" export TMP_FILE=".tmp.$NAME.FILE.$$.tmp"
@@ -550,6 +579,7 @@ elif [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: because of -n, temporary markdown file is not used: $TMP_FILE" 1>&2 echo "$0: debug[3]: because of -n, temporary markdown file is not used: $TMP_FILE" 1>&2
fi fi
# output leading markdown for this IOCCC year # output leading markdown for this IOCCC year
# #
{ {
@@ -568,6 +598,7 @@ else
fi fi
fi fi
# process each entry under YYYY # process each entry under YYYY
# #
export YYYY_DIR export YYYY_DIR
@@ -658,6 +689,7 @@ else
fi fi
fi fi
# write trailing markdown for this IOCCC year # write trailing markdown for this IOCCC year
# #
{ {
@@ -674,6 +706,7 @@ else
fi fi
fi fi
# convert temporary markdown file into HTML # convert temporary markdown file into HTML
# #
if [[ -z $NOOP ]]; then if [[ -z $NOOP ]]; then
@@ -694,6 +727,7 @@ elif [[ $V_FLAG -ge 1 ]]; then
echo "$0: debug[1]: -n disabled execution of: $PANDOC_WRAPPER $TMP_FILE -" 1>&2 echo "$0: debug[1]: -n disabled execution of: $PANDOC_WRAPPER $TMP_FILE -" 1>&2
fi fi
# All Done!!! All Done!!! -- Jessica Noll, Age 2 # All Done!!! All Done!!! -- Jessica Noll, Age 2
# #
if [[ -z $NOOP ]]; then if [[ -z $NOOP ]]; then
+18 -14
View File
@@ -42,6 +42,7 @@
# #
# Share and enjoy! :-) # Share and enjoy! :-)
# firewall - run only with a bash that is version 5.1.8 or later # firewall - run only with a bash that is version 5.1.8 or later
# #
# The "/usr/bin/env bash" command must result in using a bash that # The "/usr/bin/env bash" command must result in using a bash that
@@ -85,6 +86,7 @@ if [[ -z ${BASH_VERSINFO[0]} ||
exit 4 exit 4
fi fi
# setup bash file matching # setup bash file matching
# #
# We must declare arrays with -ag or -Ag, and we need loops to "export" modified variables. # We must declare arrays with -ag or -Ag, and we need loops to "export" modified variables.
@@ -97,6 +99,7 @@ shopt -u nocaseglob # disable strict case matching
shopt -u extglob # enable extended globbing patterns shopt -u extglob # enable extended globbing patterns
shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories
# set variables referenced in the usage message # set variables referenced in the usage message
# #
export VERSION="1.7.2 2024-08-05" export VERSION="1.7.2 2024-08-05"
@@ -140,6 +143,7 @@ export REPO_TOP_URL="https://github.com/ioccc-src/temp-test-ioccc"
# GitHub puts individual files under the "blob/master" sub-directory. # GitHub puts individual files under the "blob/master" sub-directory.
export REPO_URL="$REPO_TOP_URL/blob/master" export REPO_URL="$REPO_TOP_URL/blob/master"
# set usage message # set usage message
# #
export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-n] [-N] export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-n] [-N]
@@ -178,14 +182,16 @@ Exit codes:
$NAME version: $VERSION" $NAME version: $VERSION"
# setup # setup
# #
export NOOP= export NOOP=
export DO_NOT_PROCESS= export DO_NOT_PROCESS=
# parse command line # parse command line
# #
while getopts :hv:Vd:nNp:e:E: flag; do while getopts :hv:Vd:nNe:E: flag; do
case "$flag" in case "$flag" in
h) echo "$USAGE" 1>&2 h) echo "$USAGE" 1>&2
exit 2 exit 2
@@ -201,8 +207,6 @@ while getopts :hv:Vd:nNp:e:E: flag; do
;; ;;
N) DO_NOT_PROCESS="-N" N) DO_NOT_PROCESS="-N"
;; ;;
p) PANDOC_TOOL="$OPTARG"
;;
e) echo "$OPTARG" 1>&2 e) echo "$OPTARG" 1>&2
;; ;;
E) exit "$OPTARG" E) exit "$OPTARG"
@@ -224,7 +228,7 @@ while getopts :hv:Vd:nNp:e:E: flag; do
;; ;;
esac esac
done done
#
# parse the command line arguments # parse the command line arguments
# #
if [[ $V_FLAG -ge 1 ]]; then if [[ $V_FLAG -ge 1 ]]; then
@@ -244,6 +248,7 @@ fi
export MARKDOWN_INPUT="$1" export MARKDOWN_INPUT="$1"
export HTML_OUTPUT="$2" export HTML_OUTPUT="$2"
# firewall - validate args # firewall - validate args
# #
if [[ ! -e $MARKDOWN_INPUT ]]; then if [[ ! -e $MARKDOWN_INPUT ]]; then
@@ -265,6 +270,7 @@ fi
PANDOC_TOOL_VERSION=$("$PANDOC_TOOL" --version | head -1 | awk '{print $2;}') PANDOC_TOOL_VERSION=$("$PANDOC_TOOL" --version | head -1 | awk '{print $2;}')
export PANDOC_TOOL_VERSION export PANDOC_TOOL_VERSION
# set the minimum pandoc version # set the minimum pandoc version
# #
# We have found that very old versions of pandoc, such as version 2.14.0.3, # We have found that very old versions of pandoc, such as version 2.14.0.3,
@@ -279,6 +285,7 @@ export PANDOC_TOOL_VERSION
# #
export PANDOC_MIN_VERSION="3.1.12.2" export PANDOC_MIN_VERSION="3.1.12.2"
# verify that we have a topdir directory # verify that we have a topdir directory
# #
REPO_NAME=$(basename "$REPO_TOP_URL") REPO_NAME=$(basename "$REPO_TOP_URL")
@@ -299,6 +306,7 @@ if [[ ! -d $TOPDIR ]]; then
exit 6 exit 6
fi fi
# cd to topdir # cd to topdir
# #
if [[ ! -e $TOPDIR ]]; then if [[ ! -e $TOPDIR ]]; then
@@ -322,6 +330,7 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2 echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2
fi fi
# verify that we have an author subdirectory # verify that we have an author subdirectory
# #
export AUTHOR_PATH="$TOPDIR/author" export AUTHOR_PATH="$TOPDIR/author"
@@ -331,6 +340,7 @@ if [[ ! -d $AUTHOR_PATH ]]; then
fi fi
export AUTHOR_DIR="author" export AUTHOR_DIR="author"
# verify that we have an inc subdirectory # verify that we have an inc subdirectory
# #
export INC_PATH="$TOPDIR/inc" export INC_PATH="$TOPDIR/inc"
@@ -340,14 +350,6 @@ if [[ ! -d $INC_PATH ]]; then
fi fi
export INC_DIR="inc" export INC_DIR="inc"
# verify that we have a bin subdirectory
#
export BIN_PATH="$TOPDIR/bin"
if [[ ! -d $BIN_PATH ]]; then
echo "$0: ERROR: bin is not a directory under topdir: $BIN_PATH" 1>&2
exit 6
fi
export BIN_DIR="bin"
# parameter debugging # parameter debugging
# #
@@ -377,10 +379,9 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: AUTHOR_DIR=$AUTHOR_DIR" 1>&2 echo "$0: debug[3]: AUTHOR_DIR=$AUTHOR_DIR" 1>&2
echo "$0: debug[3]: INC_PATH=$INC_PATH" 1>&2 echo "$0: debug[3]: INC_PATH=$INC_PATH" 1>&2
echo "$0: debug[3]: INC_DIR=$INC_DIR" 1>&2 echo "$0: debug[3]: INC_DIR=$INC_DIR" 1>&2
echo "$0: debug[3]: BIN_PATH=$BIN_PATH" 1>&2
echo "$0: debug[3]: BIN_DIR=$BIN_DIR" 1>&2
fi fi
# If -N, time to exit # If -N, time to exit
# #
if [[ -n $DO_NOT_PROCESS ]]; then if [[ -n $DO_NOT_PROCESS ]]; then
@@ -390,6 +391,7 @@ if [[ -n $DO_NOT_PROCESS ]]; then
exit 0 exit 0
fi fi
# verify that the pandoc version is >= the minimum version # verify that the pandoc version is >= the minimum version
# #
FIRST_VERSION=$(printf "%s\n%s" "$PANDOC_TOOL_VERSION" "$PANDOC_MIN_VERSION" | LC_ALL=C sort -V | head -1) FIRST_VERSION=$(printf "%s\n%s" "$PANDOC_TOOL_VERSION" "$PANDOC_MIN_VERSION" | LC_ALL=C sort -V | head -1)
@@ -402,6 +404,7 @@ if [[ $FIRST_VERSION != "$PANDOC_MIN_VERSION" ]]; then
exit 5 exit 5
fi fi
# execute pandoc # execute pandoc
# #
if [[ -z $NOOP ]]; then if [[ -z $NOOP ]]; then
@@ -428,6 +431,7 @@ if [[ $status -ne 0 ]]; then
exit 1 exit 1
fi fi
# All Done!!! All Done!!! -- Jessica Noll, Age 2 # All Done!!! All Done!!! -- Jessica Noll, Age 2
# #
exit 0 exit 0
+73 -20
View File
@@ -35,6 +35,7 @@
# #
# Share and enjoy! :-) # Share and enjoy! :-)
# firewall - run only with a bash that is version 5.1.8 or later # firewall - run only with a bash that is version 5.1.8 or later
# #
# The "/usr/bin/env bash" command must result in using a bash that # The "/usr/bin/env bash" command must result in using a bash that
@@ -78,6 +79,7 @@ if [[ -z ${BASH_VERSINFO[0]} ||
exit 4 exit 4
fi fi
# setup bash file matching # setup bash file matching
# #
# We must declare arrays with -ag or -Ag, and we need loops to "export" modified variables. # We must declare arrays with -ag or -Ag, and we need loops to "export" modified variables.
@@ -90,9 +92,10 @@ shopt -u nocaseglob # disable strict case matching
shopt -u extglob # enable extended globbing patterns shopt -u extglob # enable extended globbing patterns
shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories
# set variables referenced in the usage message # set variables referenced in the usage message
# #
export VERSION="1.1.7 2024-08-05" export VERSION="1.2 2024-08-17"
NAME=$(basename "$0") NAME=$(basename "$0")
export NAME export NAME
export V_FLAG=0 export V_FLAG=0
@@ -118,8 +121,6 @@ export DOCROOT_SLASH="../../"
# instead of the slightly-slower "bin/readme2index.sh" tool. # instead of the slightly-slower "bin/readme2index.sh" tool.
# #
export TAGLINE="bin/readme2index.sh" export TAGLINE="bin/readme2index.sh"
export MD2HTML_SH="bin/md2html.sh"
export PANDOC_WRAPPER="bin/pandoc-wrapper.sh"
export REPO_TOP_URL="https://github.com/ioccc-src/temp-test-ioccc" export REPO_TOP_URL="https://github.com/ioccc-src/temp-test-ioccc"
# GitHub puts individual files under the "blob/master" sub-directory. # GitHub puts individual files under the "blob/master" sub-directory.
export REPO_URL="$REPO_TOP_URL/blob/master" export REPO_URL="$REPO_TOP_URL/blob/master"
@@ -129,15 +130,17 @@ export NOOP=
export DO_NOT_PROCESS= export DO_NOT_PROCESS=
export EXIT_CODE="0" export EXIT_CODE="0"
# clear options we will add to tools # clear options we will add to tools
# #
unset TOOL_OPTION unset TOOL_OPTION
declare -ag TOOL_OPTION declare -ag TOOL_OPTION
# usage # usage
# #
export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N] export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N]
[-t tagline] [-T md2html.sh] [-p tool] [-w site_url] [-t tagline] [-w site_url]
tool [more_options] tool [more_options]
-h print help message and exit -h print help message and exit
@@ -154,9 +157,6 @@ export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N]
-N do not process anything, just parse arguments (def: process something) -N do not process anything, just parse arguments (def: process something)
-t tagline string to write about the tool that formed the markdown content (def: $TAGLINE) -t tagline string to write about the tool that formed the markdown content (def: $TAGLINE)
-T md2html.sh run 'markdown to html tool' to convert markdown into HTML (def: $MD2HTML_SH)
-p tool run 'pandoc wrapper tool' (not pandoc path) during HTML phase number 21 (def: use $PANDOC_WRAPPER)
-w site_url Base URL of the website (def: $SITE_URL) -w site_url Base URL of the website (def: $SITE_URL)
NOTE: The '-w site_url' is passed as leading options on tool command lines. NOTE: The '-w site_url' is passed as leading options on tool command lines.
@@ -164,7 +164,7 @@ export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N]
tool the tool to run over all entries tool the tool to run over all entries
[more_options] additional tool command line options to use before the YYYY/dir argument [more_options] additional tool command line options to use before the YYYY/dir argument
NOTE: Any '-t tagline', '-T md2html.sh', '-p tool', '-w site_url' NOTE: Any '-t tagline', '-w site_url'
are passed to the 'tool' at the beginning of the command line, and are passed to the 'tool' at the beginning of the command line, and
before any optional 'more_options' and before the final YYYY/dir argument. before any optional 'more_options' and before the final YYYY/dir argument.
@@ -181,9 +181,10 @@ Exit codes:
$NAME version: $VERSION" $NAME version: $VERSION"
# parse command line # parse command line
# #
while getopts :hv:Vd:D:nNt:T:p:w: flag; do while getopts :hv:Vd:D:nNt:w: flag; do
case "$flag" in case "$flag" in
h) echo "$USAGE" 1>&2 h) echo "$USAGE" 1>&2
exit 2 exit 2
@@ -232,14 +233,6 @@ while getopts :hv:Vd:D:nNt:T:p:w: flag; do
TOOL_OPTION+=("-t") TOOL_OPTION+=("-t")
TOOL_OPTION+=("$TAGLINE") TOOL_OPTION+=("$TAGLINE")
;; ;;
T) MD2HTML_SH="$OPTARG"
TOOL_OPTION+=("-T")
TOOL_OPTION+=("$MD2HTML_SH")
;;
p) PANDOC_WRAPPER="$OPTARG"
TOOL_OPTION+=("-p")
TOOL_OPTION+=("$PANDOC_WRAPPER")
;;
w) SITE_URL="$OPTARG" w) SITE_URL="$OPTARG"
TOOL_OPTION+=("-w") TOOL_OPTION+=("-w")
TOOL_OPTION+=("$SITE_URL") TOOL_OPTION+=("$SITE_URL")
@@ -261,7 +254,7 @@ while getopts :hv:Vd:D:nNt:T:p:w: flag; do
;; ;;
esac esac
done done
#
# remove the options # remove the options
# #
shift $(( OPTIND - 1 )); shift $(( OPTIND - 1 ));
@@ -279,6 +272,7 @@ fi
# #
export ENTRY_PATH="$1" export ENTRY_PATH="$1"
# always add the '-v level' option, unless level is empty, to the set of options passed to the md2html.sh tool # always add the '-v level' option, unless level is empty, to the set of options passed to the md2html.sh tool
# #
if [[ -n $V_FLAG ]]; then if [[ -n $V_FLAG ]]; then
@@ -286,6 +280,7 @@ if [[ -n $V_FLAG ]]; then
TOOL_OPTION+=("$V_FLAG") TOOL_OPTION+=("$V_FLAG")
fi fi
# always add the '-t tagline' option, unless tagline is empty, to the set of options passed to the md2html.sh tool # always add the '-t tagline' option, unless tagline is empty, to the set of options passed to the md2html.sh tool
# #
if [[ -n $TAGLINE ]]; then if [[ -n $TAGLINE ]]; then
@@ -293,6 +288,7 @@ if [[ -n $TAGLINE ]]; then
TOOL_OPTION+=("$TAGLINE") TOOL_OPTION+=("$TAGLINE")
fi fi
# verify that we have a topdir directory # verify that we have a topdir directory
# #
REPO_NAME=$(basename "$REPO_TOP_URL") REPO_NAME=$(basename "$REPO_TOP_URL")
@@ -313,6 +309,7 @@ if [[ ! -d $TOPDIR ]]; then
exit 6 exit 6
fi fi
# cd to topdir # cd to topdir
# #
if [[ ! -e $TOPDIR ]]; then if [[ ! -e $TOPDIR ]]; then
@@ -336,6 +333,51 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2 echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2
fi fi
# verify that we have a bin subdirectory
#
export BIN_PATH="$TOPDIR/bin"
if [[ ! -d $BIN_PATH ]]; then
echo "$0: ERROR: bin is not a directory under topdir: $BIN_PATH" 1>&2
exit 6
fi
export BIN_DIR="bin"
# verify that the bin/md2html.sh tool is executable
#
export MD2HTML_SH="$BIN_DIR/md2html.sh"
if [[ ! -e $MD2HTML_SH ]]; then
echo "$0: ERROR: bin/md2html.sh does not exist: $MD2HTML_SH" 1>&2
exit 5
fi
if [[ ! -f $MD2HTML_SH ]]; then
echo "$0: ERROR: bin/md2html.sh is not a regular file: $MD2HTML_SH" 1>&2
exit 5
fi
if [[ ! -x $MD2HTML_SH ]]; then
echo "$0: ERROR: bin/md2html.sh is not an executable file: $MD2HTML_SH" 1>&2
exit 5
fi
# verify that the bin/pandoc-wrapper.sh tool is executable
#
export PANDOC_WRAPPER="$BIN_DIR/pandoc-wrapper.sh"
if [[ ! -e $PANDOC_WRAPPER ]]; then
echo "$0: ERROR: bin/md2html.sh does not exist: $PANDOC_WRAPPER" 1>&2
exit 5
fi
if [[ ! -f $PANDOC_WRAPPER ]]; then
echo "$0: ERROR: bin/md2html.sh is not a regular file: $PANDOC_WRAPPER" 1>&2
exit 5
fi
if [[ ! -x $PANDOC_WRAPPER ]]; then
echo "$0: ERROR: bin/md2html.sh is not an executable file: $PANDOC_WRAPPER" 1>&2
exit 5
fi
# verify that ENTRY_PATH is a entry directory # verify that ENTRY_PATH is a entry directory
# #
if [[ ! -d $ENTRY_PATH ]]; then if [[ ! -d $ENTRY_PATH ]]; then
@@ -409,6 +451,7 @@ if [[ ! -r $ENTRY_JSON ]]; then
exit 7 exit 7
fi fi
# verify that the md2html tool is executable # verify that the md2html tool is executable
# #
if [[ ! -e $MD2HTML_SH ]]; then if [[ ! -e $MD2HTML_SH ]]; then
@@ -424,6 +467,7 @@ if [[ ! -x $MD2HTML_SH ]]; then
exit 5 exit 5
fi fi
# setup README_PATH and INDEX_PATH using YYYY_DIR # setup README_PATH and INDEX_PATH using YYYY_DIR
# #
export README_PATH="$YYYY_DIR/README.md" export README_PATH="$YYYY_DIR/README.md"
@@ -445,6 +489,7 @@ if [[ ! -s $README_PATH ]]; then
exit 7 exit 7
fi fi
# verify that .entry.json is a non-empty readable file # verify that .entry.json is a non-empty readable file
# #
export ENTRY_JSON="$YYYY_DIR/.entry.json" export ENTRY_JSON="$YYYY_DIR/.entry.json"
@@ -465,11 +510,13 @@ if [[ ! -s $ENTRY_JSON ]]; then
exit 7 exit 7
fi fi
# always add the '-U URL' for the entry's index.html file # always add the '-U URL' for the entry's index.html file
# #
TOOL_OPTION+=("-U") TOOL_OPTION+=("-U")
TOOL_OPTION+=("$SITE_URL/$YYYY_DIR/index.html") TOOL_OPTION+=("$SITE_URL/$YYYY_DIR/index.html")
# print running info if verbose # print running info if verbose
# #
# If -v 3 or higher, print exported variables in order that they were exported. # If -v 3 or higher, print exported variables in order that they were exported.
@@ -483,8 +530,6 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: DOCROOT_SLASH=$DOCROOT_SLASH" 1>&2 echo "$0: debug[3]: DOCROOT_SLASH=$DOCROOT_SLASH" 1>&2
echo "$0: debug[3]: TAGLINE=$TAGLINE" 1>&2 echo "$0: debug[3]: TAGLINE=$TAGLINE" 1>&2
echo "$0: debug[3]: TAGLINE=$TAGLINE" 1>&2 echo "$0: debug[3]: TAGLINE=$TAGLINE" 1>&2
echo "$0: debug[3]: MD2HTML_SH=$MD2HTML_SH" 1>&2
echo "$0: debug[3]: PANDOC_WRAPPER=$PANDOC_WRAPPER" 1>&2
echo "$0: debug[3]: REPO_TOP_URL=$REPO_TOP_URL" 1>&2 echo "$0: debug[3]: REPO_TOP_URL=$REPO_TOP_URL" 1>&2
echo "$0: debug[3]: REPO_URL=$REPO_URL" 1>&2 echo "$0: debug[3]: REPO_URL=$REPO_URL" 1>&2
echo "$0: debug[3]: SITE_URL=$SITE_URL" 1>&2 echo "$0: debug[3]: SITE_URL=$SITE_URL" 1>&2
@@ -497,6 +542,10 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: ENTRY_PATH=$ENTRY_PATH" 1>&2 echo "$0: debug[3]: ENTRY_PATH=$ENTRY_PATH" 1>&2
echo "$0: debug[3]: REPO_NAME=$REPO_NAME" 1>&2 echo "$0: debug[3]: REPO_NAME=$REPO_NAME" 1>&2
echo "$0: debug[3]: CD_FAILED=$CD_FAILED" 1>&2 echo "$0: debug[3]: CD_FAILED=$CD_FAILED" 1>&2
echo "$0: debug[3]: BIN_PATH=$BIN_PATH" 1>&2
echo "$0: debug[3]: BIN_DIR=$BIN_DIR" 1>&2
echo "$0: debug[3]: MD2HTML_SH=$MD2HTML_SH" 1>&2
echo "$0: debug[3]: PANDOC_WRAPPER=$PANDOC_WRAPPER" 1>&2
echo "$0: debug[3]: YEAR_DIR=$YEAR_DIR" 1>&2 echo "$0: debug[3]: YEAR_DIR=$YEAR_DIR" 1>&2
echo "$0: debug[3]: ENTRY_DIR=$ENTRY_DIR" 1>&2 echo "$0: debug[3]: ENTRY_DIR=$ENTRY_DIR" 1>&2
echo "$0: debug[3]: ENTRY_ID=$ENTRY_ID" 1>&2 echo "$0: debug[3]: ENTRY_ID=$ENTRY_ID" 1>&2
@@ -510,6 +559,7 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: ENTRY_JSON=$ENTRY_JSON" 1>&2 echo "$0: debug[3]: ENTRY_JSON=$ENTRY_JSON" 1>&2
fi fi
# -N stops early before any processing is performed # -N stops early before any processing is performed
# #
if [[ -n $DO_NOT_PROCESS ]]; then if [[ -n $DO_NOT_PROCESS ]]; then
@@ -519,6 +569,7 @@ if [[ -n $DO_NOT_PROCESS ]]; then
exit 0 exit 0
fi fi
# determine if we need to run the tool # determine if we need to run the tool
# #
# Check if the non-empty index.html is newer than both README.md and .entry.json files. # Check if the non-empty index.html is newer than both README.md and .entry.json files.
@@ -535,6 +586,7 @@ if [[ -s $INDEX_PATH && $INDEX_PATH -nt $ENTRY_JSON && $INDEX_PATH -nt $README_P
exit 0 exit 0
fi fi
# run the md2html.sh tool, unless -n # run the md2html.sh tool, unless -n
# #
if [[ -z $NOOP ]]; then if [[ -z $NOOP ]]; then
@@ -575,6 +627,7 @@ elif [[ $V_FLAG -ge 5 ]]; then
"$README_PATH $INDEX_PATH" 1>&2 "$README_PATH $INDEX_PATH" 1>&2
fi fi
# All Done!!! All Done!!! -- Jessica Noll, Age 2 # All Done!!! All Done!!! -- Jessica Noll, Age 2
# #
if [[ $EXIT_CODE -ne 0 ]]; then if [[ $EXIT_CODE -ne 0 ]]; then
+69 -36
View File
@@ -29,6 +29,7 @@
# #
# Share and enjoy! :-) # Share and enjoy! :-)
# firewall - run only with a bash that is version 5.1.8 or later # firewall - run only with a bash that is version 5.1.8 or later
# #
# The "/usr/bin/env bash" command must result in using a bash that # The "/usr/bin/env bash" command must result in using a bash that
@@ -72,6 +73,7 @@ if [[ -z ${BASH_VERSINFO[0]} ||
exit 4 exit 4
fi fi
# setup bash file matching # setup bash file matching
# #
# We must declare arrays with -ag or -Ag, and we need loops to "export" modified variables. # We must declare arrays with -ag or -Ag, and we need loops to "export" modified variables.
@@ -84,9 +86,10 @@ shopt -u nocaseglob # disable strict case matching
shopt -u extglob # enable extended globbing patterns shopt -u extglob # enable extended globbing patterns
shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories
# set variables referenced in the usage message # set variables referenced in the usage message
# #
export VERSION="1.2.7 2024-08-05" export VERSION="1.3 2024-08-17"
NAME=$(basename "$0") NAME=$(basename "$0")
export NAME export NAME
export V_FLAG=0 export V_FLAG=0
@@ -104,8 +107,6 @@ fi
export TOPDIR export TOPDIR
export DOCROOT_SLASH="../../" export DOCROOT_SLASH="../../"
export TAGLINE="bin/$NAME" export TAGLINE="bin/$NAME"
export MD2HTML_SH="bin/md2html.sh"
export PANDOC_WRAPPER="bin/pandoc-wrapper.sh"
export REPO_TOP_URL="https://github.com/ioccc-src/temp-test-ioccc" export REPO_TOP_URL="https://github.com/ioccc-src/temp-test-ioccc"
# GitHub puts individual files under the "blob/master" sub-directory. # GitHub puts individual files under the "blob/master" sub-directory.
export REPO_URL="$REPO_TOP_URL/blob/master" export REPO_URL="$REPO_TOP_URL/blob/master"
@@ -115,16 +116,17 @@ export NOOP=
export DO_NOT_PROCESS= export DO_NOT_PROCESS=
export EXIT_CODE="0" export EXIT_CODE="0"
# clear options we will add to tools # clear options we will add to tools
# #
unset TOOL_OPTION unset TOOL_OPTION
declare -ag TOOL_OPTION declare -ag TOOL_OPTION
# usage # usage
# #
export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N] export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N]
[-t tagline] [-T md2html.sh] [-p tool] [-t tagline] [-w site_url] [-e string ..] [-E exitcode]
[-w site_url] [-e string ..] [-E exitcode]
YYYY/dir YYYY/dir
-h print help message and exit -h print help message and exit
@@ -143,11 +145,6 @@ export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N]
-t tagline string to write about the tool that formed the markdown content (def: $TAGLINE) -t tagline string to write about the tool that formed the markdown content (def: $TAGLINE)
NOTE: 'tagline' may be enclosed within, but may NOT contain an internal single-quote, or double-quote. NOTE: 'tagline' may be enclosed within, but may NOT contain an internal single-quote, or double-quote.
-T md2html.sh run 'markdown to html tool' to convert markdown into HTML (def: $MD2HTML_SH)
-p tool run 'pandoc wrapper tool' (not pandoc path) during HTML phase number 21 (def: use $PANDOC_WRAPPER)
-p . skip HTML phase number 21 (def: do nothing during HTML phase number 21)
NOTE: The '-p tool' will be passed as leading options on the -b tool and -a tool command lines.
-w site_url Base URL of the website (def: $SITE_URL) -w site_url Base URL of the website (def: $SITE_URL)
NOTE: The '-w site_url' is passed as leading options on tool command lines. NOTE: The '-w site_url' is passed as leading options on tool command lines.
@@ -156,7 +153,7 @@ export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N]
NOTE: The '-v level' is passed as initial command line options to the 'markdown to html tool' (md2html.sh). NOTE: The '-v level' is passed as initial command line options to the 'markdown to html tool' (md2html.sh).
The 'tagline' is passed as '-t tagline' to the 'markdown to html tool' (md2html.sh), after the '-v level'. The 'tagline' is passed as '-t tagline' to the 'markdown to html tool' (md2html.sh), after the '-v level'.
Any '-T md2html.sh', '-p tool', '-P pandoc_opts', '-U top_url' Any '-P pandoc_opts', '-U top_url'
are passed to the 'markdown to html tool' (md2html.sh), and will be before any command line arguments. are passed to the 'markdown to html tool' (md2html.sh), and will be before any command line arguments.
Exit codes: Exit codes:
@@ -172,9 +169,10 @@ Exit codes:
$NAME version: $VERSION" $NAME version: $VERSION"
# parse command line # parse command line
# #
while getopts :hv:Vd:D:nNt:T:p:w: flag; do while getopts :hv:Vd:D:nNt:w: flag; do
case "$flag" in case "$flag" in
h) echo "$USAGE" 1>&2 h) echo "$USAGE" 1>&2
exit 2 exit 2
@@ -225,14 +223,6 @@ while getopts :hv:Vd:D:nNt:T:p:w: flag; do
TOOL_OPTION+=("-t") TOOL_OPTION+=("-t")
TOOL_OPTION+=("$TAGLINE") TOOL_OPTION+=("$TAGLINE")
;; ;;
T) MD2HTML_SH="$OPTARG"
TOOL_OPTION+=("-T")
TOOL_OPTION+=("$MD2HTML_SH")
;;
p) PANDOC_WRAPPER="$OPTARG"
TOOL_OPTION+=("-p")
TOOL_OPTION+=("$PANDOC_WRAPPER")
;;
w) SITE_URL="$OPTARG" w) SITE_URL="$OPTARG"
TOOL_OPTION+=("-w") TOOL_OPTION+=("-w")
TOOL_OPTION+=("$SITE_URL") TOOL_OPTION+=("$SITE_URL")
@@ -254,7 +244,7 @@ while getopts :hv:Vd:D:nNt:T:p:w: flag; do
;; ;;
esac esac
done done
#
# remove the options # remove the options
# #
shift $(( OPTIND - 1 )); shift $(( OPTIND - 1 ));
@@ -272,6 +262,7 @@ fi
# #
export ENTRY_PATH="$1" export ENTRY_PATH="$1"
# always add the '-v level' option, unless level is empty, to the set of options passed to the md2html.sh tool # always add the '-v level' option, unless level is empty, to the set of options passed to the md2html.sh tool
# #
if [[ -n $V_FLAG ]]; then if [[ -n $V_FLAG ]]; then
@@ -279,6 +270,7 @@ if [[ -n $V_FLAG ]]; then
TOOL_OPTION+=("$V_FLAG") TOOL_OPTION+=("$V_FLAG")
fi fi
# always add the '-t tagline' option, unless tagline is empty, to the set of options passed to the md2html.sh tool # always add the '-t tagline' option, unless tagline is empty, to the set of options passed to the md2html.sh tool
# #
if [[ -n $TAGLINE ]]; then if [[ -n $TAGLINE ]]; then
@@ -286,6 +278,7 @@ if [[ -n $TAGLINE ]]; then
TOOL_OPTION+=("$TAGLINE") TOOL_OPTION+=("$TAGLINE")
fi fi
# verify that we have a topdir directory # verify that we have a topdir directory
# #
REPO_NAME=$(basename "$REPO_TOP_URL") REPO_NAME=$(basename "$REPO_TOP_URL")
@@ -306,6 +299,7 @@ if [[ ! -d $TOPDIR ]]; then
exit 6 exit 6
fi fi
# cd to topdir # cd to topdir
# #
if [[ ! -e $TOPDIR ]]; then if [[ ! -e $TOPDIR ]]; then
@@ -329,6 +323,51 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2 echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2
fi fi
# verify that we have a bin subdirectory
#
export BIN_PATH="$TOPDIR/bin"
if [[ ! -d $BIN_PATH ]]; then
echo "$0: ERROR: bin is not a directory under topdir: $BIN_PATH" 1>&2
exit 6
fi
export BIN_DIR="bin"
# verify that the bin/md2html.sh tool is executable
#
export MD2HTML_SH="$BIN_DIR/md2html.sh"
if [[ ! -e $MD2HTML_SH ]]; then
echo "$0: ERROR: bin/md2html.sh does not exist: $MD2HTML_SH" 1>&2
exit 5
fi
if [[ ! -f $MD2HTML_SH ]]; then
echo "$0: ERROR: bin/md2html.sh is not a regular file: $MD2HTML_SH" 1>&2
exit 5
fi
if [[ ! -x $MD2HTML_SH ]]; then
echo "$0: ERROR: bin/md2html.sh is not an executable file: $MD2HTML_SH" 1>&2
exit 5
fi
# verify that the bin/pandoc-wrapper.sh tool is executable
#
export PANDOC_WRAPPER="$BIN_DIR/pandoc-wrapper.sh"
if [[ ! -e $PANDOC_WRAPPER ]]; then
echo "$0: ERROR: bin/md2html.sh does not exist: $PANDOC_WRAPPER" 1>&2
exit 5
fi
if [[ ! -f $PANDOC_WRAPPER ]]; then
echo "$0: ERROR: bin/md2html.sh is not a regular file: $PANDOC_WRAPPER" 1>&2
exit 5
fi
if [[ ! -x $PANDOC_WRAPPER ]]; then
echo "$0: ERROR: bin/md2html.sh is not an executable file: $PANDOC_WRAPPER" 1>&2
exit 5
fi
# verify that ENTRY_PATH is a entry directory # verify that ENTRY_PATH is a entry directory
# #
if [[ ! -d $ENTRY_PATH ]]; then if [[ ! -d $ENTRY_PATH ]]; then
@@ -389,20 +428,6 @@ if [[ $ENTRY_PATH != "$DOT_PATH_CONTENT" ]]; then
exit 7 exit 7
fi fi
# verify that the md2html tool is executable
#
if [[ ! -e $MD2HTML_SH ]]; then
echo "$0: ERROR: md2html.sh does not exist: $MD2HTML_SH" 1>&2
exit 5
fi
if [[ ! -f $MD2HTML_SH ]]; then
echo "$0: ERROR: md2html.sh is not a regular file: $MD2HTML_SH" 1>&2
exit 5
fi
if [[ ! -x $MD2HTML_SH ]]; then
echo "$0: ERROR: md2html.sh is not an executable file: $MD2HTML_SH" 1>&2
exit 5
fi
# setup README_PATH and INDEX_PATH using YYYY_DIR # setup README_PATH and INDEX_PATH using YYYY_DIR
# #
@@ -425,6 +450,7 @@ if [[ ! -s $README_PATH ]]; then
exit 7 exit 7
fi fi
# verify that .entry.json is a non-empty readable file # verify that .entry.json is a non-empty readable file
# #
export ENTRY_JSON="$YYYY_DIR/.entry.json" export ENTRY_JSON="$YYYY_DIR/.entry.json"
@@ -445,11 +471,13 @@ if [[ ! -s $ENTRY_JSON ]]; then
exit 7 exit 7
fi fi
# always add the '-U URL' for the entry's index.html file # always add the '-U URL' for the entry's index.html file
# #
TOOL_OPTION+=("-U") TOOL_OPTION+=("-U")
TOOL_OPTION+=("$SITE_URL/$YYYY_DIR/index.html") TOOL_OPTION+=("$SITE_URL/$YYYY_DIR/index.html")
# print running info if verbose # print running info if verbose
# #
# If -v 3 or higher, print exported variables in order that they were exported. # If -v 3 or higher, print exported variables in order that they were exported.
@@ -463,7 +491,6 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: DOCROOT_SLASH=$DOCROOT_SLASH" 1>&2 echo "$0: debug[3]: DOCROOT_SLASH=$DOCROOT_SLASH" 1>&2
echo "$0: debug[3]: TAGLINE=$TAGLINE" 1>&2 echo "$0: debug[3]: TAGLINE=$TAGLINE" 1>&2
echo "$0: debug[3]: MD2HTML_SH=$MD2HTML_SH" 1>&2 echo "$0: debug[3]: MD2HTML_SH=$MD2HTML_SH" 1>&2
echo "$0: debug[3]: PANDOC_WRAPPER=$PANDOC_WRAPPER" 1>&2
echo "$0: debug[3]: REPO_TOP_URL=$REPO_TOP_URL" 1>&2 echo "$0: debug[3]: REPO_TOP_URL=$REPO_TOP_URL" 1>&2
echo "$0: debug[3]: REPO_URL=$REPO_URL" 1>&2 echo "$0: debug[3]: REPO_URL=$REPO_URL" 1>&2
echo "$0: debug[3]: SITE_URL=$SITE_URL" 1>&2 echo "$0: debug[3]: SITE_URL=$SITE_URL" 1>&2
@@ -476,6 +503,9 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: ENTRY_PATH=$ENTRY_PATH" 1>&2 echo "$0: debug[3]: ENTRY_PATH=$ENTRY_PATH" 1>&2
echo "$0: debug[3]: REPO_NAME=$REPO_NAME" 1>&2 echo "$0: debug[3]: REPO_NAME=$REPO_NAME" 1>&2
echo "$0: debug[3]: CD_FAILED=$CD_FAILED" 1>&2 echo "$0: debug[3]: CD_FAILED=$CD_FAILED" 1>&2
echo "$0: debug[3]: BIN_PATH=$BIN_PATH" 1>&2
echo "$0: debug[3]: BIN_DIR=$BIN_DIR" 1>&2
echo "$0: debug[3]: PANDOC_WRAPPER=$PANDOC_WRAPPER" 1>&2
echo "$0: debug[3]: YEAR_DIR=$YEAR_DIR" 1>&2 echo "$0: debug[3]: YEAR_DIR=$YEAR_DIR" 1>&2
echo "$0: debug[3]: ENTRY_DIR=$ENTRY_DIR" 1>&2 echo "$0: debug[3]: ENTRY_DIR=$ENTRY_DIR" 1>&2
echo "$0: debug[3]: ENTRY_ID=$ENTRY_ID" 1>&2 echo "$0: debug[3]: ENTRY_ID=$ENTRY_ID" 1>&2
@@ -489,6 +519,7 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: ENTRY_JSON=$ENTRY_JSON" 1>&2 echo "$0: debug[3]: ENTRY_JSON=$ENTRY_JSON" 1>&2
fi fi
# -N stops early before any processing is performed # -N stops early before any processing is performed
# #
if [[ -n $DO_NOT_PROCESS ]]; then if [[ -n $DO_NOT_PROCESS ]]; then
@@ -498,6 +529,7 @@ if [[ -n $DO_NOT_PROCESS ]]; then
exit 0 exit 0
fi fi
# run the md2html.sh tool, unless -n # run the md2html.sh tool, unless -n
# #
if [[ -z $NOOP ]]; then if [[ -z $NOOP ]]; then
@@ -525,6 +557,7 @@ elif [[ $V_FLAG -ge 5 ]]; then
"$README_PATH $INDEX_PATH" 1>&2 "$README_PATH $INDEX_PATH" 1>&2
fi fi
# All Done!!! All Done!!! -- Jessica Noll, Age 2 # All Done!!! All Done!!! -- Jessica Noll, Age 2
# #
if [[ $EXIT_CODE -ne 0 ]]; then if [[ $EXIT_CODE -ne 0 ]]; then
+3
View File
@@ -46,6 +46,9 @@
# #
# Share and enjoy! :-) # Share and enjoy! :-)
# sort .gitignore content on stdin to stdout
#
sed -e '/^#/s/.*/0 &/' -e '/^*/s/.*/1 &/' -e '/^[^01*!]/s/.*/2 &/' -e '/^!/s/.*/3 &/' | sed -e '/^#/s/.*/0 &/' -e '/^*/s/.*/1 &/' -e '/^[^01*!]/s/.*/2 &/' -e '/^!/s/.*/3 &/' |
LC_ALL=C sort -u -k 1n -k 2d | LC_ALL=C sort -u -k 1n -k 2d |
sed 's/[0123] //' sed 's/[0123] //'
+26 -10
View File
@@ -41,6 +41,7 @@
# #
# Share and enjoy! :-) # Share and enjoy! :-)
# firewall - run only with a bash that is version 5.1.8 or later # firewall - run only with a bash that is version 5.1.8 or later
# #
# The "/usr/bin/env bash" command must result in using a bash that # The "/usr/bin/env bash" command must result in using a bash that
@@ -97,6 +98,7 @@ shopt -u nocaseglob # disable strict case matching
shopt -u extglob # enable extended globbing patterns shopt -u extglob # enable extended globbing patterns
shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories
# set variables referenced in the usage message # set variables referenced in the usage message
# #
export VERSION="1.1.8 2024-07-28" export VERSION="1.1.8 2024-07-28"
@@ -119,7 +121,7 @@ export REPO_TOP_URL="https://github.com/ioccc-src/temp-test-ioccc"
# GitHub puts individual files under the "blob/master" sub-directory. # GitHub puts individual files under the "blob/master" sub-directory.
export REPO_URL="$REPO_TOP_URL/blob/master" export REPO_URL="$REPO_TOP_URL/blob/master"
export TOP_URL="https://ioccc-src.github.io/temp-test-ioccc" export TOP_URL="https://ioccc-src.github.io/temp-test-ioccc"
export SGI_TOOL="bin/sgi.sh"
# set usage message # set usage message
# #
@@ -150,11 +152,13 @@ Exit codes:
$NAME version: $VERSION" $NAME version: $VERSION"
# setup # setup
# #
export NOOP= export NOOP=
export DO_NOT_PROCESS= export DO_NOT_PROCESS=
# parse command line # parse command line
# #
while getopts :hv:Vd:nN flag; do while getopts :hv:Vd:nN flag; do
@@ -190,7 +194,7 @@ while getopts :hv:Vd:nN flag; do
;; ;;
esac esac
done done
#
# parse the command line arguments # parse the command line arguments
# #
if [[ $V_FLAG -ge 3 ]]; then if [[ $V_FLAG -ge 3 ]]; then
@@ -209,6 +213,7 @@ fi
# #
export ENTRY_PATH="$1" export ENTRY_PATH="$1"
# verify that we have a topdir directory # verify that we have a topdir directory
# #
REPO_NAME=$(basename "$REPO_TOP_URL") REPO_NAME=$(basename "$REPO_TOP_URL")
@@ -229,6 +234,7 @@ if [[ ! -d $TOPDIR ]]; then
exit 6 exit 6
fi fi
# cd to topdir # cd to topdir
# #
if [[ ! -e $TOPDIR ]]; then if [[ ! -e $TOPDIR ]]; then
@@ -252,6 +258,7 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2 echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2
fi fi
# verify that we have a bin subdirectory # verify that we have a bin subdirectory
# #
export BIN_PATH="$TOPDIR/bin" export BIN_PATH="$TOPDIR/bin"
@@ -261,21 +268,24 @@ if [[ ! -d $BIN_PATH ]]; then
fi fi
export BIN_DIR="bin" export BIN_DIR="bin"
# verify we have an executable sgi.sh tool
# verify that the bin/sgi.sh tool is executable
# #
if [[ ! -e $SGI_TOOL ]]; then export SGI_TOOL="$BIN_DIR/sgi.sh"
echo "$0: ERROR: sgi.sh tool does not exist: $SGI_TOOL" 1>&2 if [[ ! -e $SGI_TOOL.sh ]]; then
echo "$0: ERROR: bin/sgi.sh does not exist: $SGI_TOOL.sh" 1>&2
exit 5 exit 5
fi fi
if [[ ! -f $SGI_TOOL ]]; then if [[ ! -f $SGI_TOOL.sh ]]; then
echo "$0: ERROR: sgi.sh tool is not a file: $SGI_TOOL" 1>&2 echo "$0: ERROR: bin/sgi.sh is not a regular file: $SGI_TOOL.sh" 1>&2
exit 5 exit 5
fi fi
if [[ ! -x $SGI_TOOL ]]; then if [[ ! -x $SGI_TOOL.sh ]]; then
echo "$0: ERROR: sgi.sh tool is not an executable file: $SGI_TOOL" 1>&2 echo "$0: ERROR: bin/sgi.sh is not an executable file: $SGI_TOOL.sh" 1>&2
exit 5 exit 5
fi fi
# verify that ENTRY_PATH is a entry directory # verify that ENTRY_PATH is a entry directory
# #
if [[ ! -d $ENTRY_PATH ]]; then if [[ ! -d $ENTRY_PATH ]]; then
@@ -349,6 +359,7 @@ if [[ ! -r $ENTRY_JSON ]]; then
exit 7 exit 7
fi fi
# verify .gitignore # verify .gitignore
# #
export GITIGNORE="$YEAR_DIR/$ENTRY_DIR/.gitignore" export GITIGNORE="$YEAR_DIR/$ENTRY_DIR/.gitignore"
@@ -365,6 +376,7 @@ if [[ ! -w $GITIGNORE ]]; then
exit 7 exit 7
fi fi
# parameter debugging # parameter debugging
# #
if [[ $V_FLAG -ge 3 ]]; then if [[ $V_FLAG -ge 3 ]]; then
@@ -376,7 +388,6 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: REPO_TOP_URL=$REPO_TOP_URL" 1>&2 echo "$0: debug[3]: REPO_TOP_URL=$REPO_TOP_URL" 1>&2
echo "$0: debug[3]: REPO_URL=$REPO_URL" 1>&2 echo "$0: debug[3]: REPO_URL=$REPO_URL" 1>&2
echo "$0: debug[3]: TOP_URL=$TOP_URL" 1>&2 echo "$0: debug[3]: TOP_URL=$TOP_URL" 1>&2
echo "$0: debug[3]: SGI_TOOL=$SGI_TOOL" 1>&2
echo "$0: debug[3]: NOOP=$NOOP" 1>&2 echo "$0: debug[3]: NOOP=$NOOP" 1>&2
echo "$0: debug[3]: DO_NOT_PROCESS=$DO_NOT_PROCESS" 1>&2 echo "$0: debug[3]: DO_NOT_PROCESS=$DO_NOT_PROCESS" 1>&2
echo "$0: debug[3]: ENTRY_PATH=$ENTRY_PATH" 1>&2 echo "$0: debug[3]: ENTRY_PATH=$ENTRY_PATH" 1>&2
@@ -384,6 +395,7 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: CD_FAILED=$CD_FAILED" 1>&2 echo "$0: debug[3]: CD_FAILED=$CD_FAILED" 1>&2
echo "$0: debug[3]: BIN_PATH=$BIN_PATH" 1>&2 echo "$0: debug[3]: BIN_PATH=$BIN_PATH" 1>&2
echo "$0: debug[3]: BIN_DIR=$BIN_DIR" 1>&2 echo "$0: debug[3]: BIN_DIR=$BIN_DIR" 1>&2
echo "$0: debug[3]: SGI_TOOL=$SGI_TOOL" 1>&2
echo "$0: debug[3]: YEAR_DIR=$YEAR_DIR" 1>&2 echo "$0: debug[3]: YEAR_DIR=$YEAR_DIR" 1>&2
echo "$0: debug[3]: ENTRY_DIR=$ENTRY_DIR" 1>&2 echo "$0: debug[3]: ENTRY_DIR=$ENTRY_DIR" 1>&2
echo "$0: debug[3]: ENTRY_ID=$ENTRY_ID" 1>&2 echo "$0: debug[3]: ENTRY_ID=$ENTRY_ID" 1>&2
@@ -395,6 +407,7 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: GITIGNORE=$GITIGNORE" 1>&2 echo "$0: debug[3]: GITIGNORE=$GITIGNORE" 1>&2
fi fi
# If -N, time to exit # If -N, time to exit
# #
if [[ -n $DO_NOT_PROCESS ]]; then if [[ -n $DO_NOT_PROCESS ]]; then
@@ -404,6 +417,7 @@ if [[ -n $DO_NOT_PROCESS ]]; then
exit 0 exit 0
fi fi
# create a temporary markdown for pandoc to process # create a temporary markdown for pandoc to process
# #
export TMP_FILE="$ENTRY_PATH/.tmp.$NAME.FILE.$$.tmp" export TMP_FILE="$ENTRY_PATH/.tmp.$NAME.FILE.$$.tmp"
@@ -426,6 +440,7 @@ elif [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: because of -n, temporary markdown file is not used: $TMP_FILE" 1>&2 echo "$0: debug[3]: because of -n, temporary markdown file is not used: $TMP_FILE" 1>&2
fi fi
# convert temporary markdown file into HTML # convert temporary markdown file into HTML
# #
if [[ -z $NOOP ]]; then if [[ -z $NOOP ]]; then
@@ -458,6 +473,7 @@ elif [[ $V_FLAG -ge 1 ]]; then
echo "$0: debug[1]: -n disabled execution of: mv -f $TMP_FILE $GITIGNORE" 1>&2 echo "$0: debug[1]: -n disabled execution of: mv -f $TMP_FILE $GITIGNORE" 1>&2
fi fi
# All Done!!! All Done!!! -- Jessica Noll, Age 2 # All Done!!! All Done!!! -- Jessica Noll, Age 2
# #
if [[ -z $NOOP ]]; then if [[ -z $NOOP ]]; then
+27 -14
View File
@@ -44,6 +44,7 @@
# #
# Share and enjoy! :-) # Share and enjoy! :-)
# firewall - run only with a bash that is version 5.1.8 or later # firewall - run only with a bash that is version 5.1.8 or later
# #
# The "/usr/bin/env bash" command must result in using a bash that # The "/usr/bin/env bash" command must result in using a bash that
@@ -87,6 +88,7 @@ if [[ -z ${BASH_VERSINFO[0]} ||
exit 4 exit 4
fi fi
# setup bash file matching # setup bash file matching
# #
# We must declare arrays with -ag or -Ag, and we need loops to "export" modified variables. # We must declare arrays with -ag or -Ag, and we need loops to "export" modified variables.
@@ -99,6 +101,7 @@ shopt -u nocaseglob # disable strict case matching
shopt -u extglob # enable extended globbing patterns shopt -u extglob # enable extended globbing patterns
shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories
# set variables referenced in the usage message # set variables referenced in the usage message
# #
export VERSION="1.4.3 2024-08-05" export VERSION="1.4.3 2024-08-05"
@@ -118,17 +121,17 @@ if [[ $status -eq 0 ]]; then
fi fi
export TOPDIR export TOPDIR
export DOCROOT_SLASH="./" export DOCROOT_SLASH="./"
export PANDOC_WRAPPER="bin/pandoc-wrapper.sh"
export REPO_TOP_URL="https://github.com/ioccc-src/temp-test-ioccc" export REPO_TOP_URL="https://github.com/ioccc-src/temp-test-ioccc"
# GitHub puts individual files under the "blob/master" sub-directory. # GitHub puts individual files under the "blob/master" sub-directory.
export REPO_URL="$REPO_TOP_URL/blob/master" export REPO_URL="$REPO_TOP_URL/blob/master"
export SITE_URL="https://ioccc-src.github.io/temp-test-ioccc" export SITE_URL="https://ioccc-src.github.io/temp-test-ioccc"
export URL="#" export URL="#"
# set usage message # set usage message
# #
export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N] export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N]
[-p tool] [-U url] [-w site_url] [-e string ..] [-E exitcode] [-U url] [-w site_url] [-e string ..] [-E exitcode]
-h print help message and exit -h print help message and exit
-v level set verbosity level (def level: 0) -v level set verbosity level (def level: 0)
@@ -141,8 +144,6 @@ export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N]
-n go thru the actions, but do not update any files (def: do the action) -n go thru the actions, but do not update any files (def: do the action)
-N do not process file, just parse arguments and ignore the file (def: process the file) -N do not process file, just parse arguments and ignore the file (def: process the file)
-p tool run 'pandoc wrapper tool' (not pandoc path) during HTML phase number 21 (def: use $PANDOC_WRAPPER)
-U url URL of HTML file being formed (def: $URL) -U url URL of HTML file being formed (def: $URL)
-w site_url Base URL of the website (def: $SITE_URL) -w site_url Base URL of the website (def: $SITE_URL)
@@ -163,14 +164,16 @@ Exit codes:
$NAME version: $VERSION" $NAME version: $VERSION"
# setup # setup
# #
export NOOP= export NOOP=
export DO_NOT_PROCESS= export DO_NOT_PROCESS=
# parse command line # parse command line
# #
while getopts :hv:Vd:D:nNp:U:w:e:E: flag; do while getopts :hv:Vd:D:nNU:w:e:E: flag; do
case "$flag" in case "$flag" in
h) echo "$USAGE" 1>&2 h) echo "$USAGE" 1>&2
exit 2 exit 2
@@ -197,8 +200,6 @@ while getopts :hv:Vd:D:nNp:U:w:e:E: flag; do
;; ;;
N) DO_NOT_PROCESS="-N" N) DO_NOT_PROCESS="-N"
;; ;;
p) PANDOC_WRAPPER="$OPTARG"
;;
U) URL="$OPTARG" U) URL="$OPTARG"
;; ;;
w) SITE_URL="$OPTARG" w) SITE_URL="$OPTARG"
@@ -224,7 +225,7 @@ while getopts :hv:Vd:D:nNp:U:w:e:E: flag; do
;; ;;
esac esac
done done
#
# parse the command line arguments # parse the command line arguments
# #
if [[ $V_FLAG -ge 1 ]]; then if [[ $V_FLAG -ge 1 ]]; then
@@ -244,6 +245,7 @@ if [[ $V_FLAG -ge 5 ]]; then
echo "$0: debug[5]: arg: $1" 1>&2 echo "$0: debug[5]: arg: $1" 1>&2
fi fi
# verify that we have a topdir directory # verify that we have a topdir directory
# #
REPO_NAME=$(basename "$REPO_TOP_URL") REPO_NAME=$(basename "$REPO_TOP_URL")
@@ -264,6 +266,7 @@ if [[ ! -d $TOPDIR ]]; then
exit 6 exit 6
fi fi
# cd to topdir # cd to topdir
# #
if [[ ! -e $TOPDIR ]]; then if [[ ! -e $TOPDIR ]]; then
@@ -287,8 +290,7 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2 echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2
fi fi
# verify that we have a bin subdirectory
#
export BIN_PATH="$TOPDIR/bin" export BIN_PATH="$TOPDIR/bin"
if [[ ! -d $BIN_PATH ]]; then if [[ ! -d $BIN_PATH ]]; then
echo "$0: ERROR: bin is not a directory under topdir: $BIN_PATH" 1>&2 echo "$0: ERROR: bin is not a directory under topdir: $BIN_PATH" 1>&2
@@ -296,21 +298,24 @@ if [[ ! -d $BIN_PATH ]]; then
fi fi
export BIN_DIR="bin" export BIN_DIR="bin"
# verify pandoc wrapper tool
# verify that the bin/pandoc-wrapper.sh tool is executable
# #
export PANDOC_WRAPPER="$BIN_DIR/pandoc-wrapper.sh"
if [[ ! -e $PANDOC_WRAPPER ]]; then if [[ ! -e $PANDOC_WRAPPER ]]; then
echo "$0: ERROR: pandoc wrapper tool does not exist: $PANDOC_WRAPPER" 1>&2 echo "$0: ERROR: bin/md2html.sh does not exist: $PANDOC_WRAPPER" 1>&2
exit 5 exit 5
fi fi
if [[ ! -f $PANDOC_WRAPPER ]]; then if [[ ! -f $PANDOC_WRAPPER ]]; then
echo "$0: ERROR: pandoc wrapper tool is not a file: $PANDOC_WRAPPER" 1>&2 echo "$0: ERROR: bin/md2html.sh is not a regular file: $PANDOC_WRAPPER" 1>&2
exit 5 exit 5
fi fi
if [[ ! -x $PANDOC_WRAPPER ]]; then if [[ ! -x $PANDOC_WRAPPER ]]; then
echo "$0: ERROR: pandoc wrapper tool is not an executable file: $PANDOC_WRAPPER" 1>&2 echo "$0: ERROR: bin/md2html.sh is not an executable file: $PANDOC_WRAPPER" 1>&2
exit 5 exit 5
fi fi
# verify status.json file # verify status.json file
# #
export STATUS_JSON="status.json" export STATUS_JSON="status.json"
@@ -331,6 +336,7 @@ if [[ ! -s $STATUS_JSON ]]; then
exit 1 exit 1
fi fi
# parameter debugging # parameter debugging
# #
if [[ $V_FLAG -ge 3 ]]; then if [[ $V_FLAG -ge 3 ]]; then
@@ -354,6 +360,7 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: STATUS_JSON=$STATUS_JSON" 1>&2 echo "$0: debug[3]: STATUS_JSON=$STATUS_JSON" 1>&2
fi fi
# If -N, time to exit # If -N, time to exit
# #
if [[ -n $DO_NOT_PROCESS ]]; then if [[ -n $DO_NOT_PROCESS ]]; then
@@ -363,6 +370,7 @@ if [[ -n $DO_NOT_PROCESS ]]; then
exit 0 exit 0
fi fi
# create a temporary markdown for pandoc to process # create a temporary markdown for pandoc to process
# #
export TMP_FILE=".tmp.$NAME.FILE.$$.tmp" export TMP_FILE=".tmp.$NAME.FILE.$$.tmp"
@@ -385,6 +393,7 @@ elif [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: because of -n, temporary markdown file is not used: $TMP_FILE" 1>&2 echo "$0: debug[3]: because of -n, temporary markdown file is not used: $TMP_FILE" 1>&2
fi fi
# obtain the contest_status from status.json # obtain the contest_status from status.json
# #
CONTEST_STATUS=$(grep '"contest_status"\s*:\s*"[^"][^"]*"' "$STATUS_JSON" | sed -e 's/",\s*$//' -e 's/^.*"//') CONTEST_STATUS=$(grep '"contest_status"\s*:\s*"[^"][^"]*"' "$STATUS_JSON" | sed -e 's/",\s*$//' -e 's/^.*"//')
@@ -395,6 +404,7 @@ if [[ $status -ne 0 || -z $CONTEST_STATUS ]]; then
exit 8 exit 8
fi fi
# validate and normalize the contest_status cfrom status.json # validate and normalize the contest_status cfrom status.json
# #
case "$CONTEST_STATUS" in case "$CONTEST_STATUS" in
@@ -413,6 +423,7 @@ c|closed) CONTEST_STATUS="closed"
;; ;;
esac esac
# write temporary markdown file for status.json # write temporary markdown file for status.json
# #
{ {
@@ -483,6 +494,7 @@ else
fi fi
fi fi
# convert temporary markdown file into HTML # convert temporary markdown file into HTML
# #
if [[ -z $NOOP ]]; then if [[ -z $NOOP ]]; then
@@ -503,6 +515,7 @@ elif [[ $V_FLAG -ge 1 ]]; then
echo "$0: debug[1]: -n disabled execution of: $PANDOC_WRAPPER $TMP_FILE -" 1>&2 echo "$0: debug[1]: -n disabled execution of: $PANDOC_WRAPPER $TMP_FILE -" 1>&2
fi fi
# All Done!!! All Done!!! -- Jessica Noll, Age 2 # All Done!!! All Done!!! -- Jessica Noll, Age 2
# #
if [[ -z $NOOP ]]; then if [[ -z $NOOP ]]; then
+15 -1
View File
@@ -35,6 +35,7 @@
# #
# Share and enjoy! :-) # Share and enjoy! :-)
# firewall - run only with a bash that is version 5.1.8 or later # firewall - run only with a bash that is version 5.1.8 or later
# #
# The "/usr/bin/env bash" command must result in using a bash that # The "/usr/bin/env bash" command must result in using a bash that
@@ -78,6 +79,7 @@ if [[ -z ${BASH_VERSINFO[0]} ||
exit 4 exit 4
fi fi
# setup bash file matching # setup bash file matching
# #
# We must declare arrays with -ag or -Ag, and we need loops to "export" modified variables. # We must declare arrays with -ag or -Ag, and we need loops to "export" modified variables.
@@ -90,6 +92,7 @@ shopt -u nocaseglob # disable strict case matching
shopt -u extglob # enable extended globbing patterns shopt -u extglob # enable extended globbing patterns
shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories
# set variables referenced in the usage message # set variables referenced in the usage message
# #
export VERSION="1.3.2 2024-08-05" export VERSION="1.3.2 2024-08-05"
@@ -115,6 +118,7 @@ export REPO_URL="$REPO_TOP_URL/blob/master"
export SITE_URL="https://ioccc-src.github.io/temp-test-ioccc" export SITE_URL="https://ioccc-src.github.io/temp-test-ioccc"
export URL="#" export URL="#"
# set usage message # set usage message
# #
export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N] export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N]
@@ -151,11 +155,13 @@ Exit codes:
$NAME version: $VERSION" $NAME version: $VERSION"
# setup # setup
# #
export NOOP= export NOOP=
export DO_NOT_PROCESS= export DO_NOT_PROCESS=
# parse command line # parse command line
# #
while getopts :hv:Vd:D:nNU:w:e:E: flag; do while getopts :hv:Vd:D:nNU:w:e:E: flag; do
@@ -210,7 +216,7 @@ while getopts :hv:Vd:D:nNU:w:e:E: flag; do
;; ;;
esac esac
done done
#
# parse the command line arguments # parse the command line arguments
# #
if [[ $V_FLAG -ge 1 ]]; then if [[ $V_FLAG -ge 1 ]]; then
@@ -223,11 +229,13 @@ if [[ $V_FLAG -ge 5 ]]; then
echo "$0: debug[5]: file argument count: $#" 1>&2 echo "$0: debug[5]: file argument count: $#" 1>&2
fi fi
# form Nu Html Checker doc url string # form Nu Html Checker doc url string
# #
VALIDATOR_ENCODED_URL=$(echo "$URL" | sed -e 's;/;%2F;g' -e 's;:;%3A;') VALIDATOR_ENCODED_URL=$(echo "$URL" | sed -e 's;/;%2F;g' -e 's;:;%3A;')
export VALIDATOR_ENCODED_URL export VALIDATOR_ENCODED_URL
# parameter debugging # parameter debugging
# #
if [[ $V_FLAG -ge 3 ]]; then if [[ $V_FLAG -ge 3 ]]; then
@@ -246,6 +254,7 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: VALIDATOR_ENCODED_URL=$VALIDATOR_ENCODED_URL" 1>&2 echo "$0: debug[3]: VALIDATOR_ENCODED_URL=$VALIDATOR_ENCODED_URL" 1>&2
fi fi
# If -N, time to exit # If -N, time to exit
# #
if [[ -n $DO_NOT_PROCESS ]]; then if [[ -n $DO_NOT_PROCESS ]]; then
@@ -255,27 +264,32 @@ if [[ -n $DO_NOT_PROCESS ]]; then
exit 0 exit 0
fi fi
# output HEADER_1 substitution # output HEADER_1 substitution
# #
echo "-s" echo "-s"
echo "HEADER_1=The International Obfuscated C Code Contest" echo "HEADER_1=The International Obfuscated C Code Contest"
# output REPO_URL substitution # output REPO_URL substitution
# #
echo "-s" echo "-s"
echo "REPO_URL=$REPO_URL" echo "REPO_URL=$REPO_URL"
# output SITE_URL substitution # output SITE_URL substitution
# #
echo "-s" echo "-s"
echo "SITE_URL=$SITE_URL" echo "SITE_URL=$SITE_URL"
# output DOCROOT_SLASH substitution # output DOCROOT_SLASH substitution
# #
echo "-s" echo "-s"
echo "DOCROOT_SLASH=$DOCROOT_SLASH" echo "DOCROOT_SLASH=$DOCROOT_SLASH"
export VALIDATOR_ENCODED_URL export VALIDATOR_ENCODED_URL
# output the Validator encoded URL # output the Validator encoded URL
# #
echo "-s" echo "-s"
+54 -26
View File
@@ -46,6 +46,7 @@
# #
# Share and enjoy! :-) # Share and enjoy! :-)
# firewall - run only with a bash that is version 5.1.8 or later # firewall - run only with a bash that is version 5.1.8 or later
# #
# The "/usr/bin/env bash" command must result in using a bash that # The "/usr/bin/env bash" command must result in using a bash that
@@ -89,6 +90,7 @@ if [[ -z ${BASH_VERSINFO[0]} ||
exit 4 exit 4
fi fi
# setup bash file matching # setup bash file matching
# #
# We must declare arrays with -ag or -Ag, and we need loops to "export" modified variables. # We must declare arrays with -ag or -Ag, and we need loops to "export" modified variables.
@@ -101,6 +103,7 @@ shopt -u nocaseglob # disable strict case matching
shopt -u extglob # enable extended globbing patterns shopt -u extglob # enable extended globbing patterns
shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories
# set variables referenced in the usage message # set variables referenced in the usage message
# #
export VERSION="1.5 2024-08-13" export VERSION="1.5 2024-08-13"
@@ -125,6 +128,7 @@ export REPO_TOP_URL="https://github.com/ioccc-src/temp-test-ioccc"
export REPO_URL="$REPO_TOP_URL/blob/master" export REPO_URL="$REPO_TOP_URL/blob/master"
export SITE_URL="https://ioccc-src.github.io/temp-test-ioccc" export SITE_URL="https://ioccc-src.github.io/temp-test-ioccc"
# set usage message # set usage message
# #
export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-n] [-N] export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-n] [-N]
@@ -163,14 +167,9 @@ Exit codes:
$NAME version: $VERSION" $NAME version: $VERSION"
# Write the award name to standard output (stdout) # Write the award name to standard output (stdout)
# #
# XXX - XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX - XXX
# XXX - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - XXX
# XXX - until we have the jnamval command, we must FAKE PARSE the .entry.json file - XXX
# XXX - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - GROSS HACK - XXX
# XXX - XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX - XXX
#
# usage: # usage:
# output_award YYYY/dir/.entry.json # output_award YYYY/dir/.entry.json
# #
@@ -208,11 +207,13 @@ function output_award
return 0 return 0
} }
# setup # setup
# #
export NOOP= export NOOP=
export DO_NOT_PROCESS= export DO_NOT_PROCESS=
# parse command line # parse command line
# #
while getopts :hv:Vd:D:nNU:w:e:E: flag; do while getopts :hv:Vd:D:nNU:w:e:E: flag; do
@@ -268,6 +269,7 @@ while getopts :hv:Vd:D:nNU:w:e:E: flag; do
esac esac
done done
# parse the command line arguments # parse the command line arguments
# #
if [[ $V_FLAG -ge 1 ]]; then if [[ $V_FLAG -ge 1 ]]; then
@@ -286,6 +288,7 @@ fi
# #
export ENTRY_PATH="$1" export ENTRY_PATH="$1"
# verify that we have a topdir directory # verify that we have a topdir directory
# #
REPO_NAME=$(basename "$REPO_TOP_URL") REPO_NAME=$(basename "$REPO_TOP_URL")
@@ -306,6 +309,7 @@ if [[ ! -d $TOPDIR ]]; then
exit 6 exit 6
fi fi
# cd to topdir # cd to topdir
# #
if [[ ! -e $TOPDIR ]]; then if [[ ! -e $TOPDIR ]]; then
@@ -329,6 +333,7 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2 echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2
fi fi
# verify that we have an author subdirectory # verify that we have an author subdirectory
# #
export AUTHOR_PATH="$TOPDIR/author" export AUTHOR_PATH="$TOPDIR/author"
@@ -338,6 +343,7 @@ if [[ ! -d $AUTHOR_PATH ]]; then
fi fi
export AUTHOR_DIR="author" export AUTHOR_DIR="author"
# verify that we have an inc subdirectory # verify that we have an inc subdirectory
# #
export INC_PATH="$TOPDIR/inc" export INC_PATH="$TOPDIR/inc"
@@ -347,6 +353,7 @@ if [[ ! -d $INC_PATH ]]; then
fi fi
export INC_DIR="inc" export INC_DIR="inc"
# verify that we have a bin subdirectory # verify that we have a bin subdirectory
# #
export BIN_PATH="$TOPDIR/bin" export BIN_PATH="$TOPDIR/bin"
@@ -356,13 +363,40 @@ if [[ ! -d $BIN_PATH ]]; then
fi fi
export BIN_DIR="bin" export BIN_DIR="bin"
# find the jval-wrapper.sh tool
# verify that the bin/jval-wrapper.sh tool is executable
# #
JVAL_WRAPPER="$BIN_PATH/jval-wrapper.sh" JVAL_WRAPPER="$BIN_DIR/jval-wrapper.sh"
if [[ ! -x $JVAL_WRAPPER ]]; then if [[ ! -e $JVAL_WRAPPER ]]; then
echo "$0: ERROR: cannot find the bin/jval-wrapper.sh executable" 1>&2 echo "$0: ERROR: bin/jval-wrapper.sh does not exist: $JVAL_WRAPPER" 1>&2
exit 5 exit 5
fi fi
if [[ ! -f $JVAL_WRAPPER ]]; then
echo "$0: ERROR: bin/jval-wrapper.sh is not a regular file: $JVAL_WRAPPER" 1>&2
exit 5
fi
if [[ ! -x $JVAL_WRAPPER ]]; then
echo "$0: ERROR: bin/jval-wrapper.sh is not an executable file: $JVAL_WRAPPER" 1>&2
exit 5
fi
# verify we have our awk script
#
export ENTRY_NAVBAR_AWK="$BIN_DIR/subst.entry-navbar.awk"
if [[ ! -e $ENTRY_NAVBAR_AWK ]]; then
echo "$0: ERROR: bin/subst.entry-navbar.awk does not exist: $ENTRY_NAVBAR_AWK" 1>&2
exit 5
fi
if [[ ! -f $ENTRY_NAVBAR_AWK ]]; then
echo "$0: ERROR: bin/subst.entry-navbar.awk is not a file: $ENTRY_NAVBAR_AWK" 1>&2
exit 5
fi
if [[ ! -r $ENTRY_NAVBAR_AWK ]]; then
echo "$0: ERROR: bin/subst.entry-navbar.awk is not a readable file: $ENTRY_NAVBAR_AWK" 1>&2
exit 5
fi
# verify that ENTRY_PATH is a entry directory # verify that ENTRY_PATH is a entry directory
# #
@@ -437,21 +471,6 @@ if [[ ! -r $ENTRY_JSON ]]; then
exit 7 exit 7
fi fi
# verify we have our awk script
#
export ENTRY_NAVBAR_AWK="$BIN_DIR/subst.entry-navbar.awk"
if [[ ! -e $ENTRY_NAVBAR_AWK ]]; then
echo "$0: ERROR: bin/subst.entry-navbar.awk does not exist: $ENTRY_NAVBAR_AWK" 1>&2
exit 5
fi
if [[ ! -f $ENTRY_NAVBAR_AWK ]]; then
echo "$0: ERROR: bin/subst.entry-navbar.awk is not a file: $ENTRY_NAVBAR_AWK" 1>&2
exit 5
fi
if [[ ! -r $ENTRY_NAVBAR_AWK ]]; then
echo "$0: ERROR: bin/subst.entry-navbar.awk is not a readable file: $ENTRY_NAVBAR_AWK" 1>&2
exit 5
fi
# determine award # determine award
# #
@@ -462,6 +481,7 @@ if [[ -z $AWARD ]]; then
exit 1 exit 1
fi fi
# parameter debugging # parameter debugging
# #
if [[ $V_FLAG -ge 3 ]]; then if [[ $V_FLAG -ge 3 ]]; then
@@ -486,6 +506,7 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: BIN_PATH=$BIN_PATH" 1>&2 echo "$0: debug[3]: BIN_PATH=$BIN_PATH" 1>&2
echo "$0: debug[3]: BIN_DIR=$BIN_DIR" 1>&2 echo "$0: debug[3]: BIN_DIR=$BIN_DIR" 1>&2
echo "$0: debug[3]: JVAL_WRAPPER=$JVAL_WRAPPER" 1>&2 echo "$0: debug[3]: JVAL_WRAPPER=$JVAL_WRAPPER" 1>&2
echo "$0: debug[3]: ENTRY_JSON=$ENTRY_JSON" 1>&2
echo "$0: debug[3]: YEAR_DIR=$YEAR_DIR" 1>&2 echo "$0: debug[3]: YEAR_DIR=$YEAR_DIR" 1>&2
echo "$0: debug[3]: ENTRY_DIR=$ENTRY_DIR" 1>&2 echo "$0: debug[3]: ENTRY_DIR=$ENTRY_DIR" 1>&2
echo "$0: debug[3]: ENTRY_ID=$ENTRY_ID" 1>&2 echo "$0: debug[3]: ENTRY_ID=$ENTRY_ID" 1>&2
@@ -493,11 +514,11 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: YYYY_DIR=$YYYY_DIR" 1>&2 echo "$0: debug[3]: YYYY_DIR=$YYYY_DIR" 1>&2
echo "$0: debug[3]: DOT_PATH=$DOT_PATH" 1>&2 echo "$0: debug[3]: DOT_PATH=$DOT_PATH" 1>&2
echo "$0: debug[3]: DOT_PATH_CONTENT=$DOT_PATH_CONTENT" 1>&2 echo "$0: debug[3]: DOT_PATH_CONTENT=$DOT_PATH_CONTENT" 1>&2
echo "$0: debug[3]: ENTRY_JSON=$ENTRY_JSON" 1>&2
echo "$0: debug[3]: ENTRY_NAVBAR_AWK=$ENTRY_NAVBAR_AWK" 1>&2 echo "$0: debug[3]: ENTRY_NAVBAR_AWK=$ENTRY_NAVBAR_AWK" 1>&2
echo "$0: debug[3]: AWARD=$AWARD" 1>&2 echo "$0: debug[3]: AWARD=$AWARD" 1>&2
fi fi
# If -N, time to exit # If -N, time to exit
# #
if [[ -n $DO_NOT_PROCESS ]]; then if [[ -n $DO_NOT_PROCESS ]]; then
@@ -507,26 +528,31 @@ if [[ -n $DO_NOT_PROCESS ]]; then
exit 0 exit 0
fi fi
# output TITLE substitution # output TITLE substitution
# #
echo "-s" echo "-s"
echo "TITLE=$YYYY_DIR - $AWARD" echo "TITLE=$YYYY_DIR - $AWARD"
# output DESCRIPTION substitution # output DESCRIPTION substitution
# #
echo "-s" echo "-s"
echo "DESCRIPTION=$YEAR_DIR IOCCC entry $ENTRY_DIR - $AWARD" echo "DESCRIPTION=$YEAR_DIR IOCCC entry $ENTRY_DIR - $AWARD"
# output KEYWORDS substitution # output KEYWORDS substitution
# #
echo "-s" echo "-s"
echo "KEYWORDS=IOCCC, $YEAR_DIR, IOCCC $YEAR_DIR, IOCCC entry, $ENTRY_DIR, $AWARD" echo "KEYWORDS=IOCCC, $YEAR_DIR, IOCCC $YEAR_DIR, IOCCC entry, $ENTRY_DIR, $AWARD"
# output HEADER_2 substitution # output HEADER_2 substitution
# #
echo "-s" echo "-s"
echo "HEADER_2=$YYYY_DIR - $AWARD" echo "HEADER_2=$YYYY_DIR - $AWARD"
# output navbar left hand side links # output navbar left hand side links
# #
awk -v entry_path="$YYYY_DIR" -f "$ENTRY_NAVBAR_AWK" "$DOT_ALLYEAR" awk -v entry_path="$YYYY_DIR" -f "$ENTRY_NAVBAR_AWK" "$DOT_ALLYEAR"
@@ -536,6 +562,7 @@ if [[ $status -ne 0 ]]; then
exit 1 exit 1
fi fi
# output navbar right hand side links # output navbar right hand side links
# #
echo "-s" echo "-s"
@@ -558,6 +585,7 @@ echo "INVENTORY_LINK=#inventory"
echo "-s" echo "-s"
echo "INVENTORY_TEXT=Inventory" echo "INVENTORY_TEXT=Inventory"
# All Done!!! All Done!!! -- Jessica Noll, Age 2 # All Done!!! All Done!!! -- Jessica Noll, Age 2
# #
exit 0 exit 0
+49 -24
View File
@@ -46,6 +46,7 @@
# #
# Share and enjoy! :-) # Share and enjoy! :-)
# firewall - run only with a bash that is version 5.1.8 or later # firewall - run only with a bash that is version 5.1.8 or later
# #
# The "/usr/bin/env bash" command must result in using a bash that # The "/usr/bin/env bash" command must result in using a bash that
@@ -89,6 +90,7 @@ if [[ -z ${BASH_VERSINFO[0]} ||
exit 4 exit 4
fi fi
# setup bash file matching # setup bash file matching
# #
# We must declare arrays with -ag or -Ag, and we need loops to "export" modified variables. # We must declare arrays with -ag or -Ag, and we need loops to "export" modified variables.
@@ -101,6 +103,7 @@ shopt -u nocaseglob # disable strict case matching
shopt -u extglob # enable extended globbing patterns shopt -u extglob # enable extended globbing patterns
shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories
# set variables referenced in the usage message # set variables referenced in the usage message
# #
export VERSION="1.1.5 2024-08-05" export VERSION="1.1.5 2024-08-05"
@@ -125,6 +128,7 @@ export REPO_TOP_URL="https://github.com/ioccc-src/temp-test-ioccc"
export REPO_URL="$REPO_TOP_URL/blob/master" export REPO_URL="$REPO_TOP_URL/blob/master"
export SITE_URL="https://ioccc-src.github.io/temp-test-ioccc" export SITE_URL="https://ioccc-src.github.io/temp-test-ioccc"
# set usage message # set usage message
# #
export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-n] [-N] export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-n] [-N]
@@ -163,6 +167,7 @@ Exit codes:
$NAME version: $VERSION" $NAME version: $VERSION"
# output_ordinal # output_ordinal
# #
# Write the numerical ordinal form of a non-negative integer to standard output (stdout) # Write the numerical ordinal form of a non-negative integer to standard output (stdout)
@@ -224,11 +229,13 @@ function output_ordinal
return 0 return 0
} }
# setup # setup
# #
export NOOP= export NOOP=
export DO_NOT_PROCESS= export DO_NOT_PROCESS=
# parse command line # parse command line
# #
while getopts :hv:Vd:D:nNU:w:e:E: flag; do while getopts :hv:Vd:D:nNU:w:e:E: flag; do
@@ -283,7 +290,7 @@ while getopts :hv:Vd:D:nNU:w:e:E: flag; do
;; ;;
esac esac
done done
#
# parse the command line arguments # parse the command line arguments
# #
if [[ $V_FLAG -ge 1 ]]; then if [[ $V_FLAG -ge 1 ]]; then
@@ -302,6 +309,7 @@ fi
# #
export YEAR_ARG="$1" export YEAR_ARG="$1"
# verify that we have a topdir directory # verify that we have a topdir directory
# #
REPO_NAME=$(basename "$REPO_TOP_URL") REPO_NAME=$(basename "$REPO_TOP_URL")
@@ -322,6 +330,7 @@ if [[ ! -d $TOPDIR ]]; then
exit 6 exit 6
fi fi
# verify that we have an author subdirectory # verify that we have an author subdirectory
# #
export AUTHOR_PATH="$TOPDIR/author" export AUTHOR_PATH="$TOPDIR/author"
@@ -331,6 +340,7 @@ if [[ ! -d $AUTHOR_PATH ]]; then
fi fi
export AUTHOR_DIR="author" export AUTHOR_DIR="author"
# verify that we have an inc subdirectory # verify that we have an inc subdirectory
# #
export INC_PATH="$TOPDIR/inc" export INC_PATH="$TOPDIR/inc"
@@ -340,14 +350,6 @@ if [[ ! -d $INC_PATH ]]; then
fi fi
export INC_DIR="inc" export INC_DIR="inc"
# verify that we have a bin subdirectory
#
export BIN_PATH="$TOPDIR/bin"
if [[ ! -d $BIN_PATH ]]; then
echo "$0: ERROR: bin is not a directory under topdir: $BIN_PATH" 1>&2
exit 6
fi
export BIN_DIR="bin"
# cd to topdir # cd to topdir
# #
@@ -372,6 +374,34 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2 echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2
fi fi
# verify that we have a bin subdirectory
#
export BIN_PATH="$TOPDIR/bin"
if [[ ! -d $BIN_PATH ]]; then
echo "$0: ERROR: bin is not a directory under topdir: $BIN_PATH" 1>&2
exit 6
fi
export BIN_DIR="bin"
# verify we have our awk script
#
export YEAR_NAVBAR_AWK="$BIN_DIR/subst.year-navbar.awk"
if [[ ! -e $YEAR_NAVBAR_AWK ]]; then
echo "$0: ERROR: bin/subst.year-navbar.awk does not exist: $YEAR_NAVBAR_AWK" 1>&2
exit 5
fi
if [[ ! -f $YEAR_NAVBAR_AWK ]]; then
echo "$0: ERROR: bin/subst.year-navbar.awk is not a file: $YEAR_NAVBAR_AWK" 1>&2
exit 5
fi
if [[ ! -r $YEAR_NAVBAR_AWK ]]; then
echo "$0: ERROR: bin/subst.year-navbar.awk is not a readable file: $YEAR_NAVBAR_AWK" 1>&2
exit 5
fi
# verify that YEAR_ARG is a entry directory # verify that YEAR_ARG is a entry directory
# #
if [[ ! -d $YEAR_ARG ]]; then if [[ ! -d $YEAR_ARG ]]; then
@@ -388,6 +418,7 @@ if [[ -z $YEAR_DIR ]]; then
exit 3 exit 3
fi fi
# verify we have a non-empty readable .top file # verify we have a non-empty readable .top file
# #
export TOP_FILE=".top" export TOP_FILE=".top"
@@ -408,21 +439,6 @@ if [[ ! -s $TOP_FILE ]]; then
exit 6 exit 6
fi fi
# verify we have our awk script
#
export YEAR_NAVBAR_AWK="$BIN_DIR/subst.year-navbar.awk"
if [[ ! -e $YEAR_NAVBAR_AWK ]]; then
echo "$0: ERROR: bin/subst.year-navbar.awk does not exist: $YEAR_NAVBAR_AWK" 1>&2
exit 5
fi
if [[ ! -f $YEAR_NAVBAR_AWK ]]; then
echo "$0: ERROR: bin/subst.year-navbar.awk is not a file: $YEAR_NAVBAR_AWK" 1>&2
exit 5
fi
if [[ ! -r $YEAR_NAVBAR_AWK ]]; then
echo "$0: ERROR: bin/subst.year-navbar.awk is not a readable file: $YEAR_NAVBAR_AWK" 1>&2
exit 5
fi
# determine The N-th IOCCC string # determine The N-th IOCCC string
# #
@@ -445,6 +461,7 @@ if [[ -z $ORDINAL ]]; then
exit 211 exit 211
fi fi
# parameter debugging # parameter debugging
# #
if [[ $V_FLAG -ge 3 ]]; then if [[ $V_FLAG -ge 3 ]]; then
@@ -475,6 +492,7 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: ORDINAL=$ORDINAL" 1>&2 echo "$0: debug[3]: ORDINAL=$ORDINAL" 1>&2
fi fi
# If -N, time to exit # If -N, time to exit
# #
if [[ -n $DO_NOT_PROCESS ]]; then if [[ -n $DO_NOT_PROCESS ]]; then
@@ -484,26 +502,31 @@ if [[ -n $DO_NOT_PROCESS ]]; then
exit 0 exit 0
fi fi
# output TITLE substitution # output TITLE substitution
# #
echo "-s" echo "-s"
echo "TITLE=$YEAR_DIR - The $ORDINAL IOCCC" echo "TITLE=$YEAR_DIR - The $ORDINAL IOCCC"
# output DESCRIPTION substitution # output DESCRIPTION substitution
# #
echo "-s" echo "-s"
echo "DESCRIPTION=IOCCC Year $YEAR_DIR" echo "DESCRIPTION=IOCCC Year $YEAR_DIR"
# output KEYWORDS substitution # output KEYWORDS substitution
# #
echo "-s" echo "-s"
echo "KEYWORDS=IOCCC, $YEAR_DIR, IOCCC $YEAR_DIR, IOCCC entry, The $ORDINAL IOCCC" echo "KEYWORDS=IOCCC, $YEAR_DIR, IOCCC $YEAR_DIR, IOCCC entry, The $ORDINAL IOCCC"
# output HEADER_2 substitution # output HEADER_2 substitution
# #
echo "-s" echo "-s"
echo "HEADER_2=$YEAR_DIR - The $ORDINAL IOCCC" echo "HEADER_2=$YEAR_DIR - The $ORDINAL IOCCC"
# output navbar left hand side links # output navbar left hand side links
# #
awk -v year_arg="$YEAR_DIR" -f "$YEAR_NAVBAR_AWK" "$TOP_FILE" awk -v year_arg="$YEAR_DIR" -f "$YEAR_NAVBAR_AWK" "$TOP_FILE"
@@ -513,6 +536,7 @@ if [[ $status -ne 0 ]]; then
exit 1 exit 1
fi fi
# output navbar right hand side links # output navbar right hand side links
# #
echo "-s" echo "-s"
@@ -520,6 +544,7 @@ echo "INVENTORY_LINK=#inventory"
echo "-s" echo "-s"
echo "INVENTORY_TEXT=Inventory" echo "INVENTORY_TEXT=Inventory"
# All Done!!! All Done!!! -- Jessica Noll, Age 2 # All Done!!! All Done!!! -- Jessica Noll, Age 2
# #
exit 0 exit 0
+52 -26
View File
@@ -26,6 +26,7 @@
# #
# Share and enjoy! :-) # Share and enjoy! :-)
# firewall - run only with a bash that is version 5.1.8 or later # firewall - run only with a bash that is version 5.1.8 or later
# #
# The "/usr/bin/env bash" command must result in using a bash that # The "/usr/bin/env bash" command must result in using a bash that
@@ -69,6 +70,7 @@ if [[ -z ${BASH_VERSINFO[0]} ||
exit 4 exit 4
fi fi
# setup bash file matching # setup bash file matching
# #
# We must declare arrays with -ag or -Ag, and we need loops to "export" modified variables. # We must declare arrays with -ag or -Ag, and we need loops to "export" modified variables.
@@ -81,6 +83,7 @@ shopt -u nocaseglob # disable strict case matching
shopt -u extglob # enable extended globbing patterns shopt -u extglob # enable extended globbing patterns
shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories
# set variables referenced in the usage message # set variables referenced in the usage message
# #
export VERSION="1.3.10 2024-08-05" export VERSION="1.3.10 2024-08-05"
@@ -110,10 +113,11 @@ if [[ -z "$GIT_TOOL" ]]; then
exit 8 exit 8
fi fi
# set usage message # set usage message
# #
export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N] export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N]
[-p tool] [-w site_url] [-W] [-w site_url] [-W]
YYYY/dir YYYY/dir
-h print help message and exit -h print help message and exit
@@ -126,8 +130,6 @@ export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N]
-n go thru the actions, but do not update any files (def: do the action) -n go thru the actions, but do not update any files (def: do the action)
-N do not process file, just parse arguments and ignore the file (def: process the file) -N do not process file, just parse arguments and ignore the file (def: process the file)
-p tool This option is ignored
-w site_url This option is ignored -w site_url This option is ignored
-W Warn if a file in the manifest is missing: (def: error if a file is missing) -W Warn if a file in the manifest is missing: (def: error if a file is missing)
@@ -148,15 +150,17 @@ Exit codes:
$NAME version: $VERSION" $NAME version: $VERSION"
# setup # setup
# #
export NOOP= export NOOP=
export DO_NOT_PROCESS= export DO_NOT_PROCESS=
export EXIT_CODE="0" export EXIT_CODE="0"
# parse command line # parse command line
# #
while getopts :hv:Vd:D:nNp:U:w:W flag; do while getopts :hv:Vd:D:nNU:w:W flag; do
case "$flag" in case "$flag" in
h) echo "$USAGE" 1>&2 h) echo "$USAGE" 1>&2
exit 2 exit 2
@@ -173,7 +177,6 @@ while getopts :hv:Vd:D:nNp:U:w:W flag; do
;; ;;
N) DO_NOT_PROCESS="-N" N) DO_NOT_PROCESS="-N"
;; ;;
p) ;;
U) ;; U) ;;
w) ;; w) ;;
W) CAP_W_FLAG_FOUND="true" W) CAP_W_FLAG_FOUND="true"
@@ -195,7 +198,7 @@ while getopts :hv:Vd:D:nNp:U:w:W flag; do
;; ;;
esac esac
done done
#
# parse the command line arguments # parse the command line arguments
# #
if [[ $V_FLAG -ge 3 ]]; then if [[ $V_FLAG -ge 3 ]]; then
@@ -214,6 +217,7 @@ fi
# #
export ENTRY_PATH="$1" export ENTRY_PATH="$1"
# verify that we have a topdir directory # verify that we have a topdir directory
# #
REPO_NAME=$(basename "$REPO_TOP_URL") REPO_NAME=$(basename "$REPO_TOP_URL")
@@ -234,6 +238,7 @@ if [[ ! -d $TOPDIR ]]; then
exit 6 exit 6
fi fi
# cd to topdir # cd to topdir
# #
if [[ ! -e $TOPDIR ]]; then if [[ ! -e $TOPDIR ]]; then
@@ -257,6 +262,7 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2 echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2
fi fi
# verify that we have a bin subdirectory # verify that we have a bin subdirectory
# #
export BIN_PATH="$TOPDIR/bin" export BIN_PATH="$TOPDIR/bin"
@@ -266,6 +272,28 @@ if [[ ! -d $BIN_PATH ]]; then
fi fi
export BIN_DIR="bin" export BIN_DIR="bin"
# verify we have our awk tool
#
export FILELIST_ENTRY_JSON_AWK="$BIN_DIR/filelist.entry.json.awk"
if [[ ! -e $FILELIST_ENTRY_JSON_AWK ]]; then
echo "$0: ERROR: filelist.entry.json.awk does not exist: $FILELIST_ENTRY_JSON_AWK" 1>&2
exit 5
fi
if [[ ! -f $FILELIST_ENTRY_JSON_AWK ]]; then
echo "$0: ERROR: filelist.entry.json.awk is not a file: $FILELIST_ENTRY_JSON_AWK" 1>&2
exit 5
fi
if [[ ! -r $FILELIST_ENTRY_JSON_AWK ]]; then
echo "$0: ERROR: filelist.entry.json.awk is not a readable file: $FILELIST_ENTRY_JSON_AWK" 1>&2
exit 5
fi
if [[ ! -s $FILELIST_ENTRY_JSON_AWK ]]; then
echo "$0: ERROR: filelist.entry.json.awk is not a not a non-empty readable file: $FILELIST_ENTRY_JSON_AWK" 1>&2
exit 5
fi
# verify that ENTRY_PATH is a entry directory # verify that ENTRY_PATH is a entry directory
# #
if [[ ! -d $ENTRY_PATH ]]; then if [[ ! -d $ENTRY_PATH ]]; then
@@ -339,25 +367,6 @@ if [[ ! -r $ENTRY_JSON ]]; then
exit 5 exit 5
fi fi
# verify we have our awk tool
#
export FILELIST_ENTRY_JSON_AWK="$BIN_DIR/filelist.entry.json.awk"
if [[ ! -e $FILELIST_ENTRY_JSON_AWK ]]; then
echo "$0: ERROR: filelist.entry.json.awk does not exist: $FILELIST_ENTRY_JSON_AWK" 1>&2
exit 5
fi
if [[ ! -f $FILELIST_ENTRY_JSON_AWK ]]; then
echo "$0: ERROR: filelist.entry.json.awk is not a file: $FILELIST_ENTRY_JSON_AWK" 1>&2
exit 5
fi
if [[ ! -r $FILELIST_ENTRY_JSON_AWK ]]; then
echo "$0: ERROR: filelist.entry.json.awk is not a readable file: $FILELIST_ENTRY_JSON_AWK" 1>&2
exit 5
fi
if [[ ! -s $FILELIST_ENTRY_JSON_AWK ]]; then
echo "$0: ERROR: filelist.entry.json.awk is not a not a non-empty readable file: $FILELIST_ENTRY_JSON_AWK" 1>&2
exit 5
fi
# verify we have non-empty readable ioccc.css file # verify we have non-empty readable ioccc.css file
# #
@@ -379,6 +388,7 @@ if [[ ! -s $IOCCC_CSS ]]; then
exit 6 exit 6
fi fi
# verify we have non-empty readable var.mk file # verify we have non-empty readable var.mk file
# #
export VAR_MK="var.mk" export VAR_MK="var.mk"
@@ -399,6 +409,7 @@ if [[ ! -s $VAR_MK ]]; then
exit 6 exit 6
fi fi
# verify we have non-empty readable 1337.mk # verify we have non-empty readable 1337.mk
# #
export LEET_MK="1337.mk" export LEET_MK="1337.mk"
@@ -419,6 +430,7 @@ if [[ ! -s $LEET_MK ]]; then
exit 6 exit 6
fi fi
# determine the name of our tarball # determine the name of our tarball
# #
# TARBALL - the same of the compressed tarball to verify and if needed re-build # TARBALL - the same of the compressed tarball to verify and if needed re-build
@@ -427,6 +439,7 @@ fi
export TARBALL="$YYYY_DIR/$ENTRY_ID.tar.bz2" export TARBALL="$YYYY_DIR/$ENTRY_ID.tar.bz2"
export REBUILD_TARBALL= export REBUILD_TARBALL=
# parameter debugging # parameter debugging
# #
if [[ $V_FLAG -ge 3 ]]; then if [[ $V_FLAG -ge 3 ]]; then
@@ -447,6 +460,7 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: CD_FAILED=$CD_FAILED" 1>&2 echo "$0: debug[3]: CD_FAILED=$CD_FAILED" 1>&2
echo "$0: debug[3]: BIN_PATH=$BIN_PATH" 1>&2 echo "$0: debug[3]: BIN_PATH=$BIN_PATH" 1>&2
echo "$0: debug[3]: BIN_DIR=$BIN_DIR" 1>&2 echo "$0: debug[3]: BIN_DIR=$BIN_DIR" 1>&2
echo "$0: debug[3]: FILELIST_ENTRY_JSON_AWK=$FILELIST_ENTRY_JSON_AWK" 1>&2
echo "$0: debug[3]: YEAR_DIR=$YEAR_DIR" 1>&2 echo "$0: debug[3]: YEAR_DIR=$YEAR_DIR" 1>&2
echo "$0: debug[3]: ENTRY_DIR=$ENTRY_DIR" 1>&2 echo "$0: debug[3]: ENTRY_DIR=$ENTRY_DIR" 1>&2
echo "$0: debug[3]: ENTRY_ID=$ENTRY_ID" 1>&2 echo "$0: debug[3]: ENTRY_ID=$ENTRY_ID" 1>&2
@@ -455,7 +469,6 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: DOT_PATH=$DOT_PATH" 1>&2 echo "$0: debug[3]: DOT_PATH=$DOT_PATH" 1>&2
echo "$0: debug[3]: DOT_PATH_CONTENT=$DOT_PATH_CONTENT" 1>&2 echo "$0: debug[3]: DOT_PATH_CONTENT=$DOT_PATH_CONTENT" 1>&2
echo "$0: debug[3]: ENTRY_JSON=$ENTRY_JSON" 1>&2 echo "$0: debug[3]: ENTRY_JSON=$ENTRY_JSON" 1>&2
echo "$0: debug[3]: FILELIST_ENTRY_JSON_AWK=$FILELIST_ENTRY_JSON_AWK" 1>&2
echo "$0: debug[3]: IOCCC_CSS=$IOCCC_CSS" 1>&2 echo "$0: debug[3]: IOCCC_CSS=$IOCCC_CSS" 1>&2
echo "$0: debug[3]: VAR_MK=$VAR_MK" 1>&2 echo "$0: debug[3]: VAR_MK=$VAR_MK" 1>&2
echo "$0: debug[3]: LEET_MK=$LEET_MK" 1>&2 echo "$0: debug[3]: LEET_MK=$LEET_MK" 1>&2
@@ -463,6 +476,7 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: REBUILD_TARBALL=$REBUILD_TARBALL" 1>&2 echo "$0: debug[3]: REBUILD_TARBALL=$REBUILD_TARBALL" 1>&2
fi fi
# If -N, time to exit # If -N, time to exit
# #
if [[ -n $DO_NOT_PROCESS ]]; then if [[ -n $DO_NOT_PROCESS ]]; then
@@ -472,6 +486,7 @@ if [[ -n $DO_NOT_PROCESS ]]; then
exit 0 exit 0
fi fi
# test - if needed - if the tarball is a non-empty writable file # test - if needed - if the tarball is a non-empty writable file
# #
if [[ -z $REBUILD_TARBALL && ! -e $TARBALL ]]; then if [[ -z $REBUILD_TARBALL && ! -e $TARBALL ]]; then
@@ -503,6 +518,7 @@ if [[ -z $REBUILD_TARBALL && ! -s $TARBALL ]]; then
fi fi
fi fi
# create a temporary file manifest list # create a temporary file manifest list
# #
export TMP_MANIFEST_LIST=".tmp.$NAME.MANIFEST_LIST.$$.tmp" export TMP_MANIFEST_LIST=".tmp.$NAME.MANIFEST_LIST.$$.tmp"
@@ -525,6 +541,7 @@ elif [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: because of -n, temporary file manifest list is not used: $TMP_MANIFEST_LIST" 1>&2 echo "$0: debug[3]: because of -n, temporary file manifest list is not used: $TMP_MANIFEST_LIST" 1>&2
fi fi
# create a temporary sort list of files to tar # create a temporary sort list of files to tar
# #
export TMP_FILES_TO_TAR=".tmp.$NAME.FILES_TO_TAR.$$.tmp" export TMP_FILES_TO_TAR=".tmp.$NAME.FILES_TO_TAR.$$.tmp"
@@ -547,6 +564,7 @@ elif [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: because of -n, temporary list of files to tar is not used: $TMP_FILES_TO_TAR" 1>&2 echo "$0: debug[3]: because of -n, temporary list of files to tar is not used: $TMP_FILES_TO_TAR" 1>&2
fi fi
# create a temporary exit code # create a temporary exit code
# #
# It is a pain to set the EXIT_CODE deep inside a loop, so we write the EXIT_CODE into a file # It is a pain to set the EXIT_CODE deep inside a loop, so we write the EXIT_CODE into a file
@@ -572,6 +590,7 @@ elif [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: because of -n, temporary exit code is not used: $TMP_EXIT_CODE" 1>&2 echo "$0: debug[3]: because of -n, temporary exit code is not used: $TMP_EXIT_CODE" 1>&2
fi fi
# generate sorted list of entry files from the entry's manifest # generate sorted list of entry files from the entry's manifest
# #
# We also add ioccc.css and var.mk from the top level. # We also add ioccc.css and var.mk from the top level.
@@ -598,6 +617,7 @@ elif [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: because of -n, temporary file manifest list was not formed: $TMP_MANIFEST_LIST" 1>&2 echo "$0: debug[3]: because of -n, temporary file manifest list was not formed: $TMP_MANIFEST_LIST" 1>&2
fi fi
# generate sorted list of found entry files # generate sorted list of found entry files
# #
# We exclude the compressed tarball itself because we are writing it. # We exclude the compressed tarball itself because we are writing it.
@@ -638,6 +658,7 @@ if [[ -z $EXIT_CODE ]]; then
exit 16 exit 16
fi fi
# create a temporary list of files found in the tarball # create a temporary list of files found in the tarball
# #
export TMP_TARBALL_LIST=".tmp.$NAME.TARBALL_LIST.$$.tmp" export TMP_TARBALL_LIST=".tmp.$NAME.TARBALL_LIST.$$.tmp"
@@ -660,6 +681,7 @@ elif [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: because of -n, temporary of files in the tarball: $TARBALL is not used: $TMP_TARBALL_LIST" 1>&2 echo "$0: debug[3]: because of -n, temporary of files in the tarball: $TARBALL is not used: $TMP_TARBALL_LIST" 1>&2
fi fi
# create a temporary tarball # create a temporary tarball
# #
export TMP_TARBALL=".tmp.$NAME.TARBALL.$$.tmp" export TMP_TARBALL=".tmp.$NAME.TARBALL.$$.tmp"
@@ -682,6 +704,7 @@ elif [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: because of -n, temporary tarball is not used: $TMP_TARBALL" 1>&2 echo "$0: debug[3]: because of -n, temporary tarball is not used: $TMP_TARBALL" 1>&2
fi fi
# test - if needed - if the sorted list of files from the tarball matches the sorted list of found entry files # test - if needed - if the sorted list of files from the tarball matches the sorted list of found entry files
# #
if [[ -z $REBUILD_TARBALL ]]; then if [[ -z $REBUILD_TARBALL ]]; then
@@ -722,6 +745,7 @@ if [[ -z $REBUILD_TARBALL ]]; then
fi fi
fi fi
# test - if needed - if the files in the tarball match the contents of the entry's files # test - if needed - if the files in the tarball match the contents of the entry's files
# #
if [[ -z $REBUILD_TARBALL ]]; then if [[ -z $REBUILD_TARBALL ]]; then
@@ -746,6 +770,7 @@ if [[ -z $REBUILD_TARBALL ]]; then
fi fi
fi fi
# test - if needed - update the tarball # test - if needed - update the tarball
# #
# We use gnu tar to form the bzip2 compressed tarball with careful arguments # We use gnu tar to form the bzip2 compressed tarball with careful arguments
@@ -865,6 +890,7 @@ elif [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[1]: no need to update $TARBALL" 1>&2 echo "$0: debug[1]: no need to update $TARBALL" 1>&2
fi fi
# All Done!!! All Done!!! -- Jessica Noll, Age 2 # All Done!!! All Done!!! -- Jessica Noll, Age 2
# #
if [[ -z $NOOP ]]; then if [[ -z $NOOP ]]; then
+32 -5
View File
@@ -26,6 +26,7 @@
# #
# Share and enjoy! :-) # Share and enjoy! :-)
# firewall - run only with a bash that is version 5.1.8 or later # firewall - run only with a bash that is version 5.1.8 or later
# #
# The "/usr/bin/env bash" command must result in using a bash that # The "/usr/bin/env bash" command must result in using a bash that
@@ -69,6 +70,7 @@ if [[ -z ${BASH_VERSINFO[0]} ||
exit 4 exit 4
fi fi
# setup bash file matching # setup bash file matching
# #
# We must declare arrays with -ag or -Ag, and we need loops to "export" modified variables. # We must declare arrays with -ag or -Ag, and we need loops to "export" modified variables.
@@ -81,6 +83,7 @@ shopt -u nocaseglob # disable strict case matching
shopt -u extglob # enable extended globbing patterns shopt -u extglob # enable extended globbing patterns
shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories
# set variables referenced in the usage message # set variables referenced in the usage message
export VERSION="1.2.8 2024-08-05" export VERSION="1.2.8 2024-08-05"
@@ -110,10 +113,11 @@ if [[ -z "$GIT_TOOL" ]]; then
exit 8 exit 8
fi fi
# set usage message # set usage message
# #
export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N] export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N]
[-p tool] [-w site_url] [-W] [-w site_url] [-W]
YYYY YYYY
-h print help message and exit -h print help message and exit
@@ -126,8 +130,6 @@ export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N]
-n go thru the actions, but do not update any files (def: do the action) -n go thru the actions, but do not update any files (def: do the action)
-N do not process file, just parse arguments and ignore the file (def: process the file) -N do not process file, just parse arguments and ignore the file (def: process the file)
-p tool This option is ignored
-w site_url This option is ignored -w site_url This option is ignored
-W Warn if a file in the manifest is missing: (def: error if a file is missing) -W Warn if a file in the manifest is missing: (def: error if a file is missing)
@@ -148,15 +150,17 @@ Exit codes:
$NAME version: $VERSION" $NAME version: $VERSION"
# setup # setup
# #
export NOOP= export NOOP=
export DO_NOT_PROCESS= export DO_NOT_PROCESS=
export EXIT_CODE="0" export EXIT_CODE="0"
# parse command line # parse command line
# #
while getopts :hv:Vd:D:nNp:U:w:W flag; do while getopts :hv:Vd:D:nNU:w:W flag; do
case "$flag" in case "$flag" in
h) echo "$USAGE" 1>&2 h) echo "$USAGE" 1>&2
exit 2 exit 2
@@ -173,7 +177,6 @@ while getopts :hv:Vd:D:nNp:U:w:W flag; do
;; ;;
N) DO_NOT_PROCESS="-N" N) DO_NOT_PROCESS="-N"
;; ;;
p) ;;
U) ;; U) ;;
w) ;; w) ;;
W) CAP_W_FLAG_FOUND="true" W) CAP_W_FLAG_FOUND="true"
@@ -196,6 +199,7 @@ while getopts :hv:Vd:D:nNp:U:w:W flag; do
esac esac
done done
# parse the command line arguments # parse the command line arguments
# #
if [[ $V_FLAG -ge 3 ]]; then if [[ $V_FLAG -ge 3 ]]; then
@@ -214,6 +218,7 @@ fi
# #
export YYYY="$1" export YYYY="$1"
# verify that we have a topdir directory # verify that we have a topdir directory
# #
REPO_NAME=$(basename "$REPO_TOP_URL") REPO_NAME=$(basename "$REPO_TOP_URL")
@@ -234,6 +239,7 @@ if [[ ! -d $TOPDIR ]]; then
exit 6 exit 6
fi fi
# cd to topdir # cd to topdir
# #
if [[ ! -e $TOPDIR ]]; then if [[ ! -e $TOPDIR ]]; then
@@ -257,6 +263,7 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2 echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2
fi fi
# verify that we have a bin subdirectory # verify that we have a bin subdirectory
# #
export BIN_PATH="$TOPDIR/bin" export BIN_PATH="$TOPDIR/bin"
@@ -266,6 +273,7 @@ if [[ ! -d $BIN_PATH ]]; then
fi fi
export BIN_DIR="bin" export BIN_DIR="bin"
# verify we have our awk tool # verify we have our awk tool
# #
export FILELIST_ENTRY_JSON_AWK="$BIN_DIR/filelist.entry.json.awk" export FILELIST_ENTRY_JSON_AWK="$BIN_DIR/filelist.entry.json.awk"
@@ -286,6 +294,7 @@ if [[ ! -s $FILELIST_ENTRY_JSON_AWK ]]; then
exit 5 exit 5
fi fi
# verify we have non-empty readable ioccc.css file # verify we have non-empty readable ioccc.css file
# #
export IOCCC_CSS="ioccc.css" export IOCCC_CSS="ioccc.css"
@@ -306,6 +315,7 @@ if [[ ! -s $IOCCC_CSS ]]; then
exit 6 exit 6
fi fi
# verify we have non-empty readable ioccc.css file # verify we have non-empty readable ioccc.css file
# #
export VAR_MK="var.mk" export VAR_MK="var.mk"
@@ -326,6 +336,7 @@ if [[ ! -s $VAR_MK ]]; then
exit 6 exit 6
fi fi
# verify we have non-empty readable 1337.mk # verify we have non-empty readable 1337.mk
# #
export LEET_MK="1337.mk" export LEET_MK="1337.mk"
@@ -346,6 +357,7 @@ if [[ ! -s $LEET_MK ]]; then
exit 6 exit 6
fi fi
# verify we have non-empty readable year level .filelist file # verify we have non-empty readable year level .filelist file
# #
export FILELIST="$YYYY/.filelist" export FILELIST="$YYYY/.filelist"
@@ -366,6 +378,7 @@ if [[ ! -s $FILELIST ]]; then
exit 6 exit 6
fi fi
# determine the name of our tarball # determine the name of our tarball
# #
# TARBALL - the same of the compressed tarball to verify and if needed re-build # TARBALL - the same of the compressed tarball to verify and if needed re-build
@@ -374,6 +387,7 @@ fi
export TARBALL="$YYYY/$YYYY.tar.bz2" export TARBALL="$YYYY/$YYYY.tar.bz2"
export REBUILD_TARBALL= export REBUILD_TARBALL=
# parameter debugging # parameter debugging
# #
if [[ $V_FLAG -ge 3 ]]; then if [[ $V_FLAG -ge 3 ]]; then
@@ -404,6 +418,7 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: REBUILD_TARBALL=$REBUILD_TARBALL" 1>&2 echo "$0: debug[3]: REBUILD_TARBALL=$REBUILD_TARBALL" 1>&2
fi fi
# If -N, time to exit # If -N, time to exit
# #
if [[ -n $DO_NOT_PROCESS ]]; then if [[ -n $DO_NOT_PROCESS ]]; then
@@ -413,6 +428,7 @@ if [[ -n $DO_NOT_PROCESS ]]; then
exit 0 exit 0
fi fi
# test - if needed - if the tarball is a non-empty writable file # test - if needed - if the tarball is a non-empty writable file
# #
if [[ -z $REBUILD_TARBALL && ! -e $TARBALL ]]; then if [[ -z $REBUILD_TARBALL && ! -e $TARBALL ]]; then
@@ -444,6 +460,7 @@ if [[ -z $REBUILD_TARBALL && ! -s $TARBALL ]]; then
fi fi
fi fi
# create a temporary file manifest list # create a temporary file manifest list
# #
export TMP_MANIFEST_LIST=".tmp.$NAME.MANIFEST_LIST.$$.tmp" export TMP_MANIFEST_LIST=".tmp.$NAME.MANIFEST_LIST.$$.tmp"
@@ -466,6 +483,7 @@ elif [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: because of -n, temporary file manifest list is not used: $TMP_MANIFEST_LIST" 1>&2 echo "$0: debug[3]: because of -n, temporary file manifest list is not used: $TMP_MANIFEST_LIST" 1>&2
fi fi
# create a temporary sort list of files to tar # create a temporary sort list of files to tar
# #
export TMP_FILES_TO_TAR=".tmp.$NAME.FILES_TO_TAR.$$.tmp" export TMP_FILES_TO_TAR=".tmp.$NAME.FILES_TO_TAR.$$.tmp"
@@ -488,6 +506,7 @@ elif [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: because of -n, temporary list of files to tar is not used: $TMP_FILES_TO_TAR" 1>&2 echo "$0: debug[3]: because of -n, temporary list of files to tar is not used: $TMP_FILES_TO_TAR" 1>&2
fi fi
# create a temporary exit code # create a temporary exit code
# #
# It is a pain to set the EXIT_CODE deep inside a loop, so we write the EXIT_CODE into a file # It is a pain to set the EXIT_CODE deep inside a loop, so we write the EXIT_CODE into a file
@@ -513,6 +532,7 @@ elif [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: because of -n, temporary exit code is not used: $TMP_EXIT_CODE" 1>&2 echo "$0: debug[3]: because of -n, temporary exit code is not used: $TMP_EXIT_CODE" 1>&2
fi fi
# generate sorted list of entry files from the IOCCC years manifest # generate sorted list of entry files from the IOCCC years manifest
# #
# We also add ioccc.css and var.mk from the top level. # We also add ioccc.css and var.mk from the top level.
@@ -701,6 +721,7 @@ elif [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: because of -n, temporary file manifest list was not formed: $TMP_MANIFEST_LIST" 1>&2 echo "$0: debug[3]: because of -n, temporary file manifest list was not formed: $TMP_MANIFEST_LIST" 1>&2
fi fi
# generate sorted list of found entry files # generate sorted list of found entry files
# #
# We exclude the compressed tarball itself because we are writing it. # We exclude the compressed tarball itself because we are writing it.
@@ -741,6 +762,7 @@ if [[ -z $EXIT_CODE ]]; then
exit 16 exit 16
fi fi
# create a temporary list of files found in the tarball # create a temporary list of files found in the tarball
# #
export TMP_TARBALL_LIST=".tmp.$NAME.TARBALL_LIST.$$.tmp" export TMP_TARBALL_LIST=".tmp.$NAME.TARBALL_LIST.$$.tmp"
@@ -763,6 +785,7 @@ elif [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: because of -n, temporary of files in the tarball: $TARBALL is not used: $TMP_TARBALL_LIST" 1>&2 echo "$0: debug[3]: because of -n, temporary of files in the tarball: $TARBALL is not used: $TMP_TARBALL_LIST" 1>&2
fi fi
# create a temporary tarball # create a temporary tarball
# #
export TMP_TARBALL=".tmp.$NAME.TARBALL.$$.tmp" export TMP_TARBALL=".tmp.$NAME.TARBALL.$$.tmp"
@@ -785,6 +808,7 @@ elif [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: because of -n, temporary tarball is not used: $TMP_TARBALL" 1>&2 echo "$0: debug[3]: because of -n, temporary tarball is not used: $TMP_TARBALL" 1>&2
fi fi
# test - if needed - if the sorted list of files from the tarball matches the sorted list of found entry files # test - if needed - if the sorted list of files from the tarball matches the sorted list of found entry files
# #
if [[ -z $REBUILD_TARBALL ]]; then if [[ -z $REBUILD_TARBALL ]]; then
@@ -825,6 +849,7 @@ if [[ -z $REBUILD_TARBALL ]]; then
fi fi
fi fi
# test - if needed - if the files in the tarball match the contents of the entry's files # test - if needed - if the files in the tarball match the contents of the entry's files
# #
if [[ -z $REBUILD_TARBALL ]]; then if [[ -z $REBUILD_TARBALL ]]; then
@@ -849,6 +874,7 @@ if [[ -z $REBUILD_TARBALL ]]; then
fi fi
fi fi
# test - if needed - update the tarball # test - if needed - update the tarball
# #
# We use gnu tar to form the bzip2 compressed tarball with careful arguments # We use gnu tar to form the bzip2 compressed tarball with careful arguments
@@ -968,6 +994,7 @@ elif [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[1]: no need to update $TARBALL" 1>&2 echo "$0: debug[1]: no need to update $TARBALL" 1>&2
fi fi
# All Done!!! All Done!!! -- Jessica Noll, Age 2 # All Done!!! All Done!!! -- Jessica Noll, Age 2
# #
if [[ -z $NOOP ]]; then if [[ -z $NOOP ]]; then
+18 -6
View File
@@ -26,6 +26,7 @@
# #
# Share and enjoy! :-) # Share and enjoy! :-)
# firewall - run only with a bash that is version 5.1.8 or later # firewall - run only with a bash that is version 5.1.8 or later
# #
# The "/usr/bin/env bash" command must result in using a bash that # The "/usr/bin/env bash" command must result in using a bash that
@@ -69,6 +70,7 @@ if [[ -z ${BASH_VERSINFO[0]} ||
exit 4 exit 4
fi fi
# setup bash file matching # setup bash file matching
# #
# We must declare arrays with -ag or -Ag, and we need loops to "export" modified variables. # We must declare arrays with -ag or -Ag, and we need loops to "export" modified variables.
@@ -81,6 +83,7 @@ shopt -u nocaseglob # disable strict case matching
shopt -u extglob # enable extended globbing patterns shopt -u extglob # enable extended globbing patterns
shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories
# set variables referenced in the usage message # set variables referenced in the usage message
# #
export VERSION="1.0.4 2024-08-05" export VERSION="1.0.4 2024-08-05"
@@ -110,10 +113,11 @@ if [[ -z "$GIT_TOOL" ]]; then
exit 8 exit 8
fi fi
# set usage message # set usage message
# #
export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N] export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N]
[-p tool] [-w site_url] [-W] [-w site_url] [-W]
YYYY/dir YYYY/dir
-h print help message and exit -h print help message and exit
@@ -126,8 +130,6 @@ export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N]
-n go thru the actions, but do not update any files (def: do the action) -n go thru the actions, but do not update any files (def: do the action)
-N do not process file, just parse arguments and ignore the file (def: process the file) -N do not process file, just parse arguments and ignore the file (def: process the file)
-p tool This option is ignored
-w site_url This option is ignored -w site_url This option is ignored
-W Warn if a file in the manifest is missing: (def: error if a file is missing) -W Warn if a file in the manifest is missing: (def: error if a file is missing)
@@ -148,14 +150,16 @@ Exit codes:
$NAME version: $VERSION" $NAME version: $VERSION"
# setup # setup
# #
export NOOP= export NOOP=
export DO_NOT_PROCESS= export DO_NOT_PROCESS=
# parse command line # parse command line
# #
while getopts :hv:Vd:D:nNp:U:w:W flag; do while getopts :hv:Vd:D:nNU:w:W flag; do
case "$flag" in case "$flag" in
h) echo "$USAGE" 1>&2 h) echo "$USAGE" 1>&2
exit 2 exit 2
@@ -172,7 +176,6 @@ while getopts :hv:Vd:D:nNp:U:w:W flag; do
;; ;;
N) DO_NOT_PROCESS="-N" N) DO_NOT_PROCESS="-N"
;; ;;
p) ;;
U) ;; U) ;;
w) ;; w) ;;
W) CAP_W_FLAG_FOUND="true" W) CAP_W_FLAG_FOUND="true"
@@ -194,7 +197,7 @@ while getopts :hv:Vd:D:nNp:U:w:W flag; do
;; ;;
esac esac
done done
#
# parse the command line arguments # parse the command line arguments
# #
if [[ $V_FLAG -ge 3 ]]; then if [[ $V_FLAG -ge 3 ]]; then
@@ -213,6 +216,7 @@ fi
# #
export ENTRY_PATH="$1" export ENTRY_PATH="$1"
# verify that we have a topdir directory # verify that we have a topdir directory
# #
REPO_NAME=$(basename "$REPO_TOP_URL") REPO_NAME=$(basename "$REPO_TOP_URL")
@@ -233,6 +237,7 @@ if [[ ! -d $TOPDIR ]]; then
exit 6 exit 6
fi fi
# cd to topdir # cd to topdir
# #
if [[ ! -e $TOPDIR ]]; then if [[ ! -e $TOPDIR ]]; then
@@ -256,6 +261,7 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2 echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2
fi fi
# verify that ENTRY_PATH is a entry directory # verify that ENTRY_PATH is a entry directory
# #
if [[ ! -d $ENTRY_PATH ]]; then if [[ ! -d $ENTRY_PATH ]]; then
@@ -305,6 +311,7 @@ if [[ ! -w $YYYY_DIR ]]; then
exit 7 exit 7
fi fi
# determine the name of our tarball # determine the name of our tarball
# #
# TARBALL - the same of the compressed tarball to verify and if needed re-build # TARBALL - the same of the compressed tarball to verify and if needed re-build
@@ -331,6 +338,7 @@ if [[ ! -s $TARBALL ]]; then
exit 1 exit 1
fi fi
# parameter debugging # parameter debugging
# #
if [[ $V_FLAG -ge 3 ]]; then if [[ $V_FLAG -ge 3 ]]; then
@@ -356,6 +364,7 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: TARBALL=$TARBALL" 1>&2 echo "$0: debug[3]: TARBALL=$TARBALL" 1>&2
fi fi
# If -N, time to exit # If -N, time to exit
# #
if [[ -n $DO_NOT_PROCESS ]]; then if [[ -n $DO_NOT_PROCESS ]]; then
@@ -365,6 +374,7 @@ if [[ -n $DO_NOT_PROCESS ]]; then
exit 0 exit 0
fi fi
# untar entry compressed tarball # untar entry compressed tarball
# #
if [[ -z $NOOP ]]; then if [[ -z $NOOP ]]; then
@@ -401,6 +411,8 @@ elif [[ $V_FLAG -ge 5 ]]; then
"$GTAR_TOOL --totals -jxvf $TARBALL" 1>&2 "$GTAR_TOOL --totals -jxvf $TARBALL" 1>&2
fi fi
# All Done!!! All Done!!! -- Jessica Noll, Age 2 # All Done!!! All Done!!! -- Jessica Noll, Age 2
# #
exit 0 exit 0
+17 -6
View File
@@ -26,6 +26,7 @@
# #
# Share and enjoy! :-) # Share and enjoy! :-)
# firewall - run only with a bash that is version 5.1.8 or later # firewall - run only with a bash that is version 5.1.8 or later
# #
# The "/usr/bin/env bash" command must result in using a bash that # The "/usr/bin/env bash" command must result in using a bash that
@@ -81,6 +82,7 @@ shopt -u nocaseglob # disable strict case matching
shopt -u extglob # enable extended globbing patterns shopt -u extglob # enable extended globbing patterns
shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories
# set variables referenced in the usage message # set variables referenced in the usage message
# #
export VERSION="1.0.4 2024-08-05" export VERSION="1.0.4 2024-08-05"
@@ -110,10 +112,11 @@ if [[ -z "$GIT_TOOL" ]]; then
exit 8 exit 8
fi fi
# set usage message # set usage message
# #
export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N] export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N]
[-p tool] [-w site_url] [-W] [-w site_url] [-W]
YYYY YYYY
-h print help message and exit -h print help message and exit
@@ -126,8 +129,6 @@ export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N]
-n go thru the actions, but do not update any files (def: do the action) -n go thru the actions, but do not update any files (def: do the action)
-N do not process file, just parse arguments and ignore the file (def: process the file) -N do not process file, just parse arguments and ignore the file (def: process the file)
-p tool This option is ignored
-w site_url This option is ignored -w site_url This option is ignored
-W Warn if a file in the manifest is missing: (def: error if a file is missing) -W Warn if a file in the manifest is missing: (def: error if a file is missing)
@@ -148,14 +149,16 @@ Exit codes:
$NAME version: $VERSION" $NAME version: $VERSION"
# setup # setup
# #
export NOOP= export NOOP=
export DO_NOT_PROCESS= export DO_NOT_PROCESS=
# parse command line # parse command line
# #
while getopts :hv:Vd:D:nNp:U:w:W flag; do while getopts :hv:Vd:D:nNU:w:W flag; do
case "$flag" in case "$flag" in
h) echo "$USAGE" 1>&2 h) echo "$USAGE" 1>&2
exit 2 exit 2
@@ -172,7 +175,6 @@ while getopts :hv:Vd:D:nNp:U:w:W flag; do
;; ;;
N) DO_NOT_PROCESS="-N" N) DO_NOT_PROCESS="-N"
;; ;;
p) ;;
U) ;; U) ;;
w) ;; w) ;;
W) CAP_W_FLAG_FOUND="true" W) CAP_W_FLAG_FOUND="true"
@@ -194,7 +196,7 @@ while getopts :hv:Vd:D:nNp:U:w:W flag; do
;; ;;
esac esac
done done
#
# parse the command line arguments # parse the command line arguments
# #
if [[ $V_FLAG -ge 3 ]]; then if [[ $V_FLAG -ge 3 ]]; then
@@ -213,6 +215,7 @@ fi
# #
export YYYY="$1" export YYYY="$1"
# verify that we have a topdir directory # verify that we have a topdir directory
# #
REPO_NAME=$(basename "$REPO_TOP_URL") REPO_NAME=$(basename "$REPO_TOP_URL")
@@ -233,6 +236,7 @@ if [[ ! -d $TOPDIR ]]; then
exit 6 exit 6
fi fi
# cd to topdir # cd to topdir
# #
if [[ ! -e $TOPDIR ]]; then if [[ ! -e $TOPDIR ]]; then
@@ -256,6 +260,7 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2 echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2
fi fi
# verify that YYYY is an IOCCC year directory # verify that YYYY is an IOCCC year directory
# #
if [[ ! -e $YYYY ]]; then if [[ ! -e $YYYY ]]; then
@@ -271,6 +276,7 @@ if [[ ! -r $YYYY ]]; then
exit 6 exit 6
fi fi
# verify that YYYY has a non-empty readable .year file # verify that YYYY has a non-empty readable .year file
# #
export DOT_YEAR="$YYYY/.year" export DOT_YEAR="$YYYY/.year"
@@ -291,6 +297,7 @@ if [[ ! -s $DOT_YEAR ]]; then
exit 6 exit 6
fi fi
# determine the name of our tarball # determine the name of our tarball
# #
# TARBALL - the same of the compressed tarball to verify and if needed re-build # TARBALL - the same of the compressed tarball to verify and if needed re-build
@@ -317,6 +324,7 @@ if [[ ! -s $TARBALL ]]; then
exit 1 exit 1
fi fi
# parameter debugging # parameter debugging
# #
if [[ $V_FLAG -ge 3 ]]; then if [[ $V_FLAG -ge 3 ]]; then
@@ -338,6 +346,7 @@ if [[ $V_FLAG -ge 3 ]]; then
echo "$0: debug[3]: TARBALL=$TARBALL" 1>&2 echo "$0: debug[3]: TARBALL=$TARBALL" 1>&2
fi fi
# If -N, time to exit # If -N, time to exit
# #
if [[ -n $DO_NOT_PROCESS ]]; then if [[ -n $DO_NOT_PROCESS ]]; then
@@ -347,6 +356,7 @@ if [[ -n $DO_NOT_PROCESS ]]; then
exit 0 exit 0
fi fi
# untar entry compressed tarball # untar entry compressed tarball
# #
if [[ -z $NOOP ]]; then if [[ -z $NOOP ]]; then
@@ -383,6 +393,7 @@ elif [[ $V_FLAG -ge 5 ]]; then
"$GTAR_TOOL --totals -jxvf $TARBALL" 1>&2 "$GTAR_TOOL --totals -jxvf $TARBALL" 1>&2
fi fi
# All Done!!! All Done!!! -- Jessica Noll, Age 2 # All Done!!! All Done!!! -- Jessica Noll, Age 2
# #
exit 0 exit 0