From 3102ccdfd47d4c6f747a5fc95a6d66d2dedcf34c Mon Sep 17 00:00:00 2001 From: NickIAm Date: Thu, 3 Aug 2023 21:31:27 +1000 Subject: [PATCH] fix(cli): write cachedir.tag to log directories --- internal/logfile/logfile.go | 10 ++++++++++ internal/logfile/logfile_test.go | 30 ++++++++++++++++++++++++++---- 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/internal/logfile/logfile.go b/internal/logfile/logfile.go index 2589b8f779..1d605454e8 100644 --- a/internal/logfile/logfile.go +++ b/internal/logfile/logfile.go @@ -24,6 +24,7 @@ import ( "github.com/kopia/kopia/internal/zaplogutil" "github.com/kopia/kopia/repo/content" "github.com/kopia/kopia/repo/logging" + "github.com/kopia/kopia/internal/cachedir" ) const logsDirMode = 0o700 @@ -213,6 +214,15 @@ func (c *loggingFlags) setupLogFileBasedLogger(now time.Time, subdir, suffix, lo fmt.Fprintln(os.Stderr, "Unable to create logs directory:", err) } + // write a cachetag.dir to the log path to keep log files out of the backup + cacheTagName := filepath.Join(logDir, "CACHEDIR.TAG") + + if _, err := os.Stat(cacheTagName); errors.Is(err, os.ErrNotExist) { + if err := cachedir.WriteCacheMarker(logDir); err != nil { + fmt.Fprintln(os.Stderr, "Unable to write CACHETAG") + } + } + sweepLogWG := &sync.WaitGroup{} doSweep := func() {} diff --git a/internal/logfile/logfile_test.go b/internal/logfile/logfile_test.go index 220a9b005d..ed5e3ca96b 100644 --- a/internal/logfile/logfile_test.go +++ b/internal/logfile/logfile_test.go @@ -115,8 +115,8 @@ func TestLogFileRotation(t *testing.T) { // expected number of files per directory subdirs := map[string]int{ - "cli-logs": 3, - "content-logs": 4, + "cli-logs": 4, + "content-logs": 5, } for subdir, wantEntryCount := range subdirs { @@ -189,8 +189,8 @@ func TestLogFileMaxTotalSize(t *testing.T) { env.RunAndExpectSuccess(t, "snap", "ls", "--file-log-level=debug", "--log-dir", tmpLogDir, fmt.Sprintf("%s=%v", flag, size1MB/2)) size2 := getTotalDirSize(t, logSubdir) - require.LessOrEqual(t, size1, size0/2) - require.LessOrEqual(t, size2, size1/2) + require.LessOrEqual(t, size1, size0/2+291) + require.LessOrEqual(t, size2, size1/2+291) require.Greater(t, size2, size1/4) }) } @@ -238,3 +238,25 @@ func getTotalDirSize(t *testing.T, dir string) int { return totalSize } + +func TestCacheFileExists(t *testing.T) { + t.Parallel() + + runner := testenv.NewInProcRunner(t) + runner.CustomizeApp = logfile.Attach + + env := testenv.NewCLITest(t, testenv.RepoFormatNotImportant, runner) + + tmpLogDir := testutil.TempDirectory(t) + cacheTagName := "CACHEDIR.TAG" + + env.RunAndExpectSuccess(t, "repo", "create", "filesystem", "--path", env.RepoDir, "--log-dir", tmpLogDir) + + if _, err := os.Stat(filepath.Join(tmpLogDir, "cli-logs", cacheTagName)); err != nil { + t.Fatal(err) + } + + if _, err := os.Stat(filepath.Join(tmpLogDir, "content-logs", cacheTagName)); err != nil { + t.Fatal(err) + } +}