Files
crapper/uml
T
Robert C. Martin 9f1bead298 Fix the coverage, git, and Clojure bugs, and bring CRAP under 10.
A path in a built-in coverage command is one argument, a failed custom coverage command does not read a stale report, and git failures exit with git's status. The Clojure reader honors discards, metadata, and character literals. Long functions are split so every score is under 10 except the option switch.
2026-10-03 17:27:59 -05:00

73 lines
1.9 KiB
Bash
Executable File

#!/bin/zsh
# Loader for this project. Points at the local uml-viewer checkout so the
# Python scanner is on the classpath.
set -euo pipefail
ROOT="$(cd "$(dirname "$0")" && pwd)"
cd "$ROOT"
if [[ -n "${UML_VIEWER_ROOT:-}" ]]; then
VIEWER="$UML_VIEWER_ROOT"
else
VIEWER="$ROOT/../uml-viewer"
fi
if [[ ! -d "$VIEWER" ]]; then
echo "uml-viewer checkout not found at $VIEWER" >&2
echo "Set UML_VIEWER_ROOT to the checkout." >&2
exit 1
fi
VIEWER="$(cd "$VIEWER" && pwd)"
DEPS="{:deps {uml-viewer/uml-viewer {:local/root \"$VIEWER\"} quil/quil {:mvn/version \"4.3.1563\"}}}"
edn_path() {
local name base f
name="$(basename "$ROOT")"
if [[ -f "examples/${name}.edn" ]]; then
echo "examples/${name}.edn"
return
fi
if [[ -d examples ]]; then
for f in examples/*.edn(N); do
[[ -f "$f" ]] || continue
base="${f:t}"
[[ "$base" == *.policy.edn ]] && continue
echo "$f"
return
done
fi
}
LOG="uml-viewer-log.txt"
launch_viewer() {
{
printf '----- %s starting uml-viewer' "$(date '+%Y-%m-%d %H:%M:%S')"
[[ $# -gt 0 ]] && printf ' %s' "$@"
printf '\n'
} >> "$LOG"
# `clj` is rlwrap on Homebrew; a background rlwrap stops (SIGTTOU) and
# never starts the JVM. `clojure` is the same CLI without the tty wrapper.
nohup clojure -Sdeps "$DEPS" -M -m uml-viewer.main.uml-viewer "$@" >> "$LOG" 2>&1 </dev/null &
disown
echo "UML viewer started (pid $!). Log: $LOG"
}
if [[ "${1:-}" == "-h" || "${1:-}" == "--help" ]]; then
echo "usage: ./uml [--restart]" >&2
echo " (no args) fresh window; companion writes the diagram" >&2
echo " --restart new JVM, same companion; restores last view" >&2
echo " The viewer detaches; exceptions go to $LOG." >&2
exit 0
fi
if [[ "${1:-}" == "--restart" ]]; then
edn="$(edn_path)"
if [[ -n "$edn" ]]; then
launch_viewer --restart "$edn"
else
launch_viewer --restart
fi
exit 0
fi
launch_viewer "$@"