diff options
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(()) +} |