# HG changeset patch # User Nathan Goldbaum # Date 1562688632 14400 # Tue Jul 09 12:10:32 2019 -0400 # Node ID e28018a9cf8b99fdbd7809b3ba3aa1743efa0b82 # Parent 688559deb9c0930faad7b5960a9c3e9645be7e27 refactor command functions into a commands namespace diff --git a/src/commands.rs b/src/commands.rs new file mode 100644 --- /dev/null +++ b/src/commands.rs @@ -0,0 +1,53 @@ +use crate::dirstate; +use crate::errors; +use crate::revlogs; +use snafu::{OptionExt, ResultExt}; +use std::env; +use std::fs::File; +use std::io::BufReader; +use std::path::PathBuf; + +fn hg_dir() -> Result { + let current_dir = env::current_dir().context(errors::NotAValidDirectory)?; + let mut anc = current_dir.ancestors(); + + loop { + let p = match anc.next() { + Some(d) => d, + None => break None, + }; + let possible_hg_dir = p.join(".hg"); + if possible_hg_dir.is_dir() { + break Some(possible_hg_dir); + } + } + .context(errors::NotARepository) +} + +pub fn hg_log() -> Result<(), errors::RugError> { + let fname = hg_dir()?.join("store/00changelog.i"); + + let f = File::open(&fname).context(errors::NoChangelog { path: &fname })?; + let mut r = BufReader::new(f); + + let revlog = + revlogs::Revlog::new(&mut r).context(errors::CannotParseRevlog { path: &fname })?; + + println!("{}", revlog); + + Ok(()) +} + +pub fn hg_status() -> Result<(), errors::RugError> { + let fname = hg_dir()?.join("dirstate"); + + let f = File::open(&fname).context(errors::NoDirstate { path: &fname })?; + let mut r = BufReader::new(f); + + let dirstate = + dirstate::Dirstate::new(&mut r).context(errors::CannotParseDirstate { path: &fname })?; + + println!("{}", dirstate); + + Ok(()) +} diff --git a/src/main.rs b/src/main.rs --- a/src/main.rs +++ b/src/main.rs @@ -1,59 +1,10 @@ -use snafu::{OptionExt, ResultExt}; -use std::env; -use std::fs::File; -use std::io::BufReader; -use std::path::PathBuf; use structopt::StructOpt; +mod commands; mod dirstate; mod errors; mod revlogs; -fn hg_dir() -> Result { - let current_dir = env::current_dir().context(errors::NotAValidDirectory)?; - let mut anc = current_dir.ancestors(); - - loop { - let p = match anc.next() { - Some(d) => d, - None => break None, - }; - let possible_hg_dir = p.join(".hg"); - if possible_hg_dir.is_dir() { - break Some(possible_hg_dir); - } - } - .context(errors::NotARepository) -} - -fn hg_log() -> Result<(), errors::RugError> { - let fname = hg_dir()?.join("store/00changelog.i"); - - let f = File::open(&fname).context(errors::NoChangelog { path: &fname })?; - let mut r = BufReader::new(f); - - let revlog = - revlogs::Revlog::new(&mut r).context(errors::CannotParseRevlog { path: &fname })?; - - println!("{}", revlog); - - Ok(()) -} - -fn hg_status() -> Result<(), errors::RugError> { - let fname = hg_dir()?.join("dirstate"); - - let f = File::open(&fname).context(errors::NoDirstate { path: &fname })?; - let mut r = BufReader::new(f); - - let dirstate = - dirstate::Dirstate::new(&mut r).context(errors::CannotParseDirstate { path: &fname })?; - - println!("{}", dirstate); - - Ok(()) -} - #[derive(StructOpt)] #[structopt( name = "rug", @@ -71,11 +22,11 @@ fn main() { match Rug::from_args() { - Rug::Log {} => match hg_log() { + Rug::Log {} => match commands::hg_log() { Ok(_) => {} Err(e) => println!("{}", e), }, - Rug::Status {} => match hg_status() { + Rug::Status {} => match commands::hg_status() { Ok(_) => {} Err(e) => println!("{}", e), },