aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/repository/vcs_repository.rs
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-05-25 00:58:20 +0900
committernsfisis <nsfisis@gmail.com>2026-05-25 00:58:36 +0900
commit1921f173ea219cb4b25847294d2d3fa465550fbb (patch)
tree0d30486a2cb9a0c106e5d5827be3f655c60cd871 /crates/shirabe/src/repository/vcs_repository.rs
parentdbdecaf5a1c54a876b7ee0153d58dd39b1080f97 (diff)
downloadphp-shirabe-1921f173ea219cb4b25847294d2d3fa465550fbb.tar.gz
php-shirabe-1921f173ea219cb4b25847294d2d3fa465550fbb.tar.zst
php-shirabe-1921f173ea219cb4b25847294d2d3fa465550fbb.zip
refactor(package): introduce Rc<RefCell<_>> handles for packages
PHP packages have reference semantics, so introduce shared-ownership handles over an AnyPackage enum (PackageInterfaceHandle and friends) and replace Box<dyn PackageInterface> throughout. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe/src/repository/vcs_repository.rs')
-rw-r--r--crates/shirabe/src/repository/vcs_repository.rs21
1 files changed, 5 insertions, 16 deletions
diff --git a/crates/shirabe/src/repository/vcs_repository.rs b/crates/shirabe/src/repository/vcs_repository.rs
index 1ae7e40..a256fb8 100644
--- a/crates/shirabe/src/repository/vcs_repository.rs
+++ b/crates/shirabe/src/repository/vcs_repository.rs
@@ -15,7 +15,6 @@ use crate::config::Config;
use crate::downloader::TransportException;
use crate::event_dispatcher::EventDispatcher;
use crate::io::IOInterface;
-use crate::package::BasePackage;
use crate::package::loader::ArrayLoader;
use crate::package::loader::InvalidPackageException;
use crate::package::loader::LoaderInterface;
@@ -387,9 +386,7 @@ impl VcsRepository {
)?;
match cached_package {
CachedPackageResult::Package(pkg) => {
- // TODO(phase-b): trait upcast Box<dyn BasePackage> -> Box<dyn PackageInterface>
- let pkg_pi: Box<dyn crate::package::PackageInterface> = pkg.clone_package_box();
- self.inner.add_package(pkg_pi)?;
+ self.inner.add_package(pkg)?;
continue;
}
CachedPackageResult::Missing => {
@@ -541,10 +538,7 @@ impl VcsRepository {
let driver = self.driver.as_ref().unwrap();
let processed = self.pre_process(&**driver, data, &identifier)?;
let loaded = self.loader.as_ref().unwrap().load(processed, None)?;
- // TODO(phase-b): trait upcast Box<dyn BasePackage> -> Box<dyn PackageInterface>
- let loaded_pi: Box<dyn crate::package::PackageInterface> =
- loaded.clone_package_box();
- self.inner.add_package(loaded_pi)?;
+ self.inner.add_package(loaded)?;
Ok(())
})();
if let Err(e) = result {
@@ -662,9 +656,7 @@ impl VcsRepository {
)?;
match cached_package {
CachedPackageResult::Package(pkg) => {
- // TODO(phase-b): trait upcast Box<dyn BasePackage> -> Box<dyn PackageInterface>
- let pkg_pi: Box<dyn crate::package::PackageInterface> = pkg.clone_package_box();
- self.inner.add_package(pkg_pi)?;
+ self.inner.add_package(pkg)?;
continue;
}
CachedPackageResult::Missing => {
@@ -727,10 +719,7 @@ impl VcsRepository {
);
}
}
- // TODO(phase-b): trait upcast Box<dyn BasePackage> -> Box<dyn PackageInterface>
- let package_pi: Box<dyn crate::package::PackageInterface> =
- package.clone_package_box();
- self.inner.add_package(package_pi)?;
+ self.inner.add_package(package)?;
Ok(())
})();
if let Err(e) = result {
@@ -995,5 +984,5 @@ impl VcsRepository {
enum CachedPackageResult {
None,
Missing,
- Package(Box<dyn BasePackage>),
+ Package(crate::package::PackageInterfaceHandle),
}