From 2e669463fb5746350a9a9c256ed73eb4f42e257f Mon Sep 17 00:00:00 2001 From: "RingOfStorms (Joshua Bell)" Date: Wed, 17 Dec 2025 14:51:38 -0600 Subject: [PATCH] improve diff --- hosts/i001/impermanence-tools.sh | 41 +++++++++++++++++++++++++------- 1 file changed, 32 insertions(+), 9 deletions(-) diff --git a/hosts/i001/impermanence-tools.sh b/hosts/i001/impermanence-tools.sh index f85581c8..d297c07e 100644 --- a/hosts/i001/impermanence-tools.sh +++ b/hosts/i001/impermanence-tools.sh @@ -6,6 +6,7 @@ KEEP_PER_MONTH=1 KEEP_RECENT_WEEKS=4 KEEP_RECENT_COUNT=5 DRY_RUN=0 +DIFF_MAX_DEPTH=0 usage() { cat <&2; exit 1; } SNAPSHOT_ROOT="$1" ;; + --max-depth) + shift + [ "$#" -gt 0 ] || { echo "--max-depth requires a value" >&2; exit 1; } + DIFF_MAX_DEPTH="$1" + ;; --help|-h) - echo "Usage: bcache-impermanence diff [-s SNAPSHOT] [--snapshot-root DIR] [PATH_PREFIX...]" >&2 + echo "Usage: bcache-impermanence diff [-s SNAPSHOT] [--snapshot-root DIR] [--max-depth N] [PATH_PREFIX...]" >&2 exit 0 ;; --*) @@ -470,15 +480,22 @@ cmd_diff() { rel="${prefix#/}" [ -z "$rel" ] && rel="." - ( - cd "$snapshot_dir" && find "$rel" -mindepth 1 -print 2>/dev/null || true - ) | sed "s/^/A /" >>"$tmp" + if [ "$DIFF_MAX_DEPTH" -gt 0 ] 2>/dev/null; then + ( + cd "$snapshot_dir" && find "$rel" -mindepth 1 -maxdepth "$DIFF_MAX_DEPTH" -print 2>/dev/null || true + ) | sed "s/^/A /" >>"$tmp" - ( - cd / && find "$rel" -mindepth 1 -print 2>/dev/null || true + ( + cd / && find "$rel" -mindepth 1 -maxdepth "$DIFF_MAX_DEPTH" -print 2>/dev/null || true + ) | sed "s/^/B /" >>"$tmp" + else + ( + cd "$snapshot_dir" && find "$rel" -mindepth 1 -print 2>/dev/null || true ) | sed "s/^/B /" >>"$tmp" + fi done + if [ ! -s "$tmp" ]; then echo "No files found under specified prefixes" >&2 rm -f "$tmp" @@ -529,7 +546,13 @@ cmd_diff() { exit 0 fi - browse_diff_tree "$snapshot_name" "$snapshot_dir" "$diff_list" + local initial_prefix="" + if [ "$#" -eq 1 ]; then + # Single prefix: start tree at that path relative to / + initial_prefix="${1#/}" + fi + + browse_diff_tree "$snapshot_name" "$snapshot_dir" "$diff_list" "$initial_prefix" rm -f "$diff_list" }