From 9c68f0377f6b9b5ff27fe9ad2bb47206b6e5dd99 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Fri, 7 May 2021 19:35:33 +0100 Subject: [PATCH] Revert "libraries: Prepare for multiple libraries with the same name" We're going to always prepare things on loading, so we don't need this. This reverts commit 5148d6ae3d2bedffcc35e7d0528d81fe0f8dbffe. --- daemon/cmdlistener.rs | 7 ++----- src/bin/otterlib.rs | 11 +++++------ src/shapelib.rs | 18 +++++++----------- 3 files changed, 14 insertions(+), 22 deletions(-) diff --git a/daemon/cmdlistener.rs b/daemon/cmdlistener.rs index 31c5ae97..231bf66d 100644 --- a/daemon/cmdlistener.rs +++ b/daemon/cmdlistener.rs @@ -308,11 +308,8 @@ fn execute_and_respond(cs: &mut CommandStreamData, cmd: MgmtCommand, } MC::LibraryListByGlob { glob: spec } => { - let libs = shapelib::lib_name_lookup(&spec.lib)?; - let mut results: Vec = default(); - for lib in &*libs { - results.extend(lib.list_glob(&spec.item)?); - } + let lib = shapelib::libs_lookup(&spec.lib)?; + let results = lib.list_glob(&spec.item)?; MR::LibraryItems(results) } diff --git a/src/bin/otterlib.rs b/src/bin/otterlib.rs index bcb325a6..062ef619 100644 --- a/src/bin/otterlib.rs +++ b/src/bin/otterlib.rs @@ -232,12 +232,11 @@ fn main() { load(&vec![tlibs.clone()])?; } let mut items: Vec = default(); - for lib in lib_name_list() { - for contents in &*lib_name_lookup(&lib)? { - for pat in opts.items.split(SPLIT) { - for item in contents.list_glob(pat)? { - items.push((lib.clone(), item)) - } + for lib in libs_list() { + let contents = libs_lookup(&lib)?; + for pat in opts.items.split(SPLIT) { + for item in contents.list_glob(pat)? { + items.push((lib.clone(), item)) } } } diff --git a/src/shapelib.rs b/src/shapelib.rs index 0e7a550e..145bd5b8 100644 --- a/src/shapelib.rs +++ b/src/shapelib.rs @@ -17,7 +17,7 @@ use parking_lot::{MappedRwLockReadGuard, RwLockReadGuard}; #[derive(Default)] pub struct Registry { - libs: HashMap>, + libs: HashMap, } #[derive(Debug)] @@ -316,7 +316,7 @@ impl OccultedPieceTrait for Item { static SHAPELIBS: RwLock> = const_rwlock(None); -pub fn lib_name_list() -> Vec { +pub fn libs_list() -> Vec { let reg = SHAPELIBS.read(); reg.as_ref().map( |reg| reg.libs.keys().cloned().collect() @@ -324,13 +324,12 @@ pub fn lib_name_list() -> Vec { } #[throws(SpecError)] -pub fn lib_name_lookup(libname: &str) - -> MappedRwLockReadGuard<'static, [Contents]> { +pub fn libs_lookup(libname: &str) + -> MappedRwLockReadGuard<'static, Contents> { let reg = SHAPELIBS.read(); RwLockReadGuard::try_map( reg, |reg: &Option| -> Option<_> { (|| Some({ reg.as_ref()?.libs.get(libname)? - .as_slice() }))() }) .map_err(|_| SpE::LibraryNotFound) @@ -352,10 +351,8 @@ impl From for PieceSpecLoaded { impl ItemSpec { #[throws(SpecError)] pub fn find_load(&self, pcaliases: &PieceAliases) -> ItemSpecLoaded { - let libs = lib_name_lookup(&self.lib)?; - let (lib, idata) = libs.iter().rev().find_map( - |lib| Some((lib, lib.items.get(&self.item)?)) - ) + let lib = libs_lookup(&self.lib)?; + let idata = lib.items.get(&self.item) .ok_or(SpE::LibraryItemNotFound(self.clone()))?; lib.load1(idata, &self.lib, &self.item, pcaliases)? } @@ -726,8 +723,7 @@ pub fn load1(l: &Explicit1) { SHAPELIBS.write() .get_or_insert_with(default) .libs - .entry(l.name.clone()).or_default() - .push(data); + .insert(l.name.clone(), data); info!("loaded {} shapes in library {:?} from {:?} and {:?}", count, &l.name, &l.catalogue, &l.dirname); } -- 2.30.2