mirror of
https://github.com/denoland/deno.git
synced 2025-08-04 19:08:15 +00:00
refactor: remove Semaphore::new(1)
and use TaskQueue
(#18014)
This commit is contained in:
parent
7afa3aceb0
commit
2f7222da8a
5 changed files with 47 additions and 55 deletions
|
@ -7,6 +7,7 @@ use deno_core::futures::future;
|
|||
use deno_core::futures::future::LocalBoxFuture;
|
||||
use deno_core::futures::FutureExt;
|
||||
use deno_core::ModuleSpecifier;
|
||||
use deno_core::TaskQueue;
|
||||
use deno_graph::npm::NpmPackageNv;
|
||||
use deno_graph::npm::NpmPackageReq;
|
||||
use deno_graph::source::NpmResolver;
|
||||
|
@ -34,7 +35,7 @@ pub struct CliGraphResolver {
|
|||
npm_registry_api: NpmRegistryApi,
|
||||
npm_resolution: NpmResolution,
|
||||
package_json_deps_installer: PackageJsonDepsInstaller,
|
||||
sync_download_semaphore: Option<Arc<tokio::sync::Semaphore>>,
|
||||
sync_download_queue: Option<Arc<TaskQueue>>,
|
||||
}
|
||||
|
||||
impl Default for CliGraphResolver {
|
||||
|
@ -52,7 +53,7 @@ impl Default for CliGraphResolver {
|
|||
npm_registry_api,
|
||||
npm_resolution,
|
||||
package_json_deps_installer: Default::default(),
|
||||
sync_download_semaphore: Self::create_sync_download_semaphore(),
|
||||
sync_download_queue: Self::create_sync_download_queue(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -77,13 +78,13 @@ impl CliGraphResolver {
|
|||
npm_registry_api,
|
||||
npm_resolution,
|
||||
package_json_deps_installer,
|
||||
sync_download_semaphore: Self::create_sync_download_semaphore(),
|
||||
sync_download_queue: Self::create_sync_download_queue(),
|
||||
}
|
||||
}
|
||||
|
||||
fn create_sync_download_semaphore() -> Option<Arc<tokio::sync::Semaphore>> {
|
||||
fn create_sync_download_queue() -> Option<Arc<TaskQueue>> {
|
||||
if crate::npm::should_sync_download() {
|
||||
Some(Arc::new(tokio::sync::Semaphore::new(1)))
|
||||
Some(Default::default())
|
||||
} else {
|
||||
None
|
||||
}
|
||||
|
@ -194,10 +195,10 @@ impl NpmResolver for CliGraphResolver {
|
|||
let package_name = package_name.to_string();
|
||||
let api = self.npm_registry_api.clone();
|
||||
let deps_installer = self.package_json_deps_installer.clone();
|
||||
let maybe_sync_download_semaphore = self.sync_download_semaphore.clone();
|
||||
let maybe_sync_download_queue = self.sync_download_queue.clone();
|
||||
async move {
|
||||
let permit = if let Some(semaphore) = &maybe_sync_download_semaphore {
|
||||
Some(semaphore.acquire().await.unwrap())
|
||||
let permit = if let Some(task_queue) = &maybe_sync_download_queue {
|
||||
Some(task_queue.acquire().await)
|
||||
} else {
|
||||
None
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue