From 42f2a20da6674a07accad47fae39bf8d8182061f Mon Sep 17 00:00:00 2001 From: Paul Campbell Date: Fri, 6 Sep 2024 15:36:17 +0100 Subject: [PATCH] WIP: fix(tui): update ui when push next or main finishes Removes the artificial pause while we wait for any CI to start before checking the CI status. Closes kemitix/git-next#160 --- crates/cli/src/repo/handlers/advance_main.rs | 19 +++++++++++++------ crates/cli/src/repo/handlers/advance_next.rs | 8 +++++++- crates/cli/src/server/actor/messages.rs | 2 ++ .../src/tui/actor/handlers/server_update.rs | 6 ++++++ crates/cli/src/tui/actor/model.rs | 5 ++--- 5 files changed, 30 insertions(+), 10 deletions(-) diff --git a/crates/cli/src/repo/handlers/advance_main.rs b/crates/cli/src/repo/handlers/advance_main.rs index f1d2adc..1c18485 100644 --- a/crates/cli/src/repo/handlers/advance_main.rs +++ b/crates/cli/src/repo/handlers/advance_main.rs @@ -1,7 +1,7 @@ // use actix::prelude::*; -use git_next_core::RepoConfigSource; +use git_next_core::{git, RepoConfigSource}; use tracing::warn; @@ -35,18 +35,25 @@ impl Handler for RepoActor { commit: commit.clone(), }); - match advance_main(commit, &repo_details, &repo_config, &**open_repository) { - Err(err) => { - warn!("advance main: {err}"); + if let Err(err) = advance_main(commit, &repo_details, &repo_config, &**open_repository) { + warn!("advance main: {err}"); + self.alert_tui(format!("advance main: {err}")); + } else { + self.update_tui(RepoUpdate::MainUpdated); + if let Some(open_repository) = &self.open_repository { + match open_repository.fetch() { + Ok(()) => self.update_tui_log(git::graph::log(&self.repo_details)), + Err(err) => self.alert_tui(format!("fetching: {err}")), + } } - Ok(()) => match repo_config.source() { + match repo_config.source() { RepoConfigSource::Repo => { do_send(&addr, LoadConfigFromRepo, self.log.as_ref()); } RepoConfigSource::Server => { do_send(&addr, ValidateRepo::new(message_token), self.log.as_ref()); } - }, + } } } } diff --git a/crates/cli/src/repo/handlers/advance_next.rs b/crates/cli/src/repo/handlers/advance_next.rs index 2951601..e4908e8 100644 --- a/crates/cli/src/repo/handlers/advance_next.rs +++ b/crates/cli/src/repo/handlers/advance_next.rs @@ -1,6 +1,7 @@ // use actix::prelude::*; +use git_next_core::git; use tracing::{warn, Instrument}; use crate::{ @@ -49,7 +50,12 @@ impl Handler for RepoActor { self.message_token, ) { Ok(message_token) => { - // pause to allow any CI checks to be started + self.update_tui(RepoUpdate::NextUpdated); + match open_repository.fetch() { + Ok(()) => self.update_tui_log(git::graph::log(&self.repo_details)), + Err(err) => self.alert_tui(format!("fetching: {err}")), + } + // INFO: pause to allow any CI checks to be started let sleep_duration = self.sleep_duration; let log = self.log.clone(); async move { diff --git a/crates/cli/src/server/actor/messages.rs b/crates/cli/src/server/actor/messages.rs index a6ba308..ca98552 100644 --- a/crates/cli/src/server/actor/messages.rs +++ b/crates/cli/src/server/actor/messages.rs @@ -92,6 +92,8 @@ pub enum RepoUpdate { }, RegisteredWebhook, Opened, + NextUpdated, + MainUpdated, } message!( diff --git a/crates/cli/src/tui/actor/handlers/server_update.rs b/crates/cli/src/tui/actor/handlers/server_update.rs index ebaee6d..d82963f 100644 --- a/crates/cli/src/tui/actor/handlers/server_update.rs +++ b/crates/cli/src/tui/actor/handlers/server_update.rs @@ -58,10 +58,16 @@ impl Handler for Tui { repo_state .update_message(format!("advancing next to {commit}"), ACTING); } + RepoUpdate::NextUpdated => { + repo_state.update_message("next updated - pause while CI starts", OKAY); + } RepoUpdate::AdvancingMain { commit } => { repo_state .update_message(format!("advancing main to {commit}"), ACTING); } + RepoUpdate::MainUpdated => { + repo_state.update_message("main updated", OKAY); + } RepoUpdate::Opening => { repo_state.update_message("opening...", PREP); } diff --git a/crates/cli/src/tui/actor/model.rs b/crates/cli/src/tui/actor/model.rs index cdd4c43..524e4cf 100644 --- a/crates/cli/src/tui/actor/model.rs +++ b/crates/cli/src/tui/actor/model.rs @@ -277,9 +277,8 @@ impl RepoState { #[tracing::instrument] pub fn clear_alert(&mut self) { - match self { - Self::Identified { .. } | Self::Configured { .. } => (), - Self::Ready { alert, .. } => *alert = None, + if let Self::Ready { alert, .. } = self { + *alert = None; } }