mirror of
https://github.com/denoland/deno.git
synced 2024-11-21 15:04:11 -05:00
fix(install): recommend using deno install -g
when using a single http url (#25388)
Closes https://github.com/denoland/deno/issues/25361
This commit is contained in:
parent
203428ea14
commit
81e941bc92
5 changed files with 38 additions and 1 deletions
|
@ -237,7 +237,6 @@ pub struct InstallFlagsGlobal {
|
||||||
|
|
||||||
#[derive(Clone, Debug, Eq, PartialEq)]
|
#[derive(Clone, Debug, Eq, PartialEq)]
|
||||||
pub enum InstallKind {
|
pub enum InstallKind {
|
||||||
#[allow(unused)]
|
|
||||||
Local(Option<AddFlags>),
|
Local(Option<AddFlags>),
|
||||||
Global(InstallFlagsGlobal),
|
Global(InstallFlagsGlobal),
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,6 +15,7 @@ use crate::factory::CliFactory;
|
||||||
use crate::http_util::HttpClientProvider;
|
use crate::http_util::HttpClientProvider;
|
||||||
use crate::util::fs::canonicalize_path_maybe_not_exists;
|
use crate::util::fs::canonicalize_path_maybe_not_exists;
|
||||||
|
|
||||||
|
use deno_core::anyhow::bail;
|
||||||
use deno_core::anyhow::Context;
|
use deno_core::anyhow::Context;
|
||||||
use deno_core::error::generic_error;
|
use deno_core::error::generic_error;
|
||||||
use deno_core::error::AnyError;
|
use deno_core::error::AnyError;
|
||||||
|
@ -284,6 +285,24 @@ async fn install_local(
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn check_if_installs_a_single_package_globally(
|
||||||
|
maybe_add_flags: Option<&AddFlags>,
|
||||||
|
) -> Result<(), AnyError> {
|
||||||
|
let Some(add_flags) = maybe_add_flags else {
|
||||||
|
return Ok(());
|
||||||
|
};
|
||||||
|
if add_flags.packages.len() != 1 {
|
||||||
|
return Ok(());
|
||||||
|
}
|
||||||
|
let Ok(url) = Url::parse(&add_flags.packages[0]) else {
|
||||||
|
return Ok(());
|
||||||
|
};
|
||||||
|
if matches!(url.scheme(), "http" | "https") {
|
||||||
|
bail!("Failed to install \"{}\" specifier. If you are trying to install {} globally, run again with `-g` flag:\n deno install -g {}", url.scheme(), url.as_str(), url.as_str());
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
pub async fn install_command(
|
pub async fn install_command(
|
||||||
flags: Arc<Flags>,
|
flags: Arc<Flags>,
|
||||||
install_flags: InstallFlags,
|
install_flags: InstallFlags,
|
||||||
|
@ -297,6 +316,7 @@ pub async fn install_command(
|
||||||
install_global(flags, global_flags).await
|
install_global(flags, global_flags).await
|
||||||
}
|
}
|
||||||
InstallKind::Local(maybe_add_flags) => {
|
InstallKind::Local(maybe_add_flags) => {
|
||||||
|
check_if_installs_a_single_package_globally(maybe_add_flags.as_ref())?;
|
||||||
install_local(flags, maybe_add_flags).await
|
install_local(flags, maybe_add_flags).await
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
{
|
||||||
|
"steps": [
|
||||||
|
{
|
||||||
|
"args": "install http://example.com",
|
||||||
|
"output": "install_http.out",
|
||||||
|
"exitCode": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"args": "install https://example.com",
|
||||||
|
"output": "install_https.out",
|
||||||
|
"exitCode": 1
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,2 @@
|
||||||
|
error: Failed to install "http" specifier. If you are trying to install http://example.com/ globally, run again with `-g` flag:
|
||||||
|
deno install -g http://example.com/
|
|
@ -0,0 +1,2 @@
|
||||||
|
error: Failed to install "https" specifier. If you are trying to install https://example.com/ globally, run again with `-g` flag:
|
||||||
|
deno install -g https://example.com/
|
Loading…
Reference in a new issue