Files
rclone/cmd/bisync/delete_budget.go
f-denkena b957d264df
build / windows (push) Canceled after 0s
build / other_os (push) Canceled after 0s
build / mac_amd64 (push) Canceled after 0s
build / mac_arm64 (push) Canceled after 0s
Build & Push Docker Images / Build Docker Image for linux/386 (push) Canceled after 0s
Build & Push Docker Images / Build Docker Image for linux/amd64 (push) Canceled after 0s
Build & Push Docker Images / Build Docker Image for linux/arm/v6 (push) Canceled after 0s
build / linux (push) Canceled after 0s
build / go1.26 (push) Canceled after 0s
build / linux_386 (push) Canceled after 0s
build / lint (push) Canceled after 0s
build / android-all (push) Canceled after 0s
Build & Push Docker Images / Build Docker Image for linux/arm/v7 (push) Canceled after 0s
Build & Push Docker Images / Build Docker Image for linux/arm64 (push) Canceled after 0s
Build & Push Docker Images / Merge & Push Final Docker Image (push) Canceled after 0s
bisync: hard file/byte delete caps and dual-boot session-name
--max-delete-files and --max-delete-size are independent of the
percent cap. --session-name shares listings/locks across OS path strings.
2026-09-10 01:03:08 +02:00

31 lines
1.1 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package bisync
import (
"fmt"
"github.com/rclone/rclone/fs"
)
// deleteBudgetExceeded reports whether a proposed delete set trips percent,
// absolute file-count, or byte caps. Percent is opt.MaxDelete (0100).
// File/byte caps are inactive when <= 0. Force bypasses all caps.
func deleteBudgetExceeded(opt *Options, oldCount, deleted int, deletedBytes int64) (bool, string) {
if opt == nil || opt.Force || deleted <= 0 {
return false, ""
}
if opt.MaxDeleteFiles > 0 && deleted > opt.MaxDeleteFiles {
return true, fmt.Sprintf("too many deletes (>%d files, %d of %d)", opt.MaxDeleteFiles, deleted, oldCount)
}
if int64(opt.MaxDeleteSize) > 0 && deletedBytes > int64(opt.MaxDeleteSize) {
return true, fmt.Sprintf("too many deletes by size (>%v, %v of listing)", opt.MaxDeleteSize, fs.SizeSuffix(deletedBytes))
}
if opt.MaxDelete >= 0 && oldCount > 0 {
maxRatio := float64(opt.MaxDelete) / 100.0
curRatio := float64(deleted) / float64(oldCount)
if curRatio > maxRatio {
return true, fmt.Sprintf("too many deletes (>%d%%, %d of %d)", opt.MaxDelete, deleted, oldCount)
}
}
return false, ""
}