Use anyhow
more idiomatically (#31052)
https://github.com/zed-industries/zed/issues/30972 brought up another case where our context is not enough to track the actual source of the issue: we get a general top-level error without inner error. The reason for this was `.ok_or_else(|| anyhow!("failed to read HEAD SHA"))?; ` on the top level. The PR finally reworks the way we use anyhow to reduce such issues (or at least make it simpler to bubble them up later in a fix). On top of that, uses a few more anyhow methods for better readability. * `.ok_or_else(|| anyhow!("..."))`, `map_err` and other similar error conversion/option reporting cases are replaced with `context` and `with_context` calls * in addition to that, various `anyhow!("failed to do ...")` are stripped with `.context("Doing ...")` messages instead to remove the parasitic `failed to` text * `anyhow::ensure!` is used instead of `if ... { return Err(...); }` calls * `anyhow::bail!` is used instead of `return Err(anyhow!(...));` Release Notes: - N/A
This commit is contained in:
parent
1e51a7ac44
commit
16366cf9f2
294 changed files with 2037 additions and 2610 deletions
|
@ -1,4 +1,4 @@
|
|||
use anyhow::{Context as _, anyhow};
|
||||
use anyhow::Context as _;
|
||||
use fuzzy::StringMatchCandidate;
|
||||
|
||||
use collections::HashSet;
|
||||
|
@ -381,7 +381,7 @@ impl PickerDelegate for BranchListDelegate {
|
|||
.delegate
|
||||
.repo
|
||||
.as_ref()
|
||||
.ok_or_else(|| anyhow!("No active repository"))?
|
||||
.context("No active repository")?
|
||||
.clone();
|
||||
|
||||
let mut cx = cx.to_async();
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
use anyhow::{Result, anyhow};
|
||||
use anyhow::{Context as _, Result};
|
||||
use buffer_diff::{BufferDiff, BufferDiffSnapshot};
|
||||
use editor::{Editor, EditorEvent, MultiBuffer};
|
||||
use git::repository::{CommitDetails, CommitDiff, CommitSummary, RepoPath};
|
||||
|
@ -172,7 +172,7 @@ impl CommitView {
|
|||
.map(|path| path.worktree_id)
|
||||
.or(first_worktree_id)
|
||||
})?
|
||||
.ok_or_else(|| anyhow!("project has no worktrees"))?;
|
||||
.context("project has no worktrees")?;
|
||||
let file = Arc::new(GitBlob {
|
||||
path: file.path.clone(),
|
||||
is_deleted,
|
||||
|
|
|
@ -9,7 +9,7 @@ use crate::{branch_picker, picker_prompt, render_remote_button};
|
|||
use crate::{
|
||||
git_panel_settings::GitPanelSettings, git_status_icon, repository_selector::RepositorySelector,
|
||||
};
|
||||
use anyhow::Result;
|
||||
use anyhow::Context as _;
|
||||
use askpass::AskPassDelegate;
|
||||
use assistant_settings::AssistantSettings;
|
||||
use db::kvp::KEY_VALUE_STORE;
|
||||
|
@ -1626,14 +1626,12 @@ impl GitPanel {
|
|||
&mut self,
|
||||
window: &mut Window,
|
||||
cx: &mut Context<Self>,
|
||||
) -> impl Future<Output = Result<bool, anyhow::Error>> + use<> {
|
||||
) -> impl Future<Output = anyhow::Result<bool>> + use<> {
|
||||
let repo = self.active_repository.clone();
|
||||
let mut cx = window.to_async(cx);
|
||||
|
||||
async move {
|
||||
let Some(repo) = repo else {
|
||||
return Err(anyhow::anyhow!("No active repository"));
|
||||
};
|
||||
let repo = repo.context("No active repository")?;
|
||||
|
||||
let pushed_to: Vec<SharedString> = repo
|
||||
.update(&mut cx, |repo, _| repo.check_for_pushed_commits())?
|
||||
|
@ -2090,22 +2088,16 @@ impl GitPanel {
|
|||
let mut cx = window.to_async(cx);
|
||||
|
||||
async move {
|
||||
let Some(repo) = repo else {
|
||||
return Err(anyhow::anyhow!("No active repository"));
|
||||
};
|
||||
|
||||
let repo = repo.context("No active repository")?;
|
||||
let mut current_remotes: Vec<Remote> = repo
|
||||
.update(&mut cx, |repo, _| {
|
||||
let Some(current_branch) = repo.branch.as_ref() else {
|
||||
return Err(anyhow::anyhow!("No active branch"));
|
||||
};
|
||||
|
||||
Ok(repo.get_remotes(Some(current_branch.name().to_string())))
|
||||
let current_branch = repo.branch.as_ref().context("No active branch")?;
|
||||
anyhow::Ok(repo.get_remotes(Some(current_branch.name().to_string())))
|
||||
})??
|
||||
.await??;
|
||||
|
||||
if current_remotes.len() == 0 {
|
||||
return Err(anyhow::anyhow!("No active remote"));
|
||||
anyhow::bail!("No active remote");
|
||||
} else if current_remotes.len() == 1 {
|
||||
return Ok(Some(current_remotes.pop().unwrap()));
|
||||
} else {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue