From 44aa2ee3b3d701b5af3e426b8ecfa3d406be7a24 Mon Sep 17 00:00:00 2001 From: Andrey Nering Date: Fri, 14 Oct 2022 19:48:45 -0300 Subject: [PATCH] Add CHANGELOG and improvements to #887 --- CHANGELOG.md | 2 ++ internal/filepathext/filepathext.go | 17 +++++++++++++++++ taskfile/read/taskfile.go | 2 +- 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3a0ef886..3987a2a7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## Unreleased +- Now YAML parse errors will print which Taskfile failed to parse + ([#885](https://github.com/go-task/task/issues/885), [#887](https://github.com/go-task/task/pull/887)). - Add ability to set `aliases` for tasks and namespaces ([#268](https://github.com/go-task/task/pull/268), [#340](https://github.com/go-task/task/pull/340), [#879](https://github.com/go-task/task/pull/879)). - Improvements to Fish shell completion ([#897](https://github.com/go-task/task/pull/897)). diff --git a/internal/filepathext/filepathext.go b/internal/filepathext/filepathext.go index 6146d88e..16ed5d0a 100644 --- a/internal/filepathext/filepathext.go +++ b/internal/filepathext/filepathext.go @@ -1,6 +1,7 @@ package filepathext import ( + "os" "path/filepath" ) @@ -12,3 +13,19 @@ func SmartJoin(a, b string) string { } return filepath.Join(a, b) } + +// TryAbsToRel tries to convert an absolute path to relative based on the +// process working directory. If it can't, it returns the absolute path. +func TryAbsToRel(abs string) string { + wd, err := os.Getwd() + if err != nil { + return abs + } + + rel, err := filepath.Rel(wd, abs) + if err != nil { + return abs + } + + return rel +} diff --git a/taskfile/read/taskfile.go b/taskfile/read/taskfile.go index 9035f58b..d0ee697b 100644 --- a/taskfile/read/taskfile.go +++ b/taskfile/read/taskfile.go @@ -190,7 +190,7 @@ func readTaskfile(file string) (*taskfile.Taskfile, error) { } var t taskfile.Taskfile if err := yaml.NewDecoder(f).Decode(&t); err != nil { - return nil, fmt.Errorf("%s: %w", file, err) + return nil, fmt.Errorf("task: Failed to parse %s:\n%w", filepathext.TryAbsToRel(file), err) } return &t, nil }