mirror of
https://github.com/denoland/deno.git
synced 2024-11-28 16:20:57 -05:00
feat(FUTURE): terse lockfile (v4) (#25059)
This commit is contained in:
parent
28bebce544
commit
526f39fbb9
12 changed files with 122 additions and 98 deletions
12
Cargo.lock
generated
12
Cargo.lock
generated
|
@ -1721,9 +1721,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "deno_lockfile"
|
name = "deno_lockfile"
|
||||||
version = "0.20.0"
|
version = "0.21.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "23120f905aec2deed858820113e089551025b74e261c5c404812cd8e61421379"
|
checksum = "b01138860cdf20cfca4c9e6bcda2bbe577f0c784f6f6938205d522ee2b6327ed"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
|
@ -1869,9 +1869,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "deno_npm"
|
name = "deno_npm"
|
||||||
version = "0.21.4"
|
version = "0.22.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "9812c781ff6b2e0e45c32ccba9983bce84ecccf6f6a7006b750f8c5c9ac15e30"
|
checksum = "01fd279be9f522ebfaabce7ff0f4b069c2c1d737946ba57456b579f9246669e8"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"async-trait",
|
"async-trait",
|
||||||
|
@ -2778,9 +2778,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "eszip"
|
name = "eszip"
|
||||||
version = "0.73.0"
|
version = "0.74.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e1de63c5d16c099e1164154ba0c6fd1f54e1147ef635aaccc47702f8a442392a"
|
checksum = "a74ab660df48e00a4582f6ca506b3cfc5683ce80e73158c9e4dbf84341bb3aea"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"async-trait",
|
"async-trait",
|
||||||
|
|
|
@ -48,7 +48,7 @@ deno_ast = { version = "=0.41.2", features = ["transpiling"] }
|
||||||
deno_core = { version = "0.303.0" }
|
deno_core = { version = "0.303.0" }
|
||||||
|
|
||||||
deno_bench_util = { version = "0.158.0", path = "./bench_util" }
|
deno_bench_util = { version = "0.158.0", path = "./bench_util" }
|
||||||
deno_lockfile = "0.20.0"
|
deno_lockfile = "0.21.1"
|
||||||
deno_media_type = { version = "0.1.4", features = ["module_specifier"] }
|
deno_media_type = { version = "0.1.4", features = ["module_specifier"] }
|
||||||
deno_permissions = { version = "0.24.0", path = "./runtime/permissions" }
|
deno_permissions = { version = "0.24.0", path = "./runtime/permissions" }
|
||||||
deno_runtime = { version = "0.173.0", path = "./runtime" }
|
deno_runtime = { version = "0.173.0", path = "./runtime" }
|
||||||
|
|
|
@ -72,13 +72,13 @@ deno_emit = "=0.44.0"
|
||||||
deno_graph = { version = "=0.81.2" }
|
deno_graph = { version = "=0.81.2" }
|
||||||
deno_lint = { version = "=0.63.1", features = ["docs"] }
|
deno_lint = { version = "=0.63.1", features = ["docs"] }
|
||||||
deno_lockfile.workspace = true
|
deno_lockfile.workspace = true
|
||||||
deno_npm = "=0.21.4"
|
deno_npm = "=0.22.0"
|
||||||
deno_package_json.workspace = true
|
deno_package_json.workspace = true
|
||||||
deno_runtime = { workspace = true, features = ["include_js_files_for_snapshotting"] }
|
deno_runtime = { workspace = true, features = ["include_js_files_for_snapshotting"] }
|
||||||
deno_semver = "=0.5.10"
|
deno_semver = "=0.5.10"
|
||||||
deno_task_shell = "=0.17.0"
|
deno_task_shell = "=0.17.0"
|
||||||
deno_terminal.workspace = true
|
deno_terminal.workspace = true
|
||||||
eszip = "=0.73.0"
|
eszip = "=0.74.0"
|
||||||
libsui = "0.3.0"
|
libsui = "0.3.0"
|
||||||
napi_sym.workspace = true
|
napi_sym.workspace = true
|
||||||
node_resolver.workspace = true
|
node_resolver.workspace = true
|
||||||
|
|
|
@ -210,22 +210,41 @@ impl CliLockfile {
|
||||||
Ok(Some(lockfile))
|
Ok(Some(lockfile))
|
||||||
}
|
}
|
||||||
pub fn read_from_path(
|
pub fn read_from_path(
|
||||||
filename: PathBuf,
|
file_path: PathBuf,
|
||||||
frozen: bool,
|
frozen: bool,
|
||||||
) -> Result<CliLockfile, AnyError> {
|
) -> Result<CliLockfile, AnyError> {
|
||||||
match std::fs::read_to_string(&filename) {
|
match std::fs::read_to_string(&file_path) {
|
||||||
Ok(text) => Ok(CliLockfile::new(
|
Ok(text) => Ok(CliLockfile::new(
|
||||||
Lockfile::with_lockfile_content(filename, &text, false)?,
|
Lockfile::new(deno_lockfile::NewLockfileOptions {
|
||||||
|
file_path,
|
||||||
|
content: &text,
|
||||||
|
overwrite: false,
|
||||||
|
is_deno_future: *super::DENO_FUTURE,
|
||||||
|
})?,
|
||||||
frozen,
|
frozen,
|
||||||
)),
|
)),
|
||||||
Err(err) if err.kind() == std::io::ErrorKind::NotFound => Ok(
|
Err(err) if err.kind() == std::io::ErrorKind::NotFound => {
|
||||||
CliLockfile::new(Lockfile::new_empty(filename, false), frozen),
|
Ok(CliLockfile::new(
|
||||||
),
|
if *super::DENO_FUTURE {
|
||||||
|
// force version 4 for deno future
|
||||||
|
Lockfile::new(deno_lockfile::NewLockfileOptions {
|
||||||
|
file_path,
|
||||||
|
content: r#"{"version":"4"}"#,
|
||||||
|
overwrite: false,
|
||||||
|
is_deno_future: true,
|
||||||
|
})?
|
||||||
|
} else {
|
||||||
|
Lockfile::new_empty(file_path, false)
|
||||||
|
},
|
||||||
|
frozen,
|
||||||
|
))
|
||||||
|
}
|
||||||
Err(err) => Err(err).with_context(|| {
|
Err(err) => Err(err).with_context(|| {
|
||||||
format!("Failed reading lockfile '{}'", filename.display())
|
format!("Failed reading lockfile '{}'", file_path.display())
|
||||||
}),
|
}),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn error_if_changed(&self) -> Result<(), AnyError> {
|
pub fn error_if_changed(&self) -> Result<(), AnyError> {
|
||||||
if !self.frozen {
|
if !self.frozen {
|
||||||
return Ok(());
|
return Ok(());
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
||||||
|
|
||||||
|
use deno_lockfile::NewLockfileOptions;
|
||||||
use test_util as util;
|
use test_util as util;
|
||||||
use test_util::itest;
|
use test_util::itest;
|
||||||
use util::env_vars_for_npm_tests;
|
use util::env_vars_for_npm_tests;
|
||||||
|
@ -361,16 +362,21 @@ fn npm_module_check_then_error() {
|
||||||
])
|
])
|
||||||
.run()
|
.run()
|
||||||
.skip_output_check();
|
.skip_output_check();
|
||||||
let lockfile = temp_dir.path().join("deno.lock");
|
let lockfile_path = temp_dir.path().join("deno.lock");
|
||||||
let mut lockfile_content =
|
let mut lockfile = deno_lockfile::Lockfile::new(NewLockfileOptions {
|
||||||
lockfile.read_json::<deno_lockfile::LockfileContent>();
|
file_path: lockfile_path.to_path_buf(),
|
||||||
|
content: &lockfile_path.read_to_string(),
|
||||||
|
overwrite: false,
|
||||||
|
is_deno_future: false,
|
||||||
|
})
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
// make the specifier resolve to version 1
|
// make the specifier resolve to version 1
|
||||||
lockfile_content.packages.specifiers.insert(
|
lockfile.content.packages.specifiers.insert(
|
||||||
"npm:@denotest/breaking-change-between-versions".to_string(),
|
"npm:@denotest/breaking-change-between-versions".to_string(),
|
||||||
"npm:@denotest/breaking-change-between-versions@1.0.0".to_string(),
|
"npm:@denotest/breaking-change-between-versions@1.0.0".to_string(),
|
||||||
);
|
);
|
||||||
lockfile.write_json(&lockfile_content);
|
lockfile_path.write(lockfile.as_json_string());
|
||||||
temp_dir.write(
|
temp_dir.write(
|
||||||
"main.ts",
|
"main.ts",
|
||||||
"import { oldName } from 'npm:@denotest/breaking-change-between-versions'; console.log(oldName());\n",
|
"import { oldName } from 'npm:@denotest/breaking-change-between-versions'; console.log(oldName());\n",
|
||||||
|
@ -381,11 +387,11 @@ fn npm_module_check_then_error() {
|
||||||
|
|
||||||
// now update the lockfile to use version 2 instead, which should cause a
|
// now update the lockfile to use version 2 instead, which should cause a
|
||||||
// type checking error because the oldName no longer exists
|
// type checking error because the oldName no longer exists
|
||||||
lockfile_content.packages.specifiers.insert(
|
lockfile.content.packages.specifiers.insert(
|
||||||
"npm:@denotest/breaking-change-between-versions".to_string(),
|
"npm:@denotest/breaking-change-between-versions".to_string(),
|
||||||
"npm:@denotest/breaking-change-between-versions@2.0.0".to_string(),
|
"npm:@denotest/breaking-change-between-versions@2.0.0".to_string(),
|
||||||
);
|
);
|
||||||
lockfile.write_json(&lockfile_content);
|
lockfile_path.write(lockfile.as_json_string());
|
||||||
|
|
||||||
check_command
|
check_command
|
||||||
.run()
|
.run()
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
use deno_core::serde_json::json;
|
use deno_core::serde_json::json;
|
||||||
use deno_core::serde_json::Value;
|
use deno_core::serde_json::Value;
|
||||||
use deno_lockfile::Lockfile;
|
use deno_lockfile::Lockfile;
|
||||||
|
use deno_lockfile::NewLockfileOptions;
|
||||||
use test_util as util;
|
use test_util as util;
|
||||||
use url::Url;
|
use url::Url;
|
||||||
use util::assert_contains;
|
use util::assert_contains;
|
||||||
|
@ -141,11 +142,12 @@ console.log(version);"#,
|
||||||
.assert_matches_text("0.1.1\n");
|
.assert_matches_text("0.1.1\n");
|
||||||
|
|
||||||
let lockfile_path = temp_dir.path().join("deno.lock");
|
let lockfile_path = temp_dir.path().join("deno.lock");
|
||||||
let mut lockfile = Lockfile::with_lockfile_content(
|
let mut lockfile = Lockfile::new(NewLockfileOptions {
|
||||||
lockfile_path.to_path_buf(),
|
file_path: lockfile_path.to_path_buf(),
|
||||||
&lockfile_path.read_to_string(),
|
content: &lockfile_path.read_to_string(),
|
||||||
false,
|
overwrite: false,
|
||||||
)
|
is_deno_future: false,
|
||||||
|
})
|
||||||
.unwrap();
|
.unwrap();
|
||||||
*lockfile
|
*lockfile
|
||||||
.content
|
.content
|
||||||
|
@ -256,11 +258,12 @@ console.log(version);"#,
|
||||||
.assert_matches_text("0.1.1\n");
|
.assert_matches_text("0.1.1\n");
|
||||||
|
|
||||||
let lockfile_path = temp_dir.path().join("deno.lock");
|
let lockfile_path = temp_dir.path().join("deno.lock");
|
||||||
let mut lockfile = Lockfile::with_lockfile_content(
|
let mut lockfile = Lockfile::new(NewLockfileOptions {
|
||||||
lockfile_path.to_path_buf(),
|
file_path: lockfile_path.to_path_buf(),
|
||||||
&lockfile_path.read_to_string(),
|
content: &lockfile_path.read_to_string(),
|
||||||
false,
|
overwrite: false,
|
||||||
)
|
is_deno_future: false,
|
||||||
|
})
|
||||||
.unwrap();
|
.unwrap();
|
||||||
let pkg_name = "@denotest/no-module-graph@0.1.1";
|
let pkg_name = "@denotest/no-module-graph@0.1.1";
|
||||||
let original_integrity = get_lockfile_pkg_integrity(&lockfile, pkg_name);
|
let original_integrity = get_lockfile_pkg_integrity(&lockfile, pkg_name);
|
||||||
|
|
|
@ -1,15 +1,17 @@
|
||||||
{
|
{
|
||||||
"version": "3",
|
"version": "4",
|
||||||
"packages": {
|
|
||||||
"specifiers": {
|
"specifiers": {
|
||||||
"jsr:@denotest/add": "jsr:@denotest/add@1.0.0",
|
"jsr:@denotest/add": "jsr:@denotest/add@1.0.0",
|
||||||
"npm:@denotest/esm-basic@^1.0.0": "npm:@denotest/esm-basic@1.0.0"
|
"npm:@denotest/esm-basic@^1.0.0": "npm:@denotest/esm-basic@1.0.0"
|
||||||
},
|
},
|
||||||
"jsr": {
|
"jsr": {
|
||||||
"@denotest/add@1.0.0": [WILDCARD]
|
"@denotest/add@1.0.0": {
|
||||||
|
"integrity": "[WILDCARD]"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"npm": {
|
"npm": {
|
||||||
"@denotest/esm-basic@1.0.0": [WILDCARD]
|
"@denotest/esm-basic@1.0.0": {
|
||||||
|
"integrity": "[WILDCARD]"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"remote": [WILDCARD],
|
"remote": [WILDCARD],
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
const lock = JSON.parse(Deno.readTextFileSync("./deno.lock"));
|
const lock = JSON.parse(Deno.readTextFileSync("./deno.lock"));
|
||||||
const pkg = lock.packages.npm["@denotest/esm-basic@1.0.0"];
|
const pkg = lock.npm["@denotest/esm-basic@1.0.0"];
|
||||||
// Corrupt the integrity hash
|
// Corrupt the integrity hash
|
||||||
pkg.integrity = pkg.integrity.slice(0, -1);
|
pkg.integrity = pkg.integrity.slice(0, -1);
|
||||||
Deno.writeTextFileSync("./deno.lock", JSON.stringify(lock));
|
Deno.writeTextFileSync("./deno.lock", JSON.stringify(lock));
|
||||||
|
|
|
@ -1,14 +1,13 @@
|
||||||
{
|
{
|
||||||
"version": "3",
|
"version": "4",
|
||||||
"packages": {
|
|
||||||
"specifiers": {
|
"specifiers": {
|
||||||
"npm:@denotest/esm-basic": "npm:@denotest/esm-basic@1.0.0"
|
"npm:@denotest/esm-basic": "npm:@denotest/esm-basic@1.0.0"
|
||||||
},
|
},
|
||||||
"npm": {
|
"npm": {
|
||||||
"@denotest/esm-basic@1.0.0": [WILDCARD]
|
"@denotest/esm-basic@1.0.0": {
|
||||||
|
"integrity": "[WILDCARD]"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"remote": {},
|
|
||||||
"workspace": {
|
"workspace": {
|
||||||
"packageJson": {
|
"packageJson": {
|
||||||
"dependencies": [
|
"dependencies": [
|
||||||
|
|
|
@ -60,10 +60,16 @@
|
||||||
"error_when_package_json_changed": {
|
"error_when_package_json_changed": {
|
||||||
"steps": [
|
"steps": [
|
||||||
{
|
{
|
||||||
|
"envs": {
|
||||||
|
"DENO_FUTURE": "1"
|
||||||
|
},
|
||||||
"args": "cache add.ts",
|
"args": "cache add.ts",
|
||||||
"output": "[WILDCARD]"
|
"output": "[WILDCARD]"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"envs": {
|
||||||
|
"DENO_FUTURE": "1"
|
||||||
|
},
|
||||||
"args": [
|
"args": [
|
||||||
"eval",
|
"eval",
|
||||||
"Deno.writeTextFileSync(\"package.json\", JSON.stringify({ dependencies: { \"@denotest/bin\": \"0.7.0\" } }))"
|
"Deno.writeTextFileSync(\"package.json\", JSON.stringify({ dependencies: { \"@denotest/bin\": \"0.7.0\" } }))"
|
||||||
|
@ -71,6 +77,9 @@
|
||||||
"output": ""
|
"output": ""
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"envs": {
|
||||||
|
"DENO_FUTURE": "1"
|
||||||
|
},
|
||||||
"args": "cache --frozen add.ts",
|
"args": "cache --frozen add.ts",
|
||||||
"output": "frozen_package_json_changed.out",
|
"output": "frozen_package_json_changed.out",
|
||||||
"exitCode": 1
|
"exitCode": 1
|
||||||
|
|
|
@ -1,25 +1,18 @@
|
||||||
Download http://localhost:4260/@denotest/bin
|
Download http://localhost:4260/@denotest/bin
|
||||||
error: The lockfile is out of date. Run `deno cache --frozen=false` or rerun with `--frozen=false` to update it.
|
error: The lockfile is out of date. Run `deno cache --frozen=false`, `deno install --frozen=false`, or rerun with `--frozen=false` to update it.
|
||||||
changes:
|
changes:
|
||||||
5 | - "npm:@denotest/add@1": "npm:@denotest/add@1.0.0"
|
4 | - "npm:@denotest/add@1": "npm:@denotest/add@1.0.0"
|
||||||
5 | + "npm:@denotest/add@1": "npm:@denotest/add@1.0.0",
|
4 | + "npm:@denotest/add@1": "npm:@denotest/add@1.0.0",
|
||||||
6 | + "npm:@denotest/bin@0.7.0": "npm:@denotest/bin@0.7.0"
|
5 | + "npm:@denotest/bin@0.7.0": "npm:@denotest/bin@0.7.0"
|
||||||
11 | - }
|
9 | - }
|
||||||
12 | - }
|
10 | + },
|
||||||
13 | - },
|
11 | + "@denotest/bin@0.7.0": {
|
||||||
14 | - "remote": {}
|
12 | + "integrity": "[WILDLINE]"
|
||||||
12 | + },
|
13 | + }
|
||||||
13 | + "@denotest/bin@0.7.0": {
|
14 | + },
|
||||||
14 | + "integrity": "[WILDCARD]",
|
15 | + "workspace": {
|
||||||
15 | + "dependencies": {}
|
16 | + "packageJson": {
|
||||||
16 | + }
|
17 | + "dependencies": [
|
||||||
17 | + }
|
18 | + "npm:@denotest/bin@0.7.0"
|
||||||
18 | + },
|
19 | + ]
|
||||||
19 | + "remote": {},
|
20 | + }
|
||||||
20 | + "workspace": {
|
|
||||||
21 | + "packageJson": {
|
|
||||||
22 | + "dependencies": [
|
|
||||||
23 | + "npm:@denotest/bin@0.7.0"
|
|
||||||
24 | + ]
|
|
||||||
25 | + }
|
|
||||||
26 | + }
|
|
||||||
|
|
|
@ -1,24 +1,17 @@
|
||||||
error: The lockfile is out of date. Run `deno cache --frozen=false`, `deno install --frozen=false`, or rerun with `--frozen=false` to update it.
|
error: The lockfile is out of date. Run `deno cache --frozen=false`, `deno install --frozen=false`, or rerun with `--frozen=false` to update it.
|
||||||
changes:
|
changes:
|
||||||
5 | - "npm:@denotest/add@1": "npm:@denotest/add@1.0.0"
|
4 | - "npm:@denotest/add@1": "npm:@denotest/add@1.0.0"
|
||||||
5 | + "npm:@denotest/add@1": "npm:@denotest/add@1.0.0",
|
4 | + "npm:@denotest/add@1": "npm:@denotest/add@1.0.0",
|
||||||
6 | + "npm:@denotest/bin@0.7.0": "npm:@denotest/bin@0.7.0"
|
5 | + "npm:@denotest/bin@0.7.0": "npm:@denotest/bin@0.7.0"
|
||||||
11 | - }
|
9 | - }
|
||||||
12 | - }
|
10 | + },
|
||||||
13 | - },
|
11 | + "@denotest/bin@0.7.0": {
|
||||||
14 | - "remote": {}
|
12 | + "integrity": "[WILDLINE]"
|
||||||
12 | + },
|
13 | + }
|
||||||
13 | + "@denotest/bin@0.7.0": {
|
14 | + },
|
||||||
14 | + "integrity": "[WILDCARD]",
|
15 | + "workspace": {
|
||||||
15 | + "dependencies": {}
|
16 | + "packageJson": {
|
||||||
16 | + }
|
17 | + "dependencies": [
|
||||||
17 | + }
|
18 | + "npm:@denotest/bin@0.7.0"
|
||||||
18 | + },
|
19 | + ]
|
||||||
19 | + "remote": {},
|
20 | + }
|
||||||
20 | + "workspace": {
|
|
||||||
21 | + "packageJson": {
|
|
||||||
22 | + "dependencies": [
|
|
||||||
23 | + "npm:@denotest/bin@0.7.0"
|
|
||||||
24 | + ]
|
|
||||||
25 | + }
|
|
||||||
26 | + }
|
|
||||||
|
|
Loading…
Reference in a new issue