1
0
Fork 0
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:
Bartek Iwańczuk 2024-08-31 01:22:20 +01:00 committed by GitHub
parent a527b3a5de
commit c29e5b9d1e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 30 additions and 15 deletions

View file

@ -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

View file

@ -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()) {

View file

@ -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.",
]); ]);
}); });
} }