From 66ad63bac23359b8ede822496f68ebde843cf988 Mon Sep 17 00:00:00 2001 From: Stefan Sterz Date: Thu, 5 May 2022 15:52:51 +0200 Subject: [PATCH] fix #4001: datastore/catalog: add number of files to directory entry When listing the content of a catalog, add the number of files contained in the directory as its size. Also removes redundant code, the `mtime` and the `size` of a file is already set when creating the archive entry, but we naturally need to override the size now for directories. Signed-off-by: Stefan Sterz Signed-off-by: Thomas Lamprecht --- 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 CatalogReader { 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, /// The file "last modified" time stamp, if entry_type is 'f' (file)