From ffbb5ce424dba9bf4a4244e87ea1272f0853e6e3 Mon Sep 17 00:00:00 2001 From: stubbfelnewpc Date: Thu, 2 Jul 2020 23:04:12 +0200 Subject: [PATCH] add clean thread --- server/podman/src/lib.rs | 39 ++++++++++++++++++++++++++++++--------- 1 file changed, 30 insertions(+), 9 deletions(-) diff --git a/server/podman/src/lib.rs b/server/podman/src/lib.rs index c920000..8913e9c 100644 --- a/server/podman/src/lib.rs +++ b/server/podman/src/lib.rs @@ -150,9 +150,12 @@ impl NixIdeManageServiceEngine for PodmanEngineTraitImpl { param: param.clone(), working_folder: eng.working_folder, }; - + thread::spawn(move || { - working_thread(thread_param); + match working_thread(&thread_param) { + Err(_) => clean_thread(&thread_param), + _ => {} + }; }); Ok(IdeState::OPENING) @@ -254,20 +257,38 @@ fn fetch_sources(repo_path: &str, param: &OpenGitParam) -> Result<(), std::io::E } } -fn working_thread(thread_param: ThreadRunningParam) { - let ide_folder = thread_param.ide_folder; - let param = thread_param.param; - fetch_sources(&format!("{}/repo", ide_folder), ¶m).unwrap(); - let mut eng = PodmanEngine::_new(thread_param.working_folder); - let ide_id = thread_param.container.ide_id; +fn clean_thread(thread_param: &ThreadRunningParam) { + let mut eng = PodmanEngine::_new(thread_param.working_folder.clone()); + eng.list + .container + .iter() + .position(|i| i.ide_id.eq(&thread_param.container.ide_id)) + .and_then(|ix| { + eng.list.container.remove(ix); + Some(0) + }) + .unwrap_or_default(); + eng.save().unwrap_or_default(); + // todo delete container + fs::remove_dir_all(eng.working_folder).unwrap_or_default(); +} + +fn working_thread(thread_param: &ThreadRunningParam) -> Result<(), Error> { + let ide_folder = &thread_param.ide_folder; + let param = &thread_param.param; + fetch_sources(&format!("{}/repo", ide_folder), ¶m).map_err(|_| Error {})?; + let mut eng = PodmanEngine::_new(thread_param.working_folder.clone()); + let ide_id = &thread_param.container.ide_id; match eng.find_mut_first_container(&ide_id) { Some(i) => { i.state = PodmanState::StartingContainer; - eng.save().unwrap(); + eng.save().map_err(|_| Error {})?; } _ => {} }; + Ok(()) } + #[test] fn test_fetch_sources() { let now = std::time::SystemTime::now()