use crate::bare::GitBare; use crate::error::{GitError, GitResult}; use crate::pb::{Branch, GetBranchRequest, SetBranchUpstreamRequest}; impl GitBare { pub fn set_branch_upstream(&self, request: SetBranchUpstreamRequest) -> GitResult { crate::sanitize::validate_ref_name(&request.name)?; if let Some(upstream) = request.upstream { crate::sanitize::validate_ref_name(&upstream.remote_name)?; crate::sanitize::validate_ref_name(&upstream.remote_branch_name)?; let tracking = format!("{}/{}", upstream.remote_name, upstream.remote_branch_name); let result = duct::cmd( "git", [ "--git-dir", self.bare_dir.to_string_lossy().as_ref(), "branch", "--set-upstream-to", &tracking, &request.name, ], ) .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(), }); } } self.get_branch(GetBranchRequest { repository: request.repository, name: request.name, }) } }