From 18760d7760af2843ee4fc3e248868f79baa772cd Mon Sep 17 00:00:00 2001 From: Lucas Schwiderski Date: Mon, 6 Mar 2023 09:55:50 +0100 Subject: [PATCH] feat(dtmm): Remove unused bundles from previous deployment Fixes #29. --- CHANGELOG.adoc | 1 + crates/dtmm/src/controller/game.rs | 31 ++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc index d58a20f..48bc35f 100644 --- a/CHANGELOG.adoc +++ b/CHANGELOG.adoc @@ -8,6 +8,7 @@ - dtmt: implement deploying built bundles - dtmm: indicate when a deployment is necessary - dtmm: check for Steam game update before deployment +- dtmm: remove unused bundles from previous deployment === Fixed diff --git a/crates/dtmm/src/controller/game.rs b/crates/dtmm/src/controller/game.rs index f504b3a..c339407 100644 --- a/crates/dtmm/src/controller/game.rs +++ b/crates/dtmm/src/controller/game.rs @@ -589,6 +589,37 @@ pub(crate) async fn deploy_mods(state: State) -> Result<()> { .wrap_err("failed to patch boot bundle")?; bundles.append(&mut more_bundles); + if let Some(info) = &deployment_info { + let bundle_dir = Arc::new(state.game_dir.join("bundle")); + let tasks = info + .bundles + .iter() + .cloned() + .map(|v| (v, bundle_dir.clone())) + .filter_map(|(file_name, bundle_dir)| { + let contains = bundles.iter().any(|b2| { + let name = b2.name().to_murmur64().to_string(); + file_name == name + }); + + if !contains { + let task = async move { + let path = bundle_dir.join(file_name); + if let Err(err) = fs::remove_file(&path).await.wrap_err_with(|| { + format!("failed to remove unused bundle '{}'", path.display()) + }) { + tracing::error!("{:?}", err); + } + }; + Some(task) + } else { + None + } + }); + + futures::future::join_all(tasks).await; + } + tracing::info!("Patch game settings"); patch_game_settings(state.clone()) .await