aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/mozart-registry/src/lockfile.rs
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-02-22 11:07:42 +0900
committernsfisis <nsfisis@gmail.com>2026-02-22 11:15:29 +0900
commit9f0d210021c54f63c9984446862b6ec68834bc63 (patch)
treed1522b8047c60bc7ee7a9d832178dd24e1b07636 /crates/mozart-registry/src/lockfile.rs
parent2c243a3cb814939bbe40fda1608781825ab0d77d (diff)
downloadphp-mozart-9f0d210021c54f63c9984446862b6ec68834bc63.tar.gz
php-mozart-9f0d210021c54f63c9984446862b6ec68834bc63.tar.zst
php-mozart-9f0d210021c54f63c9984446862b6ec68834bc63.zip
refactor(async): migrate from blocking HTTP to async/await with tokio
Replace reqwest::blocking with async reqwest across the entire codebase. All command execute functions, registry API calls (packagist, downloader, resolver, lockfile), and the main entry point now use async/await with the tokio runtime. The pubgrub resolver runs on spawn_blocking since its DependencyProvider trait is synchronous, using Handle::block_on for async I/O within that context. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Diffstat (limited to 'crates/mozart-registry/src/lockfile.rs')
-rw-r--r--crates/mozart-registry/src/lockfile.rs23
1 files changed, 14 insertions, 9 deletions
diff --git a/crates/mozart-registry/src/lockfile.rs b/crates/mozart-registry/src/lockfile.rs
index 16337c4..9064109 100644
--- a/crates/mozart-registry/src/lockfile.rs
+++ b/crates/mozart-registry/src/lockfile.rs
@@ -392,11 +392,12 @@ fn extract_platform_requirements(requirements: &BTreeMap<String, String>) -> ser
/// 2. Separates packages into production vs dev-only
/// 3. Computes the content-hash
/// 4. Assembles the complete `LockFile` struct
-pub fn generate_lock_file(request: &LockFileGenerationRequest) -> anyhow::Result<LockFile> {
+pub async fn generate_lock_file(request: &LockFileGenerationRequest) -> anyhow::Result<LockFile> {
// 1. Fetch full metadata for all resolved packages
let mut package_metadata: HashMap<String, PackagistVersion> = HashMap::new();
for pkg in &request.resolved_packages {
- let versions = packagist::fetch_package_versions(&pkg.name, request.repo_cache.as_ref())?;
+ let versions =
+ packagist::fetch_package_versions(&pkg.name, request.repo_cache.as_ref()).await?;
// Find the exact version matching pkg.version_normalized
let matching = versions
.into_iter()
@@ -913,8 +914,8 @@ mod tests {
assert_eq!(platform, serde_json::json!({}));
}
- #[test]
- fn test_generate_lock_file_minimal() {
+ #[tokio::test]
+ async fn test_generate_lock_file_minimal() {
let composer_json_content =
r#"{"name": "test/project", "require": {"php": ">=8.1"}}"#.to_string();
let composer_json: RawPackageData = serde_json::from_str(&composer_json_content).unwrap();
@@ -927,7 +928,7 @@ mod tests {
repo_cache: None,
};
- let lock = generate_lock_file(&request).unwrap();
+ let lock = generate_lock_file(&request).await.unwrap();
assert_eq!(lock.packages.len(), 0);
assert_eq!(lock.packages_dev.as_ref().unwrap().len(), 0);
@@ -1009,9 +1010,9 @@ mod tests {
assert_eq!(packages[1].name, "vendor/zebra");
}
- #[test]
+ #[tokio::test]
#[ignore]
- fn test_generate_lock_file_monolog() {
+ async fn test_generate_lock_file_monolog() {
use crate::resolver::PlatformConfig;
use crate::resolver::{ResolveRequest, resolve};
use mozart_core::package::Stability;
@@ -1031,7 +1032,9 @@ mod tests {
repo_cache: None,
};
- let resolved = resolve(&resolve_request).expect("Resolution should succeed");
+ let resolved = resolve(&resolve_request)
+ .await
+ .expect("Resolution should succeed");
assert!(!resolved.is_empty());
let composer_json_content =
@@ -1046,7 +1049,9 @@ mod tests {
repo_cache: None,
};
- let lock = generate_lock_file(&gen_request).expect("Lock file generation should succeed");
+ let lock = generate_lock_file(&gen_request)
+ .await
+ .expect("Lock file generation should succeed");
// Verify monolog is in packages
assert!(