Merge pull request #248 from matthiasbeyer/libimagstore/retrieve-for-module
Add implementation for Store::retrieve_for_module()
This commit is contained in:
commit
9a4c414a7b
2 changed files with 18 additions and 2 deletions
|
@ -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",
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue