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
--max-delete-files and --max-delete-size are independent of the percent cap. --session-name shares listings/locks across OS path strings.
31 lines
1.1 KiB
Go
31 lines
1.1 KiB
Go
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 (0–100).
|
||
// 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, ""
|
||
}
|