use crate::bare::GitBare; use crate::error::{GitError, GitResult}; use crate::pb::{GetPatchRequest, GetPatchResponse}; use crate::resolve_revision; impl GitBare { pub fn get_patch(&self, request: GetPatchRequest) -> GitResult> { let base = resolve_revision!(request.base); let head = resolve_revision!(request.head); let result = duct::cmd( "git", [ "--git-dir", self.bare_dir.to_string_lossy().as_ref(), "diff", "--patch", &base, &head, ], ) .stdout_capture() .stderr_capture() .unchecked() .run()?; if !result.status.success() { return Err(GitError::CommandFailed { status_code: result.status.code(), stderr: String::from_utf8_lossy(&result.stderr).into_owned(), }); } Ok(vec![GetPatchResponse { data: result.stdout, }]) } }