summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cli/Cargo.toml6
-rw-r--r--cli/args/flags.rs1
-rw-r--r--cli/main.rs22
-rw-r--r--cli/tests/integration/flags_tests.rs1
-rw-r--r--cli/tools/run/mod.rs1
5 files changed, 24 insertions, 7 deletions
diff --git a/cli/Cargo.toml b/cli/Cargo.toml
index b4f552da4..b793d27b0 100644
--- a/cli/Cargo.toml
+++ b/cli/Cargo.toml
@@ -27,7 +27,11 @@ harness = false
path = "./bench/lsp_bench_standalone.rs"
[features]
-default = ["__vendored_zlib_ng"]
+default = ["upgrade", "__vendored_zlib_ng"]
+# A feature that enables the upgrade subcommand and the background check for
+# available updates (of deno binary). This is typically disabled for (Linux)
+# distribution packages.
+upgrade = []
# A dev feature to disable creations and loading of snapshots in favor of
# loading JS sources at runtime.
__runtime_js_sources = ["deno_runtime/__runtime_js_sources"]
diff --git a/cli/args/flags.rs b/cli/args/flags.rs
index 555f2f312..6e79df675 100644
--- a/cli/args/flags.rs
+++ b/cli/args/flags.rs
@@ -2202,6 +2202,7 @@ update to a different location, use the --output flag
deno upgrade --output $HOME/my_deno",
)
+ .hide(cfg!(not(feature = "upgrade")))
.defer(|cmd| {
cmd
.arg(
diff --git a/cli/main.rs b/cli/main.rs
index 94b59b9d6..bd29dc532 100644
--- a/cli/main.rs
+++ b/cli/main.rs
@@ -198,9 +198,15 @@ async fn run_subcommand(flags: Flags) -> Result<i32, AnyError> {
let types = tsc::get_types_declaration_file_text(flags.unstable);
display::write_to_stdout_ignore_sigpipe(types.as_bytes())
}),
+ #[cfg(feature = "upgrade")]
DenoSubcommand::Upgrade(upgrade_flags) => spawn_subcommand(async {
tools::upgrade::upgrade(flags, upgrade_flags).await
}),
+ #[cfg(not(feature = "upgrade"))]
+ DenoSubcommand::Upgrade(_) => exit_with_message(
+ "This deno was built without the \"upgrade\" feature. Please upgrade using the installation method originally used to install Deno.",
+ 1,
+ ),
DenoSubcommand::Vendor(vendor_flags) => spawn_subcommand(async {
tools::vendor::vendor(flags, vendor_flags).await
}),
@@ -237,6 +243,15 @@ fn setup_panic_hook() {
}));
}
+fn exit_with_message(message: &str, code: i32) -> ! {
+ eprintln!(
+ "{}: {}",
+ colors::red_bold("error"),
+ message.trim_start_matches("error: ")
+ );
+ std::process::exit(code);
+}
+
fn unwrap_or_exit<T>(result: Result<T, AnyError>) -> T {
match result {
Ok(value) => value,
@@ -251,12 +266,7 @@ fn unwrap_or_exit<T>(result: Result<T, AnyError>) -> T {
error_code = 10;
}
- eprintln!(
- "{}: {}",
- colors::red_bold("error"),
- error_string.trim_start_matches("error: ")
- );
- std::process::exit(error_code);
+ exit_with_message(&error_string, error_code);
}
}
}
diff --git a/cli/tests/integration/flags_tests.rs b/cli/tests/integration/flags_tests.rs
index 89a8978dd..109644151 100644
--- a/cli/tests/integration/flags_tests.rs
+++ b/cli/tests/integration/flags_tests.rs
@@ -45,6 +45,7 @@ fn help_output() {
"Run a task defined in the configuration file",
"Run tests",
"Print runtime TypeScript declarations",
+ #[cfg(feature = "upgrade")]
"Upgrade deno executable to given version",
"Vendor remote modules into a local directory",
"Print this message or the help of the given subcommand(s)",
diff --git a/cli/tools/run/mod.rs b/cli/tools/run/mod.rs
index 21e1f7b5e..321f94fc6 100644
--- a/cli/tools/run/mod.rs
+++ b/cli/tools/run/mod.rs
@@ -47,6 +47,7 @@ To grant permissions, set them before the script argument. For example:
// Run a background task that checks for available upgrades or output
// if an earlier run of this background task found a new version of Deno.
+ #[cfg(feature = "upgrade")]
super::upgrade::check_for_upgrades(
http_client.clone(),
deno_dir.upgrade_check_file_path(),