summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-06-25 12:09:52 +0300
committerPaul Buetow <paul@buetow.org>2026-06-25 12:09:52 +0300
commitc8c3307e9e636406491572d9b8dda3a84929613d (patch)
treec3001666cd1fda8c14ff5f586c1b75cfca2ff261
parent66a6556b567bee551de79de8fcae699ca34aabc7 (diff)
task 0r0: wrap task exec errors
-rw-r--r--internal/task/task.go4
-rw-r--r--internal/task/task_test.go14
2 files changed, 16 insertions, 2 deletions
diff --git a/internal/task/task.go b/internal/task/task.go
index 604d4ca..dc02d48 100644
--- a/internal/task/task.go
+++ b/internal/task/task.go
@@ -240,7 +240,7 @@ func RunArgs(ctx context.Context, args []string) (RunResult, error) {
return result, fmt.Errorf("task command: %w", ctxErr)
}
if strings.TrimSpace(result.Stderr) != "" {
- return result, fmt.Errorf("%v: %s", err, strings.TrimSpace(result.Stderr))
+ return result, fmt.Errorf("%w: %s", err, strings.TrimSpace(result.Stderr))
}
return result, err
}
@@ -304,7 +304,7 @@ func Export(ctx context.Context, filters ...string) ([]Task, error) {
}
// Include stderr output in the error message
if stderr.Len() > 0 {
- return nil, fmt.Errorf("%v: %s", err, strings.TrimSpace(stderr.String()))
+ return nil, fmt.Errorf("%w: %s", err, strings.TrimSpace(stderr.String()))
}
return nil, err
}
diff --git a/internal/task/task_test.go b/internal/task/task_test.go
index f4567ba..570cc86 100644
--- a/internal/task/task_test.go
+++ b/internal/task/task_test.go
@@ -212,6 +212,13 @@ func TestRunLineReturnsCapturedErrorOutput(t *testing.T) {
if result.Stderr != "bad-output\n" {
t.Fatalf("stderr = %q", result.Stderr)
}
+ var exitErr *exec.ExitError
+ if !errors.As(err, &exitErr) {
+ t.Fatalf("error = %v, want wrapped *exec.ExitError", err)
+ }
+ if exitErr.ExitCode() != 2 {
+ t.Fatalf("exit code = %d, want 2", exitErr.ExitCode())
+ }
if !strings.Contains(err.Error(), "bad-output") {
t.Fatalf("error did not include stderr: %v", err)
}
@@ -259,6 +266,13 @@ func TestExportReturnsCapturedErrorOutput(t *testing.T) {
if err == nil {
t.Fatal("expected error")
}
+ var exitErr *exec.ExitError
+ if !errors.As(err, &exitErr) {
+ t.Fatalf("error = %v, want wrapped *exec.ExitError", err)
+ }
+ if exitErr.ExitCode() != 2 {
+ t.Fatalf("exit code = %d, want 2", exitErr.ExitCode())
+ }
if !strings.Contains(err.Error(), "export-failed") {
t.Fatalf("error did not include stderr: %v", err)
}