Watch
0
0
Fork
You've already forked hyperhive
0

hive-forge: page past the forge's 50-row clamp; show list --json truncation

The forge clamps page_size to 50. branches, pr reviews, the review
bodies merged into `comments <pr>`, and view's comment list each sent
one request, so anything past the first page was dropped silently.
labels::repo_labels did loop, but asked for 100/page and stopped on
`len < 100`, so a clamped full page of 50 ended the walk.

Add verbs::all_pages: requests 50/page until a short page, capped at
50 pages with a stderr warning when the cap is hit. Use it in all of
the above; repo-labels now calls labels::repo_labels instead of its
own copy of the loop.

list --json now prints the same "N of M shown" stderr trailer as the
pretty output; its paging and stdout shape are unchanged.

Closes #5051
This commit is contained in:
atlas 2026-10-09 11:44:03 +02:00 • committed by mara
commit 0e5c61d12c
9 changed files with 164 additions and 90 deletions

View file

@ -38,7 +38,7 @@ use time::OffsetDateTime;
use crate::client::{Client, index};
use crate::notify;
use crate::verbs::{
MAX_LIMIT, PAGE_SIZE, clamp_limit, comment_reactions, parse_rfc3339, print_json,
MAX_LIMIT, PAGE_SIZE, all_pages, clamp_limit, comment_reactions, parse_rfc3339, print_json,
reaction_summary, rfc3339,
};
@ -355,12 +355,16 @@ fn fetch_review_bodies(client: &Client, number: u64) -> Vec<Value> {
let Ok(idx) = index(number) else {
return Vec::new();
};
let reviews = client
.api()
.repo_list_pull_reviews(owner, name, idx)
.send()
.map(|(_, reviews)| reviews)
.unwrap_or_default();
let reviews = all_pages(|page, size| {
let (_, batch) = client
.api()
.repo_list_pull_reviews(owner, name, idx)
.page(page)
.page_size(size)
.send()?;
Ok(batch)
})
.unwrap_or_default();
reviews
.into_iter()
.filter_map(|r| {