diff --git a/crates/project/src/worktree.rs b/crates/project/src/worktree.rs index 79e2ed9da94c46dc01ae297d5f025c1a037cdfaf..4d2b5097381f580bb6e27ce242501f4c1a5fd023 100644 --- a/crates/project/src/worktree.rs +++ b/crates/project/src/worktree.rs @@ -32,6 +32,7 @@ use postage::{ prelude::{Sink as _, Stream as _}, watch, }; +use settings::Settings; use smol::channel::{self, Sender}; use std::{ any::Any, @@ -571,14 +572,33 @@ impl LocalWorktree { let path = Arc::from(path); let abs_path = self.absolutize(&path); let fs = self.fs.clone(); + + let files_included = cx + .global::() + .editor_overrides + .git_gutter + .unwrap_or_default() + .files_included; + cx.spawn(|this, mut cx| async move { let text = fs.load(&abs_path).await?; - let head_text = { + let head_text = if matches!( + files_included, + settings::GitFilesIncluded::All | settings::GitFilesIncluded::OnlyTracked + ) { let fs = fs.clone(); let abs_path = abs_path.clone(); let task = async move { fs.load_head_text(&abs_path).await }; - cx.background().spawn(task).await + let results = cx.background().spawn(task).await; + + if files_included == settings::GitFilesIncluded::All { + results.or_else(|| Some(text.clone())) + } else { + results + } + } else { + None }; // Eagerly populate the snapshot with an updated entry for the loaded file diff --git a/crates/settings/src/settings.rs b/crates/settings/src/settings.rs index adb2892b3682af0a8170c634be54879e91369a43..3f4a764c79641e268f06d6ab78939577910856bc 100644 --- a/crates/settings/src/settings.rs +++ b/crates/settings/src/settings.rs @@ -66,13 +66,13 @@ pub struct EditorSettings { #[derive(Clone, Copy, Debug, Default, Deserialize, JsonSchema)] pub struct GitGutterConfig { - pub files_included: GitGutterLevel, + pub files_included: GitFilesIncluded, pub debounce_delay_millis: Option, } -#[derive(Clone, Copy, Debug, Default, Deserialize, JsonSchema)] +#[derive(Clone, Copy, Debug, Default, Deserialize, JsonSchema, PartialEq, Eq)] #[serde(rename_all = "snake_case")] -pub enum GitGutterLevel { +pub enum GitFilesIncluded { #[default] All, OnlyTracked,