fix: retain only recent WebDAV backups

This commit is contained in:
2026-09-15 06:49:56 +08:00
parent e1e0bda7c9
commit 640ae4743f
+31
View File
@@ -78,10 +78,38 @@ func RunCloudBackup(c *gin.Context) {
// 清理本地旧备份,保留最近5份
config.CleanOldBackups(5)
if err := cleanOldRemoteBackups(client, 5); err != nil {
log.Printf("云端旧备份清理失败: %v", err)
}
c.JSON(http.StatusOK, Response{Success: true, Message: "备份成功: " + remoteName})
}
// cleanOldRemoteBackups 清理 WebDAV 上的旧备份,仅保留最近 keep 份。
func cleanOldRemoteBackups(client *config.WebDAVClient, keep int) error {
if keep < 1 {
keep = 1
}
files, err := client.List()
if err != nil {
return err
}
if len(files) <= keep {
return nil
}
var firstErr error
for _, file := range files[keep:] {
if err := client.Delete(file.Name); err != nil {
if firstErr == nil {
firstErr = fmt.Errorf("删除 %s: %w", file.Name, err)
}
continue
}
log.Printf("已清理云端旧备份: %s", file.Name)
}
return firstErr
}
// ListCloudBackups 列出云端备份
func ListCloudBackups(c *gin.Context) {
client, err := getWebDAVClient()
@@ -217,5 +245,8 @@ func doAutoBackup() {
}
config.CleanOldBackups(5)
if err := cleanOldRemoteBackups(client, 5); err != nil {
log.Printf("云端旧备份清理失败: %v", err)
}
log.Printf("自动备份成功: %s", remoteName)
}