testsuid/src/main.rs

69 lines
1.8 KiB
Rust

use std::process::Command;
fn help() {
eprintln!("testsuid [--recursive] REMOTE DESTINATION");
}
fn main() {
let args: Vec<String> = std::env::args().collect();
let (recurse, source, dest) = match args.len() {
0|1|2 => {
help();
panic!();
},
3 => {
(
false,
args.get(1).unwrap(),
args.get(2).unwrap()
)
},
4 => {
let recurse = args.get(1).unwrap();
if ! (recurse == "--recursive" || recurse == "-r") {
eprintln!("You provided 3 arguments. The first one must be -r or --recursive.");
eprintln!("Otherwise, please give me only 2 arguments.");
help();
panic!();
}
(
true,
args.get(2).unwrap(),
args.get(3).unwrap()
)
},
_ => {
help();
panic!();
}
};
println!("Cloning {} to {} (recursive: {})", source, dest, recurse);
let output = if recurse {
Command::new("git")
.arg("clone")
.arg("--recursive")
.arg(source)
.arg(dest)
.env("GIT_TRACE", "1")
.output().expect("Failed to run process")
} else {
Command::new("git")
.arg("clone")
.arg(source)
.arg(dest)
.env("GIT_TRACE", "1")
.output().expect("Failed to run process")
};
if !output.status.success() {
println!("FAILED!");
println!("STDOUT:");
println!("{}", String::from_utf8_lossy(&output.stdout));
println!("STDERR:");
println!("{}", String::from_utf8_lossy(&output.stderr));
}
}