swarm-controller: fix agent-config init on freshly-created empty repos
This commit is contained in:
parent
d736be2071
commit
066a0a02b0
1 changed files with 26 additions and 0 deletions
|
|
@ -414,7 +414,33 @@ impl Client {
|
||||||
/// check [`Self::seed_agent_config`] uses instead of catching a
|
/// check [`Self::seed_agent_config`] uses instead of catching a
|
||||||
/// create-conflict, since `repo_change_files` has no
|
/// create-conflict, since `repo_change_files` has no
|
||||||
/// already-exists-is-fine status the way `create_org_repo` does.
|
/// already-exists-is-fine status the way `create_org_repo` does.
|
||||||
|
///
|
||||||
|
/// `create_repo` makes `repo` with `auto_init: false` (see
|
||||||
|
/// [`Self::repo_option`]) — no commits, no `main` ref, nothing a
|
||||||
|
/// contents lookup can resolve. Forgejo doesn't 404 that the way it
|
||||||
|
/// does a missing path on a real ref: it returns `200` with a bare
|
||||||
|
/// JSON `[]`, which fails to deserialize into the single-object
|
||||||
|
/// `ContentsResponse` the crate expects for a file path ("invalid
|
||||||
|
/// length 0, expected struct `ContentsResponse` with 16 elements" —
|
||||||
|
/// serde reading the 0-element array as a positional struct). So a
|
||||||
|
/// freshly created, not-yet-seeded repo trips this as an opaque
|
||||||
|
/// deserialize error, not the `NOT_FOUND` branch below — confirmed
|
||||||
|
/// against a live re-test of the swarm agent-create flow tracked on
|
||||||
|
/// the forge. Short-circuit on `empty` first: an empty repo
|
||||||
|
/// obviously has no `agent.nix`, and skipping
|
||||||
|
/// the contents call for it sidesteps the malformed-response shape
|
||||||
|
/// entirely rather than trying to special-case parsing it.
|
||||||
async fn file_exists(&self, repo: &str, path: &str) -> Result<bool> {
|
async fn file_exists(&self, repo: &str, path: &str) -> Result<bool> {
|
||||||
|
let is_empty = self
|
||||||
|
.api
|
||||||
|
.repo_get(CONFIG_ORG, repo)
|
||||||
|
.await
|
||||||
|
.with_context(|| format!("get repo {CONFIG_ORG}/{repo}"))?
|
||||||
|
.empty
|
||||||
|
.unwrap_or(false);
|
||||||
|
if is_empty {
|
||||||
|
return Ok(false);
|
||||||
|
}
|
||||||
match self
|
match self
|
||||||
.api
|
.api
|
||||||
.repo_get_contents(CONFIG_ORG, repo, path, RepoGetContentsQuery::default())
|
.repo_get_contents(CONFIG_ORG, repo, path, RepoGetContentsQuery::default())
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue