diff --git a/internal/status/glob.go b/internal/status/glob.go index 7d1ca1f0..d04214be 100644 --- a/internal/status/glob.go +++ b/internal/status/glob.go @@ -32,7 +32,7 @@ func Glob(dir string, g string) ([]string, error) { return nil, err } - fs, err := zglob.Glob(g) + fs, err := zglob.GlobFollowSymlinks(g) if err != nil { return nil, err } diff --git a/task_test.go b/task_test.go index cd6b8b1c..cbc91d07 100644 --- a/task_test.go +++ b/task_test.go @@ -1338,3 +1338,36 @@ func TestErrorCode(t *testing.T) { assert.True(t, ok, "cannot cast returned error to *task.TaskRunError") assert.Equal(t, 42, casted.ExitCode(), "unexpected exit code from task") } + +func TestEvaluateSymlinksInPaths(t *testing.T) { + const dir = "testdata/evaluate_symlinks_in_paths" + var buff bytes.Buffer + e := &task.Executor{ + Dir: dir, + Stdout: &buff, + Stderr: &buff, + Silent: false, + } + assert.NoError(t, e.Setup()) + err := e.Run(context.Background(), taskfile.Call{Task: "default"}) + assert.NoError(t, err) + assert.NotEqual(t, `task: Task "default" is up to date`, strings.TrimSpace(buff.String())) + buff.Reset() + err = e.Run(context.Background(), taskfile.Call{Task: "test-sym"}) + assert.NoError(t, err) + assert.NotEqual(t, `task: Task "test-sym" is up to date`, strings.TrimSpace(buff.String())) + buff.Reset() + err = e.Run(context.Background(), taskfile.Call{Task: "default"}) + assert.NoError(t, err) + assert.NotEqual(t, `task: Task "default" is up to date`, strings.TrimSpace(buff.String())) + buff.Reset() + err = e.Run(context.Background(), taskfile.Call{Task: "default"}) + assert.NoError(t, err) + assert.Equal(t, `task: Task "default" is up to date`, strings.TrimSpace(buff.String())) + buff.Reset() + err = e.Run(context.Background(), taskfile.Call{Task: "reset"}) + assert.NoError(t, err) + buff.Reset() + err = os.RemoveAll(dir + "/.task") + assert.NoError(t, err) +} diff --git a/testdata/evaluate_symlinks_in_paths/Taskfile.yaml b/testdata/evaluate_symlinks_in_paths/Taskfile.yaml new file mode 100644 index 00000000..4940c9af --- /dev/null +++ b/testdata/evaluate_symlinks_in_paths/Taskfile.yaml @@ -0,0 +1,14 @@ +version: '3' +tasks: + default: + sources: + - src/**/* + cmds: + - echo "some job" + test-sym: + cmds: + - echo "shared file source changed" > src/shared/b + reset: + cmds: + - echo "shared file source" > src/shared/b + - echo "file source" > src/a diff --git a/testdata/evaluate_symlinks_in_paths/shared/b b/testdata/evaluate_symlinks_in_paths/shared/b new file mode 100644 index 00000000..41a3e917 --- /dev/null +++ b/testdata/evaluate_symlinks_in_paths/shared/b @@ -0,0 +1 @@ +shared file source diff --git a/testdata/evaluate_symlinks_in_paths/shared/inner_shared/c b/testdata/evaluate_symlinks_in_paths/shared/inner_shared/c new file mode 100644 index 00000000..a55874db --- /dev/null +++ b/testdata/evaluate_symlinks_in_paths/shared/inner_shared/c @@ -0,0 +1 @@ +inner shared file source diff --git a/testdata/evaluate_symlinks_in_paths/src/a b/testdata/evaluate_symlinks_in_paths/src/a new file mode 100644 index 00000000..526a0fc7 --- /dev/null +++ b/testdata/evaluate_symlinks_in_paths/src/a @@ -0,0 +1 @@ +file source diff --git a/testdata/evaluate_symlinks_in_paths/src/shared b/testdata/evaluate_symlinks_in_paths/src/shared new file mode 120000 index 00000000..8fba6b66 --- /dev/null +++ b/testdata/evaluate_symlinks_in_paths/src/shared @@ -0,0 +1 @@ +../shared \ No newline at end of file