mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2026-08-10 16:33:27 +00:00
feat(cli): add amy git browse|cat|log — read git objects over smart-HTTP
Give `amy git` the git-object read side of `nak git download` / a shallow clone. `browse` lists a repo's tree, `cat` prints (or `--out` writes) a file at a ref, and `log` shows recent commit history — all over the git smart-HTTP v2 protocol via quartz's `GitHttpClient` (the same shallow-clone path the Android repo browser uses). REPO may be a NIP-34 coordinate/naddr (whose announcement supplies the clone URL) or a raw http(s) clone URL; `--clone` and `--ref` override the URL and branch/tag. Read-only: pushing git objects back to clone/GRASP servers stays out of scope. Verified live against a public repo (octocat/Hello-World) — browse/cat/log all return correct trees, blobs, and history. The harness gains a `--live` block (28 assertions with `--live`, 24 in the default offline run) exercising these against `$LIVE_REPO`, skipped by default since it needs a reachable git host. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UKMaNoK5M2PQKCAxhxWzPr
This commit is contained in:
@@ -32,11 +32,14 @@ RELAY_HOST="127.0.0.1"
|
||||
RELAY_PORT="${RELAY_PORT:-7793}"
|
||||
RELAY_URL="ws://$RELAY_HOST:$RELAY_PORT"
|
||||
NO_BUILD=0
|
||||
LIVE=0
|
||||
LIVE_REPO="${LIVE_REPO:-https://github.com/octocat/Hello-World.git}"
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case "$1" in
|
||||
--port) RELAY_PORT="$2"; RELAY_URL="ws://$RELAY_HOST:$RELAY_PORT"; shift ;;
|
||||
--no-build) NO_BUILD=1 ;;
|
||||
--live) LIVE=1 ;;
|
||||
*) echo "unknown arg: $1" >&2; exit 2 ;;
|
||||
esac
|
||||
shift
|
||||
@@ -204,5 +207,25 @@ assert_eq "$(echo "$THREAD" | jq -r '.status')" "closed" thread.status "thread s
|
||||
assert_eq "$(echo "$THREAD" | jq -r '.status_events | length')" "1" thread.status_events "one status event in timeline"
|
||||
assert_eq "$(echo "$THREAD" | jq -r '.comments | length')" "1" thread.comments "one comment in thread"
|
||||
|
||||
# =============================================================================
|
||||
# Read repo content over git smart-HTTP (--live only — needs a reachable host).
|
||||
# =============================================================================
|
||||
if [[ "$LIVE" -eq 1 ]]; then
|
||||
banner "live: git browse / cat / log ($LIVE_REPO)"
|
||||
BROWSE="$(M git browse "$LIVE_REPO" --json)"
|
||||
info "browse: $BROWSE"
|
||||
assert_nonempty "$(echo "$BROWSE" | jq -r '.head_commit')" live.browse "browse resolves a head commit"
|
||||
FIRST_FILE="$(echo "$BROWSE" | jq -r '.entries[] | select(.type=="file") | .name' | head -1)"
|
||||
if [[ -n "$FIRST_FILE" ]]; then
|
||||
CAT="$(M git cat "$LIVE_REPO" "$FIRST_FILE" --json)"
|
||||
assert_eq "$(echo "$CAT" | jq -r '.path')" "$FIRST_FILE" live.cat "cat returns the requested file"
|
||||
assert_nonempty "$(echo "$CAT" | jq -r '.oid')" live.cat_oid "cat resolves a blob oid"
|
||||
fi
|
||||
LOG="$(M git log "$LIVE_REPO" --depth 2 --json)"
|
||||
assert_nonempty "$(echo "$LOG" | jq -r '.commits[0].oid')" live.log "log returns at least one commit"
|
||||
else
|
||||
skip_msg "live git smart-HTTP reads (browse/cat/log) — pass --live to run"
|
||||
fi
|
||||
|
||||
grep -q $'\tfail\t' "$RESULTS_FILE" && exit 1
|
||||
exit 0
|
||||
|
||||
Reference in New Issue
Block a user