use dev_prefix::*;
use super::types::*;
const SETTINGS_TOML: &'static [u8] = include_bytes!("data/settings-template.toml");
const PURPOSE_TOML: &'static [u8] = include_bytes!("data/purpose-template.toml");
pub fn get_subcommand<'a, 'b>() -> App<'a, 'b> {
SubCommand::with_name("init")
.about("initialize the repository in the cwd")
.settings(&[AS::DeriveDisplayOrder, COLOR])
}
pub fn run_cmd(path: &Path) -> Result<()> {
let mut read_dir = fs::read_dir(path).chain_err(|| format!("dir: {}", path.display()))?;
let exists = read_dir.any(|e| match e {
Err(_) => false,
Ok(e) => {
if !e.file_type().unwrap().is_dir() {
false
} else {
let p = e.path();
let fname = p.file_name().unwrap().to_str().unwrap();
fname == ".art"
}
}
});
let repo = path.join(".art");
let design = path.join("design");
if !exists {
fs::create_dir(&repo).chain_err(|| format!("create dir: {}", repo.display()))?;
let _ = fs::create_dir(&design);
let settings = repo.join("settings.toml");
let purpose = design.join("purpose.toml");
{
fs::OpenOptions::new()
.create_new(true)
.write(true)
.open(&settings)
.chain_err(|| format!("create file: {}", settings.display()))?
.write_all(SETTINGS_TOML.as_ref())
.unwrap();
println!("art initialized at {}", settings.display());
if let Ok(mut f) = fs::OpenOptions::new()
.create_new(true)
.write(true)
.open(&purpose) {
f.write_all(PURPOSE_TOML.as_ref()).unwrap();
println!("art created initial design.toml at {}", design.display())
}
}
} else {
println!("artifact already initialized at {}", repo.display());
}
Ok(())
}