aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/dependency_resolver
diff options
context:
space:
mode:
Diffstat (limited to 'crates/shirabe/src/dependency_resolver')
-rw-r--r--crates/shirabe/src/dependency_resolver/pool_builder.rs24
-rw-r--r--crates/shirabe/src/dependency_resolver/request.rs13
2 files changed, 16 insertions, 21 deletions
diff --git a/crates/shirabe/src/dependency_resolver/pool_builder.rs b/crates/shirabe/src/dependency_resolver/pool_builder.rs
index 273d19f..a34c281 100644
--- a/crates/shirabe/src/dependency_resolver/pool_builder.rs
+++ b/crates/shirabe/src/dependency_resolver/pool_builder.rs
@@ -34,7 +34,6 @@ use crate::package::version::StabilityFilter;
use crate::plugin::PluginEvents;
use crate::plugin::PrePoolCreateEvent;
use crate::repository::CanonicalPackagesTrait;
-use crate::repository::LockArrayRepository;
use crate::repository::PlatformRepository;
use crate::repository::RepositoryInterface;
use crate::repository::RepositoryInterfaceHandle;
@@ -163,9 +162,10 @@ impl PoolBuilder {
.into());
}
- for locked_package in
- CanonicalPackagesTrait::get_packages(request.get_locked_repository().unwrap())
- {
+ let locked_packages = CanonicalPackagesTrait::get_packages(
+ &*request.get_locked_repository().unwrap().borrow(),
+ );
+ for locked_package in locked_packages {
if !self.is_update_allowed(locked_package.clone()) {
// Path repo packages are never loaded from lock, to force them to always remain in sync
// unless symlinking is disabled in which case we probably should rather treat them like
@@ -491,13 +491,9 @@ impl PoolBuilder {
for (repo_index, repository) in repositories.iter().enumerate() {
// these repos have their packages fixed or locked if they need to be loaded so we
// never need to load anything else from them
- // TODO(phase-c): PHP compares `$request->getLockedRepository() === $repository` by
- // strict identity, but `Request.locked_repository` is held by value, not as a handle.
- // This approximates the check by matching any `LockArrayRepository` when the request
- // has a locked repository set. Tighten to `ptr_eq` once `Request` stores the locked
- // repository as `RepositoryInterfaceHandle`.
- let is_locked_repo =
- request.get_locked_repository().is_some() && repository.is::<LockArrayRepository>();
+ let is_locked_repo = request
+ .get_locked_repository()
+ .map_or(false, |h| repository.ptr_eq(&h.into()));
if repository.is::<PlatformRepository>() || is_locked_repo {
continue;
}
@@ -826,9 +822,9 @@ impl PoolBuilder {
let pattern_regexp = base_package::package_name_to_regexp(pattern);
// update pattern matches a locked package? => all good
- for package in
- CanonicalPackagesTrait::get_packages(request.get_locked_repository().unwrap())
- {
+ for package in CanonicalPackagesTrait::get_packages(
+ &*request.get_locked_repository().unwrap().borrow(),
+ ) {
if Preg::is_match3(&pattern_regexp, &package.get_name(), None).unwrap_or(false) {
continue 'outer;
}
diff --git a/crates/shirabe/src/dependency_resolver/request.rs b/crates/shirabe/src/dependency_resolver/request.rs
index 0621775..df26535 100644
--- a/crates/shirabe/src/dependency_resolver/request.rs
+++ b/crates/shirabe/src/dependency_resolver/request.rs
@@ -6,8 +6,7 @@ use shirabe_semver::constraint::AnyConstraint;
use shirabe_semver::constraint::MatchAllConstraint;
use crate::package::BasePackageHandle;
-use crate::repository::CanonicalPackagesTrait;
-use crate::repository::LockArrayRepository;
+use crate::repository::LockArrayRepositoryHandle;
use crate::repository::RepositoryInterface;
/// Identifies a partial update for listed packages only, all dependencies will remain at locked versions
@@ -41,7 +40,7 @@ pub enum UpdateAllowTransitiveDeps {
#[derive(Debug)]
pub struct Request {
- pub(crate) locked_repository: Option<LockArrayRepository>,
+ pub(crate) locked_repository: Option<LockArrayRepositoryHandle>,
pub(crate) requires: IndexMap<String, AnyConstraint>,
pub(crate) fixed_packages: IndexMap<String, BasePackageHandle>,
pub(crate) locked_packages: IndexMap<String, BasePackageHandle>,
@@ -52,7 +51,7 @@ pub struct Request {
}
impl Request {
- pub fn new(locked_repository: Option<LockArrayRepository>) -> Self {
+ pub fn new(locked_repository: Option<LockArrayRepositoryHandle>) -> Self {
Self {
locked_repository,
requires: IndexMap::new(),
@@ -200,7 +199,7 @@ impl Request {
let mut present_map: IndexMap<String, crate::package::BasePackageHandle> = IndexMap::new();
if let Some(ref locked_repository) = self.locked_repository {
- for package in RepositoryInterface::get_packages(locked_repository) {
+ for package in RepositoryInterface::get_packages(&*locked_repository.borrow()) {
let key = if package_ids {
package.get_id().to_string()
} else {
@@ -230,8 +229,8 @@ impl Request {
fixed_packages_map
}
- pub fn get_locked_repository(&self) -> Option<&LockArrayRepository> {
- self.locked_repository.as_ref()
+ pub fn get_locked_repository(&self) -> Option<LockArrayRepositoryHandle> {
+ self.locked_repository.clone()
}
/// Restricts the pool builder from loading other packages than those listed here.