aboutsummaryrefslogtreecommitdiff
path: root/ticket/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'ticket/src/main.rs')
-rw-r--r--ticket/src/main.rs47
1 files changed, 44 insertions, 3 deletions
diff --git a/ticket/src/main.rs b/ticket/src/main.rs
index 9005471..7e05adf 100644
--- a/ticket/src/main.rs
+++ b/ticket/src/main.rs
@@ -3,6 +3,7 @@ use anyhow::{
Result,
};
use colored::*;
+use log::*;
use rustyline::{
error::ReadlineError,
Editor,
@@ -35,32 +36,44 @@ enum Args {
#[paw::main]
fn main(args: Args) {
+ env::var("RUST_LOG").map(drop).unwrap_or_else(|_| {
+ env::set_var("RUST_LOG", "info");
+ });
+ pretty_env_logger::init();
if let Err(e) = match args {
Args::Init => init(),
Args::New => new(),
Args::Show { id } => show(id),
Args::Close { id } => close(id),
} {
- eprintln!("{}", e);
+ error!("{}", e);
std::process::exit(1);
}
}
fn init() -> Result<()> {
let root = find_root()?.join(".dev-suite").join("ticket");
+ debug!("Creating ticket directory at {}.", root.display());
+ debug!("Creating open directory.");
fs::create_dir_all(&root.join("open"))?;
+ debug!("Creating closed directory");
fs::create_dir_all(&root.join("closed"))?;
+ trace!("Done initializing tickets.");
+ info!("Created ticket directory at {}.", root.display());
Ok(())
}
fn new() -> Result<()> {
+ debug!("Getting ticket root.");
let ticket_root = ticket_root()?;
+ trace!("Got ticket root: {}", ticket_root.display());
let open = ticket_root.join("open");
let closed = ticket_root.join("closed");
let description = ticket_root.join("description");
let mut ticket_num = 1;
// Fast enough for now but maybe not in the future
+ debug!("Getting number of tickets total.");
for entry in fs::read_dir(&open)?.chain(fs::read_dir(&closed)?) {
let entry = entry?;
let path = entry.path();
@@ -68,6 +81,8 @@ fn new() -> Result<()> {
ticket_num += 1;
}
}
+ debug!("Ticket Total: {}", ticket_num - 1);
+ debug!("Next Ticket ID: {}", ticket_num);
let mut rl = Editor::<()>::new();
let title = match rl.readline("Title: ") {
@@ -78,19 +93,28 @@ fn new() -> Result<()> {
line
}
Err(ReadlineError::Interrupted) | Err(ReadlineError::Eof) => {
+ debug!("Exiting due to Ctrl-C or Ctrl-D.");
process::exit(0);
}
Err(e) => return Err(e.into()),
};
+ debug!("Opening up editor.");
+ trace!(
+ "Create buffer file for the description at {}.",
+ description.display()
+ );
fs::File::create(&description)?;
Command::new(&env::var("EDITOR").unwrap_or_else(|_| "vi".into()))
.arg(&description)
.spawn()?
.wait()?;
+ trace!("Read the file into memory.");
let description_contents = fs::read_to_string(&description)?;
+ trace!("Removing the file.");
fs::remove_file(&description)?;
+ debug!("Creating ticket in memory.");
let t = Ticket {
title,
status: Status::Open,
@@ -99,6 +123,7 @@ fn new() -> Result<()> {
description: description_contents,
};
+ debug!("Converting ticket to toml and writing to disk.");
fs::write(
open.join(&format!(
"{}-{}.toml",
@@ -111,6 +136,7 @@ fn new() -> Result<()> {
)),
toml::to_string_pretty(&t)?,
)?;
+ trace!("Finished writing data to disk.");
Ok(())
}
@@ -120,18 +146,24 @@ fn ticket_root() -> Result<PathBuf> {
}
fn show(id: usize) -> Result<()> {
+ debug!("Getting ticket root.");
let ticket_root = ticket_root()?;
+ trace!("Ticket root at {}.", ticket_root.display());
let open = ticket_root.join("open");
let closed = ticket_root.join("closed");
let mut found = false;
// Fast enough for now but maybe not in the future
+ debug!("Looking for ticket.");
for entry in fs::read_dir(&open)?.chain(fs::read_dir(&closed)?) {
let entry = entry?;
let path = entry.path();
+ trace!("Looking at entry {}.", path.display());
if path.is_file() {
if let Some(file_name) = path.file_name().and_then(|f| f.to_str()) {
+ trace!("Entry is a file.");
if file_name.starts_with(&id.to_string()) {
+ trace!("This is the expected entry.");
let ticket = toml::from_slice::<Ticket>(&fs::read(&path)?)?;
println!(
"{}",
@@ -161,26 +193,35 @@ fn show(id: usize) -> Result<()> {
if found {
Ok(())
} else {
- bail!("No ticket with id {} exists", id);
+ bail!("No ticket with id {} exists.", id);
}
}
fn close(id: usize) -> Result<()> {
+ debug!("Getting ticket root.");
let ticket_root = ticket_root()?;
+ trace!("Ticket root at {}.", ticket_root.display());
let open = ticket_root.join("open");
let closed = ticket_root.join("closed");
let mut found = false;
// Fast enough for now but maybe not in the future
+ debug!("Looking for open ticket with id {}", id);
for entry in fs::read_dir(&open)? {
let entry = entry?;
let path = entry.path();
+ trace!("Looking at entry {}.", path.display());
if path.is_file() {
if let Some(file_name) = path.file_name().and_then(|f| f.to_str()) {
if file_name.starts_with(&id.to_string()) {
+ trace!("The ticket is open and exists.");
+ debug!("Reading in the ticket from disk and setting it to closed.");
let mut ticket = toml::from_slice::<Ticket>(&fs::read(&path)?)?;
ticket.status = Status::Closed;
+ debug!("Writing ticket to disk in the closed directory.");
fs::write(closed.join(file_name), toml::to_string_pretty(&ticket)?)?;
+ debug!("Removing old ticket.");
fs::remove_file(&path)?;
+ trace!("Removed the old ticket.");
found = true;
break;
}
@@ -190,7 +231,7 @@ fn close(id: usize) -> Result<()> {
if found {
Ok(())
} else {
- bail!("No ticket with id {} exists", id);
+ bail!("No ticket with id {} exists.", id);
}
}