mirror of
https://github.com/denoland/deno.git
synced 2025-03-03 17:34:47 -05:00
perf(publish): fetch all missing package status in parallel
This commit is contained in:
parent
7d19668255
commit
d1e1766466
1 changed files with 37 additions and 52 deletions
|
@ -700,29 +700,17 @@ async fn check_if_scope_and_package_exist(
|
||||||
scope: &str,
|
scope: &str,
|
||||||
package: &str,
|
package: &str,
|
||||||
) -> Result<Option<String>, AnyError> {
|
) -> Result<Option<String>, AnyError> {
|
||||||
let mut needs_scope = false;
|
|
||||||
let mut needs_package = false;
|
|
||||||
|
|
||||||
let response = api::get_scope(client, registry_api_url, scope).await?;
|
|
||||||
if response.status() == 404 {
|
|
||||||
needs_scope = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
let response =
|
let response =
|
||||||
api::get_package(client, registry_api_url, scope, package).await?;
|
api::get_package(client, registry_api_url, scope, package).await?;
|
||||||
if response.status() == 404 {
|
if response.status() == 404 {
|
||||||
needs_package = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if needs_scope || needs_package {
|
|
||||||
let create_url = format!(
|
let create_url = format!(
|
||||||
"{}new?scope={}&package={}&from=cli",
|
"{}new?scope={}&package={}&from=cli",
|
||||||
registry_manage_url, scope, package
|
registry_manage_url, scope, package
|
||||||
);
|
);
|
||||||
return Ok(Some(create_url));
|
Ok(Some(create_url));
|
||||||
|
} else {
|
||||||
|
Ok(None)
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(None)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn ensure_scopes_and_packages_exist(
|
async fn ensure_scopes_and_packages_exist(
|
||||||
|
@ -731,23 +719,36 @@ async fn ensure_scopes_and_packages_exist(
|
||||||
registry_manage_url: &Url,
|
registry_manage_url: &Url,
|
||||||
packages: &[Rc<PreparedPublishPackage>],
|
packages: &[Rc<PreparedPublishPackage>],
|
||||||
) -> Result<(), AnyError> {
|
) -> Result<(), AnyError> {
|
||||||
|
let mut futures = FuturesUnordered::new();
|
||||||
|
|
||||||
|
for package in packages {
|
||||||
|
let future = check_if_scope_and_package_exist(
|
||||||
|
client,
|
||||||
|
registry_api_url,
|
||||||
|
registry_manage_url,
|
||||||
|
&package.scope,
|
||||||
|
&package.package,
|
||||||
|
);
|
||||||
|
futures.push(future);
|
||||||
|
}
|
||||||
|
|
||||||
|
let mut missing_packages = vec![];
|
||||||
|
|
||||||
|
while let Some(maybe_create_package_url) = futures.next().await {
|
||||||
|
if let Some(create_package_url) = maybe_create_package_url? {
|
||||||
|
missing_packages.push((
|
||||||
|
package.scope.clone(),
|
||||||
|
package.package.clone(),
|
||||||
|
create_package_url,
|
||||||
|
));
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
if !std::io::stdin().is_terminal() {
|
if !std::io::stdin().is_terminal() {
|
||||||
let mut missing_packages_lines = vec![];
|
let missing_packages_lines = missing_packages
|
||||||
for package in packages {
|
.into_iter()
|
||||||
let maybe_create_package_url = check_if_scope_and_package_exist(
|
.map(|(_, _, url)| format!("- {}", url))
|
||||||
client,
|
.collect();
|
||||||
registry_api_url,
|
|
||||||
registry_manage_url,
|
|
||||||
&package.scope,
|
|
||||||
&package.package,
|
|
||||||
)
|
|
||||||
.await?;
|
|
||||||
|
|
||||||
if let Some(create_package_url) = maybe_create_package_url {
|
|
||||||
missing_packages_lines.push(format!(" - {}", create_package_url));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if !missing_packages_lines.is_empty() {
|
if !missing_packages_lines.is_empty() {
|
||||||
bail!(
|
bail!(
|
||||||
"Following packages don't exist, follow the links and create them:\n{}",
|
"Following packages don't exist, follow the links and create them:\n{}",
|
||||||
|
@ -757,35 +758,19 @@ async fn ensure_scopes_and_packages_exist(
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
|
||||||
for package in packages {
|
for (scope, package, create_package_url) in missing_packages {
|
||||||
let maybe_create_package_url = check_if_scope_and_package_exist(
|
|
||||||
client,
|
|
||||||
registry_api_url,
|
|
||||||
registry_manage_url,
|
|
||||||
&package.scope,
|
|
||||||
&package.package,
|
|
||||||
)
|
|
||||||
.await?;
|
|
||||||
|
|
||||||
let Some(create_package_url) = maybe_create_package_url else {
|
|
||||||
continue;
|
|
||||||
};
|
|
||||||
|
|
||||||
ring_bell();
|
ring_bell();
|
||||||
log::warn!(
|
log::warn!(
|
||||||
"'@{}/{}' doesn't exist yet. Visit {} to create the package",
|
"'@{}/{}' doesn't exist yet. Visit {} to create the package",
|
||||||
&package.scope,
|
&scope,
|
||||||
&package.package,
|
&package,
|
||||||
colors::cyan_with_underline(&create_package_url)
|
colors::cyan_with_underline(&create_package_url)
|
||||||
);
|
);
|
||||||
log::warn!("{}", colors::gray("Waiting..."));
|
log::warn!("{}", colors::gray("Waiting..."));
|
||||||
let _ = open::that_detached(&create_package_url);
|
let _ = open::that_detached(&create_package_url);
|
||||||
|
|
||||||
let package_api_url = api::get_package_api_url(
|
let package_api_url =
|
||||||
registry_api_url,
|
api::get_package_api_url(registry_api_url, &scope, &package);
|
||||||
&package.scope,
|
|
||||||
&package.package,
|
|
||||||
);
|
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
tokio::time::sleep(std::time::Duration::from_secs(3)).await;
|
tokio::time::sleep(std::time::Duration::from_secs(3)).await;
|
||||||
|
|
Loading…
Add table
Reference in a new issue