Support update builds.
This commit is contained in:
274
src/nix_util/activity_tree_stream.rs
Normal file
274
src/nix_util/activity_tree_stream.rs
Normal file
@@ -0,0 +1,274 @@
|
||||
use crate::Result;
|
||||
|
||||
use super::activity::Activity;
|
||||
use super::activity::ActivityBuild;
|
||||
use super::activity::ActivityBuildWaiting;
|
||||
use super::activity::ActivityBuilds;
|
||||
use super::activity::ActivityCopyPath;
|
||||
use super::activity::ActivityCopyPaths;
|
||||
use super::activity::ActivityFetchTree;
|
||||
use super::activity::ActivityFileTransfer;
|
||||
use super::activity::ActivityOptimizeStore;
|
||||
use super::activity::ActivityPostBuildHook;
|
||||
use super::activity::ActivityQueryPathInfo;
|
||||
use super::activity::ActivityRealize;
|
||||
use super::activity::ActivityState;
|
||||
use super::activity::ActivitySubstitute;
|
||||
use super::activity::ActivityUnknown;
|
||||
use super::activity::ActivityVerifyPaths;
|
||||
use super::activity_tree::ActivityTree;
|
||||
use super::nix_output_stream::ActivityResultMessage;
|
||||
use super::nix_output_stream::ActivityStartMessage;
|
||||
use super::nix_output_stream::NixAction;
|
||||
use super::nix_output_stream::NixMessage;
|
||||
|
||||
pub(crate) struct ActivityTreeStream {
|
||||
activity_tree: ActivityTree,
|
||||
}
|
||||
|
||||
impl ActivityTreeStream {
|
||||
pub(crate) fn new() -> ActivityTreeStream {
|
||||
ActivityTreeStream {
|
||||
activity_tree: ActivityTree::new(),
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) fn get_tree(&self) -> &ActivityTree {
|
||||
&self.activity_tree
|
||||
}
|
||||
|
||||
pub(crate) fn get_tree_mut(&mut self) -> &mut ActivityTree {
|
||||
&mut self.activity_tree
|
||||
}
|
||||
|
||||
pub(crate) fn handle_message(&mut self, message: &NixMessage) -> Result<()> {
|
||||
let message = match message {
|
||||
NixMessage::ParseFailure(_) | NixMessage::Generic(_, _) => {
|
||||
return Ok(());
|
||||
}
|
||||
NixMessage::Action(nix_action) => nix_action,
|
||||
};
|
||||
|
||||
match message {
|
||||
NixAction::Msg(_msg_message) => {
|
||||
// if msg_message.msg.contains("nix log") {
|
||||
// eprintln!("{}", msg_message.msg);
|
||||
// }
|
||||
// if msg_message.level == 0 {
|
||||
// eprintln!("{}", msg_message.msg);
|
||||
// }
|
||||
}
|
||||
NixAction::Start(activity_start_message) => {
|
||||
match activity_start_message {
|
||||
ActivityStartMessage::Unknown(activity_start_unknown) => {
|
||||
self.activity_tree.add_activity(
|
||||
activity_start_unknown.id,
|
||||
activity_start_unknown.parent,
|
||||
Activity::Unknown(ActivityUnknown {
|
||||
state: ActivityState::default(),
|
||||
text: activity_start_unknown.text.clone(),
|
||||
}),
|
||||
)?;
|
||||
}
|
||||
ActivityStartMessage::CopyPath(activity_start_copy_path) => {
|
||||
self.activity_tree.add_activity(
|
||||
activity_start_copy_path.id,
|
||||
activity_start_copy_path.parent,
|
||||
Activity::CopyPath(ActivityCopyPath {
|
||||
state: ActivityState::default(),
|
||||
missing_path: activity_start_copy_path.missing_path.clone(),
|
||||
source: activity_start_copy_path.source.clone(),
|
||||
destination: activity_start_copy_path.destination.clone(),
|
||||
done: 0,
|
||||
expected: 0,
|
||||
}),
|
||||
)?;
|
||||
}
|
||||
ActivityStartMessage::FileTransfer(activity_start_file_transfer) => {
|
||||
self.activity_tree.add_activity(
|
||||
activity_start_file_transfer.id,
|
||||
activity_start_file_transfer.parent,
|
||||
Activity::FileTransfer(ActivityFileTransfer {
|
||||
state: ActivityState::default(),
|
||||
url: activity_start_file_transfer.url.clone(),
|
||||
done: 0,
|
||||
expected: 0,
|
||||
}),
|
||||
)?;
|
||||
}
|
||||
ActivityStartMessage::Realize(activity_start_realize) => {
|
||||
self.activity_tree.add_activity(
|
||||
activity_start_realize.id,
|
||||
activity_start_realize.parent,
|
||||
Activity::Realize(ActivityRealize {
|
||||
state: ActivityState::default(),
|
||||
}),
|
||||
)?;
|
||||
}
|
||||
ActivityStartMessage::CopyPaths(activity_start_copy_paths) => {
|
||||
self.activity_tree.add_activity(
|
||||
activity_start_copy_paths.id,
|
||||
activity_start_copy_paths.parent,
|
||||
Activity::CopyPaths(ActivityCopyPaths {
|
||||
state: ActivityState::default(),
|
||||
text: activity_start_copy_paths.text.clone(),
|
||||
done: 0,
|
||||
expected: 0,
|
||||
running: 0,
|
||||
failed: 0,
|
||||
}),
|
||||
)?;
|
||||
}
|
||||
ActivityStartMessage::Builds(activity_start_builds) => {
|
||||
self.activity_tree.add_activity(
|
||||
activity_start_builds.id,
|
||||
activity_start_builds.parent,
|
||||
Activity::Builds(ActivityBuilds {
|
||||
state: ActivityState::default(),
|
||||
done: 0,
|
||||
expected: 0,
|
||||
running: 0,
|
||||
failed: 0,
|
||||
}),
|
||||
)?;
|
||||
}
|
||||
ActivityStartMessage::Build(activity_start_build) => {
|
||||
self.activity_tree.add_activity(
|
||||
activity_start_build.id,
|
||||
activity_start_build.parent,
|
||||
Activity::Build(ActivityBuild {
|
||||
state: ActivityState::default(),
|
||||
drv_path: activity_start_build.drv_path.clone(),
|
||||
machine_name: if activity_start_build.machine_name.len() > 0 {
|
||||
Some(activity_start_build.machine_name.clone())
|
||||
} else {
|
||||
None
|
||||
},
|
||||
phase: None,
|
||||
}),
|
||||
)?;
|
||||
}
|
||||
ActivityStartMessage::OptimizeStore(activity_start_optimize_store) => {
|
||||
self.activity_tree.add_activity(
|
||||
activity_start_optimize_store.id,
|
||||
activity_start_optimize_store.parent,
|
||||
Activity::OptimizeStore(ActivityOptimizeStore {
|
||||
state: ActivityState::default(),
|
||||
}),
|
||||
)?;
|
||||
}
|
||||
ActivityStartMessage::VerifyPaths(activity_start_verify_paths) => {
|
||||
self.activity_tree.add_activity(
|
||||
activity_start_verify_paths.id,
|
||||
activity_start_verify_paths.parent,
|
||||
Activity::VerifyPaths(ActivityVerifyPaths {
|
||||
state: ActivityState::default(),
|
||||
}),
|
||||
)?;
|
||||
}
|
||||
ActivityStartMessage::Substitute(activity_start_substitute) => {
|
||||
self.activity_tree.add_activity(
|
||||
activity_start_substitute.id,
|
||||
activity_start_substitute.parent,
|
||||
Activity::Substitute(ActivitySubstitute {
|
||||
state: ActivityState::default(),
|
||||
}),
|
||||
)?;
|
||||
}
|
||||
ActivityStartMessage::QueryPathInfo(activity_start_query_path_info) => {
|
||||
self.activity_tree.add_activity(
|
||||
activity_start_query_path_info.id,
|
||||
activity_start_query_path_info.parent,
|
||||
Activity::QueryPathInfo(ActivityQueryPathInfo {
|
||||
state: ActivityState::default(),
|
||||
}),
|
||||
)?;
|
||||
}
|
||||
ActivityStartMessage::PostBuildHook(activity_start_post_build_hook) => {
|
||||
self.activity_tree.add_activity(
|
||||
activity_start_post_build_hook.id,
|
||||
activity_start_post_build_hook.parent,
|
||||
Activity::PostBuildHook(ActivityPostBuildHook {
|
||||
state: ActivityState::default(),
|
||||
}),
|
||||
)?;
|
||||
}
|
||||
ActivityStartMessage::BuildWaiting(activity_start_build_waiting) => {
|
||||
self.activity_tree.add_activity(
|
||||
activity_start_build_waiting.id,
|
||||
0,
|
||||
Activity::BuildWaiting(ActivityBuildWaiting {
|
||||
state: ActivityState::default(),
|
||||
text: activity_start_build_waiting.text.clone(),
|
||||
drv_path: activity_start_build_waiting.drv_path.clone(),
|
||||
path_resolved: activity_start_build_waiting.path_resolved.clone(),
|
||||
}),
|
||||
)?;
|
||||
}
|
||||
ActivityStartMessage::FetchTree(activity_start_fetch_tree) => {
|
||||
self.activity_tree.add_activity(
|
||||
activity_start_fetch_tree.id,
|
||||
activity_start_fetch_tree.parent,
|
||||
Activity::FetchTree(ActivityFetchTree {
|
||||
state: ActivityState::default(),
|
||||
}),
|
||||
)?;
|
||||
}
|
||||
};
|
||||
}
|
||||
NixAction::Stop(stop_message) => {
|
||||
let activity = self
|
||||
.activity_tree
|
||||
.get_activity_id(stop_message.id)
|
||||
.map(|activity_id| self.activity_tree.get_mut(&activity_id))?;
|
||||
activity.get_mut_activity().stop();
|
||||
// println!("{}", serde_json::to_string(&message)?);
|
||||
}
|
||||
NixAction::Result(activity_result_message) => {
|
||||
match activity_result_message {
|
||||
ActivityResultMessage::FileLinked(_activity_result_file_linked) => {}
|
||||
ActivityResultMessage::BuildLogLine(_activity_result_build_log_line) => {
|
||||
// These are the output from the actual build (as opposed to the output from nix).
|
||||
}
|
||||
ActivityResultMessage::UntrustedPath(_activity_result_untrusted_path) => {}
|
||||
ActivityResultMessage::CorruptedPath(_activity_result_corrupted_path) => {}
|
||||
ActivityResultMessage::SetPhase(activity_result_set_phase) => {
|
||||
let activity_id = self
|
||||
.activity_tree
|
||||
.get_activity_id(activity_result_set_phase.id)?;
|
||||
let activity = self.activity_tree.get_mut(&activity_id);
|
||||
activity
|
||||
.get_mut_activity()
|
||||
.set_phase(Some(activity_result_set_phase.phase.clone()));
|
||||
}
|
||||
ActivityResultMessage::Progress(activity_result_progress) => {
|
||||
let activity_id = self
|
||||
.activity_tree
|
||||
.get_activity_id(activity_result_progress.id)?;
|
||||
let activity = self.activity_tree.get_mut(&activity_id);
|
||||
activity.get_mut_activity().set_progress(
|
||||
activity_result_progress.done,
|
||||
activity_result_progress.expected,
|
||||
activity_result_progress.running,
|
||||
activity_result_progress.failed,
|
||||
);
|
||||
}
|
||||
ActivityResultMessage::SetExpected(activity_result_set_expected) => {
|
||||
let activity_id = self
|
||||
.activity_tree
|
||||
.get_activity_id(activity_result_set_expected.id)?;
|
||||
let activity = self.activity_tree.get_mut(&activity_id);
|
||||
activity
|
||||
.get_mut_activity()
|
||||
.set_expected(activity_result_set_expected.expected);
|
||||
}
|
||||
ActivityResultMessage::PostBuildLogLine(
|
||||
_activity_result_post_build_log_line,
|
||||
) => {}
|
||||
ActivityResultMessage::FetchStatus(_activity_result_fetch_status) => {}
|
||||
};
|
||||
}
|
||||
};
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user