Introduce cache system for PackageResolver to improve performance #254
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
I introduce caching system for
PackageResolverto improve performance by caching resolved packageMotivation
Previously, Scipio depended on SwiftPM and used its APIs directly for package resolution, which was efficient. However, after #208 , Scipio introduced its own package resolution logic independent of SwiftPM. This new approach executes
swift package resolve(equivalent to the previous resolution) andswift package dump-packagefor every checked-out repository, which introduced performance issues.To address this, we cache the resolved packages (array of
ResolvedPackage) using theoriginHashfromPackage.resolvedas the cache key.Changes
LocalDiskCacheStorageconforming toResolvedPackagesCacheStoragePackageResolver.CacheSystemto manage caching and restoration across multiple storage backends according to the policyPackageResolver.CacheSystemintoPackageResolverto store and retrieve resolved package data.CacheStoragetoFrameworkCacheStoragewith deprecation aliasPackageResolver.CacheSystem