Add implementation for Store::retrieve_for_module()

This commit is contained in:
Matthias Beyer 2016-03-13 14:32:48 +01:00
parent 98df49b6eb
commit fe0849f8eb
2 changed files with 15 additions and 2 deletions

View file

@ -33,6 +33,7 @@ pub enum StoreErrorKind {
PreHookExecuteError,
PostHookExecuteError,
StorePathLacksVersion,
GlobError,
// maybe more
}
@ -62,6 +63,7 @@ fn store_error_type_as_str(e: &StoreErrorKind) -> &'static str {
&StoreErrorKind::PreHookExecuteError => "Pre-Hook execution error",
&StoreErrorKind::PostHookExecuteError => "Post-Hook execution error",
&StoreErrorKind::StorePathLacksVersion => "The supplied store path has no version part",
&StoreErrorKind::GlobError => "glob() error",
}
}

View file

@ -17,6 +17,7 @@ use toml::{Table, Value};
use regex::Regex;
use crossbeam;
use crossbeam::ScopedJoinHandle;
use glob::glob;
use error::{ParserErrorKind, ParserError};
use error::{StoreError, StoreErrorKind};
@ -307,8 +308,18 @@ impl Store {
}
/// Iterate over all StoreIds for one module name
pub fn retrieve_for_module(&self, mod_name: &str) -> StoreIdIterator {
unimplemented!();
pub fn retrieve_for_module(&self, mod_name: &str) -> Result<StoreIdIterator> {
let mut path = self.path().clone();
path.push(mod_name);
if let Some(path) = path.to_str() {
let path = [ path, "/*" ].join("");
debug!("glob()ing with '{}'", path);
glob(&path[..]).map(StoreIdIterator::new)
.map_err(|e| StoreError::new(StoreErrorKind::GlobError, Some(Box::new(e))))
} else {
unimplemented!()
}
}
/// Return the `FileLockEntry` and write to disk