Author:
Hash:
Timestamp:
+16 -14 +/-1 browse
Kevin Schoon [me@kevinschoon.com]
acd2b9887e3ef9897fc34666c3188c9fd3047297
Fri, 18 Jul 2025 09:05:11 +0000 (4 months ago)
| 1 | diff --git a/crates/git/src/wrapper.rs b/crates/git/src/wrapper.rs |
| 2 | index fd1e292..269d0bb 100644 |
| 3 | --- a/crates/git/src/wrapper.rs |
| 4 | +++ b/crates/git/src/wrapper.rs |
| 5 | @@ -29,7 +29,7 @@ pub struct Selector { |
| 6 | |
| 7 | /// Helpful wrapper around a git repository on the file system. |
| 8 | pub struct Wrapper { |
| 9 | - path: String, |
| 10 | + path: PathBuf, |
| 11 | repository: Box<Repository>, |
| 12 | } |
| 13 | |
| 14 | @@ -37,18 +37,18 @@ impl Wrapper { |
| 15 | pub fn new(path: &Path) -> Result<Self, Error> { |
| 16 | let repository = Repository::open(path)?; |
| 17 | Ok(Wrapper { |
| 18 | - path: path.to_str().unwrap().to_string(), |
| 19 | + path: path.to_path_buf(), |
| 20 | repository: Box::new(repository), |
| 21 | }) |
| 22 | } |
| 23 | |
| 24 | - pub fn path(&self) -> String { |
| 25 | - self.path.clone() |
| 26 | + pub fn path(&self) -> &Path { |
| 27 | + self.path.as_path() |
| 28 | } |
| 29 | |
| 30 | - fn git_path(&self) -> String { |
| 31 | - let git_path_regular = self.path.clone() + "/.git"; |
| 32 | - match fs::metadata(Path::new(&git_path_regular)) { |
| 33 | + fn git_path(&self) -> PathBuf { |
| 34 | + let git_path_regular = self.path.join(Path::new(".git")); |
| 35 | + match fs::metadata(&git_path_regular) { |
| 36 | Ok(_) => git_path_regular.clone(), |
| 37 | Err(_) => self.path.clone(), |
| 38 | } |
| 39 | @@ -999,16 +999,12 @@ impl Wrapper { |
| 40 | |
| 41 | // since the repository can be bare or regular we need to check since |
| 42 | // we're running the git binary directly. |
| 43 | - let git_path_regular = self.path.clone() + "/.git"; |
| 44 | - let git_path = match fs::metadata(Path::new(&git_path_regular)) { |
| 45 | - Ok(_) => git_path_regular.clone(), |
| 46 | - Err(_) => self.path.clone(), |
| 47 | - }; |
| 48 | + let git_path_regular = self.git_path(); |
| 49 | |
| 50 | let mut command = async_process::Command::new("git"); |
| 51 | command.args([ |
| 52 | "--git-dir", |
| 53 | - &git_path, |
| 54 | + &git_path_regular.to_string_lossy(), |
| 55 | "archive", |
| 56 | "--format=tgz", |
| 57 | "--prefix", |
| 58 | @@ -1024,10 +1020,16 @@ impl Wrapper { |
| 59 | } |
| 60 | |
| 61 | /// verify the signature of the given commit |
| 62 | + /// TODO: Can this be done with libgit2? |
| 63 | pub fn verify(&self, id: &str) -> Result<Option<bool>, Error> { |
| 64 | let git_path = self.git_path(); |
| 65 | let mut command = Command::new("git"); |
| 66 | - command.args(["--git-dir", &git_path, "verify-commit", id]); |
| 67 | + command.args([ |
| 68 | + "--git-dir", |
| 69 | + &git_path.to_string_lossy(), |
| 70 | + "verify-commit", |
| 71 | + id, |
| 72 | + ]); |
| 73 | command.stderr(Stdio::piped()); |
| 74 | let output = command.spawn()?.wait()?; |
| 75 | Ok(Some(output.success())) |