OSVauco/scripts/workspace-status.sh

91 lines
2.6 KiB
Bash
Executable File

#!/usr/bin/env bash
# This script provides a read-only overview of the repository's status.
# It does not modify any files, Git history, or infrastructure.
set -euo pipefail
# Go to the repository root.
REPO_ROOT=$(git rev-parse --show-toplevel)
cd "$REPO_ROOT"
echo "--- Git Status ---"
# Refresh local remote-tracking metadata only. Does not change source files, history, or branches.
echo "Refreshing remote-tracking branches..."
git fetch --prune origin &> /dev/null || echo "WARN: Could not fetch from origin."
echo "Repository root: $REPO_ROOT"
# Get current branch
CURRENT_BRANCH=$(git branch --show-current)
echo "Current branch: $CURRENT_BRANCH"
# Get local HEAD SHA and subject
LOCAL_HEAD_SHA=$(git rev-parse HEAD)
LOCAL_HEAD_SUBJECT=$(git log -1 --format=%s)
echo "Local HEAD: $LOCAL_HEAD_SHA ($LOCAL_HEAD_SUBJECT)"
# --- Remote Status ---
# Check for a configured upstream branch
UPSTREAM_BRANCH=$(git rev-parse --abbrev-ref --symbolic-full-name "@{u}" 2>/dev/null || echo "")
# Check for a remote-tracking ref matching the current branch name
MATCHING_REMOTE_REF="origin/$CURRENT_BRANCH"
REMOTE_TRACKING_REF=$(git rev-parse --verify "$MATCHING_REMOTE_REF" 2>/dev/null || echo "")
if [ -n "$UPSTREAM_BRANCH" ]; then
echo "Configured upstream: $UPSTREAM_BRANCH"
REMOTE_REF_TO_COMPARE="$UPSTREAM_BRANCH"
else
echo "Configured upstream: unavailable"
if [ -n "$REMOTE_TRACKING_REF" ]; then
REMOTE_REF_TO_COMPARE="$MATCHING_REMOTE_REF"
else
REMOTE_REF_TO_COMPARE=""
fi
fi
if [ -n "$REMOTE_REF_TO_COMPARE" ]; then
REMOTE_HEAD_SHA=$(git rev-parse "$REMOTE_REF_TO_COMPARE")
AHEAD_BEHIND=$(git rev-list --left-right --count "$REMOTE_REF_TO_COMPARE"...HEAD)
BEHIND=$(echo "$AHEAD_BEHIND" | cut -f1)
AHEAD=$(echo "$AHEAD_BEHIND" | cut -f2)
echo "Remote tracking ref: $REMOTE_REF_TO_COMPARE"
echo "Remote HEAD: $REMOTE_HEAD_SHA"
echo "Ahead: $AHEAD"
echo "Behind: $BEHIND"
else
echo "Remote tracking ref: unavailable"
echo "Remote HEAD: unavailable"
echo "Ahead: unavailable"
echo "Behind: unavailable"
fi
echo ""
echo "--- Working Tree Status ---"
git status --short
echo ""
echo "--- Last 5 Commits (current branch) ---"
git log -5 --oneline --decorate
echo ""
echo "--- Documentation State ---"
if [ -f "docs/WORKING_STATE.md" ]; then
echo "- WORKING_STATE.md: Present"
else
echo "- WORKING_STATE.md: Missing"
fi
if [ -f "docs/DECISIONS.md" ]; then
echo "- DECISIONS.md: Present"
else
echo "- DECISIONS.md: Missing"
fi
if [ -f "docs/AGENT_OPERATING_PROTOCOL.md" ]; then
echo "- AGENT_OPERATING_PROTOCOL.md: Present"
else
echo "- AGENT_OPERATING_PROTOCOL.md: Missing"
fi