fix: write lockfile in deno info (#22272)

This commit is contained in:
Luca Casonato 2024-02-19 13:02:40 +01:00 committed by GitHub
parent 7531b3500a
commit 15c64365a2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 33 additions and 5 deletions

View file

@ -1784,8 +1784,9 @@ TypeScript compiler cache: Subdirectory containing TS compiler output.",
.arg(no_config_arg())
.arg(no_remote_arg())
.arg(no_npm_arg())
.arg(no_lock_arg())
.arg(lock_arg())
.arg(lock_write_arg())
.arg(no_lock_arg())
.arg(config_arg())
.arg(import_map_arg())
.arg(node_modules_dir_arg())
@ -3506,8 +3507,7 @@ fn info_parse(flags: &mut Flags, matches: &mut ArgMatches) {
location_arg_parse(flags, matches);
ca_file_arg_parse(flags, matches);
node_modules_and_vendor_dir_arg_parse(flags, matches);
lock_arg_parse(flags, matches);
no_lock_arg_parse(flags, matches);
lock_args_parse(flags, matches);
no_remote_arg_parse(flags, matches);
no_npm_arg_parse(flags, matches);
let json = matches.get_flag("json");

View file

@ -7,6 +7,7 @@ use std::fmt::Write;
use deno_ast::ModuleSpecifier;
use deno_core::anyhow::bail;
use deno_core::anyhow::Context;
use deno_core::error::AnyError;
use deno_core::resolve_url_or_path;
use deno_core::serde_json;
@ -66,8 +67,13 @@ pub async fn info(flags: Flags, info_flags: InfoFlags) -> Result<(), AnyError> {
.create_graph_with_loader(GraphKind::All, vec![specifier], &mut loader)
.await?;
if let Some(lockfile) = maybe_lockfile {
graph_lock_or_exit(&graph, &mut lockfile.lock());
// If there is a lockfile...
if let Some(lockfile) = &maybe_lockfile {
let mut lockfile = lockfile.lock();
// validate the integrity of all the modules
graph_lock_or_exit(&graph, &mut lockfile);
// update it with anything new
lockfile.write().context("Failed writing lockfile.")?;
}
if info_flags.json {

View file

@ -30,6 +30,28 @@ fn info_with_compiled_source() {
assert_eq!(output.stderr(), "");
}
#[test]
fn info_lock_write() {
let context = TestContextBuilder::new().use_http_server().build();
context.temp_dir().write("deno.json", "{}");
let module_path = "http://127.0.0.1:4545/run/048_media_types_jsx.ts";
let output = context
.new_command()
.current_dir(context.temp_dir().path())
.args_vec(["info", module_path])
.run();
output.assert_exit_code(0);
output.skip_output_check();
assert!(
context.temp_dir().path().join("deno.lock").exists(),
"missing deno.lock"
);
}
itest!(multiple_imports {
args: "info http://127.0.0.1:4545/run/019_media_types.ts",
output: "info/multiple_imports.out",