From 2b01a225076586a93d3b09761709fc0e5927445a Mon Sep 17 00:00:00 2001 From: Dietmar Maurer Date: Mon, 4 Mar 2019 18:20:57 +0100 Subject: [PATCH] src/backup/datastore.rs: add helper to sort backup lists --- src/api2/admin/datastore.rs | 10 +++++----- src/backup/datastore.rs | 10 ++++++++++ 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/api2/admin/datastore.rs b/src/api2/admin/datastore.rs index f071f98c..1b313763 100644 --- a/src/api2/admin/datastore.rs +++ b/src/api2/admin/datastore.rs @@ -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 = 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)?; diff --git a/src/backup/datastore.rs b/src/backup/datastore.rs index e8ac9380..81e2f226 100644 --- a/src/backup/datastore.rs +++ b/src/backup/datastore.rs @@ -131,6 +131,16 @@ pub struct BackupInfo { pub files: Vec, } +impl BackupInfo { + + pub fn sort_list(list: &mut Vec, 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)") }