git_panel: Removing offending notify
This commit is contained in:
@@ -1793,7 +1793,7 @@ impl Editor {
|
||||
.cursor_pointer()
|
||||
.child("⋯")
|
||||
.on_mouse_down(MouseButton::Left, |_, _, cx| cx.stop_propagation())
|
||||
.on_click(move |_, _win, cx| {
|
||||
.on_click(move |_, _window, cx| {
|
||||
editor
|
||||
.update(cx, |editor, cx| {
|
||||
editor.unfold_ranges(
|
||||
@@ -6403,7 +6403,7 @@ impl Editor {
|
||||
.when(show_tooltip, |this| {
|
||||
this.tooltip({
|
||||
let focus_handle = self.focus_handle.clone();
|
||||
move |_win, cx| {
|
||||
move |_window, cx| {
|
||||
Tooltip::for_action_in(
|
||||
"Toggle Code Actions",
|
||||
&ToggleCodeActions {
|
||||
@@ -24885,7 +24885,7 @@ fn render_diff_hunk_controls(
|
||||
// .disabled(!has_multiple_hunks)
|
||||
.tooltip({
|
||||
let focus_handle = editor.focus_handle(cx);
|
||||
move |_win, cx| {
|
||||
move |_window, cx| {
|
||||
Tooltip::for_action_in(
|
||||
"Previous Hunk",
|
||||
&GoToPreviousHunk,
|
||||
|
||||
@@ -216,7 +216,7 @@ struct GitHeaderEntry {
|
||||
impl GitHeaderEntry {
|
||||
pub fn contains(&self, status_entry: &GitStatusEntry, repo: &Repository) -> bool {
|
||||
let this = &self.header;
|
||||
let status = status_entry.status;
|
||||
let status = status_entry.file_status(repo);
|
||||
match this {
|
||||
Section::Conflict => {
|
||||
repo.had_conflict_on_last_merge_head_change(&status_entry.repo_path)
|
||||
@@ -252,7 +252,6 @@ impl GitListEntry {
|
||||
#[derive(Debug, PartialEq, Eq, Clone)]
|
||||
pub struct GitStatusEntry {
|
||||
pub(crate) repo_path: RepoPath,
|
||||
pub(crate) status: FileStatus,
|
||||
}
|
||||
|
||||
impl GitStatusEntry {
|
||||
@@ -269,15 +268,18 @@ impl GitStatusEntry {
|
||||
.map(|parent| parent.display(path_style).to_string())
|
||||
}
|
||||
|
||||
fn staging(&self, panel: &GitPanel, repo: &Repository) -> StageStatus {
|
||||
if let Some(staging) = panel.entry_staging(&self.repo_path) {
|
||||
return staging;
|
||||
}
|
||||
pub(crate) fn file_status(&self, repo: &Repository) -> FileStatus {
|
||||
repo.snapshot()
|
||||
.status_for_path(&self.repo_path)
|
||||
.unwrap()
|
||||
.status
|
||||
.staging()
|
||||
}
|
||||
|
||||
fn staging(&self, panel: &GitPanel, repo: &Repository) -> StageStatus {
|
||||
if let Some(staging) = panel.entry_staging(&self.repo_path) {
|
||||
return staging;
|
||||
}
|
||||
self.file_status(repo).staging()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -447,6 +449,7 @@ impl GitPanel {
|
||||
| RepositoryEvent::MergeHeadsChanged,
|
||||
true,
|
||||
) => {
|
||||
println!("Event::RepositoryUpdated with full_scan");
|
||||
this.schedule_update(true, window, cx);
|
||||
}
|
||||
GitStoreEvent::RepositoryUpdated(
|
||||
@@ -456,6 +459,7 @@ impl GitPanel {
|
||||
)
|
||||
| GitStoreEvent::RepositoryAdded
|
||||
| GitStoreEvent::RepositoryRemoved(_) => {
|
||||
println!("Event::RepositoryUpdated with full_scan");
|
||||
this.schedule_update(false, window, cx);
|
||||
}
|
||||
GitStoreEvent::IndexWriteError(error) => {
|
||||
@@ -825,11 +829,9 @@ impl GitPanel {
|
||||
) {
|
||||
maybe!({
|
||||
let entry = self.entries.get(self.selected_entry?)?.status_entry()?;
|
||||
let active_repo = self.active_repository.as_ref()?;
|
||||
let path = active_repo
|
||||
.read(cx)
|
||||
.repo_path_to_project_path(&entry.repo_path, cx)?;
|
||||
if entry.status.is_deleted() {
|
||||
let active_repo = self.active_repository.as_ref()?.read(cx);
|
||||
let path = active_repo.repo_path_to_project_path(&entry.repo_path, cx)?;
|
||||
if entry.file_status(active_repo).is_deleted() {
|
||||
return None;
|
||||
}
|
||||
|
||||
@@ -855,7 +857,10 @@ impl GitPanel {
|
||||
maybe!({
|
||||
let list_entry = self.entries.get(self.selected_entry?)?.clone();
|
||||
let entry = list_entry.status_entry()?.to_owned();
|
||||
let skip_prompt = action.skip_prompt || entry.status.is_created();
|
||||
let skip_prompt = action.skip_prompt
|
||||
|| entry
|
||||
.file_status(self.active_repository.as_ref().unwrap().read(cx))
|
||||
.is_created();
|
||||
|
||||
let prompt = if skip_prompt {
|
||||
Task::ready(Ok(0))
|
||||
@@ -904,7 +909,10 @@ impl GitPanel {
|
||||
let list_entry = self.entries.get(self.selected_entry?)?.clone();
|
||||
let entry = list_entry.status_entry()?.to_owned();
|
||||
|
||||
if !entry.status.is_created() {
|
||||
if !entry
|
||||
.file_status(self.active_repository.as_ref().unwrap().read(cx))
|
||||
.is_created()
|
||||
{
|
||||
return Some(());
|
||||
}
|
||||
|
||||
@@ -982,7 +990,7 @@ impl GitPanel {
|
||||
}
|
||||
let filename = path.path.file_name()?.to_string();
|
||||
|
||||
if !entry.status.is_created() {
|
||||
if !entry.file_status(active_repo.read(cx)).is_created() {
|
||||
self.perform_checkout(vec![entry.clone()], window, cx);
|
||||
} else {
|
||||
let prompt = prompt(&format!("Trash {}?", filename), None, window, cx);
|
||||
@@ -1112,7 +1120,11 @@ impl GitPanel {
|
||||
.entries
|
||||
.iter()
|
||||
.filter_map(|entry| entry.status_entry().cloned())
|
||||
.filter(|status_entry| !status_entry.status.is_created())
|
||||
.filter(|status_entry| {
|
||||
!status_entry
|
||||
.file_status(self.active_repository.as_ref().unwrap().read(cx))
|
||||
.is_created()
|
||||
})
|
||||
.collect::<Vec<_>>();
|
||||
|
||||
match entries.len() {
|
||||
@@ -1162,7 +1174,11 @@ impl GitPanel {
|
||||
.entries
|
||||
.iter()
|
||||
.filter_map(|entry| entry.status_entry())
|
||||
.filter(|status_entry| status_entry.status.is_created())
|
||||
.filter(|status_entry| {
|
||||
status_entry
|
||||
.file_status(self.active_repository.as_ref().unwrap().read(cx))
|
||||
.is_created()
|
||||
})
|
||||
.cloned()
|
||||
.collect::<Vec<_>>();
|
||||
|
||||
@@ -1680,7 +1696,11 @@ impl GitPanel {
|
||||
.entries
|
||||
.iter()
|
||||
.filter_map(|entry| entry.status_entry())
|
||||
.filter(|status_entry| !status_entry.status.is_created())
|
||||
.filter(|status_entry| {
|
||||
!status_entry
|
||||
.file_status(active_repository.read(cx))
|
||||
.is_created()
|
||||
})
|
||||
.map(|status_entry| status_entry.repo_path.clone())
|
||||
.collect::<Vec<_>>();
|
||||
|
||||
@@ -1825,11 +1845,20 @@ impl GitPanel {
|
||||
None
|
||||
}?;
|
||||
|
||||
let action_text = if git_status_entry.status.is_deleted() {
|
||||
let action_text = if git_status_entry
|
||||
.file_status(self.active_repository.as_ref().unwrap().read(cx))
|
||||
.is_deleted()
|
||||
{
|
||||
Some("Delete")
|
||||
} else if git_status_entry.status.is_created() {
|
||||
} else if git_status_entry
|
||||
.file_status(self.active_repository.as_ref().unwrap().read(cx))
|
||||
.is_created()
|
||||
{
|
||||
Some("Create")
|
||||
} else if git_status_entry.status.is_modified() {
|
||||
} else if git_status_entry
|
||||
.file_status(self.active_repository.as_ref().unwrap().read(cx))
|
||||
.is_modified()
|
||||
{
|
||||
Some("Update")
|
||||
} else {
|
||||
None
|
||||
@@ -2613,7 +2642,7 @@ impl GitPanel {
|
||||
let handle = cx.entity().downgrade();
|
||||
self.reopen_commit_buffer(window, cx);
|
||||
self.update_visible_entries_task = cx.spawn_in(window, async move |_, cx| {
|
||||
cx.background_executor().timer(UPDATE_DEBOUNCE).await;
|
||||
// cx.background_executor().timer(UPDATE_DEBOUNCE).await;
|
||||
if let Some(git_panel) = handle.upgrade() {
|
||||
git_panel
|
||||
.update_in(cx, |git_panel, window, cx| {
|
||||
@@ -2674,6 +2703,7 @@ impl GitPanel {
|
||||
}
|
||||
|
||||
fn update_visible_entries(&mut self, window: &mut Window, cx: &mut Context<Self>) {
|
||||
println!("*** update_visible_entries ***");
|
||||
let path_style = self.project.read(cx).path_style(cx);
|
||||
let bulk_staging = self.bulk_staging.take();
|
||||
let last_staged_path_prev_index = bulk_staging
|
||||
@@ -2725,7 +2755,6 @@ impl GitPanel {
|
||||
|
||||
let entry = GitStatusEntry {
|
||||
repo_path: entry.repo_path.clone(),
|
||||
status: entry.status,
|
||||
};
|
||||
|
||||
if staging.has_staged() {
|
||||
@@ -2882,7 +2911,7 @@ impl GitPanel {
|
||||
if status_entry.staging(self, repo).has_staged() {
|
||||
self.conflicted_staged_count += 1;
|
||||
}
|
||||
} else if status_entry.status.is_created() {
|
||||
} else if status_entry.file_status(repo).is_created() {
|
||||
self.new_count += 1;
|
||||
if status_entry.staging(self, repo).has_staged() {
|
||||
self.new_staged_count += 1;
|
||||
@@ -3920,12 +3949,16 @@ impl GitPanel {
|
||||
let Some(entry) = self.entries.get(ix).and_then(|e| e.status_entry()) else {
|
||||
return;
|
||||
};
|
||||
let stage_title = if entry.status.staging().is_fully_staged() {
|
||||
let file_status = entry.file_status(self.active_repository.as_ref().unwrap().read(cx));
|
||||
let stage_title = if entry
|
||||
.staging(self, self.active_repository.as_ref().unwrap().read(cx))
|
||||
.is_fully_staged()
|
||||
{
|
||||
"Unstage File"
|
||||
} else {
|
||||
"Stage File"
|
||||
};
|
||||
let restore_title = if entry.status.is_created() {
|
||||
let restore_title = if file_status.is_created() {
|
||||
"Trash File"
|
||||
} else {
|
||||
"Restore File"
|
||||
@@ -3936,7 +3969,7 @@ impl GitPanel {
|
||||
.action(stage_title, ToggleStaged.boxed_clone())
|
||||
.action(restore_title, git::RestoreFile::default().boxed_clone());
|
||||
|
||||
if entry.status.is_created() {
|
||||
if file_status.is_created() {
|
||||
context_menu =
|
||||
context_menu.action("Add to .gitignore", git::AddToGitignore.boxed_clone());
|
||||
}
|
||||
@@ -4011,7 +4044,7 @@ impl GitPanel {
|
||||
let selected = self.selected_entry == Some(ix);
|
||||
let marked = self.marked_entries.contains(&ix);
|
||||
let status_style = GitPanelSettings::get_global(cx).status_style;
|
||||
let status = entry.status;
|
||||
let status = entry.file_status(self.active_repository.as_ref().unwrap().read(cx));
|
||||
|
||||
let has_conflict = status.is_conflicted();
|
||||
let is_modified = status.is_modified();
|
||||
@@ -4046,7 +4079,12 @@ impl GitPanel {
|
||||
|
||||
let entry_staging = entry.staging(self, self.active_repository.as_ref().unwrap().read(cx));
|
||||
let mut is_staged: ToggleState = entry_staging.as_bool().into();
|
||||
if self.show_placeholders && !self.has_staged_changes() && !entry.status.is_created() {
|
||||
if self.show_placeholders
|
||||
&& !self.has_staged_changes()
|
||||
&& !entry
|
||||
.file_status(self.active_repository.as_ref().unwrap().read(cx))
|
||||
.is_created()
|
||||
{
|
||||
is_staged = ToggleState::Selected;
|
||||
}
|
||||
println!(" Checkbox status = {is_staged:?}, entry.staging = {entry_staging:?}");
|
||||
|
||||
@@ -335,7 +335,7 @@ impl ProjectDiff {
|
||||
return;
|
||||
};
|
||||
let repo = git_repo.read(cx);
|
||||
let sort_prefix = sort_prefix(repo, &entry.repo_path, entry.status, cx);
|
||||
let sort_prefix = sort_prefix(repo, &entry.repo_path, entry.file_status(repo), cx);
|
||||
let path_key = PathKey::with_sort_prefix(sort_prefix, entry.repo_path.0);
|
||||
|
||||
self.move_to_path(path_key, window, cx)
|
||||
|
||||
@@ -4815,10 +4815,11 @@ impl Repository {
|
||||
}),
|
||||
)
|
||||
.collect::<Vec<_>>();
|
||||
if !edits.is_empty() {
|
||||
let full_scan = !edits.is_empty();
|
||||
self.snapshot.statuses_by_path.edit(edits, ());
|
||||
if full_scan {
|
||||
cx.emit(RepositoryEvent::StatusesChanged { full_scan: true });
|
||||
}
|
||||
self.snapshot.statuses_by_path.edit(edits, ());
|
||||
if update.is_last_update {
|
||||
self.snapshot.scan_id = update.scan_id;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user