]> git.proxmox.com Git - proxmox-backup.git/commitdiff
src/backup/datastore.rs: add helper to sort backup lists
authorDietmar Maurer <dietmar@proxmox.com>
Mon, 4 Mar 2019 17:20:57 +0000 (18:20 +0100)
committerDietmar Maurer <dietmar@proxmox.com>
Mon, 4 Mar 2019 17:20:57 +0000 (18:20 +0100)
src/api2/admin/datastore.rs
src/backup/datastore.rs

index f071f98c26fbfda6869149bd0fa4f31b56b91301..1b313763b04c5866ae4bb5d2f1108bb3260ad9d3 100644 (file)
@@ -70,7 +70,7 @@ fn list_groups(
 
     for (_group_id, mut list) in group_hash {
 
-        list.sort_unstable_by(|a, b| b.backup_dir.backup_time().cmp(&a.backup_dir.backup_time())); // new backups first
+        BackupInfo::sort_list(&mut list, false);
 
         let info = &list[0];
         let group = info.backup_dir.group();
@@ -130,7 +130,7 @@ fn list_snapshots (
     let group_snapshots = match group_hash.get_mut(&group_id) {
         Some(data) => {
             // new backups first
-            data.sort_unstable_by(|a, b| b.backup_dir.backup_time().cmp(&a.backup_dir.backup_time()));
+            BackupInfo::sort_list(data, false);
             data
         }
         None => bail!("Backup group '{}' does not exists.", group_id),
@@ -173,7 +173,7 @@ fn prune(
 
         let mut mark = HashSet::new();
 
-        list.sort_unstable_by(|a, b| b.backup_dir.backup_time().cmp(&a.backup_dir.backup_time())); // new backups first
+        BackupInfo::sort_list(&mut list, false);
 
         if let Some(keep_last) = param["keep-last"].as_u64() {
             list.iter().take(keep_last as usize).for_each(|info| {
@@ -205,10 +205,10 @@ fn prune(
             });
         }
 
-        let mut remove_list: Vec<&BackupInfo> = list.iter()
+        let mut remove_list: Vec<BackupInfo> = list.into_iter()
             .filter(|info| !mark.contains(&info.backup_dir.relative_path())).collect();
 
-        remove_list.sort_unstable_by(|a, b| a.backup_dir.backup_time().cmp(&b.backup_dir.backup_time())); // oldest backups first
+        BackupInfo::sort_list(&mut remove_list, true);
 
         for info in remove_list {
             datastore.remove_backup_dir(&info.backup_dir)?;
index e8ac9380d61f80893fc879349bbdec2c9976d862..81e2f226a20a855c342f606e8e8d3d9a17298324 100644 (file)
@@ -131,6 +131,16 @@ pub struct BackupInfo {
     pub files: Vec<String>,
 }
 
+impl BackupInfo {
+
+    pub fn sort_list(list: &mut Vec<BackupInfo>, ascendending: bool) {
+        if ascendending { // oldest first
+            list.sort_unstable_by(|a, b| a.backup_dir.backup_time.cmp(&b.backup_dir.backup_time));
+        } else { // newest first
+            list.sort_unstable_by(|a, b| b.backup_dir.backup_time.cmp(&a.backup_dir.backup_time));
+        }
+    }
+}
 
 macro_rules! BACKUP_ID_RE { () => (r"[A-Za-z0-9][A-Za-z0-9_-]+") }
 macro_rules! BACKUP_TYPE_RE { () => (r"(?:host|vm|ct)") }