diff --git a/focus/internals/src/lib/model/repo.rs b/focus/internals/src/lib/model/repo.rs index 50e92608..7bea8934 100644 --- a/focus/internals/src/lib/model/repo.rs +++ b/focus/internals/src/lib/model/repo.rs @@ -71,6 +71,12 @@ pub const PROJECT_CACHE_INCLUDE_HEADERS_FILE_CONFIG_KEY: &str = "focus.project-cache.include-headers-from"; pub const BAZEL_ONE_SHOT_RESOLUTION_CONFIG_KEY: &str = "focus.bazel.one-shot"; +#[derive(Copy, Clone, Debug, Eq, PartialEq)] +pub enum WorkingTreeKind { + Sparse, + Dense, +} + /// Models a Git working tree. pub struct WorkingTree { repo: git2::Repository, @@ -110,6 +116,14 @@ impl WorkingTree { Self::new(repo) } + pub fn kind(&self) -> WorkingTreeKind { + if self.sparse_checkout_path().is_file() { + WorkingTreeKind::Sparse + } else { + WorkingTreeKind::Dense + } + } + fn info_dir(&self) -> PathBuf { self.repo.path().join("info") }