1
0
mirror of https://github.com/offen/docker-volume-backup.git synced 2025-06-25 14:32:52 +02:00

Directories aren't excluded from pruning logic (#548)

This commit is contained in:
Frederik Ring
2025-02-28 17:21:35 +01:00
committed by GitHub
parent 0f30b959f8
commit 016e470f5f
3 changed files with 13 additions and 9 deletions

View File

@ -96,7 +96,7 @@ func (b *localStorage) Prune(deadline time.Time, pruningPrefix string) (*storage
) )
} }
if fi.Mode()&os.ModeSymlink != os.ModeSymlink { if !fi.IsDir() && fi.Mode()&os.ModeSymlink != os.ModeSymlink {
candidates = append(candidates, candidate) candidates = append(candidates, candidate)
} }
} }

View File

@ -163,21 +163,24 @@ func (b *sshStorage) Prune(deadline time.Time, pruningPrefix string) (*storage.P
} }
var matches []string var matches []string
var numCandidates int
for _, candidate := range candidates { for _, candidate := range candidates {
if !strings.HasPrefix(candidate.Name(), pruningPrefix) { if candidate.IsDir() || !strings.HasPrefix(candidate.Name(), pruningPrefix) {
continue continue
} }
numCandidates++
if candidate.ModTime().Before(deadline) { if candidate.ModTime().Before(deadline) {
matches = append(matches, candidate.Name()) matches = append(matches, candidate.Name())
} }
} }
stats := &storage.PruneStats{ stats := &storage.PruneStats{
Total: uint(len(candidates)), Total: uint(numCandidates),
Pruned: uint(len(matches)), Pruned: uint(len(matches)),
} }
pruneErr := b.DoPrune(b.Name(), len(matches), len(candidates), deadline, func() error { pruneErr := b.DoPrune(b.Name(), len(matches), numCandidates, deadline, func() error {
for _, match := range matches { for _, match := range matches {
p := path.Join(b.DestinationPath, match) p := path.Join(b.DestinationPath, match)
if err := b.sftpClient.Remove(p); err != nil { if err := b.sftpClient.Remove(p); err != nil {

View File

@ -90,24 +90,25 @@ func (b *webDavStorage) Prune(deadline time.Time, pruningPrefix string) (*storag
if err != nil { if err != nil {
return nil, errwrap.Wrap(err, "error looking up candidates from remote storage") return nil, errwrap.Wrap(err, "error looking up candidates from remote storage")
} }
var matches []fs.FileInfo var matches []fs.FileInfo
var lenCandidates int var numCandidates int
for _, candidate := range candidates { for _, candidate := range candidates {
if !strings.HasPrefix(candidate.Name(), pruningPrefix) { if candidate.IsDir() || !strings.HasPrefix(candidate.Name(), pruningPrefix) {
continue continue
} }
lenCandidates++ numCandidates++
if candidate.ModTime().Before(deadline) { if candidate.ModTime().Before(deadline) {
matches = append(matches, candidate) matches = append(matches, candidate)
} }
} }
stats := &storage.PruneStats{ stats := &storage.PruneStats{
Total: uint(lenCandidates), Total: uint(numCandidates),
Pruned: uint(len(matches)), Pruned: uint(len(matches)),
} }
pruneErr := b.DoPrune(b.Name(), len(matches), lenCandidates, deadline, func() error { pruneErr := b.DoPrune(b.Name(), len(matches), numCandidates, deadline, func() error {
for _, match := range matches { for _, match := range matches {
if err := b.client.Remove(path.Join(b.DestinationPath, match.Name())); err != nil { if err := b.client.Remove(path.Join(b.DestinationPath, match.Name())); err != nil {
return errwrap.Wrap(err, "error removing file") return errwrap.Wrap(err, "error removing file")