From 8006695e269721366e4a76554ba316fa36857c84 Mon Sep 17 00:00:00 2001 From: AJ Isaacs Date: Mon, 23 Feb 2026 11:58:21 -0500 Subject: [PATCH] feat: add git-status-check.sh scan script Scans all git repos in a directory for uncommitted changes and unpushed commits. Outputs structured TAB-separated results. Co-Authored-By: Claude Opus 4.6 --- git-status-check.sh | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 git-status-check.sh diff --git a/git-status-check.sh b/git-status-check.sh new file mode 100644 index 0000000..8da428c --- /dev/null +++ b/git-status-check.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash +# git-status-check.sh - Scan git repos for uncommitted changes and unpushed commits +# Usage: git-status-check.sh [directory] +# directory: path to scan (default: parent of script directory) +# Output: TAB-separated lines: project_name \t uncommitted_count \t unpushed_count \t branch + +set -euo pipefail + +SCAN_DIR="${1:-$(dirname "$(dirname "$(readlink -f "$0")")")}" + +for dir in "$SCAN_DIR"/*/; do + [ -d "$dir/.git" ] || continue + + name=$(basename "$dir") + branch=$(git -C "$dir" rev-parse --abbrev-ref HEAD 2>/dev/null || echo "unknown") + + # Count uncommitted changes + uncommitted=$(git -C "$dir" status --porcelain 2>/dev/null | wc -l | tr -d ' ') + + # Count unpushed commits (0 if no upstream) + if git -C "$dir" rev-parse --verify '@{u}' &>/dev/null; then + unpushed=$(git -C "$dir" log '@{u}..HEAD' --oneline 2>/dev/null | wc -l | tr -d ' ') + else + unpushed=0 + fi + + printf '%s\t%s\t%s\t%s\n' "$name" "$uncommitted" "$unpushed" "$branch" +done