From 05e710a93846a70120a8cf3220b6067e3368d843 Mon Sep 17 00:00:00 2001 From: Dennis Schwerdel Date: Thu, 13 Apr 2017 14:24:58 +0200 Subject: [PATCH] Mounting folders of backups (closes #5) --- src/cli/mod.rs | 16 ++++++++++------ src/mount.rs | 8 ++++++-- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/cli/mod.rs b/src/cli/mod.rs index 634c125..1f98dae 100644 --- a/src/cli/mod.rs +++ b/src/cli/mod.rs @@ -504,15 +504,19 @@ pub fn run() -> Result<(), ErrorCode> { Arguments::Mount{repo_path, backup_name, inode, mount_point} => { let mut repo = try!(open_repository(&repo_path)); let fs = if let Some(backup_name) = backup_name { - let backup = try!(get_backup(&repo, &backup_name)); - if let Some(inode) = inode { - let inode = checked!(repo.get_backup_inode(&backup, inode), "load subpath inode", ErrorCode::LoadInode); - checked!(FuseFilesystem::from_inode(&mut repo, backup, inode), "create fuse filesystem", ErrorCode::FuseMount) + if repo.layout.backups_path().join(&backup_name).is_dir() { + checked!(FuseFilesystem::from_repository(&mut repo, Some(&backup_name)), "create fuse filesystem", ErrorCode::FuseMount) } else { - checked!(FuseFilesystem::from_backup(&mut repo, backup), "create fuse filesystem", ErrorCode::FuseMount) + let backup = try!(get_backup(&repo, &backup_name)); + if let Some(inode) = inode { + let inode = checked!(repo.get_backup_inode(&backup, inode), "load subpath inode", ErrorCode::LoadInode); + checked!(FuseFilesystem::from_inode(&mut repo, backup, inode), "create fuse filesystem", ErrorCode::FuseMount) + } else { + checked!(FuseFilesystem::from_backup(&mut repo, backup), "create fuse filesystem", ErrorCode::FuseMount) + } } } else { - checked!(FuseFilesystem::from_repository(&mut repo), "create fuse filesystem", ErrorCode::FuseMount) + checked!(FuseFilesystem::from_repository(&mut repo, None), "create fuse filesystem", ErrorCode::FuseMount) }; info!("Mounting the filesystem..."); info!("Please unmount the filesystem via 'fusermount -u {}' when done.", mount_point); diff --git a/src/mount.rs b/src/mount.rs index 7204bd6..b0e73ae 100644 --- a/src/mount.rs +++ b/src/mount.rs @@ -153,9 +153,13 @@ impl<'a> FuseFilesystem<'a> { }) } - pub fn from_repository(repository: &'a mut Repository) -> Result { + pub fn from_repository(repository: &'a mut Repository, path: Option<&str>) -> Result { let mut backups = vec![]; - for (name, backup) in try!(repository.get_all_backups()) { + let backup_map = match path { + Some(path) => try!(repository.get_backups(path)), + None => try!(repository.get_all_backups()) + }; + for (name, backup) in backup_map { let inode = try!(repository.get_inode(&backup.root)); backups.push((name, backup, inode)); }