use std::process::Command; pub fn from_setting(setting: Option) -> Backend { // Git is the default setting until further notice setting.map_or(Backend::Git, |name| match name.as_ref() { "git" => Backend::Git, "mercurial" => Backend::Mercurial, _ => Backend::Unknown(name.to_string()) }) } #[derive(Debug)] pub enum Backend { Git, Mercurial, Unknown(String) } impl Backend { pub fn clone(&self, source: &str) -> bool { match self { Backend::Git => { let status = Command::new("git") .arg("clone") .arg("--recursive") .arg(source) .status().expect("PROCESS ERROR!"); status.success() }, Backend::Mercurial => { unreachable!("Unimplemented"); }, Backend::Unknown(name) => { eprintln!("Unknown DVCS: {}", name); false } } } pub fn update(&self) -> bool { match self { Backend::Git => { let status = Command::new("git") .arg("pull") .status() .expect("Failed to pull on git repo."); status.success() }, Backend::Mercurial => { unreachable!("Unimplemented"); }, Backend::Unknown(name) => { eprintln!("Unknown DVCS: {}", name); false } } } }