diff options
author | Matthias Beyer <mail@beyermatthias.de> | 2016-05-28 10:35:42 +0200 |
---|---|---|
committer | Matthias Beyer <mail@beyermatthias.de> | 2016-05-28 10:35:42 +0200 |
commit | a6200b67c0100dfc4587b8d06e4cb31bc63739cf (patch) | |
tree | 6b8ef67143235e98fb29cb03329d008c6a4d1961 /libimagstore | |
parent | 3e4b33961535eb30da96a236803e26a584bc39cb (diff) | |
parent | 19aec6327f1a34e6c4c5b874a2d5197611f6ea15 (diff) |
Merge pull request #446 from matthiasbeyer/libimagstore/fix-get
Fix Store::get()
Diffstat (limited to 'libimagstore')
-rw-r--r-- | libimagstore/src/store.rs | 36 |
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 |