diff options
| -rw-r--r-- | hatask.ha | 30 |
1 files changed, 22 insertions, 8 deletions
@@ -25,10 +25,9 @@ type task = struct { def METADATASEP: str = "----"; type rtaskerror = !(fs::error | ini::error | strconv::error | io::error | - utf8::invalid); + utf8::invalid | path::error); -fn listtasks(root: str = "tasks", context: str = "*") ([]task | rtaskerror | - path::error) = { +fn listtasks(root: str = "tasks", context: str = "*") ([]task | rtaskerror) = { const dirents = os::readdir(root)?; defer fs::dirents_free(dirents); let tasks: []task = []; @@ -120,6 +119,23 @@ fn sortname(a: const *opaque, b: const *opaque) int = { return strings::compare(a.name, b.name); }; +fn strrtaskerror(e: rtaskerror) str = { + return match (e) { + case let e: fs::error => + yield fs::strerror(e); + case let e: ini::error => + yield ini::strerror(e); + case let e: strconv::error => + yield strconv::strerror(e); + case let e: io::error => + yield io::strerror(e); + case let e: utf8::invalid => + yield utf8::strerror(e); + case let e: path::error => + yield path::strerror(e); + }; +}; + export fn main() void = { const cmd = getopt::parse(os::args, "tasklist", @@ -152,11 +168,9 @@ export fn main() void = { }; - const tasks = match (listtasks(cfg.tasksdir)) { - case let e: fs::error => - fmt::fatal(fs::strerror(e)); - case let e: path::error => - fmt::fatal(path::strerror(e)); + const tasks = match (listtasks(cfg.tasksdir, cfg.context)) { + case let e: rtaskerror => + fmt::fatal(strrtaskerror(e)); case let tasks: []task => yield tasks; }; |
