diff options
Diffstat (limited to 'src/filestore/util.rs')
-rw-r--r-- | src/filestore/util.rs | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/src/filestore/util.rs b/src/filestore/util.rs index 4e0b85c..c32dd5d 100644 --- a/src/filestore/util.rs +++ b/src/filestore/util.rs @@ -3,7 +3,6 @@ use std::collections::BTreeMap; use std::path::Path; -use std::path::PathBuf; use anyhow::Error; use anyhow::Result; @@ -24,7 +23,7 @@ use crate::filestore::path::*; /// It can then be wrapped into the actual interface of this module with specialized functionality. pub struct FileStoreImpl { pub(in crate::filestore) root: StoreRoot, - store: BTreeMap<PathBuf, Artifact>, + store: BTreeMap<ArtifactPath, Artifact>, } impl FileStoreImpl { @@ -41,9 +40,9 @@ impl FileStoreImpl { .and_then_ok(|f| { progress.tick(); let p = root.stripped_from(f.path())?; - Artifact::load(&root, p).map(|a| (f.path().to_path_buf(), a)) + Artifact::load(&root, p.clone()).map(|a| (p, a)) }) - .collect::<Result<BTreeMap<PathBuf, Artifact>>>()?; + .collect::<Result<BTreeMap<ArtifactPath, Artifact>>>()?; Ok(FileStoreImpl { root, store }) } else { @@ -63,15 +62,15 @@ impl FileStoreImpl { self.store.values() } - pub (in crate::filestore) fn load_from_path(&mut self, pb: &Path) -> Result<&Artifact> { - if !self.is_sub_path(pb)? { + pub (in crate::filestore) fn load_from_path(&mut self, pb: &FullArtifactPath) -> Result<&Artifact> { + if !self.is_sub_path(pb.as_path())? { Err(anyhow!("Not a sub-path of {}: {}", self.root.display(), pb.display())) } else { - if self.store.get(pb).is_some() { + let art_path = self.root.stripped_from(pb.as_path())?; + if self.store.get(&art_path).is_some() { Err(anyhow!("Entry exists: {}", pb.display())) } else { - let p = self.root.stripped_from(pb)?; - Ok(self.store.entry(pb.to_path_buf()).or_insert(Artifact::load(&self.root, p)?)) + Ok(self.store.entry(art_path.clone()).or_insert(Artifact::load(&self.root, art_path)?)) } } } |