diff options
author | Justin Wernick <justin@worthe-it.co.za> | 2023-03-20 17:06:10 +0200 |
---|---|---|
committer | Justin Wernick <justin@worthe-it.co.za> | 2023-03-20 17:06:10 +0200 |
commit | ae4b23d95dc8792231c1e8212978be8305ee1964 (patch) | |
tree | ee90aee13789a37097ed39252404aa8a4b7d1c1e /src/git.rs | |
parent | 2ab7df378d8cb40775ac0ecd2849fa9966386a2e (diff) |
Refactor git functions into the git module
Diffstat (limited to 'src/git.rs')
-rw-r--r-- | src/git.rs | 41 |
1 files changed, 40 insertions, 1 deletions
@@ -1,7 +1,8 @@ +use crate::parser::{GitReceivePackArgs, GitUploadPackArgs}; use crate::ShackleError; use git2::{Repository, RepositoryInitOptions}; -use std::path::PathBuf; +use std::{path::PathBuf, process::Command}; pub fn init(repo_name: &str) -> Result<(), ShackleError> { let mut path = PathBuf::from("git"); @@ -17,3 +18,41 @@ pub fn init(repo_name: &str) -> Result<(), ShackleError> { )?; Ok(()) } + +pub fn upload_pack(upload_pack_args: &GitUploadPackArgs) -> Result<(), ShackleError> { + let mut command = Command::new("git-upload-pack"); + + if upload_pack_args.strict { + command.arg("strict"); + } + if upload_pack_args.no_strict { + command.arg("no-strict"); + } + if let Some(timeout) = upload_pack_args.timeout { + command.args(["timeout", &timeout.to_string()]); + } + if upload_pack_args.stateless_rpc { + command.arg("stateless-rpc"); + } + if upload_pack_args.advertise_refs { + command.arg("advertise-refs"); + } + + command.arg(&upload_pack_args.directory); + + command.spawn()?.wait()?; + Ok(()) +} + +pub fn receive_pack(receive_pack_args: &GitReceivePackArgs) -> Result<(), ShackleError> { + let mut command = Command::new("git-receive-pack"); + + if receive_pack_args.http_backend_info_refs { + command.arg("--http-backend-info-refs"); + } + + command.arg(&receive_pack_args.directory); + + command.spawn()?.wait()?; + Ok(()) +} |