You've already forked docker-volume-backup
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:
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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 {
|
||||||
|
@ -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")
|
||||||
|
Reference in New Issue
Block a user