refactor command functions into a commands namespace
2 files changed, 56 insertions(+), 52 deletions(-)

A => src/commands.rs
M src/main.rs
A => src/commands.rs +53 -0
@@ 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<PathBuf, errors::RugError> {
+    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(())
+}

          
M src/main.rs +3 -52
@@ 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<PathBuf, errors::RugError> {
-    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 @@ enum Rug {
 
 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),
         },