66 lines
1.5 KiB
Bash
Executable file
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"
|