summaryrefslogtreecommitdiff
path: root/cli
diff options
context:
space:
mode:
Diffstat (limited to 'cli')
-rw-r--r--cli/args/config_file.rs18
-rw-r--r--cli/args/lockfile.rs21
-rw-r--r--cli/schemas/config-file.v1.json5
-rw-r--r--cli/tests/run_tests.rs27
-rw-r--r--cli/tests/testdata/run/config_file_lock_boolean/deno.lock7
-rw-r--r--cli/tests/testdata/run/config_file_lock_boolean/false.json3
-rw-r--r--cli/tests/testdata/run/config_file_lock_boolean/false.main.out2
-rw-r--r--cli/tests/testdata/run/config_file_lock_boolean/main.ts1
-rw-r--r--cli/tests/testdata/run/config_file_lock_boolean/true.json3
-rw-r--r--cli/tests/testdata/run/config_file_lock_boolean/true.main.out3
-rw-r--r--cli/tests/testdata/run/config_file_lock_path.json3
-rw-r--r--cli/tests/testdata/run/config_file_lock_path.out3
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