about summary refs log tree commit diff
path: root/pkgs/profpatsch/nman
diff options
context:
space:
mode:
authorsternenseemann <0rpkxez4ksa01gb3typccl0i@systemli.org>2021-02-12 16:35:37 +0100
committersternenseemann <sternenseemann@systemli.org>2021-02-25 19:52:33 +0100
commit95387b07393fe293b423c87fdd8ad2e78901a067 (patch)
tree1f67ec2cf92641182dca070822a8d6b2ed14ef83 /pkgs/profpatsch/nman
parentc66f141e26c11c641f2959f88e7f00a951cb567f (diff)
pkgs/profpatsch/nman: distinguish between failed and missing cmds
Diffstat (limited to 'pkgs/profpatsch/nman')
-rw-r--r--pkgs/profpatsch/nman/nman.rs11
1 files changed, 7 insertions, 4 deletions
diff --git a/pkgs/profpatsch/nman/nman.rs b/pkgs/profpatsch/nman/nman.rs
index 53fd4b77..b73836df 100644
--- a/pkgs/profpatsch/nman/nman.rs
+++ b/pkgs/profpatsch/nman/nman.rs
@@ -40,7 +40,6 @@ fn mktemp(suffix: &str) -> std::io::Result<TempDir> {
     }
 }
 
-// TODO(sterni): distinguish between cmd not found and cmd failure
 // TODO(sterni): track helpful error context in this enum
 enum NmanError {
     NoTempDir,
@@ -50,6 +49,7 @@ enum NmanError {
     NotFound,
     NixParseError,
     Usage,
+    Execution,
 }
 
 impl NmanError {
@@ -62,6 +62,7 @@ impl NmanError {
             NmanError::NotFound => 1,
             NmanError::NixParseError => 69, // EX_SOFTWARE
             NmanError::Usage => 64, // EX_USAGE
+            NmanError::Execution => 127, // like bash
         }
     }
 
@@ -74,6 +75,7 @@ impl NmanError {
             NmanError::NotFound => "desired man page could not be found",
             NmanError::NixParseError => "nix executable produced unexpected output",
             NmanError::Usage => "usage error",
+            NmanError::Execution => "Couldn't execute required command",
         }
     }
 }
@@ -136,7 +138,7 @@ fn build_man_page(drv: DrvWithOutput, section: &str, page: &str, tempdir: &TempD
                             .arg(tempdir.as_ref().join("build-result"))
                             .arg("--indirect")
                             .output()
-                            .map_err(|_| NmanError::Build)?;
+                            .map_err(|_| NmanError::Execution)?;
 
     if !build.status.success() {
         return Err(NmanError::Build);
@@ -182,7 +184,7 @@ fn open_man_page(attr: &str, section: &str, page: &str) -> Result<(), NmanError>
                        .arg(tmpdir.as_ref().join("instantiation-result"))
                        .arg("--indirect")
                        .output()
-                       .map_err(|_| NmanError::Instantiate)?;
+                       .map_err(|_| NmanError::Execution)?;
 
     if !inst.status.success() {
         return Err(NmanError::Instantiate);
@@ -219,7 +221,8 @@ fn open_man_page(attr: &str, section: &str, page: &str) -> Result<(), NmanError>
 
                 return match res {
                     Ok(true) => Ok(()),
-                    _ => Err(NmanError::Man),
+                    Ok(false) => Err(NmanError::Man),
+                    Err(_) => Err(NmanError::Execution),
                 };
             },
         }