[pbs-devel] [PATCH proxmox-backup v1 1/2] fix #4001: datastore/catalog: add number of files to directory entry
Thomas Lamprecht
t.lamprecht at proxmox.com
Thu May 12 17:27:20 CEST 2022
Am 5/5/22 um 15:52 schrieb Stefan Sterz:
> when listing the content of a catalog, add the number of files
> contained in the directory as its size. also removes redundant code,
> the size of a file is already set when creating the archive entry.
>
did you mean to write "the mtime of a file ..." as, we obviously need to
set the size differently to get the number of children, but you dropped
setting the mtime, which is OK as ArchiveEntry::new does that already,
or did I overlooked something?
> Signed-off-by: Stefan Sterz <s.sterz at proxmox.com>
> ---
> this requires patch two from the widget toolkit part of this patch to
> be applied already. otherwise the formatting and sorting of the folder
> "size" will be wrong.
ok so no hard depends.
>
> pbs-datastore/src/catalog.rs | 10 ++++++----
> 1 file changed, 6 insertions(+), 4 deletions(-)
>
> diff --git a/pbs-datastore/src/catalog.rs b/pbs-datastore/src/catalog.rs
> index c07b71a6..6cb8aeb4 100644
> --- a/pbs-datastore/src/catalog.rs
> +++ b/pbs-datastore/src/catalog.rs
> @@ -706,10 +706,11 @@ impl<R: Read + Seek> CatalogReader<R> {
> components.push(b'/');
> components.extend(&direntry.name);
> let mut entry = ArchiveEntry::new(&components, Some(&direntry.attr));
> - if let DirEntryAttribute::File { size, mtime } = direntry.attr {
> - entry.size = size.into();
> - entry.mtime = mtime.into();
> +
> + if let DirEntryAttribute::Directory { start: _ } = direntry.attr {
> + entry.size = Some(u64::try_from(self.read_dir(&direntry)?.len())?);
> }
> +
> res.push(entry);
> }
>
> @@ -911,7 +912,8 @@ pub struct ArchiveEntry {
> pub entry_type: String,
> /// Is this entry a leaf node, or does it have children (i.e. a directory)?
> pub leaf: bool,
> - /// The file size, if entry_type is 'f' (file)
> + /// The file size, if entry_type is 'f' (file) or the amount of files in a
> + /// directory if entry_type is 'd' (directory)
> #[serde(skip_serializing_if = "Option::is_none")]
> pub size: Option<u64>,
> /// The file "last modified" time stamp, if entry_type is 'f' (file)
More information about the pbs-devel
mailing list