mirror of
https://github.com/denoland/deno.git
synced 2024-11-24 15:19:26 -05:00
feat(cli): support configuring the lock file in the config file (#16781)
This allows the user to completely opt out from the lock file or rename it without having to use `--no-lock` and/or `--lock` in all commands. ## Don’t Use Lock File ```json { "lock": false } ``` ## Use Lock File With a Different Name ```json { "lock": "deno2.lock" } ``` The CLI args `--no-lock` and `--lock` will always override what is in the config file. Co-authored-by: David Sherret <dsherret@users.noreply.github.com>
This commit is contained in:
parent
dac30af151
commit
44b2b950fd
12 changed files with 93 additions and 3 deletions
|
@ -429,6 +429,13 @@ pub struct TestConfig {
|
|||
pub files: FilesConfig,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Deserialize)]
|
||||
#[serde(untagged)]
|
||||
pub enum LockConfig {
|
||||
Bool(bool),
|
||||
PathBuf(PathBuf),
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub struct ConfigFileJson {
|
||||
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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",
|
||||
|
|
7
cli/tests/testdata/run/config_file_lock_boolean/deno.lock
vendored
Normal file
7
cli/tests/testdata/run/config_file_lock_boolean/deno.lock
vendored
Normal file
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"version": "2",
|
||||
"remote": {
|
||||
"http://localhost:4545/subdir/mod2.ts": "cae1d3e9f3c38cd415ff52dff854be8f3d17d35f8d7b3d285e813fb0f6393a2f",
|
||||
"http://localhost:4545/subdir/print_hello.ts": "foobar"
|
||||
}
|
||||
}
|
3
cli/tests/testdata/run/config_file_lock_boolean/false.json
vendored
Normal file
3
cli/tests/testdata/run/config_file_lock_boolean/false.json
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"lock": false
|
||||
}
|
2
cli/tests/testdata/run/config_file_lock_boolean/false.main.out
vendored
Normal file
2
cli/tests/testdata/run/config_file_lock_boolean/false.main.out
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
Download http://localhost:4545/subdir/mod2.ts
|
||||
Download http://localhost:4545/subdir/print_hello.ts
|
1
cli/tests/testdata/run/config_file_lock_boolean/main.ts
vendored
Normal file
1
cli/tests/testdata/run/config_file_lock_boolean/main.ts
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
import "http://localhost:4545/subdir/mod2.ts";
|
3
cli/tests/testdata/run/config_file_lock_boolean/true.json
vendored
Normal file
3
cli/tests/testdata/run/config_file_lock_boolean/true.json
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"lock": true
|
||||
}
|
3
cli/tests/testdata/run/config_file_lock_boolean/true.main.out
vendored
Normal file
3
cli/tests/testdata/run/config_file_lock_boolean/true.main.out
vendored
Normal file
|
@ -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
|
3
cli/tests/testdata/run/config_file_lock_path.json
vendored
Normal file
3
cli/tests/testdata/run/config_file_lock_path.json
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"lock": "./lock_check_err2.json"
|
||||
}
|
3
cli/tests/testdata/run/config_file_lock_path.out
vendored
Normal file
3
cli/tests/testdata/run/config_file_lock_path.out
vendored
Normal file
|
@ -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
|
Loading…
Reference in a new issue