Skip to content

Commit

Permalink
In scripts/do_hcfiles.sh, save hcfiles.dribble and hcfiles-fails.txt …
Browse files Browse the repository at this point in the history
…in loadups/. (#1786)

* Add clean-hcfiles.sh; update do_hcfiles.sh to save hcfiles.dribble to loadups and to extract fails to hcfiles-fails.txt in loadups.

* Fix clean_hcfiles.sh to handle pdf files that are tracked by git.

* Tweak output of clean_hcfiles.sh
  • Loading branch information
fghalasz authored Jul 29, 2024
1 parent 244300d commit f03a2fb
Show file tree
Hide file tree
Showing 2 changed files with 163 additions and 2 deletions.
143 changes: 143 additions & 0 deletions scripts/clean_hcfiles.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
#!/bin/sh
#
# clean_hcfiles.sh
#
# Script to clean Medley directory after running do_hcfiles.sh.
# Removes pdf files and index.html files created by do_hcfiles.sh.
#
# Caution: uses git clean - so it will delete any untracked files in
# the Medley directory tree.
#
# FGH 2024-07-15
#
# Copyright 2024 Interlisp.org
#

main() {

MEDLEYDIR=$(cd "${SCRIPTDIR}/.." && pwd)
export MEDLEYDIR
cd "${MEDLEYDIR}" || exit

shellfile=/tmp/checkgit-$$.sh

cat >"${shellfile}" <<-'EOF'
#!/bin/sh
git status --porcelain "$1" | grep --quiet --no-messages "??"
if [ $? -eq 0 ]
then
rm -f "$1"
rm -f "$1".~*~
fi
EOF

chmod +x "${shellfile}"

find . -iname index.html -exec "${shellfile}" {} \;
find . -iname \*.pdf -exec "${shellfile}" {} \;

rm -f "${shellfile}"

}


# shellcheck disable=SC2164,SC2034
if [ -z "${SCRIPTDIR}" ]
then
#
#
# Some functions to determine what directory this script is being executed from
#
#
get_abs_filename() {
# $1 : relative filename
echo "$(cd "$(dirname "$1")" && pwd)/$(basename "$1")"
}

# This function taken from
# https://stackoverflow.com/questions/29832037/how-to-get-script-directory-in-posix-sh
rreadlink() (

# Execute this function in a *subshell* to localize variables and the effect of `cd`.

target=$1
fname=
targetDir=
CDPATH=

# Try to make the execution environment as predictable as possible:
# All commands below are invoked via `command`, so we must make sure that `command`
# itself is not redefined as an alias or shell function.
# (Note that command is too inconsistent across shells, so we don't use it.)
# `command` is a *builtin* in bash, dash, ksh, zsh, and some platforms do not even have
# an external utility version of it (e.g, Ubuntu).
# `command` bypasses aliases and shell functions and also finds builtins
# in bash, dash, and ksh. In zsh, option POSIX_BUILTINS must be turned on for that
# to happen.
{ \unalias command; \unset -f command; } >/dev/null 2>&1
[ -n "$ZSH_VERSION" ] && options[POSIX_BUILTINS]=on # make zsh find *builtins* with `command` too.

while :; do # Resolve potential symlinks until the ultimate target is found.
[ -L "$target" ] || [ -e "$target" ] || { command printf '%s\n' "ERROR: '$target' does not exist." >&2; return 1; }
command cd "$(command dirname -- "$target")" # Change to target dir; necessary for correct resolution of target path.
fname=$(command basename -- "$target") # Extract filename.
[ "$fname" = '/' ] && fname='' # !! curiously, `basename /` returns '/'
if [ -L "$fname" ]; then
# Extract [next] target path, which may be defined
# *relative* to the symlink's own directory.
# Note: We parse `ls -l` output to find the symlink target
# which is the only POSIX-compliant, albeit somewhat fragile, way.
target=$(command ls -l "$fname")
target=${target#* -> }
continue # Resolve [next] symlink target.
fi
break # Ultimate target reached.
done
targetDir=$(command pwd -P) # Get canonical dir. path
# Output the ultimate target's canonical path.
# Note that we manually resolve paths ending in /. and /.. to make sure we have a normalized path.
if [ "$fname" = '.' ]; then
command printf '%s\n' "${targetDir%/}"
elif [ "$fname" = '..' ]; then
# Caveat: something like /var/.. will resolve to /private (assuming /var@ -> /private/var), i.e. the '..' is applied
# AFTER canonicalization.
command printf '%s\n' "$(command dirname -- "${targetDir}")"
else
command printf '%s\n' "${targetDir%/}/$fname"
fi
)

get_script_dir() {

# call this with $0 (from main script) as its (only) parameter
# if you need to preserve cwd, run this is a subshell since
# it can change cwd

# set -x

local_SCRIPT_PATH="$( get_abs_filename "$1" )";

while [ -h "$local_SCRIPT_PATH" ];
do
cd "$( dirname -- "$local_SCRIPT_PATH"; )";
local_SCRIPT_PATH="$( rreadlink "$local_SCRIPT_PATH" )";
done

cd "$( dirname -- "$local_SCRIPT_PATH"; )" > '/dev/null';
local_SCRIPT_PATH="$( pwd; )";

# set +x

echo "${local_SCRIPT_PATH}"
}

# end of script directory functions
###############################################################################

# figure out the script dir
SCRIPTDIR="$(get_script_dir "$0")"
export SCRIPTDIR

fi

main "$@"
22 changes: 20 additions & 2 deletions scripts/do_hcfiles.sh
Original file line number Diff line number Diff line change
@@ -1,4 +1,15 @@
#!/bin/sh
#
# do_hcfiles.sh
#
# Script to run HCFILES in Medley to create PDFs of Medley files as well as
# index.html files so that the Medley directory tree plus the generated PDFs can be
# stored on and accessed from a web server
#
# FGH 2024-07-15
#
# Copyright 2024 Interlisp.org
#

main() {
MEDLEYDIR=$(cd "${SCRIPTDIR}/.." && pwd)
Expand All @@ -7,7 +18,7 @@ main() {
mkdir -p "${logindir}"
cmfile=${logindir}/hcfiles.cm

cat >"${cmfile}" <<-"EOF"
cat >"${cmfile}" <<-EOF
"
(PROGN
Expand All @@ -27,7 +38,6 @@ main() {
"
EOF


/bin/sh "${MEDLEYDIR}/scripts/medley/medley.command" \
--config - \
--id hcfiles_+ \
Expand All @@ -37,6 +47,14 @@ main() {
--greet "${cmfile}" \
--apps

# save dribble file to loadups; extract and save fails
"${MEDLEYDIR}"/scripts/cpv ${logindir}/HCFILES.DRIBBLE "${MEDLEYDIR}"/loadups/hcfiles.dribble
grep "IL:FAIL" < "${MEDLEYDIR}"/loadups/hcfiles.dribble > ${logindir}/fails
"${MEDLEYDIR}"/scripts/cpv ${logindir}/fails "${MEDLEYDIR}"/loadups/hcfiles-fails.txt

# cleanup
rm -rf "${logindir}"

}

# shellcheck disable=SC2164,SC2034
Expand Down

0 comments on commit f03a2fb

Please sign in to comment.