diff --git a/Cargo.lock b/Cargo.lock index 2ea5f8bfa..b94786b7c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -708,9 +708,9 @@ dependencies = [ [[package]] name = "fs4" -version = "0.8.4" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7e180ac76c23b45e767bd7ae9579bc0bb458618c4bc71835926e098e61d15f8" +checksum = "ec6fcfb3c0c1d71612528825042261419d5dade9678c39a781e05b63677d9b32" dependencies = [ "rustix", "windows-sys 0.52.0", diff --git a/Cargo.toml b/Cargo.toml index 54a808b7d..7acf8fbcf 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -87,7 +87,7 @@ log = "0.4.20" env_logger = "0.10.0" thiserror = "1.0" test-log = "0.2" -fs4 = { version = "0.8.3", features = ["sync"] } +fs4 = { version = "0.10.0", features = ["sync"] } ariadne = { version = "0.4.1", features = ["auto-color"] } clap_complete = { version = "4.5.4" } schemars = "0.8" diff --git a/crates/moonbuild/src/check/normal.rs b/crates/moonbuild/src/check/normal.rs index e10ebc3f8..7e4f0006d 100644 --- a/crates/moonbuild/src/check/normal.rs +++ b/crates/moonbuild/src/check/normal.rs @@ -18,7 +18,7 @@ use anyhow::Context; -use moonutil::common::{MoonbuildOpt, MooncOpt}; +use moonutil::common::{FileLock, MoonbuildOpt, MooncOpt}; use moonutil::module::{convert_mdb_to_json, ModuleDB, ModuleDBJSON}; use n2::load::State; use std::io::BufWriter; @@ -43,6 +43,8 @@ pub fn write_pkg_lst(module: &ModuleDB, target_dir: &Path) -> anyhow::Result<()> let mj = convert_mdb_to_json(module); let pkg_json = target_dir.join("packages.json"); + // packages.json now placed in target/, should be protected for mutil-thread write + let _lock = FileLock::lock(target_dir)?; // if the file exist and the old content is the same as the new content in `module`, don't rewrite it // otherwise we create and write diff --git a/crates/moonutil/src/common.rs b/crates/moonutil/src/common.rs index 689d3a936..f1e4b7235 100644 --- a/crates/moonutil/src/common.rs +++ b/crates/moonutil/src/common.rs @@ -22,7 +22,7 @@ use crate::module::{MoonMod, MoonModJSON}; use crate::package::{convert_pkg_json_to_package, MoonPkg, MoonPkgJSON, Package}; use anyhow::{bail, Context}; use clap::ValueEnum; -use fs4::FileExt; +use fs4::fs_std::FileExt; use indexmap::IndexMap; use serde::{Deserialize, Serialize}; use std::collections::{HashMap, HashSet};