Compare commits

...

2 Commits

Author SHA1 Message Date
Frederik Ring
c391230be6 Merge pull request #31 from offen/exclude-symlink-candidates
Exclude symlinks from candidates when pruning local files
2021-10-31 20:07:51 +01:00
Frederik Ring
f946f36fb0 exclude symlinks from candidates when pruning local files
Previously, symlinks would be included in the set of candidates, but would
be skipped when pruning. This could lead to a wrong number of candidates
being printed in the log messages.
2021-10-29 09:00:37 +02:00

View File

@@ -503,17 +503,21 @@ func (s *script) pruneOldBackups() error {
}
if _, err := os.Stat(s.c.BackupArchive); !os.IsNotExist(err) {
candidates, err := filepath.Glob(
path.Join(s.c.BackupArchive, fmt.Sprintf("%s*", s.c.BackupPruningPrefix)),
globPattern := path.Join(
s.c.BackupArchive,
fmt.Sprintf("%s*", s.c.BackupPruningPrefix),
)
globMatches, err := filepath.Glob(globPattern)
if err != nil {
return fmt.Errorf(
"pruneOldBackups: error looking up matching files, starting with: %w", err,
"pruneOldBackups: error looking up matching files using pattern %s: %w",
globPattern,
err,
)
}
var matches []string
for _, candidate := range candidates {
var candidates []os.FileInfo
for _, candidate := range globMatches {
fi, err := os.Stat(candidate)
if err != nil {
return fmt.Errorf(
@@ -522,8 +526,14 @@ func (s *script) pruneOldBackups() error {
err,
)
}
if fi.Mode() != os.ModeSymlink {
candidates = append(candidates, fi)
}
}
if fi.Mode() != os.ModeSymlink && fi.ModTime().Before(deadline) {
var matches []os.FileInfo
for _, candidate := range candidates {
if candidate.ModTime().Before(deadline) {
matches = append(matches, candidate)
}
}
@@ -531,7 +541,7 @@ func (s *script) pruneOldBackups() error {
if len(matches) != 0 && len(matches) != len(candidates) {
var removeErrors []error
for _, candidate := range matches {
if err := os.Remove(candidate); err != nil {
if err := os.Remove(candidate.Name()); err != nil {
removeErrors = append(removeErrors, err)
}
}