Add toast for git checkout failure
This commit is contained in:
parent
54fad5969f
commit
c84f3b3bfc
2 changed files with 34 additions and 19 deletions
|
@ -1,9 +1,10 @@
|
||||||
use fuzzy::{StringMatch, StringMatchCandidate};
|
use fuzzy::{StringMatch, StringMatchCandidate};
|
||||||
use gpui::{elements::*, AppContext, ModelHandle, MouseState, Task, ViewContext};
|
use gpui::{elements::*, AppContext, ModelHandle, MouseState, Task, ViewContext, ViewHandle};
|
||||||
use picker::{Picker, PickerDelegate, PickerEvent};
|
use picker::{Picker, PickerDelegate, PickerEvent};
|
||||||
use project::Project;
|
use project::Project;
|
||||||
use std::{cmp::Ordering, sync::Arc};
|
use std::{cmp::Ordering, sync::Arc};
|
||||||
use util::{ResultExt, TryFutureExt};
|
use util::{ResultExt, TryFutureExt};
|
||||||
|
use workspace::{Toast, Workspace};
|
||||||
|
|
||||||
pub fn init(cx: &mut AppContext) {
|
pub fn init(cx: &mut AppContext) {
|
||||||
Picker::<BranchListDelegate>::init(cx);
|
Picker::<BranchListDelegate>::init(cx);
|
||||||
|
@ -12,13 +13,13 @@ pub fn init(cx: &mut AppContext) {
|
||||||
pub type BranchList = Picker<BranchListDelegate>;
|
pub type BranchList = Picker<BranchListDelegate>;
|
||||||
|
|
||||||
pub fn build_branch_list(
|
pub fn build_branch_list(
|
||||||
project: ModelHandle<Project>,
|
workspace: ViewHandle<Workspace>,
|
||||||
cx: &mut ViewContext<BranchList>,
|
cx: &mut ViewContext<BranchList>,
|
||||||
) -> BranchList {
|
) -> BranchList {
|
||||||
Picker::new(
|
Picker::new(
|
||||||
BranchListDelegate {
|
BranchListDelegate {
|
||||||
matches: vec![],
|
matches: vec![],
|
||||||
project,
|
workspace,
|
||||||
selected_index: 0,
|
selected_index: 0,
|
||||||
last_query: String::default(),
|
last_query: String::default(),
|
||||||
},
|
},
|
||||||
|
@ -29,7 +30,7 @@ pub fn build_branch_list(
|
||||||
|
|
||||||
pub struct BranchListDelegate {
|
pub struct BranchListDelegate {
|
||||||
matches: Vec<StringMatch>,
|
matches: Vec<StringMatch>,
|
||||||
project: ModelHandle<Project>,
|
workspace: ViewHandle<Workspace>,
|
||||||
selected_index: usize,
|
selected_index: usize,
|
||||||
last_query: String,
|
last_query: String,
|
||||||
}
|
}
|
||||||
|
@ -56,7 +57,7 @@ impl PickerDelegate for BranchListDelegate {
|
||||||
let candidates = picker
|
let candidates = picker
|
||||||
.read_with(&mut cx, |view, cx| {
|
.read_with(&mut cx, |view, cx| {
|
||||||
let delegate = view.delegate();
|
let delegate = view.delegate();
|
||||||
let project = delegate.project.read(&cx);
|
let project = delegate.workspace.read(cx).project().read(&cx);
|
||||||
let mut cwd = project
|
let mut cwd = project
|
||||||
.visible_worktrees(cx)
|
.visible_worktrees(cx)
|
||||||
.next()
|
.next()
|
||||||
|
@ -136,7 +137,7 @@ impl PickerDelegate for BranchListDelegate {
|
||||||
fn confirm(&mut self, cx: &mut ViewContext<Picker<Self>>) {
|
fn confirm(&mut self, cx: &mut ViewContext<Picker<Self>>) {
|
||||||
let current_pick = self.selected_index();
|
let current_pick = self.selected_index();
|
||||||
let current_pick = self.matches[current_pick].string.clone();
|
let current_pick = self.matches[current_pick].string.clone();
|
||||||
let project = self.project.read(cx);
|
let project = self.workspace.read(cx).project().read(cx);
|
||||||
let mut cwd = project
|
let mut cwd = project
|
||||||
.visible_worktrees(cx)
|
.visible_worktrees(cx)
|
||||||
.next()
|
.next()
|
||||||
|
@ -147,13 +148,25 @@ impl PickerDelegate for BranchListDelegate {
|
||||||
.path
|
.path
|
||||||
.to_path_buf();
|
.to_path_buf();
|
||||||
cwd.push(".git");
|
cwd.push(".git");
|
||||||
project
|
let status = project
|
||||||
.fs()
|
.fs()
|
||||||
.open_repo(&cwd)
|
.open_repo(&cwd)
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.lock()
|
.lock()
|
||||||
.change_branch(¤t_pick)
|
.change_branch(¤t_pick);
|
||||||
.log_err();
|
if let Err(err) = &status {
|
||||||
|
const GIT_CHECKOUT_FAILURE_ID: usize = 2048;
|
||||||
|
self.workspace.update(cx, |model, ctx| {
|
||||||
|
model.show_toast(
|
||||||
|
Toast::new(
|
||||||
|
GIT_CHECKOUT_FAILURE_ID,
|
||||||
|
format!("Failed to check out branch `{current_pick}`, error: `{err}`"),
|
||||||
|
),
|
||||||
|
ctx,
|
||||||
|
)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
status.log_err();
|
||||||
cx.emit(PickerEvent::Dismiss);
|
cx.emit(PickerEvent::Dismiss);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -381,18 +381,20 @@ impl CollabTitlebarItem {
|
||||||
}
|
}
|
||||||
pub fn toggle_vcs_menu(&mut self, _: &ToggleVcsMenu, cx: &mut ViewContext<Self>) {
|
pub fn toggle_vcs_menu(&mut self, _: &ToggleVcsMenu, cx: &mut ViewContext<Self>) {
|
||||||
if self.branch_popover.take().is_none() {
|
if self.branch_popover.take().is_none() {
|
||||||
let view = cx.add_view(|cx| build_branch_list(self.project.clone(), cx));
|
if let Some(workspace) = self.workspace.upgrade(cx) {
|
||||||
cx.subscribe(&view, |this, _, event, cx| {
|
let view = cx.add_view(|cx| build_branch_list(workspace, cx));
|
||||||
match event {
|
cx.subscribe(&view, |this, _, event, cx| {
|
||||||
PickerEvent::Dismiss => {
|
match event {
|
||||||
this.contacts_popover = None;
|
PickerEvent::Dismiss => {
|
||||||
|
this.contacts_popover = None;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
cx.notify();
|
cx.notify();
|
||||||
})
|
})
|
||||||
.detach();
|
.detach();
|
||||||
self.branch_popover = Some(view);
|
self.branch_popover = Some(view);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cx.notify();
|
cx.notify();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue