The forge watches every repository, not the administrator's own
/user/repos lists what the token's user owns, which for the mesh's administrator is nothing — so the forge module watched an empty list and never announced a merge. It reads the forge's whole view through the search endpoint, every page.
This commit is contained in:
+16
-2
@@ -121,9 +121,23 @@ export class GiteaClient {
|
||||
|
||||
// ---- Repositories ----
|
||||
|
||||
/** Every repository this token can see, one page. `/user/repos` is only what the token's own
|
||||
* user owns — for the mesh's administrator that is nothing, which is how the forge watched an
|
||||
* empty list and announced no merge (2026-09-28). The search endpoint is the forge's whole view. */
|
||||
async listRepos(page = 1, limit = 20): Promise<GiteaRepo[]> {
|
||||
const repos = await this.request<any[]>(`/user/repos?page=${page}&limit=${limit}`);
|
||||
return (repos ?? []).map(GiteaClient.mapRepo);
|
||||
const found = await this.request<{ data?: any[] }>(`/repos/search?page=${page}&limit=${limit}`);
|
||||
return (found?.data ?? []).map(GiteaClient.mapRepo);
|
||||
}
|
||||
|
||||
/** Every repository, all pages. */
|
||||
async listAllRepos(): Promise<GiteaRepo[]> {
|
||||
const all: GiteaRepo[] = [];
|
||||
for (let page = 1; page < 100; page++) {
|
||||
const batch = await this.listRepos(page, 50);
|
||||
all.push(...batch);
|
||||
if (batch.length < 50) break;
|
||||
}
|
||||
return all;
|
||||
}
|
||||
|
||||
async createRepo(data: {
|
||||
|
||||
Reference in New Issue
Block a user