mirror of https://github.com/dswd/zvault
Mounting folders of backups (closes #5)
This commit is contained in:
parent
8a57476da3
commit
05e710a938
|
@ -504,15 +504,19 @@ pub fn run() -> Result<(), ErrorCode> {
|
||||||
Arguments::Mount{repo_path, backup_name, inode, mount_point} => {
|
Arguments::Mount{repo_path, backup_name, inode, mount_point} => {
|
||||||
let mut repo = try!(open_repository(&repo_path));
|
let mut repo = try!(open_repository(&repo_path));
|
||||||
let fs = if let Some(backup_name) = backup_name {
|
let fs = if let Some(backup_name) = backup_name {
|
||||||
let backup = try!(get_backup(&repo, &backup_name));
|
if repo.layout.backups_path().join(&backup_name).is_dir() {
|
||||||
if let Some(inode) = inode {
|
checked!(FuseFilesystem::from_repository(&mut repo, Some(&backup_name)), "create fuse filesystem", ErrorCode::FuseMount)
|
||||||
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 {
|
} 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 {
|
} 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!("Mounting the filesystem...");
|
||||||
info!("Please unmount the filesystem via 'fusermount -u {}' when done.", mount_point);
|
info!("Please unmount the filesystem via 'fusermount -u {}' when done.", mount_point);
|
||||||
|
|
|
@ -153,9 +153,13 @@ impl<'a> FuseFilesystem<'a> {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn from_repository(repository: &'a mut Repository) -> Result<Self, RepositoryError> {
|
pub fn from_repository(repository: &'a mut Repository, path: Option<&str>) -> Result<Self, RepositoryError> {
|
||||||
let mut backups = vec![];
|
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));
|
let inode = try!(repository.get_inode(&backup.root));
|
||||||
backups.push((name, backup, inode));
|
backups.push((name, backup, inode));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue