83 lines · 1.9 KB · Shell
RawDownload
#!/usr/bin/env bash set -euo pipefail ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"SOURCE_DIR="${ROOT_DIR}/Sources/CodexBarCore/Vendored/CostUsage"OUTPUT_FILE="${ROOT_DIR}/Sources/CodexBarCore/Generated/CodexParserHash.generated.swift"MODE="${1:-write}" case "$MODE" in  write | --write)    CHECK_ONLY=0    ;;  check | --check)    CHECK_ONLY=1    ;;  *)    echo "Usage: $0 [write|--write|check|--check]" >&2    exit 2    ;;esac if command -v shasum >/dev/null 2>&1; then  HASH_CMD=(shasum -a 256)elif command -v sha256sum >/dev/null 2>&1; then  HASH_CMD=(sha256sum)else  echo "error: shasum or sha256sum is required" >&2  exit 1fi FILE_LIST="$(mktemp)"trap 'rm -f "$FILE_LIST"' EXIT find "$SOURCE_DIR" \  -type f \  -name '*.swift' \  ! -name '*Claude*' \  -print |  sed "s#^${ROOT_DIR}/##" |  LC_ALL=C sort >"$FILE_LIST" HASH="$(  while IFS= read -r file; do    printf '== %s ==\n' "$file"    cat "${ROOT_DIR}/${file}"    printf '\n'  done <"$FILE_LIST" | "${HASH_CMD[@]}")"HASH="${HASH%% *}"SHORT_HASH="${HASH:0:16}" render_generated() {  cat <<SWIFT// Generated by Scripts/regenerate-codex-parser-hash.sh. Do not edit by hand. enum CodexParserHash {    static let value = "$SHORT_HASH"}SWIFT} if [[ "$CHECK_ONLY" -eq 1 ]]; then  EXPECTED_FILE="$(mktemp)"  trap 'rm -f "$FILE_LIST" "$EXPECTED_FILE"' EXIT  render_generated >"$EXPECTED_FILE"  if ! cmp -s "$EXPECTED_FILE" "$OUTPUT_FILE"; then    echo "error: ${OUTPUT_FILE#${ROOT_DIR}/} is stale. Run Scripts/regenerate-codex-parser-hash.sh and commit the result." >&2    if [[ -f "$OUTPUT_FILE" ]]; then      diff -u "$OUTPUT_FILE" "$EXPECTED_FILE" >&2 || true    else      diff -u /dev/null "$EXPECTED_FILE" >&2 || true    fi    exit 1  fi  echo "Codex parser hash is current (${SHORT_HASH})"  exit 0fi mkdir -p "$(dirname "$OUTPUT_FILE")"render_generated >"$OUTPUT_FILE" echo "Updated ${OUTPUT_FILE#${ROOT_DIR}/} to ${SHORT_HASH}"