69 lines
1.8 KiB
Rust
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));
|
|
}
|
|
}
|