Explictly handle package manager outcomes

This commit is contained in:
Beefki 2017-10-24 10:52:04 -05:00
parent 27b87f7da2
commit fd16e0c21b

View File

@ -23,6 +23,7 @@ impl Config {
Management::CompleteClear => pac.complete_cache_clear,
};
// takes `Some(Vec<&str>)` and returns `Vec<&str>`
let mut prog = match get {
None => {
println!("Sorry, your package manager does not support this action");
@ -31,16 +32,25 @@ impl Config {
Some(vec) => vec,
};
//Pop's from the front of the `Vec<&str>`, which should always be the command name
let command = prog.remove(0);
// Matches against a tuple of the first element of the `Vec` and the `&Option<String>`
// from the passed `Config`, taking a reference to that data when it needs it.
match (prog.first(), &self.term) {
(None, _) => {
(None, &None) => {
let mut child = Command::new(&command).spawn().expect(
"Failed to open package manager"
);
child.wait().expect("Failed to wait on package manager");
},
(_, &None) => {
(None, &Some(ref term)) => {
let mut child = Command::new(&command)
.arg(term)
.spawn()
.expect("Failed to open package manager");
child.wait().expect("Failed to wait on package manager");
},
(Some(_), &None) => {
for arg in &prog {
let mut child =Command::new(&command)
.arg(arg)