diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-06-10 02:49:06 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-06-10 02:49:28 +0900 |
| commit | 5d3232a80be4b989e89cc7ae4e3642cc5acae030 (patch) | |
| tree | 06597252809c209e69400e57494b3376158ce0f9 /crates/shirabe/src | |
| parent | 2d474e91e49c7343d28198eff2b5bbbed9afbcee (diff) | |
| download | php-shirabe-5d3232a80be4b989e89cc7ae4e3642cc5acae030.tar.gz php-shirabe-5d3232a80be4b989e89cc7ae4e3642cc5acae030.tar.zst php-shirabe-5d3232a80be4b989e89cc7ae4e3642cc5acae030.zip | |
feat(repository): resolve repository phase-b TODOs
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe/src')
8 files changed, 333 insertions, 120 deletions
diff --git a/crates/shirabe/src/command/show_command.rs b/crates/shirabe/src/command/show_command.rs index 3761b09..7cf305d 100644 --- a/crates/shirabe/src/command/show_command.rs +++ b/crates/shirabe/src/command/show_command.rs @@ -356,17 +356,18 @@ impl ShowCommand { let lr = locker.get_locked_repository( input.borrow().get_option("no-dev").as_bool() != Some(true), )?; - let lr_handle: RepositoryInterfaceHandle = lr.into(); if input.borrow().get_option("self").as_bool() == Some(true) { - // TODO(phase-b): LockArrayRepository needs add_package via WritableRepositoryInterface; - // skipping the insertion here keeps compile clean. - let _ = &lr_handle; + lr.add_package( + crate::package::RootPackageInterfaceHandle::dup(composer_ref.get_package()) + .into(), + )?; } - installed_repo = - RepositoryInterfaceHandle::new(InstalledRepository::new(vec![lr_handle.clone()])); - repos = - RepositoryInterfaceHandle::new(InstalledRepository::new(vec![lr_handle.clone()])); - locked_repo = Some(lr_handle); + let lr_handle: RepositoryInterfaceHandle = lr.into(); + locked_repo = Some(lr_handle.clone()); + let new_repo = + RepositoryInterfaceHandle::new(InstalledRepository::new(vec![lr_handle])); + installed_repo = new_repo.clone(); + repos = new_repo.clone(); } else { // --installed / default case let composer_local_owned; @@ -1542,10 +1543,7 @@ impl ShowCommand { _ => None, // already a ConstraintInterface }; - // TODO(phase-b): DefaultPolicy::new() requires (bool, bool, Option<IndexMap>) — using placeholder values. let policy = DefaultPolicy::new(false, false, None); - let _ = &policy; - // TODO(phase-b): RepositorySet::with_stability("dev") — using new() with placeholder args. let mut repository_set = RepositorySet::new( "dev", IndexMap::new(), @@ -2267,7 +2265,7 @@ impl ShowCommand { for color in self.colors.iter() { let _style = OutputFormatterStyle::new(Some(color.as_str()), None, None); - // TODO(phase-b): OutputInterface::get_formatter returns &OutputFormatter, but + // TODO(phase-c): OutputInterface::get_formatter returns &OutputFormatter, but // set_style requires &mut. Resolution requires interior-mutability refactor of // OutputFormatter wiring across symfony shim. let _ = (output.borrow().get_formatter(), color); @@ -2767,7 +2765,6 @@ impl ShowCommand { ) -> anyhow::Result<std::rc::Rc<std::cell::RefCell<RepositorySet>>> { let composer = crate::command::composer_full(composer); if self.repository_set.is_none() { - // TODO(phase-b): RepositorySet::with_stability_and_flags — using new() placeholder. let mut rs = RepositorySet::new( &composer.get_package().get_minimum_stability(), composer.get_package().get_stability_flags().clone(), diff --git a/crates/shirabe/src/repository/array_repository.rs b/crates/shirabe/src/repository/array_repository.rs index 1bee17b..b7d862d 100644 --- a/crates/shirabe/src/repository/array_repository.rs +++ b/crates/shirabe/src/repository/array_repository.rs @@ -11,7 +11,9 @@ use shirabe_php_shim::{implode, preg_quote, strtolower}; use shirabe_semver::constraint::AnyConstraint; use shirabe_semver::constraint::SimpleConstraint; +use crate::package::AliasPackageHandle; use crate::package::BasePackageHandle; +use crate::package::CompleteAliasPackageHandle; use crate::package::PackageHandle; use crate::package::PackageInterfaceHandle; use crate::package::version::StabilityFilter; @@ -35,7 +37,7 @@ pub struct ArrayRepository { } impl ArrayRepository { - fn get_packages_internal(&self) -> Vec<BasePackageHandle> { + pub(crate) fn get_packages_internal(&self) -> Vec<BasePackageHandle> { if self.packages.borrow().is_none() { self.initialize(); } @@ -111,13 +113,14 @@ impl ArrayRepository { package = alias_pkg.get_alias_of().into(); } - let _ = (&package, &alias, &pretty_alias); - if package.as_complete_package().is_some() { - // TODO(phase-b): construct CompleteAliasPackage/AliasPackage and return as a handle - return todo!("new CompleteAliasPackage(package, alias, pretty_alias)"); + if let Some(complete) = package.as_complete_package() { + CompleteAliasPackageHandle::new(complete, alias, pretty_alias).into() + } else { + let real = package + .as_package() + .expect("non-alias package must be a real Package"); + AliasPackageHandle::new(real, alias, pretty_alias).into() } - - todo!("new AliasPackage(package, alias, pretty_alias)") } /// Removes package from repository. @@ -149,6 +152,10 @@ impl ArrayRepository { pub(crate) fn reset_packages(&self) { *self.packages.borrow_mut() = None; } + + pub(crate) fn is_initialized(&self) -> bool { + self.packages.borrow().is_some() + } } impl RepositoryInterface for ArrayRepository { diff --git a/crates/shirabe/src/repository/filesystem_repository.rs b/crates/shirabe/src/repository/filesystem_repository.rs index 411fa13..57f3c87 100644 --- a/crates/shirabe/src/repository/filesystem_repository.rs +++ b/crates/shirabe/src/repository/filesystem_repository.rs @@ -17,6 +17,7 @@ use crate::config::is_php_integer_key; use crate::installed_versions::InstalledVersions; use crate::installer::InstallationManager; use crate::json::JsonFile; +use crate::package::BasePackageHandle; use crate::package::PackageInterfaceHandle; use crate::package::RootPackageInterfaceHandle; use crate::package::dumper::ArrayDumper; @@ -24,9 +25,12 @@ use crate::package::loader::ArrayLoader; use crate::package::loader::LoaderInterface; use crate::repository::InvalidRepositoryException; use crate::repository::PlatformRepository; +use crate::repository::RepositoryInterface; use crate::repository::WritableArrayRepository; +use crate::repository::{FindPackageConstraint, LoadPackagesResult, ProviderInfo, SearchResult}; use crate::util::Filesystem; use crate::util::Platform; +use shirabe_semver::constraint::AnyConstraint; /// Filesystem repository. #[derive(Debug)] @@ -84,7 +88,14 @@ impl FilesystemRepository { } pub fn get_repo_name(&self) -> String { - format!("file ({})", self.file.get_path()) + self.inner.get_repo_name() + } + + fn ensure_initialized(&mut self) -> Result<()> { + if !self.inner.is_initialized() { + self.initialize()?; + } + Ok(()) } /// Initializes repository (reads file, or remote address). @@ -190,6 +201,27 @@ impl FilesystemRepository { self.initialize() } + pub fn add_package(&mut self, package: PackageInterfaceHandle) -> Result<()> { + self.inner.add_package(package) + } + + pub fn remove_package(&mut self, package: PackageInterfaceHandle) -> Result<()> { + self.inner.remove_package(package) + } + + pub fn get_canonical_packages(&mut self) -> Result<Vec<PackageInterfaceHandle>> { + self.ensure_initialized()?; + Ok(self.inner.get_canonical_packages()) + } + + pub fn set_dev_package_names(&mut self, dev_package_names: Vec<String>) { + self.inner.set_dev_package_names(dev_package_names); + } + + pub fn get_dev_package_names(&self) -> &Vec<String> { + self.inner.get_dev_package_names() + } + /// Writes writable repository. pub fn write( &mut self, @@ -769,6 +801,82 @@ impl FilesystemRepository { } } +impl RepositoryInterface for FilesystemRepository { + fn count(&self) -> Result<usize> { + self.inner.count() + } + + fn has_package(&self, package: PackageInterfaceHandle) -> bool { + self.inner.has_package(package) + } + + fn find_package( + &mut self, + name: &str, + constraint: FindPackageConstraint, + ) -> Result<Option<BasePackageHandle>> { + self.ensure_initialized()?; + self.inner.find_package(name, constraint) + } + + fn find_packages( + &mut self, + name: &str, + constraint: Option<FindPackageConstraint>, + ) -> Result<Vec<BasePackageHandle>> { + self.ensure_initialized()?; + self.inner.find_packages(name, constraint) + } + + fn get_packages(&mut self) -> Result<Vec<BasePackageHandle>> { + self.ensure_initialized()?; + self.inner.get_packages() + } + + fn load_packages( + &mut self, + package_name_map: IndexMap<String, Option<AnyConstraint>>, + acceptable_stabilities: IndexMap<String, i64>, + stability_flags: IndexMap<String, i64>, + already_loaded: IndexMap<String, IndexMap<String, PackageInterfaceHandle>>, + ) -> Result<LoadPackagesResult> { + self.ensure_initialized()?; + self.inner.load_packages( + package_name_map, + acceptable_stabilities, + stability_flags, + already_loaded, + ) + } + + fn search( + &mut self, + query: String, + mode: i64, + r#type: Option<String>, + ) -> Result<Vec<SearchResult>> { + self.ensure_initialized()?; + self.inner.search(query, mode, r#type) + } + + fn get_providers(&mut self, package_name: String) -> Result<IndexMap<String, ProviderInfo>> { + self.ensure_initialized()?; + self.inner.get_providers(package_name) + } + + fn get_repo_name(&self) -> String { + self.inner.get_repo_name() + } + + fn as_any(&self) -> &dyn Any { + self + } + + fn set_self_handle(&self, weak: crate::repository::RepositoryInterfaceWeakHandle) { + self.inner.set_self_handle(weak); + } +} + fn versions_entry<'a>( versions: &'a mut IndexMap<String, PhpMixed>, target: &str, diff --git a/crates/shirabe/src/repository/installed_array_repository.rs b/crates/shirabe/src/repository/installed_array_repository.rs index 487a6da..6eff28f 100644 --- a/crates/shirabe/src/repository/installed_array_repository.rs +++ b/crates/shirabe/src/repository/installed_array_repository.rs @@ -51,94 +51,92 @@ impl WritableRepositoryInterface for InstalledArrayRepository { fn write( &mut self, dev_mode: bool, - installation_manager: &crate::installer::InstallationManager, + installation_manager: &mut crate::installer::InstallationManager, ) -> anyhow::Result<()> { - todo!() + self.inner.write(dev_mode, installation_manager) } - fn add_package( - &mut self, - package: crate::package::PackageInterfaceHandle, - ) -> anyhow::Result<()> { - todo!() + fn add_package(&mut self, package: PackageInterfaceHandle) -> anyhow::Result<()> { + self.inner.add_package(package) } - fn remove_package( - &mut self, - package: crate::package::PackageInterfaceHandle, - ) -> anyhow::Result<()> { - todo!() + fn remove_package(&mut self, package: PackageInterfaceHandle) -> anyhow::Result<()> { + self.inner.remove_package(package) } - fn get_canonical_packages( - &mut self, - ) -> anyhow::Result<Vec<crate::package::PackageInterfaceHandle>> { - todo!() + fn get_canonical_packages(&mut self) -> anyhow::Result<Vec<PackageInterfaceHandle>> { + Ok(self.inner.get_canonical_packages()) } - fn reload(&mut self) { - todo!() + fn reload(&mut self) -> anyhow::Result<()> { + self.inner.reload(); + Ok(()) } fn set_dev_package_names(&mut self, dev_package_names: Vec<String>) { - todo!() + self.inner.set_dev_package_names(dev_package_names); } fn get_dev_package_names(&self) -> &Vec<String> { - todo!() + self.inner.get_dev_package_names() } } impl RepositoryInterface for InstalledArrayRepository { fn count(&self) -> anyhow::Result<usize> { - todo!() + self.inner.count() } - fn has_package(&self, _package: PackageInterfaceHandle) -> bool { - todo!() + fn has_package(&self, package: PackageInterfaceHandle) -> bool { + self.inner.has_package(package) } fn find_package( &mut self, - _name: &str, - _constraint: FindPackageConstraint, + name: &str, + constraint: FindPackageConstraint, ) -> anyhow::Result<Option<BasePackageHandle>> { - todo!() + self.inner.find_package(name, constraint) } fn find_packages( &mut self, - _name: &str, - _constraint: Option<FindPackageConstraint>, + name: &str, + constraint: Option<FindPackageConstraint>, ) -> anyhow::Result<Vec<BasePackageHandle>> { - todo!() + self.inner.find_packages(name, constraint) } fn get_packages(&mut self) -> anyhow::Result<Vec<BasePackageHandle>> { - todo!() + self.inner.get_packages() } fn load_packages( &mut self, - _package_name_map: IndexMap<String, Option<AnyConstraint>>, - _acceptable_stabilities: IndexMap<String, i64>, - _stability_flags: IndexMap<String, i64>, - _already_loaded: IndexMap<String, IndexMap<String, PackageInterfaceHandle>>, + package_name_map: IndexMap<String, Option<AnyConstraint>>, + acceptable_stabilities: IndexMap<String, i64>, + stability_flags: IndexMap<String, i64>, + already_loaded: IndexMap<String, IndexMap<String, PackageInterfaceHandle>>, ) -> anyhow::Result<LoadPackagesResult> { - todo!() + self.inner.load_packages( + package_name_map, + acceptable_stabilities, + stability_flags, + already_loaded, + ) } fn search( &mut self, - _query: String, - _mode: i64, - _type: Option<String>, + query: String, + mode: i64, + r#type: Option<String>, ) -> anyhow::Result<Vec<SearchResult>> { - todo!() + self.inner.search(query, mode, r#type) } fn get_providers( &mut self, - _package_name: String, + package_name: String, ) -> anyhow::Result<IndexMap<String, ProviderInfo>> { - todo!() + self.inner.get_providers(package_name) } fn get_repo_name(&self) -> String { - todo!() + format!("installed {}", self.inner.get_repo_name()) } fn as_advisory_provider(&self) -> Option<&dyn AdvisoryProviderInterface> { None @@ -157,7 +155,7 @@ impl RepositoryInterface for InstalledArrayRepository { Some(self) } fn as_any(&self) -> &dyn std::any::Any { - todo!() + self } fn set_self_handle(&self, weak: crate::repository::RepositoryInterfaceWeakHandle) { self.inner.set_self_handle(weak); diff --git a/crates/shirabe/src/repository/installed_filesystem_repository.rs b/crates/shirabe/src/repository/installed_filesystem_repository.rs index 185749e..fc92aff 100644 --- a/crates/shirabe/src/repository/installed_filesystem_repository.rs +++ b/crates/shirabe/src/repository/installed_filesystem_repository.rs @@ -58,94 +58,91 @@ impl WritableRepositoryInterface for InstalledFilesystemRepository { fn write( &mut self, dev_mode: bool, - installation_manager: &crate::installer::InstallationManager, + installation_manager: &mut crate::installer::InstallationManager, ) -> anyhow::Result<()> { - todo!() + self.inner.write(dev_mode, installation_manager) } - fn add_package( - &mut self, - package: crate::package::PackageInterfaceHandle, - ) -> anyhow::Result<()> { - todo!() + fn add_package(&mut self, package: PackageInterfaceHandle) -> anyhow::Result<()> { + self.inner.add_package(package) } - fn remove_package( - &mut self, - package: crate::package::PackageInterfaceHandle, - ) -> anyhow::Result<()> { - todo!() + fn remove_package(&mut self, package: PackageInterfaceHandle) -> anyhow::Result<()> { + self.inner.remove_package(package) } - fn get_canonical_packages( - &mut self, - ) -> anyhow::Result<Vec<crate::package::PackageInterfaceHandle>> { - todo!() + fn get_canonical_packages(&mut self) -> anyhow::Result<Vec<PackageInterfaceHandle>> { + self.inner.get_canonical_packages() } - fn reload(&mut self) { - todo!() + fn reload(&mut self) -> anyhow::Result<()> { + self.inner.reload() } fn set_dev_package_names(&mut self, dev_package_names: Vec<String>) { - todo!() + self.inner.set_dev_package_names(dev_package_names); } fn get_dev_package_names(&self) -> &Vec<String> { - todo!() + self.inner.get_dev_package_names() } } impl RepositoryInterface for InstalledFilesystemRepository { fn count(&self) -> anyhow::Result<usize> { - todo!() + self.inner.count() } - fn has_package(&self, _package: PackageInterfaceHandle) -> bool { - todo!() + fn has_package(&self, package: PackageInterfaceHandle) -> bool { + self.inner.has_package(package) } fn find_package( &mut self, - _name: &str, - _constraint: FindPackageConstraint, + name: &str, + constraint: FindPackageConstraint, ) -> anyhow::Result<Option<BasePackageHandle>> { - todo!() + self.inner.find_package(name, constraint) } fn find_packages( &mut self, - _name: &str, - _constraint: Option<FindPackageConstraint>, + name: &str, + constraint: Option<FindPackageConstraint>, ) -> anyhow::Result<Vec<BasePackageHandle>> { - todo!() + self.inner.find_packages(name, constraint) } fn get_packages(&mut self) -> anyhow::Result<Vec<BasePackageHandle>> { - todo!() + self.inner.get_packages() } fn load_packages( &mut self, - _package_name_map: IndexMap<String, Option<AnyConstraint>>, - _acceptable_stabilities: IndexMap<String, i64>, - _stability_flags: IndexMap<String, i64>, - _already_loaded: IndexMap<String, IndexMap<String, PackageInterfaceHandle>>, + package_name_map: IndexMap<String, Option<AnyConstraint>>, + acceptable_stabilities: IndexMap<String, i64>, + stability_flags: IndexMap<String, i64>, + already_loaded: IndexMap<String, IndexMap<String, PackageInterfaceHandle>>, ) -> anyhow::Result<LoadPackagesResult> { - todo!() + self.inner.load_packages( + package_name_map, + acceptable_stabilities, + stability_flags, + already_loaded, + ) } fn search( &mut self, - _query: String, - _mode: i64, - _type: Option<String>, + query: String, + mode: i64, + r#type: Option<String>, ) -> anyhow::Result<Vec<SearchResult>> { - todo!() + self.inner.search(query, mode, r#type) } fn get_providers( &mut self, - _package_name: String, + package_name: String, ) -> anyhow::Result<IndexMap<String, ProviderInfo>> { - todo!() + self.inner.get_providers(package_name) } fn get_repo_name(&self) -> String { - todo!() + format!("installed {}", self.inner.get_repo_name()) } fn as_advisory_provider(&self) -> Option<&dyn AdvisoryProviderInterface> { None @@ -164,7 +161,7 @@ impl RepositoryInterface for InstalledFilesystemRepository { Some(self) } fn as_any(&self) -> &dyn std::any::Any { - todo!() + self } fn set_self_handle(&self, weak: crate::repository::RepositoryInterfaceWeakHandle) { self.inner.set_self_handle(weak); diff --git a/crates/shirabe/src/repository/repository_factory.rs b/crates/shirabe/src/repository/repository_factory.rs index 993699f..5543a9e 100644 --- a/crates/shirabe/src/repository/repository_factory.rs +++ b/crates/shirabe/src/repository/repository_factory.rs @@ -284,15 +284,18 @@ impl RepositoryFactory { Self::generate_repository_name_indexed(index, &repo_config_map, &repo_map); if repo_type == "filesystem" { - let _json_path = repo_arr + let json_path = repo_arr .get("json") .and_then(|v| v.as_string()) .unwrap_or("") .to_string(); - // TODO(phase-b): FilesystemRepository does not yet implement - // RepositoryInterface; once it does, construct it from JsonFile here. let created: RepositoryInterfaceHandle = - todo!("FilesystemRepository as dyn RepositoryInterface"); + RepositoryInterfaceHandle::new(FilesystemRepository::new( + JsonFile::new(json_path, None, None)?, + false, + None, + None, + )?); repo_map.insert(name, created); } else { let created = rm.create_repository( diff --git a/crates/shirabe/src/repository/writable_array_repository.rs b/crates/shirabe/src/repository/writable_array_repository.rs index 0615ef6..c4b31aa 100644 --- a/crates/shirabe/src/repository/writable_array_repository.rs +++ b/crates/shirabe/src/repository/writable_array_repository.rs @@ -1,10 +1,15 @@ //! ref: composer/src/Composer/Repository/WritableArrayRepository.php use crate::installer::InstallationManager; +use crate::package::BasePackageHandle; +use crate::package::PackageInterfaceHandle; use crate::repository::ArrayRepository; use crate::repository::RepositoryInterface; use crate::repository::RepositoryInterfaceWeakHandle; +use crate::repository::{FindPackageConstraint, LoadPackagesResult, ProviderInfo, SearchResult}; use anyhow::Result; +use indexmap::IndexMap; +use shirabe_semver::constraint::AnyConstraint; #[derive(Debug)] pub struct WritableArrayRepository { @@ -52,6 +57,10 @@ impl WritableArrayRepository { self.inner.reset_packages(); } + pub(crate) fn is_initialized(&self) -> bool { + self.inner.is_initialized() + } + pub fn add_package(&mut self, package: crate::package::PackageInterfaceHandle) -> Result<()> { self.inner.add_package(package) } @@ -64,19 +73,43 @@ impl WritableArrayRepository { &mut self, package: crate::package::PackageInterfaceHandle, ) -> Result<()> { - let _ = package; - // TODO(phase-b): delegate to ArrayRepository once it implements remove_package + self.inner.remove_package(package); Ok(()) } pub fn initialize(&mut self) -> Result<()> { - // TODO(phase-b): inner ArrayRepository::initialize signature + self.inner.initialize(); Ok(()) } + /// Get unique packages (at most one package of each name), with aliases resolved and removed. pub fn get_canonical_packages(&self) -> Vec<crate::package::PackageInterfaceHandle> { - // TODO(phase-b): delegate to inner once it exposes get_canonical_packages - Vec::new() + let packages = self.inner.get_packages_internal(); + + // get at most one package of each name, preferring non-aliased ones + let mut packages_by_name: IndexMap<String, crate::package::PackageInterfaceHandle> = + IndexMap::new(); + for package in packages { + let name = package.get_name(); + let prefer_replace = packages_by_name + .get(&name) + .map(|existing| existing.as_alias().is_some()) + .unwrap_or(true); + if prefer_replace { + packages_by_name.insert(name, package); + } + } + + // unfold aliased packages + let mut canonical_packages = Vec::new(); + for mut package in packages_by_name.into_values() { + while let Some(alias) = package.as_alias() { + package = alias.get_alias_of().into(); + } + canonical_packages.push(package); + } + + canonical_packages } pub fn get_packages(&mut self) -> anyhow::Result<Vec<crate::package::BasePackageHandle>> { @@ -86,8 +119,74 @@ impl WritableArrayRepository { pub fn get_repo_name(&self) -> String { self.inner.get_repo_name() } +} - pub fn count(&self) -> anyhow::Result<usize> { +impl RepositoryInterface for WritableArrayRepository { + fn count(&self) -> anyhow::Result<usize> { self.inner.count() } + + fn has_package(&self, package: PackageInterfaceHandle) -> bool { + self.inner.has_package(package) + } + + fn find_package( + &mut self, + name: &str, + constraint: FindPackageConstraint, + ) -> Result<Option<BasePackageHandle>> { + self.inner.find_package(name, constraint) + } + + fn find_packages( + &mut self, + name: &str, + constraint: Option<FindPackageConstraint>, + ) -> Result<Vec<BasePackageHandle>> { + self.inner.find_packages(name, constraint) + } + + fn get_packages(&mut self) -> Result<Vec<BasePackageHandle>> { + self.inner.get_packages() + } + + fn load_packages( + &mut self, + package_name_map: IndexMap<String, Option<AnyConstraint>>, + acceptable_stabilities: IndexMap<String, i64>, + stability_flags: IndexMap<String, i64>, + already_loaded: IndexMap<String, IndexMap<String, PackageInterfaceHandle>>, + ) -> Result<LoadPackagesResult> { + self.inner.load_packages( + package_name_map, + acceptable_stabilities, + stability_flags, + already_loaded, + ) + } + + fn search( + &mut self, + query: String, + mode: i64, + r#type: Option<String>, + ) -> Result<Vec<SearchResult>> { + self.inner.search(query, mode, r#type) + } + + fn get_providers(&mut self, package_name: String) -> Result<IndexMap<String, ProviderInfo>> { + self.inner.get_providers(package_name) + } + + fn get_repo_name(&self) -> String { + self.inner.get_repo_name() + } + + fn as_any(&self) -> &dyn std::any::Any { + self + } + + fn set_self_handle(&self, weak: RepositoryInterfaceWeakHandle) { + self.inner.set_self_handle(weak); + } } diff --git a/crates/shirabe/src/repository/writable_repository_interface.rs b/crates/shirabe/src/repository/writable_repository_interface.rs index ae62e1e..9cdecb5 100644 --- a/crates/shirabe/src/repository/writable_repository_interface.rs +++ b/crates/shirabe/src/repository/writable_repository_interface.rs @@ -6,7 +6,11 @@ use crate::repository::RepositoryInterface; use anyhow::Result; pub trait WritableRepositoryInterface: RepositoryInterface { - fn write(&mut self, dev_mode: bool, installation_manager: &InstallationManager) -> Result<()>; + fn write( + &mut self, + dev_mode: bool, + installation_manager: &mut InstallationManager, + ) -> Result<()>; fn add_package(&mut self, package: PackageInterfaceHandle) -> Result<()>; @@ -14,7 +18,7 @@ pub trait WritableRepositoryInterface: RepositoryInterface { fn get_canonical_packages(&mut self) -> Result<Vec<PackageInterfaceHandle>>; - fn reload(&mut self); + fn reload(&mut self) -> Result<()>; fn set_dev_package_names(&mut self, dev_package_names: Vec<String>); |
