use std::path::PathBuf;
use crate::errors::*;
use include_dir::{include_dir, Dir};
use std::fs::{self, OpenOptions};
use std::io::Write;
static TRIBBLE_DIR: Dir = include_dir!("./.tribble");
pub fn prep(dir: PathBuf) -> Result<(), PrepError> {
let tribble_dir = dir.join("./.tribble");
if tribble_dir.exists() {
Ok(())
} else {
if let Err(err) = fs::create_dir(&tribble_dir) {
return Err(PrepError::ExtractionFailed {
target_dir: tribble_dir.to_str().map(|s| s.to_string()),
source: err,
});
}
if let Err(err) = TRIBBLE_DIR.extract(&tribble_dir) {
return Err(PrepError::ExtractionFailed {
target_dir: tribble_dir.to_str().map(|s| s.to_string()),
source: err,
});
}
if let Ok(contents) = fs::read_to_string(".gitignore") {
if contents.contains(".tribble/") {
return Ok(());
}
}
let file = OpenOptions::new()
.append(true)
.create(true) .open(".gitignore");
let mut file = match file {
Ok(file) => file,
Err(err) => return Err(PrepError::GitignoreUpdateFailed { source: err }),
};
if let Err(err) = file.write_all(b".tribble/") {
return Err(PrepError::GitignoreUpdateFailed { source: err });
}
Ok(())
}
}