diff --git a/crates/dtmm/src/engine.rs b/crates/dtmm/src/engine.rs index 05e792e..e481214 100644 --- a/crates/dtmm/src/engine.rs +++ b/crates/dtmm/src/engine.rs @@ -253,7 +253,7 @@ async fn build_bundles(state: Arc) -> Result<()> { .to_string() .to_ascii_lowercase(); let src = mod_dir.join(&bundle_name); - let dest = bundle_dir.clone(); + let dest = bundle_dir.join(&bundle_name); let pkg_name = pkg_info.get_name().clone(); let mod_name = mod_info.get_name().clone(); @@ -276,14 +276,18 @@ async fn build_bundles(state: Arc) -> Result<()> { dest.display() ); // We attempt to remove any previous file, so that the hard link can be created. - // We can reasonably ignore errors here, as a 'NotFound' is actually fine, the link - // may be possible anyways, or the error will be reported by it anyways. + // We can reasonably ignore errors here, as a 'NotFound' is actually fine, the copy + // may be possible despite an error here, or the error will be reported by it anyways. // TODO: There is a chance that we delete an actual game bundle, but with 64bit - // hashes, it's low enough for now, and the set up required to detect + // hashes, it's low enough for now, and the setup required to detect // "game bundle vs mod bundle" is non-trivial. - let _ = fs::remove_file(dest.as_ref()).await; - fs::hard_link(&src, dest.as_ref()).await.wrap_err_with(|| { - format!("failed to hard link bundle {pkg_name} for mod {mod_name}. src: {}, dest: {}", src.display(), dest.display()) + let _ = fs::remove_file(&dest).await; + fs::copy(&src, &dest).await.wrap_err_with(|| { + format!( + "failed to copy bundle {pkg_name} for mod {mod_name}. src: {}, dest: {}", + src.display(), + dest.display() + ) }) } .instrument(span);