diff options
Diffstat (limited to 'ripple/fossil/src/bin/mount.rs')
-rw-r--r-- | ripple/fossil/src/bin/mount.rs | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/ripple/fossil/src/bin/mount.rs b/ripple/fossil/src/bin/mount.rs index 846e543..9e0e8aa 100644 --- a/ripple/fossil/src/bin/mount.rs +++ b/ripple/fossil/src/bin/mount.rs @@ -132,7 +132,7 @@ impl Filesystem { (inode, &self.roots[&inode]) } hash_map::Entry::Vacant(e) => { - let root = memtree::load_root(&self.store, ident); + let root = memtree::load_root(&self.store, ident)?; let inode = self.inode_tail; self.inode_tail += inode + 1 + root.size() as u64; @@ -241,7 +241,10 @@ impl fuser::Filesystem for Filesystem { fn open(&mut self, _req: &fuser::Request<'_>, ino: u64, _flags: i32, reply: fuser::ReplyOpen) { match self.find(ino) { Some(memtree::Node::File(f)) => { - let contents = self.store.open_blob(f.ident); + let contents = self + .store + .open_blob(f.ident) + .expect("file points at missing blob"); let fh = Box::new(Handle::File { contents: RefCell::new(contents), }); @@ -823,9 +826,9 @@ mod memtree { } } - pub fn load_root(store: &fossil::Store, ident: Digest) -> Directory { + pub fn load_root(store: &fossil::Store, ident: Digest) -> Option<Directory> { let pb = { - let bytes = store.read_blob(ident); + let bytes = store.read_blob(ident)?; store::Directory::decode(&*bytes).unwrap() }; let mut children = BTreeMap::new(); @@ -836,7 +839,7 @@ mod memtree { size: _, } in pb.directories { - let child = load_root(store, fossil::digest_from_bytes(&r#ref)); + let child = load_root(store, fossil::digest_from_bytes(&r#ref))?; children.insert(name, NodeBuf::Directory(child)); } @@ -859,7 +862,7 @@ mod memtree { children.insert(name, NodeBuf::Link { target }); } - Directory::from_children(children) + Some(Directory::from_children(children)) } impl Directory { |