kammer/.claude/scripts/update-entry.sh

66 lines
1.5 KiB
Bash
Executable file

#!/usr/bin/env bash
# Update a specific log entry (e.g. mark a PR as merged).
#
# Usage:
# .claude/scripts/update-entry.sh <req-id> --status merged
# .claude/scripts/update-entry.sh <req-id> --pr-number 42 --pr-url https://...
set -euo pipefail
REQ_ID="${1:-}"
LOG_FILE=".claude/request-log.jsonl"
NEW_STATUS=""
NEW_PR_NUMBER=""
NEW_PR_URL=""
shift || true
while [[ $# -gt 0 ]]; do
case "$1" in
--status) NEW_STATUS="$2"; shift 2 ;;
--pr-number) NEW_PR_NUMBER="$2"; shift 2 ;;
--pr-url) NEW_PR_URL="$2"; shift 2 ;;
*) echo "Unknown arg: $1" >&2; exit 1 ;;
esac
done
if [ -z "$REQ_ID" ]; then
echo "Usage: update-entry.sh <req-id> [--status STATUS] [--pr-number N] [--pr-url URL]" >&2
exit 1
fi
if [ ! -f "$LOG_FILE" ]; then
echo "Log file not found: $LOG_FILE" >&2
exit 1
fi
TMPFILE=$(mktemp)
JQ_ARGS=()
JQ_FILTER='.'
if [ -n "$NEW_STATUS" ]; then
JQ_ARGS+=(--arg status "$NEW_STATUS")
JQ_FILTER="$JQ_FILTER | .status = \$status"
fi
if [ -n "$NEW_PR_NUMBER" ]; then
JQ_ARGS+=(--argjson pr_num "$NEW_PR_NUMBER")
JQ_FILTER="$JQ_FILTER | .pr_number = \$pr_num"
fi
if [ -n "$NEW_PR_URL" ]; then
JQ_ARGS+=(--arg pr_url "$NEW_PR_URL")
JQ_FILTER="$JQ_FILTER | .pr_url = \$pr_url"
fi
while IFS= read -r line; do
ID=$(echo "$line" | jq -r '.id // ""')
if [ "$ID" = "$REQ_ID" ]; then
echo "$line" | jq "${JQ_ARGS[@]}" "$JQ_FILTER"
else
echo "$line"
fi
done < "$LOG_FILE" > "$TMPFILE"
mv "$TMPFILE" "$LOG_FILE"
echo "Updated entry $REQ_ID"