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/repository/filesystem_repository.rs | |
| 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/repository/filesystem_repository.rs')
| -rw-r--r-- | crates/shirabe/src/repository/filesystem_repository.rs | 110 |
1 files changed, 109 insertions, 1 deletions
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, |
