feat: improve list view
parent
5159bfdddd
commit
a4a03ca4c5
|
@ -9,7 +9,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
||||||
* `backup` CLI command
|
|
||||||
* Incremental backups
|
* Incremental backups
|
||||||
* Chain length describes how many incremental backups to create from the
|
* Chain length describes how many incremental backups to create from the
|
||||||
same full backup
|
same full backup
|
||||||
|
@ -18,6 +17,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||||
* Backup layers
|
* Backup layers
|
||||||
* Store multiple chains of backups in parallel, configuring each with
|
* Store multiple chains of backups in parallel, configuring each with
|
||||||
different parameters (son-father-grandfather principle)
|
different parameters (son-father-grandfather principle)
|
||||||
|
* CLI commands for creating, restoring & listing backups
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use std::collections::{HashMap, HashSet};
|
use std::collections::{HashMap, HashSet};
|
||||||
|
use std::fmt;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
|
|
||||||
/// Represents the changes relative to the previous backup
|
/// Represents the changes relative to the previous backup
|
||||||
|
@ -74,3 +75,12 @@ impl Delta {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl fmt::Display for Delta {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
|
let added_count: usize = self.added.values().map(|s| s.len()).sum();
|
||||||
|
let removed_count: usize = self.removed.values().map(|s| s.len()).sum();
|
||||||
|
|
||||||
|
write!(f, "+{}-{}", added_count, removed_count)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -14,6 +14,7 @@ use flate2::Compression;
|
||||||
use path::PathExt;
|
use path::PathExt;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use std::collections::{HashMap, HashSet};
|
use std::collections::{HashMap, HashSet};
|
||||||
|
use std::fmt;
|
||||||
use std::fs::File;
|
use std::fs::File;
|
||||||
use std::io;
|
use std::io;
|
||||||
use std::path::{Path, PathBuf};
|
use std::path::{Path, PathBuf};
|
||||||
|
@ -205,3 +206,20 @@ impl<T: Clone> Backup<T> {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<T: Clone> fmt::Display for Backup<T> {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
|
let letter = match self.type_ {
|
||||||
|
BackupType::Full => 'F',
|
||||||
|
BackupType::Incremental => 'I',
|
||||||
|
};
|
||||||
|
|
||||||
|
write!(
|
||||||
|
f,
|
||||||
|
"{} ({}, {})",
|
||||||
|
self.start_time.format(Backup::FILENAME_FORMAT),
|
||||||
|
letter,
|
||||||
|
self.delta
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -136,11 +136,10 @@ impl BackupListArgs {
|
||||||
|
|
||||||
for chain in manager.chains().iter().filter(|c| !c.is_empty()) {
|
for chain in manager.chains().iter().filter(|c| !c.is_empty()) {
|
||||||
let mut iter = chain.iter();
|
let mut iter = chain.iter();
|
||||||
let first = iter.next().unwrap();
|
println!(" {}", iter.next().unwrap());
|
||||||
println!(" {}", first.start_time.format(Backup::FILENAME_FORMAT));
|
|
||||||
|
|
||||||
for backup in iter {
|
for backup in iter {
|
||||||
println!(" {}", backup.start_time.format(Backup::FILENAME_FORMAT));
|
println!(" {}", backup);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue