Merge pull request #248 from matthiasbeyer/libimagstore/retrieve-for-module

Add implementation for Store::retrieve_for_module()
This commit is contained in:
Matthias Beyer 2016-03-19 15:37:49 +01:00
commit 9a4c414a7b
2 changed files with 18 additions and 2 deletions

View file

@ -33,6 +33,8 @@ pub enum StoreErrorKind {
PreHookExecuteError,
PostHookExecuteError,
StorePathLacksVersion,
GlobError,
EncodingError,
// maybe more
}
@ -62,6 +64,8 @@ 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",
&StoreErrorKind::EncodingError => "Encoding 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,19 @@ 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 {
Err(StoreError::new(StoreErrorKind::EncodingError, None))
}
}
/// Return the `FileLockEntry` and write to disk