gitbutlerapp/gitbutler · error · anyhow::Error
Merge status for forge {forge:?} is not implemented yet.
Error message
Merge status for forge {forge:?} is not implemented yet. What it means
`get_review_merge_status()` fetches fresh runtime merge state per forge. GitHub (PR merge status), GitLab (MR merge status) and Bitbucket (derived from the PR, with `mergeable_state: None` because Bitbucket state strings don't map) are all implemented. The wildcard arm exists for remaining `ForgeName` values — today that means Azure — and returns this error.
Source
Thrown at crates/but-forge/src/review.rs:1853
}
ForgeName::Bitbucket => {
// Bitbucket has no dedicated mergeability endpoint; derive a basic
// status from the PR's state and comment count.
let preferred_account = preferred_forge_user
.as_ref()
.and_then(|user| user.bitbucket());
let pr = but_bitbucket::pr::get(preferred_account, owner, repo, review_number, storage)
.await?;
Ok(ReviewMergeStatus {
is_mergeable: pr.is_open(),
// Bitbucket's state strings ("OPEN"/"MERGED"/…) don't map to the
// forge-agnostic mergeable_state vocabulary the UI understands, so
// leave it unset rather than feed a value it can't interpret.
mergeable_state: None,
comments_count: pr.comment_count,
})
}
_ => Err(anyhow::anyhow!(
"Merge status for forge {forge:?} is not implemented yet."
)),
}
}
/// Get a specific review (e.g. pull request) for a given forge repository
///
/// The resulting review will be cached.
pub fn get_forge_review(
preferred_forge_user: &Option<crate::ForgeUser>,
forge_repo_info: &crate::forge::ForgeRepoInfo,
review_number: usize,
db: &mut but_db::DbHandle,
storage: &but_forge_storage::Controller,
) -> Result<ForgeReview> {
let preferred_forge_user = preferred_forge_user.clone();
let forge_repo_info = forge_repo_info.clone();
let storage = storage.clone();View on GitHub (pinned to caf1f223d3)
Solutions
- Use GitHub/GitLab/Bitbucket for review workflows — merge-status hints don't exist for Azure yet.
- Skip the call and hide the merge hint when the forge is Azure.
- Add an Azure arm that maps Azure DevOps PR merge status into `ReviewMergeStatus` at crates/but-forge/src/review.rs:1804.
Example fix
// before
let status = get_review_merge_status(&user, &info, number, &storage).await?;
// after
let status = match info.forge {
ForgeName::Azure => return Ok(None), // hide the merge hint for Azure
_ => get_review_merge_status(&user, &info, number, &storage).await?,
}; Defensive patterns
Strategy: validation
Validate before calling
use but_forge::forge::ForgeName;
if matches!(info.forge, ForgeName::Azure) {
// skip the merge-status hint; only GitHub/GitLab/Bitbucket implement it
} Type guard
fn merge_status_supported(forge: &but_forge::forge::ForgeName) -> bool {
!matches!(forge, ForgeName::Azure)
} Try / catch
match get_review_merge_status(&user, &info, number, &storage).await {
Ok(s) => s,
Err(e) if e.to_string().contains("not implemented yet") => { /* render without merge hint */ return Ok(Default::default()); }
Err(e) => return Err(e),
} Prevention
- Remember the wildcard arm tracks enum growth: today Azure is the only forge without merge status.
- Render merge hints as optional decoration so a missing status degrades gracefully.
- When adding a new ForgeName variant, grep review.rs for wildcard arms and decide each explicitly.
When it happens
Trigger: Calling `get_review_merge_status` when `ForgeRepoInfo.forge` is Azure (an Azure DevOps remote). GitHub, GitLab and Bitbucket always return a `ReviewMergeStatus` and never hit this arm.
Common situations: Azure DevOps remotes in the workspace; a new `ForgeName` variant added to the enum without a merge-status arm; UI merge hints enabled regardless of forge.
Related errors
- Repository labels for forge {forge:?} are not implemented ye
- Updating pull requests for forge {forge:?} is not implemente
- Review labels for forge {forge:?} are not implemented yet.
- Reviewer candidates for forge {forge:?} are not implemented
- Review requests for forge {forge:?} are not implemented yet.
AI-assisted analysis of gitbutlerapp/gitbutler@caf1f223d3 (2026-08-20).
Data as JSON: /api/errors/180ce139c3e84476.
Report an issue: GitHub.