From a1f269be8f40970af6f6563308b340e408853925 Mon Sep 17 00:00:00 2001 From: Dennis Schwerdel Date: Wed, 12 Apr 2017 15:08:47 +0200 Subject: [PATCH] Reading user/group names from imported tar files (re #2) --- src/repository/tarfile.rs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/repository/tarfile.rs b/src/repository/tarfile.rs index d3dfcb2..cd0989f 100644 --- a/src/repository/tarfile.rs +++ b/src/repository/tarfile.rs @@ -36,8 +36,6 @@ fn inode_from_entry(entry: &mut tar::Entry) -> Result(&mut self, entry: &mut tar::Entry) -> Result { let mut inode = try!(inode_from_entry(entry)); @@ -59,7 +57,7 @@ impl Repository { Ok(inode) } - fn import_tarfile_as_inode>(&mut self, tarfile: P, failed_paths: &mut Vec) -> Result<(Inode, ChunkList), RepositoryError> { + fn import_tarfile_as_inode>(&mut self, backup: &mut Backup, tarfile: P, failed_paths: &mut Vec) -> Result<(Inode, ChunkList), RepositoryError> { let mut tarfile = tar::Archive::new(try!(File::open(tarfile))); // Step 1: create inodes for all entries let mut inodes = HashMap::)>::new(); @@ -84,6 +82,12 @@ impl Repository { children.insert(inode.name.clone()); } } + if let Ok(Some(name)) = entry.header().username() { + backup.user_names.insert(inode.user, name.to_string()); + } + if let Ok(Some(name)) = entry.header().groupname() { + backup.group_names.insert(inode.group, name.to_string()); + } inodes.insert(path, (inode, HashSet::new())); }, Err(RepositoryError::Inode(_)) | Err(RepositoryError::Chunker(_)) | Err(RepositoryError::Io(_)) => { @@ -167,7 +171,7 @@ impl Repository { let info_before = self.info(); let start = Local::now(); let mut failed_paths = vec![]; - let (root_inode, chunks) = try!(self.import_tarfile_as_inode(tarfile, &mut failed_paths)); + let (root_inode, chunks) = try!(self.import_tarfile_as_inode(&mut backup, tarfile, &mut failed_paths)); backup.root = chunks; try!(self.flush()); let elapsed = Local::now().signed_duration_since(start);