pcbjam/scripts/git-workflow/assert-clean.sh
Gergő Törcsvári 0665b30762
chore(skills): include pcbjam-shared in the git-feature workflow
The pcbjam repo's own git-feature skills + scripts/git-workflow predated the
web/pcbjam-shared submodule and only covered root+kicad+wxwidgets. Add the MIT
contract repo as a fourth member everywhere:

- repos.sh: pcbjam_shared key (path web/pcbjam-shared, main `main`) + layout doc.
- assert-clean.sh / for-each-repo.sh: count-agnostic wording.
- git-feature-start/commit/sync/finish SKILL.md: pcbjam-shared in the branch /
  commit (kicad, wxwidgets, pcbjam-shared, then root) / rebase (root first) /
  finish orders; root pointer-bump staging + diff now include web/pcbjam-shared,
  and the root stage step excludes it like the other submodule trees.

Mirrors the root pcbjam-private skills, which already covered shared.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-12 14:05:40 +02:00

33 lines
952 B
Shell
Executable file

#!/bin/bash
# Exit 0 if all repos are clean (no staged, no unstaged, no untracked files).
# Exit 1 with a readable message listing the dirty repos otherwise.
# Untracked files count as dirty - this is intentional: starting a new feature
# while you have uncommitted new files is almost always a mistake.
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# shellcheck source=./repos.sh
source "$SCRIPT_DIR/repos.sh"
dirty=()
for repo in "${REPOS[@]}"; do
p=$(repo_path "$repo")
# `git status --porcelain` is empty iff worktree clean (covers modified, staged, and untracked).
if [ -n "$(git -C "$p" status --porcelain)" ]; then
dirty+=("$repo")
fi
done
if [ ${#dirty[@]} -eq 0 ]; then
echo "All ${#REPOS[@]} repos clean."
exit 0
fi
echo "Dirty repos: ${dirty[*]}" >&2
for repo in "${dirty[@]}"; do
p=$(repo_path "$repo")
echo "--- $repo ---" >&2
git -C "$p" status --short >&2
done
exit 1