From 2a67499f12fd7046fbd1b17c89e4ca2a9dda2f7d Mon Sep 17 00:00:00 2001 From: ilewin Date: Tue, 23 Aug 2022 18:25:11 +0200 Subject: [PATCH 1/2] Issue #826. Replaced zglob.Glob func with GlobFollowSymlinks to evaluate symlinks --- internal/status/glob.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 } From cdc969cd4efc3ce15b25d0ea4e12c57317f28d78 Mon Sep 17 00:00:00 2001 From: ilewin Date: Tue, 23 Aug 2022 18:36:19 +0200 Subject: [PATCH 2/2] Added test to check if symlinks are evaluated for task source files --- task_test.go | 33 +++++++++++++++++++ .../evaluate_symlinks_in_paths/Taskfile.yaml | 14 ++++++++ testdata/evaluate_symlinks_in_paths/shared/b | 1 + .../shared/inner_shared/c | 1 + testdata/evaluate_symlinks_in_paths/src/a | 1 + .../evaluate_symlinks_in_paths/src/shared | 1 + 6 files changed, 51 insertions(+) create mode 100644 testdata/evaluate_symlinks_in_paths/Taskfile.yaml create mode 100644 testdata/evaluate_symlinks_in_paths/shared/b create mode 100644 testdata/evaluate_symlinks_in_paths/shared/inner_shared/c create mode 100644 testdata/evaluate_symlinks_in_paths/src/a create mode 120000 testdata/evaluate_symlinks_in_paths/src/shared diff --git a/task_test.go b/task_test.go index 216e3968..bef7b22f 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