diff options
-rw-r--r-- | cli/args/config_file.rs | 18 | ||||
-rw-r--r-- | cli/args/lockfile.rs | 21 | ||||
-rw-r--r-- | cli/schemas/config-file.v1.json | 5 | ||||
-rw-r--r-- | cli/tests/run_tests.rs | 27 | ||||
-rw-r--r-- | cli/tests/testdata/run/config_file_lock_boolean/deno.lock | 7 | ||||
-rw-r--r-- | cli/tests/testdata/run/config_file_lock_boolean/false.json | 3 | ||||
-rw-r--r-- | cli/tests/testdata/run/config_file_lock_boolean/false.main.out | 2 | ||||
-rw-r--r-- | cli/tests/testdata/run/config_file_lock_boolean/main.ts | 1 | ||||
-rw-r--r-- | cli/tests/testdata/run/config_file_lock_boolean/true.json | 3 | ||||
-rw-r--r-- | cli/tests/testdata/run/config_file_lock_boolean/true.main.out | 3 | ||||
-rw-r--r-- | cli/tests/testdata/run/config_file_lock_path.json | 3 | ||||
-rw-r--r-- | cli/tests/testdata/run/config_file_lock_path.out | 3 |
12 files changed, 93 insertions, 3 deletions
diff --git a/cli/args/config_file.rs b/cli/args/config_file.rs index 76340aa8b..16e11a5a8 100644 --- a/cli/args/config_file.rs +++ b/cli/args/config_file.rs @@ -430,6 +430,13 @@ pub struct TestConfig { } #[derive(Clone, Debug, Deserialize)] +#[serde(untagged)] +pub enum LockConfig { + Bool(bool), + PathBuf(PathBuf), +} + +#[derive(Clone, Debug, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ConfigFileJson { pub compiler_options: Option<Value>, @@ -438,6 +445,7 @@ pub struct ConfigFileJson { pub fmt: Option<Value>, pub tasks: Option<Value>, pub test: Option<Value>, + pub lock: Option<Value>, } #[derive(Clone, Debug)] @@ -759,6 +767,16 @@ impl ConfigFile { bail!("No tasks found in configuration file") } } + + pub fn to_lock_config(&self) -> Result<Option<LockConfig>, AnyError> { + if let Some(config) = self.json.lock.clone() { + let lock_config: LockConfig = serde_json::from_value(config) + .context("Failed to parse \"lock\" configuration")?; + Ok(Some(lock_config)) + } else { + Ok(None) + } + } } /// Represents the "default" type library that should be used when type diff --git a/cli/args/lockfile.rs b/cli/args/lockfile.rs index 0d3b2f249..012d9782e 100644 --- a/cli/args/lockfile.rs +++ b/cli/args/lockfile.rs @@ -10,6 +10,7 @@ use std::collections::BTreeMap; use std::io::Write; use std::path::PathBuf; +use crate::args::config_file::LockConfig; use crate::args::ConfigFile; use crate::npm::NpmPackageId; use crate::npm::NpmPackageReq; @@ -104,9 +105,23 @@ impl Lockfile { None => match maybe_config_file { Some(config_file) => { if config_file.specifier.scheme() == "file" { - let mut path = config_file.specifier.to_file_path().unwrap(); - path.set_file_name("deno.lock"); - path + match config_file.clone().to_lock_config()? { + Some(LockConfig::Bool(lock)) if !lock => { + return Ok(None); + } + Some(LockConfig::PathBuf(lock)) => config_file + .specifier + .to_file_path() + .unwrap() + .parent() + .unwrap() + .join(lock), + _ => { + let mut path = config_file.specifier.to_file_path().unwrap(); + path.set_file_name("deno.lock"); + path + } + } } else { return Ok(None); } diff --git a/cli/schemas/config-file.v1.json b/cli/schemas/config-file.v1.json index 26cd3ab77..7f6dcb4e3 100644 --- a/cli/schemas/config-file.v1.json +++ b/cli/schemas/config-file.v1.json @@ -355,6 +355,11 @@ } } } + }, + "lock": { + "description": "Whether to use a lock file or the path to use for the lock file. Can be overridden by CLI arguments.", + "type": ["string", "boolean"], + "default": true } } } diff --git a/cli/tests/run_tests.rs b/cli/tests/run_tests.rs index db6e6f685..6cae9d9e3 100644 --- a/cli/tests/run_tests.rs +++ b/cli/tests/run_tests.rs @@ -656,6 +656,19 @@ mod run { http_server: true, }); + itest!(config_file_lock_path { + args: "run --config=run/config_file_lock_path.json run/019_media_types.ts", + output: "run/config_file_lock_path.out", + exit_code: 10, + http_server: true, + }); + + itest!(lock_flag_overrides_config_file_lock_path { + args: "run --lock=run/lock_check_ok2.json --config=run/config_file_lock_path.json run/019_media_types.ts", + output: "run/019_media_types.ts.out", + http_server: true, + }); + itest!(lock_v2_check_ok { args: "run --lock=run/lock_v2_check_ok.json http://127.0.0.1:4545/run/003_relative_import.ts", @@ -3662,6 +3675,20 @@ console.log("finish"); exit_code: 0, }); + itest!(config_file_lock_false { + args: "run --config=run/config_file_lock_boolean/false.json run/config_file_lock_boolean/main.ts", + output: "run/config_file_lock_boolean/false.main.out", + http_server: true, + exit_code: 0, +}); + + itest!(config_file_lock_true { + args: "run --config=run/config_file_lock_boolean/true.json run/config_file_lock_boolean/main.ts", + output: "run/config_file_lock_boolean/true.main.out", + http_server: true, + exit_code: 10, +}); + // Check https://github.com/denoland/deno_std/issues/2882 itest!(flash_shutdown { args: "run --unstable --allow-net run/flash_shutdown/main.ts", diff --git a/cli/tests/testdata/run/config_file_lock_boolean/deno.lock b/cli/tests/testdata/run/config_file_lock_boolean/deno.lock new file mode 100644 index 000000000..059f66789 --- /dev/null +++ b/cli/tests/testdata/run/config_file_lock_boolean/deno.lock @@ -0,0 +1,7 @@ +{ + "version": "2", + "remote": { + "http://localhost:4545/subdir/mod2.ts": "cae1d3e9f3c38cd415ff52dff854be8f3d17d35f8d7b3d285e813fb0f6393a2f", + "http://localhost:4545/subdir/print_hello.ts": "foobar" + } +} diff --git a/cli/tests/testdata/run/config_file_lock_boolean/false.json b/cli/tests/testdata/run/config_file_lock_boolean/false.json new file mode 100644 index 000000000..358b7d299 --- /dev/null +++ b/cli/tests/testdata/run/config_file_lock_boolean/false.json @@ -0,0 +1,3 @@ +{ + "lock": false +} diff --git a/cli/tests/testdata/run/config_file_lock_boolean/false.main.out b/cli/tests/testdata/run/config_file_lock_boolean/false.main.out new file mode 100644 index 000000000..0d8f0a237 --- /dev/null +++ b/cli/tests/testdata/run/config_file_lock_boolean/false.main.out @@ -0,0 +1,2 @@ +Download http://localhost:4545/subdir/mod2.ts +Download http://localhost:4545/subdir/print_hello.ts diff --git a/cli/tests/testdata/run/config_file_lock_boolean/main.ts b/cli/tests/testdata/run/config_file_lock_boolean/main.ts new file mode 100644 index 000000000..baa52775d --- /dev/null +++ b/cli/tests/testdata/run/config_file_lock_boolean/main.ts @@ -0,0 +1 @@ +import "http://localhost:4545/subdir/mod2.ts"; diff --git a/cli/tests/testdata/run/config_file_lock_boolean/true.json b/cli/tests/testdata/run/config_file_lock_boolean/true.json new file mode 100644 index 000000000..090481af9 --- /dev/null +++ b/cli/tests/testdata/run/config_file_lock_boolean/true.json @@ -0,0 +1,3 @@ +{ + "lock": true +} diff --git a/cli/tests/testdata/run/config_file_lock_boolean/true.main.out b/cli/tests/testdata/run/config_file_lock_boolean/true.main.out new file mode 100644 index 000000000..313c0eb0c --- /dev/null +++ b/cli/tests/testdata/run/config_file_lock_boolean/true.main.out @@ -0,0 +1,3 @@ +[WILDCARD]The source code is invalid, as it does not match the expected hash in the lock file. + Specifier: http://localhost:4545/subdir/print_hello.ts + Lock file: [WILDCARD]deno.lock diff --git a/cli/tests/testdata/run/config_file_lock_path.json b/cli/tests/testdata/run/config_file_lock_path.json new file mode 100644 index 000000000..2c393f76e --- /dev/null +++ b/cli/tests/testdata/run/config_file_lock_path.json @@ -0,0 +1,3 @@ +{ + "lock": "./lock_check_err2.json" +} diff --git a/cli/tests/testdata/run/config_file_lock_path.out b/cli/tests/testdata/run/config_file_lock_path.out new file mode 100644 index 000000000..97d35337f --- /dev/null +++ b/cli/tests/testdata/run/config_file_lock_path.out @@ -0,0 +1,3 @@ +[WILDCARD]The source code is invalid, as it does not match the expected hash in the lock file. + Specifier: http://localhost:4545/subdir/mt_text_ecmascript.j3.js + Lock file: [WILDCARD]lock_check_err2.json |