mirror of
https://github.com/denoland/deno.git
synced 2024-11-25 15:29:32 -05:00
fix(upgrade): more informative information on invalid version (#25319)
Before: ``` $ deno upgrade v1.xx error: Invalid version passed ``` After: ``` $ deno upgrade v1.xx error: Invalid version passed (v1.xx) Example usage: deno upgrade | deno upgrade 1.46 | deno upgrade canary ``` Also updates help text to use "shorthand version" without flags, but a positional arg.
This commit is contained in:
parent
a527b3a5de
commit
c29e5b9d1e
3 changed files with 30 additions and 15 deletions
|
@ -1173,7 +1173,7 @@ static DENO_HELP: &str = cstr!(
|
||||||
<p(245)>deno test | deno test test.ts</>
|
<p(245)>deno test | deno test test.ts</>
|
||||||
<g>publish</> Publish the current working directory's package or workspace
|
<g>publish</> Publish the current working directory's package or workspace
|
||||||
<g>upgrade</> Upgrade deno executable to given version
|
<g>upgrade</> Upgrade deno executable to given version
|
||||||
<p(245)>deno upgrade | deno upgrade --version=1.45.0 | deno upgrade --canary</>
|
<p(245)>deno upgrade | deno upgrade 1.45.0 | deno upgrade canary</>
|
||||||
{after-help}
|
{after-help}
|
||||||
|
|
||||||
<y>Docs:</> https://docs.deno.com
|
<y>Docs:</> https://docs.deno.com
|
||||||
|
|
|
@ -15,6 +15,7 @@ use crate::util::progress_bar::ProgressBarStyle;
|
||||||
use crate::version;
|
use crate::version;
|
||||||
|
|
||||||
use async_trait::async_trait;
|
use async_trait::async_trait;
|
||||||
|
use color_print::cstr;
|
||||||
use deno_core::anyhow::bail;
|
use deno_core::anyhow::bail;
|
||||||
use deno_core::anyhow::Context;
|
use deno_core::anyhow::Context;
|
||||||
use deno_core::error::AnyError;
|
use deno_core::error::AnyError;
|
||||||
|
@ -37,6 +38,8 @@ const RELEASE_URL: &str = "https://github.com/denoland/deno/releases";
|
||||||
const CANARY_URL: &str = "https://dl.deno.land/canary";
|
const CANARY_URL: &str = "https://dl.deno.land/canary";
|
||||||
const RC_URL: &str = "https://dl.deno.land/release";
|
const RC_URL: &str = "https://dl.deno.land/release";
|
||||||
|
|
||||||
|
static EXAMPLE_USAGE: &str = cstr!("Example usage:\n <p(245)>deno upgrade | deno upgrade 1.46 | deno upgrade canary</>");
|
||||||
|
|
||||||
pub static ARCHIVE_NAME: Lazy<String> =
|
pub static ARCHIVE_NAME: Lazy<String> =
|
||||||
Lazy::new(|| format!("deno-{}.zip", env!("TARGET")));
|
Lazy::new(|| format!("deno-{}.zip", env!("TARGET")));
|
||||||
|
|
||||||
|
@ -372,14 +375,14 @@ pub fn check_for_upgrades(
|
||||||
log::info!(
|
log::info!(
|
||||||
"{} {}",
|
"{} {}",
|
||||||
colors::green("A new canary release of Deno is available."),
|
colors::green("A new canary release of Deno is available."),
|
||||||
colors::italic_gray("Run `deno upgrade --canary` to install it.")
|
colors::italic_gray("Run `deno upgrade canary` to install it.")
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
ReleaseChannel::Rc => {
|
ReleaseChannel::Rc => {
|
||||||
log::info!(
|
log::info!(
|
||||||
"{} {}",
|
"{} {}",
|
||||||
colors::green("A new release candidate of Deno is available."),
|
colors::green("A new release candidate of Deno is available."),
|
||||||
colors::italic_gray("Run `deno upgrade --rc` to install it.")
|
colors::italic_gray("Run `deno upgrade rc` to install it.")
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
// TODO(bartlomieju)
|
// TODO(bartlomieju)
|
||||||
|
@ -647,12 +650,20 @@ impl RequestedVersion {
|
||||||
|
|
||||||
let (channel, passed_version) = if is_canary {
|
let (channel, passed_version) = if is_canary {
|
||||||
if !re_hash.is_match(&passed_version) {
|
if !re_hash.is_match(&passed_version) {
|
||||||
bail!("Invalid commit hash passed");
|
bail!(
|
||||||
|
"Invalid commit hash passed ({})\n\n{}",
|
||||||
|
colors::gray(passed_version),
|
||||||
|
EXAMPLE_USAGE
|
||||||
|
);
|
||||||
}
|
}
|
||||||
(ReleaseChannel::Canary, passed_version)
|
(ReleaseChannel::Canary, passed_version)
|
||||||
} else {
|
} else {
|
||||||
let Ok(semver) = Version::parse_standard(&passed_version) else {
|
let Ok(semver) = Version::parse_standard(&passed_version) else {
|
||||||
bail!("Invalid version passed");
|
bail!(
|
||||||
|
"Invalid version passed ({})\n\n{}",
|
||||||
|
colors::gray(passed_version),
|
||||||
|
EXAMPLE_USAGE
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
if semver.pre.contains(&"rc".to_string()) {
|
if semver.pre.contains(&"rc".to_string()) {
|
||||||
|
|
|
@ -4,6 +4,7 @@ use std::process::Command;
|
||||||
use std::process::Stdio;
|
use std::process::Stdio;
|
||||||
use std::time::Instant;
|
use std::time::Instant;
|
||||||
use test_util as util;
|
use test_util as util;
|
||||||
|
use test_util::assert_starts_with;
|
||||||
use test_util::TempDir;
|
use test_util::TempDir;
|
||||||
use test_util::TestContext;
|
use test_util::TestContext;
|
||||||
use util::TestContextBuilder;
|
use util::TestContextBuilder;
|
||||||
|
@ -163,9 +164,10 @@ fn upgrade_invalid_stable_version() {
|
||||||
.wait_with_output()
|
.wait_with_output()
|
||||||
.unwrap();
|
.unwrap();
|
||||||
assert!(!output.status.success());
|
assert!(!output.status.success());
|
||||||
assert_eq!(
|
assert_starts_with!(
|
||||||
"error: Invalid version passed\n",
|
&util::strip_ansi_codes(&String::from_utf8(output.stderr.clone()).unwrap())
|
||||||
util::strip_ansi_codes(&String::from_utf8(output.stderr).unwrap())
|
.to_string(),
|
||||||
|
"error: Invalid version passed (foobar)"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -188,9 +190,10 @@ fn upgrade_invalid_canary_version() {
|
||||||
.wait_with_output()
|
.wait_with_output()
|
||||||
.unwrap();
|
.unwrap();
|
||||||
assert!(!output.status.success());
|
assert!(!output.status.success());
|
||||||
assert_eq!(
|
assert_starts_with!(
|
||||||
"error: Invalid commit hash passed\n",
|
&util::strip_ansi_codes(&String::from_utf8(output.stderr.clone()).unwrap())
|
||||||
util::strip_ansi_codes(&String::from_utf8(output.stderr).unwrap())
|
.to_string(),
|
||||||
|
"error: Invalid commit hash passed (foobar)"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -221,9 +224,10 @@ fn upgrade_invalid_lockfile() {
|
||||||
.unwrap();
|
.unwrap();
|
||||||
assert!(!output.status.success());
|
assert!(!output.status.success());
|
||||||
// should make it here instead of erroring on an invalid lockfile
|
// should make it here instead of erroring on an invalid lockfile
|
||||||
assert_eq!(
|
assert_starts_with!(
|
||||||
"error: Invalid version passed\n",
|
&util::strip_ansi_codes(&String::from_utf8(output.stderr.clone()).unwrap())
|
||||||
util::strip_ansi_codes(&String::from_utf8(output.stderr).unwrap())
|
.to_string(),
|
||||||
|
"error: Invalid version passed (foobar)"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -251,7 +255,7 @@ fn upgrade_prompt() {
|
||||||
pty.expect_any(&[
|
pty.expect_any(&[
|
||||||
" 99999.99.99 Run `deno upgrade` to install it.",
|
" 99999.99.99 Run `deno upgrade` to install it.",
|
||||||
// it builds canary releases on main, so check for this in that case
|
// it builds canary releases on main, so check for this in that case
|
||||||
"Run `deno upgrade --canary` to install it.",
|
"Run `deno upgrade canary` to install it.",
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue