1
0
Fork 0
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:
David Sherret 2024-08-18 23:01:39 -04:00 committed by GitHub
parent 28bebce544
commit 526f39fbb9
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
12 changed files with 122 additions and 98 deletions

12
Cargo.lock generated
View file

@ -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",

View file

@ -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" }

View file

@ -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

View file

@ -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(());

View file

@ -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()

View file

@ -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);

View file

@ -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],

View file

@ -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));

View file

@ -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": [

View file

@ -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

View file

@ -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 | + }

View file

@ -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 | + }