2.8 KiB
name, description
| name | description |
|---|---|
| gitea-review-comment-html-scrape | Read inline review comments on the Dankclaw Gitea when pulls/N/comments 404s (Gitea 1.27.3): scrape comment-content blocks and diff anchors from the PR HTML page |
Gitea review-comment extraction when the API 404s
On the Dankclaw Gitea (192.168.0.143:3000, Gitea 1.27.3) the review-comment API is dead for inline comments:
/api/v1/repos/{owner}/{repo}/pulls/{N}/comments returns 404 not found even with a valid token, and pulls/comments?pull_id= / ?pull_request_id= variants 404 too. /pulls/{N}/reviews works but its bodies are empty for inline reviews (read comments_count for how many exist); /issues/{N}/comments shows only conversation comments, never inline ones.
Procedure
- Confirm the review exists and how many inline comments it holds:
curl -sS http://192.168.0.143:3000/api/v1/repos/dank/command-center/pulls/{N}/reviews | jq -c '.[] | {id, state, comments_count}' - Scrape the PR page instead (no token needed for a public repo):
curl -sS http://192.168.0.143:3000/dank/command-center/pulls/{N} -o /tmp/pr.html - Extract each comment's text — every inline comment renders a
comment-contentblock; dedupe (each comment appears twice in the HTML):
import re, html
src = open('/tmp/pr.html').read()
seen = set()
for m in re.finditer(r'comment-content', src):
t = html.unescape(re.sub(r'<[^>]+>', ' ', src[m.start()-100:m.start()+800]))
t = re.sub(r'\s+', ' ', t).strip()[:400]
if t not in seen:
seen.add(t); print('>>', t)
The comment text appears twice back-to-back inside each block ("text text") — read it once. Blocks start after Copy Link|Copy Source; ignore those chrome words.
- Locate the file/line anchor (comment-content blocks carry no
data-path/data-lineattrs on this build): search the raw HTML for the comment string, walk backward ~4–7 KB, strip tags; the nearbyagent/...path,@@ -a,b +c,d @@hunk header, and surrounding diff context lines identify the anchored file and the quoted source line.
Replying / housekeeping
- Per-conversation resolve API does not exist on this build (404s) — reply to the round as a normal issue comment (
POST /repos/{o}/{r}/issues/{N}/comments, token viacurl -Ktemp cfg,header = "Authorization: token …", 600 perms,jq -n --arg b "$(cat b.txt)" '{body:$b}') listing which note got which fix commit. - Edit a posted comment:
PATCH /repos/{o}/{r}/issues/{N}/comments/{id}with{"body": ...}— use to fix your own typos rather than double-posting. - Token source on this box:
~/.config/secrets/gitea(grep the remote-URL pattern); never echo it.
Why this works
The PR page is server-rendered with full inline comment bodies; Gitea's "Copy Source" UI element guarantees the raw text is present pre-markdown-render.