summaryrefslogtreecommitdiff
path: root/src/git.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/git.rs')
-rw-r--r--src/git.rs41
1 files changed, 40 insertions, 1 deletions
diff --git a/src/git.rs b/src/git.rs
index bd26568..b3c41e9 100644
--- a/src/git.rs
+++ b/src/git.rs
@@ -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(())
+}