From b66c0873838459b02c3d8d5176c29a72b16210b5 Mon Sep 17 00:00:00 2001 From: Jhonas Date: Wed, 29 Jan 2025 15:57:47 -0300 Subject: [PATCH] fix: raise resolution errors when it was expect an exception --- lib/syskit/cli/doc/gen.rb | 15 ++++++++++++--- lib/syskit/gui/component_network_view.rb | 10 ++++++++-- lib/syskit/test/stub_network.rb | 13 +++++++++---- 3 files changed, 29 insertions(+), 9 deletions(-) diff --git a/lib/syskit/cli/doc/gen.rb b/lib/syskit/cli/doc/gen.rb index 71c8914d5..c25c4972a 100644 --- a/lib/syskit/cli/doc/gen.rb +++ b/lib/syskit/cli/doc/gen.rb @@ -72,16 +72,20 @@ def self.save_profile_model(target_path, profile_m) # @param [Actions::Profile::Definition] profile_def def self.save_profile_definition(target_path, profile_def) begin - task = compute_system_network( + task, resolution_errors = compute_system_network( profile_def, validate_abstract_network: false, validate_generated_network: false ) + unless resolution_errors.empty? + raise NetworkGeneration::PartialNetworkResolution, + resolution_errors + end hierarchy, dataflow = save_profile_definition_graphs(target_path, task, profile_def) .map(&:to_s) - rescue StandardError => e + rescue StandardError, NetworkGeneration::PartialNetworkResolution => e Roby.warn "could not generate profile definition graph for " \ "#{profile_def.name}" Roby.log_exception_with_backtrace(e, Roby, :warn) @@ -266,7 +270,12 @@ def self.compute_system_network(model, main_plan = Roby::Plan.new, **options) main_plan.add(original_task = model.as_plan) engine = Syskit::NetworkGeneration::Engine.new(main_plan) planning_task = original_task.planning_task - mapping = engine.compute_system_network([planning_task], **options) + mapping, resolution_errors = + engine.compute_system_network([planning_task], **options) + unless resolution_errors.empty? + raise Syskit::NetworkGeneration::PartialNetworkResolution, + resolution_errors + end if engine.work_plan.respond_to?(:commit_transaction) engine.work_plan.commit_transaction diff --git a/lib/syskit/gui/component_network_view.rb b/lib/syskit/gui/component_network_view.rb index fdb0ff68b..7cc756daa 100644 --- a/lib/syskit/gui/component_network_view.rb +++ b/lib/syskit/gui/component_network_view.rb @@ -150,11 +150,17 @@ def render(model, begin if method == :compute_system_network tic = Time.now - @task = compute_system_network(model, plan) + @task, resolution_errors = compute_system_network(model, plan) + exception = NetworkGeneration::PartialNetworkResolution.new( + resolution_errors + ) timing = Time.now - tic elsif method == :compute_deployed_network tic = Time.now - @task = compute_deployed_network(model, plan) + @task, resolution_errors = compute_deployed_network(model, plan) + exception = NetworkGeneration::PartialNetworkResolution.new( + resolution_errors + ) timing = Time.now - tic else @task = instanciate_model(model, plan, instanciate_options) diff --git a/lib/syskit/test/stub_network.rb b/lib/syskit/test/stub_network.rb index c38f0ada6..f780aa713 100644 --- a/lib/syskit/test/stub_network.rb +++ b/lib/syskit/test/stub_network.rb @@ -105,10 +105,15 @@ def apply_in_transaction(trsc, root_tasks, remote_task: false) trsc.static_garbage_collect( protected_roots: trsc_new_roots | trsc_other_tasks ) - NetworkGeneration::SystemNetworkGenerator - .verify_task_allocation( - trsc, components: trsc_tasks.find_all(&:plan) - ) + allocation_error = NetworkGeneration::SystemNetworkGenerator + .verify_task_allocation( + trsc, syskit_tasks, merge_solver, + components: trsc_tasks.find_all(&:plan) + ) + unless allocation_error.empty? + raise NetworkGeneration::PartialNetworkResolution, allocation_error + end + mapped_tasks end