aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--hatask.ha30
1 files changed, 22 insertions, 8 deletions
diff --git a/hatask.ha b/hatask.ha
index fd04ea3..df8cf6d 100644
--- a/hatask.ha
+++ b/hatask.ha
@@ -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;
};