feat(dtmm): Remove unused bundles from previous deployment

Fixes #29.
This commit is contained in:
Lucas Schwiderski 2023-03-06 09:55:50 +01:00
parent 2d48b96dc1
commit 18760d7760
Signed by: lucas
GPG key ID: AA12679AAA6DF4D8
2 changed files with 32 additions and 0 deletions

View file

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

View file

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