gitbutlerapp/gitbutler · error · anyhow::Error

Reviewer candidates for forge {forge:?} are not implemented

Error message

Reviewer candidates for forge {forge:?} are not implemented yet.

What it means

`list_reviewer_candidates()` returns the users who can be requested to review on the repository. Only GitHub is implemented (via `but_github::pr::list_reviewer_candidates`); GitLab, Bitbucket and Azure hit the wildcard arm, so the reviewer picker cannot populate and this error is returned.

Source

Thrown at crates/but-forge/src/review.rs:1200

/// List users who can be requested to review on the repository.
pub async fn list_reviewer_candidates(
    preferred_forge_user: &Option<crate::ForgeUser>,
    forge_repo_info: &crate::forge::ForgeRepoInfo,
    storage: &but_forge_storage::Controller,
) -> Result<Vec<ForgeReviewUser>> {
    let crate::forge::ForgeRepoInfo {
        forge, owner, repo, ..
    } = forge_repo_info;
    match forge {
        ForgeName::GitHub => {
            let preferred_account = preferred_forge_user.as_ref().and_then(|user| user.github());
            let users =
                but_github::pr::list_reviewer_candidates(preferred_account, owner, repo, storage)
                    .await?;
            Ok(users.into_iter().map(Into::into).collect())
        }
        _ => Err(anyhow::anyhow!(
            "Reviewer candidates for forge {forge:?} are not implemented yet."
        )),
    }
}

/// Request reviews from the given users on a review.
pub async fn request_review(
    preferred_forge_user: &Option<crate::ForgeUser>,
    forge_repo_info: &crate::forge::ForgeRepoInfo,
    review_number: usize,
    logins: &[String],
    storage: &but_forge_storage::Controller,
) -> Result<()> {
    let crate::forge::ForgeRepoInfo {
        forge, owner, repo, ..
    } = forge_repo_info;
    match forge {
        ForgeName::GitHub => {

View on GitHub (pinned to caf1f223d3)

Solutions

  1. Use a GitHub repository for reviewer-request workflows.
  2. Skip rendering the reviewer picker for non-GitHub forges.
  3. Implement candidate listing via the GitLab/Bitbucket project-member APIs and add a match arm at crates/but-forge/src/review.rs:1192-1200.

Example fix

// before
let users = list_reviewer_candidates(&user, &info, &storage).await?;

// after
let users = match info.forge {
    ForgeName::GitHub => list_reviewer_candidates(&user, &info, &storage).await?,
    _ => Vec::new(), // reviewer requests unsupported; hide the picker
};
Defensive patterns

Strategy: validation

Validate before calling

use but_forge::forge::ForgeName;

if !matches!(info.forge, ForgeName::GitHub) {
    // hide the reviewer picker; candidate listing is GitHub-only
}

Type guard

fn reviewer_candidates_supported(forge: &but_forge::forge::ForgeName) -> bool {
    matches!(forge, ForgeName::GitHub)
}

Try / catch

match list_reviewer_candidates(&user, &info, &storage).await {
    Ok(users) => users,
    Err(e) if e.to_string().contains("not implemented yet") => Vec::new(),
    Err(e) => return Err(e),
}

Prevention

When it happens

Trigger: Opening reviewer selection (or calling `list_reviewer_candidates`) for a repository whose `ForgeRepoInfo.forge` is GitLab, Bitbucket or Azure. Any GitHub repo resolves candidates normally.

Common situations: Reviewer pickers offered uniformly across forges; review workflows ported from GitHub-centric products; repos whose remote auto-detection picks GitLab/Bitbucket/Azure.

Related errors


AI-assisted analysis of gitbutlerapp/gitbutler@caf1f223d3 (2026-08-20). Data as JSON: /api/errors/65c72147ab9f6bf7. Report an issue: GitHub.