diff --git a/internal/fingerprint/sources_checksum.go b/internal/fingerprint/sources_checksum.go index da6f50d3..f38903ca 100644 --- a/internal/fingerprint/sources_checksum.go +++ b/internal/fingerprint/sources_checksum.go @@ -42,7 +42,7 @@ func (checker *ChecksumChecker) IsUpToDate(t *taskfile.Task) (bool, error) { return false, nil } - if !checker.dry { + if !checker.dry && oldMd5 != newMd5 { _ = os.MkdirAll(filepathext.SmartJoin(checker.tempDir, "checksum"), 0o755) if err = os.WriteFile(checksumFile, []byte(newMd5+"\n"), 0o644); err != nil { return false, err diff --git a/task_test.go b/task_test.go index 2cc5f8a6..e238e95d 100644 --- a/task_test.go +++ b/task_test.go @@ -508,9 +508,10 @@ func TestStatusChecksum(t *testing.T) { } var buff bytes.Buffer + tempdir := filepathext.SmartJoin(dir, ".task") e := task.Executor{ Dir: dir, - TempDir: filepathext.SmartJoin(dir, ".task"), + TempDir: tempdir, Stdout: &buff, Stderr: &buff, } @@ -522,9 +523,19 @@ func TestStatusChecksum(t *testing.T) { require.NoError(t, err) } + // Capture the modification time, so we can ensure the checksum file + // is not regenerated when the hash hasn't changed. + s, err := os.Stat(filepathext.SmartJoin(tempdir, "checksum/"+test.task)) + require.NoError(t, err) + time := s.ModTime() + buff.Reset() require.NoError(t, e.Run(context.Background(), taskfile.Call{Task: test.task})) assert.Equal(t, `task: Task "`+test.task+`" is up to date`+"\n", buff.String()) + + s, err = os.Stat(filepathext.SmartJoin(tempdir, "checksum/"+test.task)) + require.NoError(t, err) + assert.Equal(t, time, s.ModTime()) }) } }