summaryrefslogtreecommitdiffstats
path: root/libimagstore
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2016-05-28 10:35:42 +0200
committerMatthias Beyer <mail@beyermatthias.de>2016-05-28 10:35:42 +0200
commita6200b67c0100dfc4587b8d06e4cb31bc63739cf (patch)
tree6b8ef67143235e98fb29cb03329d008c6a4d1961 /libimagstore
parent3e4b33961535eb30da96a236803e26a584bc39cb (diff)
parent19aec6327f1a34e6c4c5b874a2d5197611f6ea15 (diff)
Merge pull request #446 from matthiasbeyer/libimagstore/fix-get
Fix Store::get()
Diffstat (limited to 'libimagstore')
-rw-r--r--libimagstore/src/store.rs36
1 files changed, 5 insertions, 31 deletions
diff --git a/libimagstore/src/store.rs b/libimagstore/src/store.rs
index c3962f11..820384e4 100644
--- a/libimagstore/src/store.rs
+++ b/libimagstore/src/store.rs
@@ -355,38 +355,12 @@ impl Store {
/// Get an entry from the store if it exists.
///
/// This executes the {pre,post}_retrieve_aspects hooks.
- pub fn get<'a, S: IntoStoreId>(&'a self, id: S) -> Result<Option<FileLockEntry<'a>>>
- {
- let id = self.storify_id(id.into_storeid());
- if let Err(e) = self.execute_hooks_for_id(self.pre_retrieve_aspects.clone(), &id) {
- return Err(e);
- }
-
- let mut entries = match self.entries.write() {
- // Loosing the error here
- Err(_) => return Err(SE::new(SEK::LockPoisoned, None)),
- Ok(e) => e,
- };
-
- let mut se = match entries.get_mut(&id) {
- Some(e) => e,
- None => return Ok(None),
- };
-
- let entry = match se.get_entry() {
- Ok(e) => e,
- Err(e) => return Err(e),
- };
-
- se.status = StoreEntryStatus::Borrowed;
-
- let mut fle = FileLockEntry::new(self, entry, id);
-
- if let Err(e) = self.execute_hooks_for_mut_file(self.post_retrieve_aspects.clone(), &mut fle) {
- Err(SE::new(SEK::HookExecutionError, Some(Box::new(e))))
- } else {
- Ok(Some(fle))
+ pub fn get<'a, S: IntoStoreId + Clone>(&'a self, id: S) -> Result<Option<FileLockEntry<'a>>> {
+ if !self.storify_id(id.clone().into_storeid()).exists() {
+ debug!("Does not exist: {:?}", id.clone().into_storeid());
+ return Ok(None);
}
+ self.retrieve(id).map(Some)
}
/// Same as `Store::get()` but also tries older versions of the entry, returning an iterator