From dba911d2ae75014da15b12d264f8266e3c2a5f11 Mon Sep 17 00:00:00 2001 From: Piotr Siuszko Date: Tue, 7 Mar 2023 19:49:17 +0100 Subject: [PATCH] fix looking for git dir --- unity_hub_lib/src/unity_project.rs | 40 +++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 12 deletions(-) diff --git a/unity_hub_lib/src/unity_project.rs b/unity_hub_lib/src/unity_project.rs index 0c087ac..3c8e0fc 100644 --- a/unity_hub_lib/src/unity_project.rs +++ b/unity_hub_lib/src/unity_project.rs @@ -106,7 +106,6 @@ impl UnityProject { } pub fn update_info(&mut self) { - const HEAD_PREFIX: &str = "ref: refs/heads/"; let is_project = UnityProject::is_project_at_path(&self.path); self.is_valid = is_project; @@ -116,24 +115,41 @@ impl UnityProject { } let mut base_path = Path::new(&self.path); - self.version = Self::get_version_at_path(&self.path).unwrap(); + self.version = Self::get_version_at_path(&self.path).unwrap(); + - while let Some(path) = base_path.parent() { - base_path = path; - let head_path = Path::new(&path).join(".git").join("HEAD"); - if !head_path.exists() { - continue; - } - let head_content = - std::fs::read_to_string(&head_path).expect("Could not read HEAD file"); - if head_content.contains(HEAD_PREFIX) { - self.branch = head_content.replace(HEAD_PREFIX, "").trim().to_string(); + match self.try_read_from_path(base_path) { + None => { + while let Some(path) = base_path.parent() { + base_path = path; + let new_branch = self.try_read_from_path(base_path); + if new_branch.is_some() { + self.branch = new_branch.unwrap(); + break; + } + } } + Some(value) => { + self.branch = value; + }, } + if let Ok(meta) = std::fs::metadata(&self.path) { if let Ok(data) = meta.modified() { self.edit_time = data; } } } + + fn try_read_from_path(&self, path: &std::path::Path) -> Option { + const HEAD_PREFIX: &str = "ref: refs/heads/"; + + let head_path = Path::new(&path).join(".git").join("HEAD"); + if !head_path.exists() { return None;} + let head_content = + std::fs::read_to_string(&head_path).expect("Could not read HEAD file"); + if head_content.contains(HEAD_PREFIX) { + Some(head_content.replace(HEAD_PREFIX, "").trim().to_string()) + } else {None} + } }