roby 0.8.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.deep-cover.rb +3 -0
- data/.gitattributes +1 -0
- data/.gitignore +24 -0
- data/.simplecov +10 -0
- data/.travis.yml +17 -0
- data/.yardopts +4 -0
- data/Gemfile +15 -0
- data/README.md +11 -0
- data/Rakefile +47 -177
- data/benchmark/{alloc_misc.rb → attic/alloc_misc.rb} +2 -2
- data/benchmark/{discovery_latency.rb → attic/discovery_latency.rb} +19 -19
- data/benchmark/{garbage_collection.rb → attic/garbage_collection.rb} +9 -9
- data/benchmark/{genom.rb → attic/genom.rb} +0 -0
- data/benchmark/attic/transactions.rb +62 -0
- data/benchmark/plan_basic_operations.rb +28 -0
- data/benchmark/relations/graph.rb +63 -0
- data/benchmark/ruby/identity.rb +18 -0
- data/benchmark/ruby/set_intersect_vs_hash_merge.rb +39 -0
- data/benchmark/ruby/yield_vs_block.rb +35 -0
- data/benchmark/run +5 -0
- data/benchmark/synthetic_plan_modifications_with_transactions.rb +79 -0
- data/benchmark/transactions.rb +99 -51
- data/bin/roby +38 -197
- data/bin/roby-display +14 -0
- data/bin/roby-log +3 -176
- data/doc/guide/{src → attic}/abstraction/achieve_with.page +1 -1
- data/doc/guide/{src → attic}/abstraction/forwarding.page +1 -1
- data/doc/guide/{src → attic}/abstraction/hierarchy.page +1 -1
- data/doc/guide/{src → attic}/abstraction/index.page +1 -1
- data/doc/guide/{src → attic}/abstraction/task_models.page +1 -1
- data/doc/guide/{overview.rdoc → attic/cycle/api_overview.rdoc} +6 -1
- data/doc/guide/{src → attic}/cycle/cycle-overview.png +0 -0
- data/doc/guide/{src → attic}/cycle/cycle-overview.svg +0 -0
- data/doc/guide/attic/cycle/error_handling.page +98 -0
- data/doc/guide/{src → attic}/cycle/error_instantaneous_repair.png +0 -0
- data/doc/guide/{src → attic}/cycle/error_instantaneous_repair.svg +0 -0
- data/doc/guide/{src/cycle/error_handling.page → attic/cycle/error_sources.page} +46 -89
- data/doc/guide/{src → attic}/cycle/garbage_collection.page +1 -1
- data/doc/guide/{src → attic}/cycle/index.page +1 -1
- data/doc/guide/{src → attic}/cycle/propagation.page +11 -1
- data/doc/guide/{src → attic}/cycle/propagation_diamond.png +0 -0
- data/doc/guide/{src → attic}/cycle/propagation_diamond.svg +0 -0
- data/doc/guide/attic/plans/building_plans.page +89 -0
- data/doc/guide/attic/plans/code.page +192 -0
- data/doc/guide/{src/basics → attic/plans}/events.page +3 -4
- data/doc/guide/attic/plans/index.page +7 -0
- data/doc/guide/{plan_modifications.rdoc → attic/plans/plan_modifications.rdoc} +5 -3
- data/doc/guide/{src/basics → attic/plans}/plan_objects.page +2 -1
- data/doc/guide/attic/plans/querying_plans.page +5 -0
- data/doc/guide/{src/basics → attic/plans}/tasks.page +20 -20
- data/doc/guide/config.yaml +7 -4
- data/doc/guide/ext/extended_menu.rb +29 -0
- data/doc/guide/ext/init.rb +6 -0
- data/doc/guide/ext/rdoc_links.rb +7 -6
- data/doc/guide/src/advanced_concepts/history.page +5 -0
- data/doc/guide/src/advanced_concepts/index.page +11 -0
- data/doc/guide/src/advanced_concepts/recognizing_patterns.page +83 -0
- data/doc/guide/src/advanced_concepts/scheduling.page +87 -0
- data/doc/guide/src/advanced_concepts/transactions.page +5 -0
- data/doc/guide/src/advanced_concepts/unreachability.page +42 -0
- data/doc/guide/src/base.template +96 -0
- data/doc/guide/src/basics_shell_header.txt +5 -7
- data/doc/guide/src/building/action_coordination.page +96 -0
- data/doc/guide/src/building/actions.page +124 -0
- data/doc/guide/src/building/file_layout.page +71 -0
- data/doc/guide/src/building/index.page +50 -0
- data/doc/guide/src/building/patterns.page +86 -0
- data/doc/guide/src/building/patterns_forwarding.png +0 -0
- data/doc/guide/src/building/patterns_forwarding.svg +277 -0
- data/doc/guide/src/building/runtime.page +95 -0
- data/doc/guide/src/building/task_models.page +94 -0
- data/doc/guide/src/building/tasks.page +284 -0
- data/doc/guide/src/concepts/error_handling.page +100 -0
- data/doc/guide/src/concepts/exception_propagation.png +0 -0
- data/doc/guide/src/concepts/exception_propagation.svg +445 -0
- data/doc/guide/src/concepts/execution.page +85 -0
- data/doc/guide/src/concepts/execution.png +0 -0
- data/doc/guide/src/concepts/execution.svg +573 -0
- data/doc/guide/src/concepts/execution_cycle.png +0 -0
- data/doc/guide/src/concepts/garbage_collection.page +57 -0
- data/doc/guide/src/concepts/index.page +27 -0
- data/doc/guide/src/concepts/plans.page +101 -0
- data/doc/guide/src/concepts/policy.page +31 -0
- data/doc/guide/src/concepts/reactor.page +61 -0
- data/doc/guide/src/concepts/simple_plan_example.png +0 -0
- data/doc/guide/src/concepts/simple_plan_example.svg +376 -0
- data/doc/guide/src/default.template +9 -74
- data/doc/guide/src/event_relations/forward.page +71 -0
- data/doc/guide/src/event_relations/index.page +12 -0
- data/doc/guide/src/event_relations/scheduling_constraints.page +43 -0
- data/doc/guide/src/event_relations/signal.page +55 -0
- data/doc/guide/src/event_relations/temporal_constraints.page +77 -0
- data/doc/guide/src/htmldoc.metainfo +21 -8
- data/doc/guide/src/index.page +8 -3
- data/doc/guide/src/{introduction/install.page → installation/index.page} +37 -25
- data/doc/guide/src/installation/publications.page +14 -0
- data/doc/guide/src/{introduction → installation}/videos.page +14 -7
- data/doc/guide/src/interacting/index.page +16 -0
- data/doc/guide/src/interacting/run.page +33 -0
- data/doc/guide/src/interacting/shell.page +95 -0
- data/doc/guide/src/plugins/creating_plugins.page +72 -0
- data/doc/guide/src/plugins/index.page +27 -5
- data/doc/guide/src/plugins/{fault_tolerance.page → standard_plugins/fault_tolerance.page} +2 -2
- data/doc/guide/src/plugins/standard_plugins/index.page +11 -0
- data/doc/guide/src/plugins/{subsystems.page → standard_plugins/subsystems.page} +2 -2
- data/doc/guide/src/style_screen.css +687 -0
- data/doc/guide/src/task_relations/dependency.page +107 -0
- data/doc/guide/src/task_relations/executed_by.page +77 -0
- data/doc/guide/src/task_relations/index.page +12 -0
- data/doc/guide/src/task_relations/new_relations.page +119 -0
- data/doc/guide/src/task_relations/planned_by.page +46 -0
- data/doc/guide/src/tutorial/app.page +117 -0
- data/doc/guide/src/{basics → tutorial}/code_examples.page +6 -5
- data/doc/guide/src/{basics → tutorial}/dry.page +15 -15
- data/doc/guide/src/{basics → tutorial}/errors.page +43 -68
- data/doc/guide/src/tutorial/events.page +195 -0
- data/doc/guide/src/{basics → tutorial}/hierarchy.page +53 -52
- data/doc/guide/src/tutorial/index.page +13 -0
- data/doc/guide/src/tutorial/log_replay/goForward_1.png +0 -0
- data/doc/guide/src/tutorial/log_replay/goForward_2.png +0 -0
- data/doc/guide/src/tutorial/log_replay/goForward_3.png +0 -0
- data/doc/guide/src/{basics → tutorial}/log_replay/goForward_4.png +0 -0
- data/doc/guide/src/tutorial/log_replay/goForward_5.png +0 -0
- data/doc/guide/src/{basics → tutorial}/log_replay/hierarchy_error_1.png +0 -0
- data/doc/guide/src/{basics → tutorial}/log_replay/hierarchy_error_2.png +0 -0
- data/doc/guide/src/{basics → tutorial}/log_replay/hierarchy_error_3.png +0 -0
- data/doc/guide/src/tutorial/log_replay/moveto_code_error.png +0 -0
- data/doc/guide/src/{basics → tutorial}/log_replay/plan_repair_1.png +0 -0
- data/doc/guide/src/{basics → tutorial}/log_replay/plan_repair_2.png +0 -0
- data/doc/guide/src/{basics → tutorial}/log_replay/plan_repair_3.png +0 -0
- data/doc/guide/src/tutorial/log_replay/plan_repair_4.png +0 -0
- data/doc/guide/src/tutorial/log_replay/roby_log_main_window.png +0 -0
- data/doc/guide/src/{basics → tutorial}/log_replay/roby_log_relation_window.png +0 -0
- data/doc/guide/src/{basics → tutorial}/log_replay/roby_replay_event_representation.png +0 -0
- data/doc/guide/src/tutorial/relations_display.page +153 -0
- data/doc/guide/src/{basics → tutorial}/roby_cycle_overview.png +0 -0
- data/doc/guide/src/tutorial/shell.page +121 -0
- data/doc/guide/src/{basics → tutorial}/summary.page +1 -1
- data/doc/guide/src/tutorial/tasks.page +374 -0
- data/lib/roby.rb +102 -47
- data/lib/roby/actions.rb +17 -0
- data/lib/roby/actions/action.rb +80 -0
- data/lib/roby/actions/interface.rb +45 -0
- data/lib/roby/actions/library.rb +23 -0
- data/lib/roby/actions/models/action.rb +224 -0
- data/lib/roby/actions/models/coordination_action.rb +58 -0
- data/lib/roby/actions/models/interface.rb +22 -0
- data/lib/roby/actions/models/interface_base.rb +294 -0
- data/lib/roby/actions/models/library.rb +12 -0
- data/lib/roby/actions/models/method_action.rb +90 -0
- data/lib/roby/actions/task.rb +114 -0
- data/lib/roby/and_generator.rb +125 -0
- data/lib/roby/app.rb +2795 -829
- data/lib/roby/app/autotest_console_reporter.rb +138 -0
- data/lib/roby/app/base.rb +21 -0
- data/lib/roby/app/cucumber.rb +2 -0
- data/lib/roby/app/cucumber/controller.rb +439 -0
- data/lib/roby/app/cucumber/helpers.rb +280 -0
- data/lib/roby/app/cucumber/world.rb +32 -0
- data/lib/roby/app/debug.rb +136 -0
- data/lib/roby/app/gen.rb +2 -0
- data/lib/roby/app/rake.rb +178 -38
- data/lib/roby/app/robot_config.rb +9 -0
- data/lib/roby/app/robot_names.rb +115 -0
- data/lib/roby/app/run.rb +3 -2
- data/lib/roby/app/scripts.rb +72 -0
- data/lib/roby/app/scripts/autotest.rb +173 -0
- data/lib/roby/app/scripts/display.rb +2 -0
- data/lib/roby/app/scripts/restart.rb +52 -0
- data/lib/roby/app/scripts/results.rb +17 -8
- data/lib/roby/app/scripts/run.rb +155 -24
- data/lib/roby/app/scripts/shell.rb +147 -62
- data/lib/roby/app/scripts/test.rb +107 -22
- data/lib/roby/app/test_reporter.rb +74 -0
- data/lib/roby/app/test_server.rb +159 -0
- data/lib/roby/app/vagrant.rb +47 -0
- data/lib/roby/backports.rb +16 -0
- data/lib/roby/cli/display.rb +190 -0
- data/lib/roby/cli/exceptions.rb +17 -0
- data/lib/roby/cli/gen/actions/class.rb +5 -0
- data/lib/roby/cli/gen/actions/test.rb +6 -0
- data/lib/roby/cli/gen/app/.yardopts +6 -0
- data/lib/roby/cli/gen/app/README.md +28 -0
- data/lib/roby/cli/gen/app/Rakefile +15 -0
- data/{app → lib/roby/cli/gen/app}/config/app.yml +29 -39
- data/lib/roby/cli/gen/app/models/.gitattributes +1 -0
- data/{app → lib/roby/cli/gen/app/scripts}/controllers/.gitattributes +0 -0
- data/{app/data/.gitattributes → lib/roby/cli/gen/app/test/.gitignore} +0 -0
- data/lib/roby/cli/gen/class/class.rb +6 -0
- data/lib/roby/cli/gen/class/test.rb +7 -0
- data/lib/roby/cli/gen/helpers.rb +203 -0
- data/lib/roby/cli/gen/module/module.rb +5 -0
- data/lib/roby/cli/gen/module/test.rb +6 -0
- data/lib/roby/cli/gen/roby_app/config/init.rb +17 -0
- data/lib/roby/cli/gen/roby_app/config/robots/robot.rb +40 -0
- data/lib/roby/cli/gen/task/class.rb +44 -0
- data/lib/roby/cli/gen/task/test.rb +6 -0
- data/lib/roby/cli/gen_main.rb +120 -0
- data/lib/roby/cli/log.rb +276 -0
- data/lib/roby/cli/log/flamegraph.html +499 -0
- data/lib/roby/cli/log/flamegraph_renderer.rb +88 -0
- data/lib/roby/cli/main.rb +153 -0
- data/lib/roby/coordination.rb +60 -0
- data/lib/roby/coordination/action_script.rb +25 -0
- data/lib/roby/coordination/action_state_machine.rb +125 -0
- data/lib/roby/coordination/actions.rb +106 -0
- data/lib/roby/coordination/base.rb +145 -0
- data/lib/roby/coordination/calculus.rb +40 -0
- data/lib/roby/coordination/child.rb +28 -0
- data/lib/roby/coordination/event.rb +29 -0
- data/lib/roby/coordination/fault_handler.rb +25 -0
- data/lib/roby/coordination/fault_handling_task.rb +13 -0
- data/lib/roby/coordination/fault_response_table.rb +110 -0
- data/lib/roby/coordination/models/action_script.rb +64 -0
- data/lib/roby/coordination/models/action_state_machine.rb +224 -0
- data/lib/roby/coordination/models/actions.rb +191 -0
- data/lib/roby/coordination/models/arguments.rb +55 -0
- data/lib/roby/coordination/models/base.rb +176 -0
- data/lib/roby/coordination/models/capture.rb +86 -0
- data/lib/roby/coordination/models/child.rb +35 -0
- data/lib/roby/coordination/models/event.rb +41 -0
- data/lib/roby/coordination/models/exceptions.rb +42 -0
- data/lib/roby/coordination/models/fault_handler.rb +219 -0
- data/lib/roby/coordination/models/fault_response_table.rb +77 -0
- data/lib/roby/coordination/models/root.rb +22 -0
- data/lib/roby/coordination/models/script.rb +283 -0
- data/lib/roby/coordination/models/task.rb +184 -0
- data/lib/roby/coordination/models/task_from_action.rb +50 -0
- data/lib/roby/coordination/models/task_from_as_plan.rb +33 -0
- data/lib/roby/coordination/models/task_from_instanciation_object.rb +31 -0
- data/lib/roby/coordination/models/task_from_variable.rb +27 -0
- data/lib/roby/coordination/models/task_with_dependencies.rb +48 -0
- data/lib/roby/coordination/models/variable.rb +32 -0
- data/lib/roby/coordination/script.rb +200 -0
- data/lib/roby/coordination/script_instruction.rb +12 -0
- data/lib/roby/coordination/task.rb +45 -0
- data/lib/roby/coordination/task_base.rb +69 -0
- data/lib/roby/coordination/task_script.rb +293 -0
- data/lib/roby/coordination/task_state_machine.rb +308 -0
- data/lib/roby/decision_control.rb +33 -21
- data/lib/roby/distributed_object.rb +76 -0
- data/lib/roby/droby.rb +17 -0
- data/lib/roby/droby/droby_id.rb +6 -0
- data/lib/roby/droby/enable.rb +153 -0
- data/lib/roby/droby/event_logger.rb +189 -0
- data/lib/roby/droby/event_logging.rb +57 -0
- data/lib/roby/droby/exceptions.rb +14 -0
- data/lib/roby/droby/identifiable.rb +22 -0
- data/lib/roby/droby/logfile.rb +141 -0
- data/lib/roby/droby/logfile/client.rb +176 -0
- data/lib/roby/droby/logfile/file_format.md +97 -0
- data/lib/roby/droby/logfile/index.rb +117 -0
- data/lib/roby/droby/logfile/reader.rb +139 -0
- data/lib/roby/droby/logfile/server.rb +199 -0
- data/lib/roby/droby/logfile/writer.rb +114 -0
- data/lib/roby/droby/marshal.rb +264 -0
- data/lib/roby/droby/marshallable.rb +12 -0
- data/lib/roby/droby/null_event_logger.rb +25 -0
- data/lib/roby/droby/object_manager.rb +205 -0
- data/lib/roby/droby/peer_id.rb +6 -0
- data/lib/roby/droby/plan_rebuilder.rb +373 -0
- data/lib/roby/droby/rebuilt_plan.rb +160 -0
- data/lib/roby/droby/remote_droby_id.rb +6 -0
- data/lib/roby/droby/timepoints.rb +205 -0
- data/lib/roby/droby/timepoints_ctf.metadata.erb +101 -0
- data/lib/roby/droby/timepoints_ctf.rb +125 -0
- data/lib/roby/droby/v5.rb +14 -0
- data/lib/roby/droby/v5/builtin.rb +120 -0
- data/lib/roby/droby/v5/droby_class.rb +45 -0
- data/lib/roby/droby/v5/droby_constant.rb +81 -0
- data/lib/roby/droby/v5/droby_dump.rb +1026 -0
- data/lib/roby/droby/v5/droby_id.rb +44 -0
- data/lib/roby/droby/v5/droby_model.rb +82 -0
- data/lib/roby/droby/v5/peer_id.rb +10 -0
- data/lib/roby/droby/v5/remote_droby_id.rb +42 -0
- data/lib/roby/event.rb +79 -957
- data/lib/roby/event_constraints.rb +835 -0
- data/lib/roby/event_generator.rb +1047 -0
- data/lib/roby/event_structure/causal_link.rb +6 -0
- data/lib/roby/event_structure/forwarding.rb +6 -0
- data/lib/roby/event_structure/precedence.rb +7 -0
- data/lib/roby/event_structure/signal.rb +8 -0
- data/lib/roby/event_structure/temporal_constraints.rb +640 -0
- data/lib/roby/exceptions.rb +446 -152
- data/lib/roby/executable_plan.rb +549 -0
- data/lib/roby/execution_engine.rb +1997 -950
- data/lib/roby/filter_generator.rb +26 -0
- data/lib/roby/gui/chronicle_view.rb +225 -0
- data/lib/roby/gui/chronicle_widget.rb +925 -0
- data/lib/roby/gui/dot_id.rb +11 -0
- data/lib/roby/gui/exception_view.rb +44 -0
- data/lib/roby/gui/log_display.rb +273 -0
- data/lib/roby/gui/model_views.rb +2 -0
- data/lib/roby/gui/model_views/action_interface.rb +53 -0
- data/lib/roby/gui/model_views/task.rb +47 -0
- data/lib/roby/gui/model_views/task.rhtml +41 -0
- data/lib/roby/gui/object_info_view.rb +89 -0
- data/lib/roby/gui/plan_dot_layout.rb +427 -0
- data/lib/roby/gui/plan_rebuilder_widget.rb +357 -0
- data/lib/roby/gui/qt4_toMSecsSinceEpoch.rb +8 -0
- data/lib/roby/gui/relations_view.rb +278 -0
- data/lib/roby/gui/relations_view/relations.ui +139 -0
- data/lib/roby/gui/relations_view/relations_canvas.rb +1088 -0
- data/lib/roby/gui/relations_view/relations_config.rb +292 -0
- data/lib/roby/gui/relations_view/relations_view.ui +53 -0
- data/lib/roby/gui/scheduler_view.css +24 -0
- data/lib/roby/gui/scheduler_view.rb +46 -0
- data/lib/roby/gui/scheduler_view.rhtml +53 -0
- data/lib/roby/gui/stepping.rb +93 -0
- data/lib/roby/gui/stepping.ui +181 -0
- data/lib/roby/gui/styles.rb +81 -0
- data/lib/roby/gui/task_display_configuration.rb +42 -0
- data/lib/roby/gui/task_state_at.rb +38 -0
- data/lib/roby/hooks.rb +26 -0
- data/lib/roby/interface.rb +136 -469
- data/lib/roby/interface/async.rb +20 -0
- data/lib/roby/interface/async/action_monitor.rb +188 -0
- data/lib/roby/interface/async/interface.rb +498 -0
- data/lib/roby/interface/async/job_monitor.rb +213 -0
- data/lib/roby/interface/async/log.rb +238 -0
- data/lib/roby/interface/async/new_job_listener.rb +79 -0
- data/lib/roby/interface/async/ui_connector.rb +183 -0
- data/lib/roby/interface/client.rb +553 -0
- data/lib/roby/interface/command.rb +24 -0
- data/lib/roby/interface/command_argument.rb +16 -0
- data/lib/roby/interface/command_library.rb +92 -0
- data/lib/roby/interface/droby_channel.rb +174 -0
- data/lib/roby/interface/exceptions.rb +22 -0
- data/lib/roby/interface/interface.rb +655 -0
- data/lib/roby/interface/job.rb +47 -0
- data/lib/roby/interface/rest.rb +10 -0
- data/lib/roby/interface/rest/api.rb +29 -0
- data/lib/roby/interface/rest/helpers.rb +24 -0
- data/lib/roby/interface/rest/server.rb +212 -0
- data/lib/roby/interface/server.rb +154 -0
- data/lib/roby/interface/shell_client.rb +468 -0
- data/lib/roby/interface/shell_subcommand.rb +24 -0
- data/lib/roby/interface/subcommand_client.rb +35 -0
- data/lib/roby/interface/tcp.rb +168 -0
- data/lib/roby/models/arguments.rb +112 -0
- data/lib/roby/models/plan_object.rb +83 -0
- data/lib/roby/models/task.rb +835 -0
- data/lib/roby/models/task_event.rb +62 -0
- data/lib/roby/models/task_service.rb +78 -0
- data/lib/roby/or_generator.rb +88 -0
- data/lib/roby/plan.rb +1751 -864
- data/lib/roby/plan_object.rb +611 -0
- data/lib/roby/plan_service.rb +200 -0
- data/lib/roby/promise.rb +332 -0
- data/lib/roby/queries.rb +23 -0
- data/lib/roby/queries/and_matcher.rb +32 -0
- data/lib/roby/queries/any.rb +27 -0
- data/lib/roby/queries/code_error_matcher.rb +58 -0
- data/lib/roby/queries/event_generator_matcher.rb +9 -0
- data/lib/roby/queries/execution_exception_matcher.rb +165 -0
- data/lib/roby/queries/index.rb +165 -0
- data/lib/roby/queries/localized_error_matcher.rb +149 -0
- data/lib/roby/queries/matcher_base.rb +107 -0
- data/lib/roby/queries/none.rb +27 -0
- data/lib/roby/queries/not_matcher.rb +30 -0
- data/lib/roby/queries/op_matcher.rb +8 -0
- data/lib/roby/queries/or_matcher.rb +30 -0
- data/lib/roby/queries/plan_object_matcher.rb +363 -0
- data/lib/roby/queries/query.rb +188 -0
- data/lib/roby/queries/task_event_generator_matcher.rb +86 -0
- data/lib/roby/queries/task_matcher.rb +344 -0
- data/lib/roby/relations.rb +42 -678
- data/lib/roby/relations/bidirectional_directed_adjacency_graph.rb +492 -0
- data/lib/roby/relations/directed_relation_support.rb +268 -0
- data/lib/roby/relations/event_relation_graph.rb +19 -0
- data/lib/roby/relations/fork_merge_visitor.rb +154 -0
- data/lib/roby/relations/graph.rb +533 -0
- data/lib/roby/relations/models/directed_relation_support.rb +11 -0
- data/lib/roby/relations/models/graph.rb +75 -0
- data/lib/roby/relations/models/task_relation_graph.rb +18 -0
- data/lib/roby/relations/space.rb +380 -0
- data/lib/roby/relations/task_relation_graph.rb +20 -0
- data/lib/roby/robot.rb +85 -38
- data/lib/roby/schedulers/basic.rb +155 -25
- data/lib/roby/schedulers/null.rb +20 -0
- data/lib/roby/schedulers/reporting.rb +31 -0
- data/lib/roby/schedulers/state.rb +129 -0
- data/lib/roby/schedulers/temporal.rb +91 -0
- data/lib/roby/singletons.rb +87 -0
- data/lib/roby/standalone.rb +4 -2
- data/lib/roby/standard_errors.rb +405 -82
- data/lib/roby/state.rb +6 -3
- data/lib/roby/state/conf_model.rb +5 -0
- data/lib/roby/state/events.rb +181 -95
- data/lib/roby/state/goal_model.rb +77 -0
- data/lib/roby/state/open_struct.rb +591 -0
- data/lib/roby/state/open_struct_model.rb +68 -0
- data/lib/roby/state/pos.rb +45 -45
- data/lib/roby/state/shapes.rb +11 -11
- data/lib/roby/state/state_model.rb +303 -0
- data/lib/roby/state/task.rb +43 -0
- data/lib/roby/support.rb +88 -148
- data/lib/roby/task.rb +1361 -1750
- data/lib/roby/task_arguments.rb +428 -0
- data/lib/roby/task_event.rb +127 -0
- data/lib/roby/task_event_generator.rb +337 -0
- data/lib/roby/task_service.rb +6 -0
- data/lib/roby/task_structure/conflicts.rb +104 -0
- data/lib/roby/task_structure/dependency.rb +932 -0
- data/lib/roby/task_structure/error_handling.rb +118 -0
- data/lib/roby/task_structure/executed_by.rb +234 -0
- data/lib/roby/task_structure/planned_by.rb +90 -0
- data/lib/roby/tasks/aggregator.rb +37 -0
- data/lib/roby/tasks/external_process.rb +275 -0
- data/lib/roby/tasks/group.rb +27 -0
- data/lib/roby/tasks/null.rb +19 -0
- data/lib/roby/tasks/parallel.rb +43 -0
- data/lib/roby/tasks/sequence.rb +88 -0
- data/lib/roby/tasks/simple.rb +21 -0
- data/lib/roby/{thread_task.rb → tasks/thread.rb} +50 -24
- data/lib/roby/tasks/timeout.rb +17 -0
- data/lib/roby/tasks/virtual.rb +55 -0
- data/lib/roby/template_plan.rb +7 -0
- data/lib/roby/test/aruba_minitest.rb +74 -0
- data/lib/roby/test/assertion.rb +16 -0
- data/lib/roby/test/assertions.rb +490 -0
- data/lib/roby/test/common.rb +368 -591
- data/lib/roby/test/dsl.rb +149 -0
- data/lib/roby/test/error.rb +18 -0
- data/lib/roby/test/event_reporter.rb +83 -0
- data/lib/roby/test/execution_expectations.rb +1134 -0
- data/lib/roby/test/expect_execution.rb +151 -0
- data/lib/roby/test/minitest_helpers.rb +166 -0
- data/lib/roby/test/roby_app_helpers.rb +200 -0
- data/lib/roby/test/run_planners.rb +155 -0
- data/lib/roby/test/self.rb +112 -0
- data/lib/roby/test/spec.rb +198 -0
- data/lib/roby/test/tasks/empty_task.rb +4 -4
- data/lib/roby/test/tasks/goto.rb +28 -27
- data/lib/roby/test/teardown_plans.rb +100 -0
- data/lib/roby/test/testcase.rb +239 -307
- data/lib/roby/test/tools.rb +159 -155
- data/lib/roby/test/validate_state_machine.rb +75 -0
- data/lib/roby/transaction.rb +1125 -0
- data/lib/roby/transaction/event_generator_proxy.rb +63 -0
- data/lib/roby/transaction/plan_object_proxy.rb +99 -0
- data/lib/roby/transaction/plan_service_proxy.rb +43 -0
- data/lib/roby/transaction/proxying.rb +120 -0
- data/lib/roby/transaction/task_event_generator_proxy.rb +19 -0
- data/lib/roby/transaction/task_proxy.rb +135 -0
- data/lib/roby/until_generator.rb +30 -0
- data/lib/roby/version.rb +5 -0
- data/lib/roby/yard.rb +169 -0
- data/lib/yard-roby.rb +1 -0
- data/manifest.xml +32 -6
- data/roby.gemspec +59 -0
- metadata +788 -587
- data/Manifest.txt +0 -321
- data/NOTES +0 -4
- data/README.txt +0 -166
- data/TODO.txt +0 -146
- data/app/README.txt +0 -24
- data/app/Rakefile +0 -8
- data/app/config/ROBOT.rb +0 -5
- data/app/config/init.rb +0 -33
- data/app/config/roby.yml +0 -3
- data/app/controllers/ROBOT.rb +0 -2
- data/app/planners/ROBOT/main.rb +0 -6
- data/app/planners/main.rb +0 -5
- data/app/scripts/distributed +0 -3
- data/app/scripts/generate/bookmarks +0 -3
- data/app/scripts/replay +0 -3
- data/app/scripts/results +0 -3
- data/app/scripts/run +0 -3
- data/app/scripts/server +0 -3
- data/app/scripts/shell +0 -3
- data/app/scripts/test +0 -3
- data/app/tasks/.gitattributes +0 -0
- data/app/tasks/ROBOT/.gitattributes +0 -0
- data/bin/roby-shell +0 -25
- data/doc/guide/src/basics/app.page +0 -139
- data/doc/guide/src/basics/index.page +0 -11
- data/doc/guide/src/basics/log_replay/goForward_1.png +0 -0
- data/doc/guide/src/basics/log_replay/goForward_2.png +0 -0
- data/doc/guide/src/basics/log_replay/goForward_3.png +0 -0
- data/doc/guide/src/basics/log_replay/goForward_5.png +0 -0
- data/doc/guide/src/basics/log_replay/plan_repair_4.png +0 -0
- data/doc/guide/src/basics/log_replay/roby_log_main_window.png +0 -0
- data/doc/guide/src/basics/relations_display.page +0 -203
- data/doc/guide/src/basics/shell.page +0 -102
- data/doc/guide/src/default.css +0 -319
- data/doc/guide/src/introduction/index.page +0 -29
- data/doc/guide/src/introduction/publications.page +0 -14
- data/doc/guide/src/relations/dependency.page +0 -89
- data/doc/guide/src/relations/index.page +0 -12
- data/ext/droby/dump.cc +0 -175
- data/ext/droby/extconf.rb +0 -3
- data/ext/graph/algorithm.cc +0 -746
- data/ext/graph/extconf.rb +0 -7
- data/ext/graph/graph.cc +0 -575
- data/ext/graph/graph.hh +0 -183
- data/ext/graph/iterator_sequence.hh +0 -102
- data/ext/graph/undirected_dfs.hh +0 -226
- data/ext/graph/undirected_graph.hh +0 -421
- data/lib/roby/app/scripts/generate/bookmarks.rb +0 -162
- data/lib/roby/app/scripts/replay.rb +0 -31
- data/lib/roby/app/scripts/server.rb +0 -18
- data/lib/roby/basic_object.rb +0 -151
- data/lib/roby/config.rb +0 -14
- data/lib/roby/distributed.rb +0 -36
- data/lib/roby/distributed/base.rb +0 -448
- data/lib/roby/distributed/communication.rb +0 -875
- data/lib/roby/distributed/connection_space.rb +0 -616
- data/lib/roby/distributed/distributed_object.rb +0 -206
- data/lib/roby/distributed/drb.rb +0 -62
- data/lib/roby/distributed/notifications.rb +0 -531
- data/lib/roby/distributed/peer.rb +0 -555
- data/lib/roby/distributed/protocol.rb +0 -529
- data/lib/roby/distributed/proxy.rb +0 -343
- data/lib/roby/distributed/subscription.rb +0 -311
- data/lib/roby/distributed/transaction.rb +0 -498
- data/lib/roby/external_process_task.rb +0 -225
- data/lib/roby/graph.rb +0 -160
- data/lib/roby/log.rb +0 -3
- data/lib/roby/log/chronicle.rb +0 -303
- data/lib/roby/log/console.rb +0 -74
- data/lib/roby/log/data_stream.rb +0 -275
- data/lib/roby/log/dot.rb +0 -279
- data/lib/roby/log/event_stream.rb +0 -161
- data/lib/roby/log/file.rb +0 -396
- data/lib/roby/log/gui/basic_display.ui +0 -83
- data/lib/roby/log/gui/basic_display_ui.rb +0 -89
- data/lib/roby/log/gui/chronicle.rb +0 -26
- data/lib/roby/log/gui/chronicle_view.rb +0 -40
- data/lib/roby/log/gui/chronicle_view.ui +0 -70
- data/lib/roby/log/gui/chronicle_view_ui.rb +0 -90
- data/lib/roby/log/gui/data_displays.rb +0 -171
- data/lib/roby/log/gui/data_displays.ui +0 -155
- data/lib/roby/log/gui/data_displays_ui.rb +0 -146
- data/lib/roby/log/gui/notifications.rb +0 -26
- data/lib/roby/log/gui/relations.rb +0 -269
- data/lib/roby/log/gui/relations.ui +0 -123
- data/lib/roby/log/gui/relations_ui.rb +0 -120
- data/lib/roby/log/gui/relations_view.rb +0 -185
- data/lib/roby/log/gui/relations_view.ui +0 -149
- data/lib/roby/log/gui/relations_view_ui.rb +0 -144
- data/lib/roby/log/gui/replay.rb +0 -366
- data/lib/roby/log/gui/replay_controls.rb +0 -206
- data/lib/roby/log/gui/replay_controls.ui +0 -282
- data/lib/roby/log/gui/replay_controls_ui.rb +0 -249
- data/lib/roby/log/gui/runtime.rb +0 -130
- data/lib/roby/log/hooks.rb +0 -186
- data/lib/roby/log/logger.rb +0 -203
- data/lib/roby/log/notifications.rb +0 -244
- data/lib/roby/log/plan_rebuilder.rb +0 -468
- data/lib/roby/log/relations.rb +0 -1084
- data/lib/roby/log/server.rb +0 -547
- data/lib/roby/log/sqlite.rb +0 -47
- data/lib/roby/log/timings.rb +0 -233
- data/lib/roby/plan-object.rb +0 -371
- data/lib/roby/planning.rb +0 -13
- data/lib/roby/planning/loops.rb +0 -309
- data/lib/roby/planning/model.rb +0 -1012
- data/lib/roby/planning/task.rb +0 -180
- data/lib/roby/query.rb +0 -655
- data/lib/roby/relations/conflicts.rb +0 -67
- data/lib/roby/relations/dependency.rb +0 -358
- data/lib/roby/relations/ensured.rb +0 -19
- data/lib/roby/relations/error_handling.rb +0 -22
- data/lib/roby/relations/events.rb +0 -7
- data/lib/roby/relations/executed_by.rb +0 -208
- data/lib/roby/relations/influence.rb +0 -10
- data/lib/roby/relations/planned_by.rb +0 -63
- data/lib/roby/state/information.rb +0 -55
- data/lib/roby/state/state.rb +0 -367
- data/lib/roby/task-operations.rb +0 -186
- data/lib/roby/task_index.rb +0 -80
- data/lib/roby/test/distributed.rb +0 -230
- data/lib/roby/test/tasks/simple_task.rb +0 -23
- data/lib/roby/transactions.rb +0 -507
- data/lib/roby/transactions/proxy.rb +0 -325
- data/plugins/fault_injection/History.txt +0 -4
- data/plugins/fault_injection/README.txt +0 -34
- data/plugins/fault_injection/Rakefile +0 -12
- data/plugins/fault_injection/TODO.txt +0 -0
- data/plugins/fault_injection/app.rb +0 -52
- data/plugins/fault_injection/fault_injection.rb +0 -89
- data/plugins/fault_injection/test/test_fault_injection.rb +0 -78
- data/plugins/subsystems/README.txt +0 -37
- data/plugins/subsystems/Rakefile +0 -13
- data/plugins/subsystems/app.rb +0 -182
- data/plugins/subsystems/test/app/README +0 -24
- data/plugins/subsystems/test/app/Rakefile +0 -8
- data/plugins/subsystems/test/app/config/app.yml +0 -71
- data/plugins/subsystems/test/app/config/init.rb +0 -12
- data/plugins/subsystems/test/app/config/roby.yml +0 -3
- data/plugins/subsystems/test/app/planners/main.rb +0 -20
- data/plugins/subsystems/test/app/scripts/distributed +0 -3
- data/plugins/subsystems/test/app/scripts/replay +0 -3
- data/plugins/subsystems/test/app/scripts/results +0 -3
- data/plugins/subsystems/test/app/scripts/run +0 -3
- data/plugins/subsystems/test/app/scripts/server +0 -3
- data/plugins/subsystems/test/app/scripts/shell +0 -3
- data/plugins/subsystems/test/app/scripts/test +0 -3
- data/plugins/subsystems/test/app/tasks/services.rb +0 -15
- data/plugins/subsystems/test/test_subsystems.rb +0 -78
- data/test/distributed/test_communication.rb +0 -195
- data/test/distributed/test_connection.rb +0 -284
- data/test/distributed/test_execution.rb +0 -378
- data/test/distributed/test_mixed_plan.rb +0 -341
- data/test/distributed/test_plan_notifications.rb +0 -238
- data/test/distributed/test_protocol.rb +0 -525
- data/test/distributed/test_query.rb +0 -106
- data/test/distributed/test_remote_plan.rb +0 -491
- data/test/distributed/test_transaction.rb +0 -466
- data/test/mockups/external_process +0 -28
- data/test/mockups/tasks.rb +0 -27
- data/test/planning/test_loops.rb +0 -432
- data/test/planning/test_model.rb +0 -427
- data/test/planning/test_task.rb +0 -126
- data/test/relations/test_conflicts.rb +0 -42
- data/test/relations/test_dependency.rb +0 -324
- data/test/relations/test_ensured.rb +0 -38
- data/test/relations/test_executed_by.rb +0 -224
- data/test/relations/test_planned_by.rb +0 -56
- data/test/suite_core.rb +0 -29
- data/test/suite_distributed.rb +0 -10
- data/test/suite_planning.rb +0 -4
- data/test/suite_relations.rb +0 -8
- data/test/tasks/test_external_process.rb +0 -126
- data/test/tasks/test_thread_task.rb +0 -70
- data/test/test_bgl.rb +0 -528
- data/test/test_event.rb +0 -969
- data/test/test_exceptions.rb +0 -591
- data/test/test_execution_engine.rb +0 -987
- data/test/test_gui.rb +0 -20
- data/test/test_interface.rb +0 -43
- data/test/test_log.rb +0 -125
- data/test/test_log_server.rb +0 -133
- data/test/test_plan.rb +0 -418
- data/test/test_query.rb +0 -424
- data/test/test_relations.rb +0 -260
- data/test/test_state.rb +0 -432
- data/test/test_support.rb +0 -16
- data/test/test_task.rb +0 -1181
- data/test/test_testcase.rb +0 -138
- data/test/test_transactions.rb +0 -610
- data/test/test_transactions_proxy.rb +0 -216
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
module Roby
|
|
2
|
-
module TaskStructure
|
|
3
|
-
Roby::Task.inherited_enumerable(:conflicting_model, :conflicting_models) { ValueSet.new }
|
|
4
|
-
module ModelConflicts
|
|
5
|
-
def conflicts_with(model)
|
|
6
|
-
conflicting_models << model
|
|
7
|
-
model.conflicting_models << self
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def conflicts_with?(model)
|
|
11
|
-
each_conflicting_model do |m|
|
|
12
|
-
return true if model <= m
|
|
13
|
-
end
|
|
14
|
-
false
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
Roby::Task.extend ModelConflicts
|
|
18
|
-
|
|
19
|
-
relation :Conflicts, :noinfo => true do
|
|
20
|
-
def conflicts_with(task)
|
|
21
|
-
# task.event(:stop).add_precedence event(:start)
|
|
22
|
-
add_conflicts(task)
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def self.included(klass) # :nodoc:
|
|
26
|
-
klass.extend ModelConflicts
|
|
27
|
-
super
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
module ConflictEventHandling
|
|
33
|
-
def calling(context)
|
|
34
|
-
super if defined? super
|
|
35
|
-
return unless symbol == :start
|
|
36
|
-
|
|
37
|
-
# Check for conflicting tasks
|
|
38
|
-
result = nil
|
|
39
|
-
task.each_conflicts do |conflicting_task|
|
|
40
|
-
result ||= ValueSet.new
|
|
41
|
-
result << conflicting_task
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
if result
|
|
45
|
-
plan.control.conflict(task, result)
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
# Add the needed conflict relations
|
|
49
|
-
models = task.class.conflicting_models
|
|
50
|
-
for model in models
|
|
51
|
-
for t in plan.find_tasks(model)
|
|
52
|
-
t.conflicts_with task if t.pending? && t != task
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
def fired(event)
|
|
58
|
-
super if defined? super
|
|
59
|
-
|
|
60
|
-
if symbol == :stop
|
|
61
|
-
TaskStructure::Conflicts.remove(task)
|
|
62
|
-
end
|
|
63
|
-
end
|
|
64
|
-
end
|
|
65
|
-
Roby::TaskEventGenerator.include ConflictEventHandling
|
|
66
|
-
end
|
|
67
|
-
|
|
@@ -1,358 +0,0 @@
|
|
|
1
|
-
module Roby::TaskStructure
|
|
2
|
-
relation :Dependency, :child_name => :child, :parent_name => :parent_task do
|
|
3
|
-
##
|
|
4
|
-
# :method: add_child(v, info)
|
|
5
|
-
# Adds a new child to +v+. You should use #realized_by instead.
|
|
6
|
-
|
|
7
|
-
def realizes?(obj)
|
|
8
|
-
Roby.warn_deprecated "#realizes? is deprecated. Use #depended_upon_by? instead"
|
|
9
|
-
depended_upon_by?(obj)
|
|
10
|
-
end
|
|
11
|
-
def realized_by?(obj)
|
|
12
|
-
Roby.warn_deprecated "#realized_by? is deprecated. Use #depends_on?(obj, false) instead"
|
|
13
|
-
depends_on?(obj, false)
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
# True if +obj+ is a parent of this object in the hierarchy relation
|
|
17
|
-
# (+obj+ is realized by +self+)
|
|
18
|
-
def depended_upon_by?(obj); parent_object?(obj, Dependency) end
|
|
19
|
-
|
|
20
|
-
# True if +obj+ is a child of this object in the hierarchy relation.
|
|
21
|
-
# If +recursive+ is true, take into account the whole subgraph.
|
|
22
|
-
# Otherwise, only direct children are checked.
|
|
23
|
-
def depends_on?(obj, recursive = true)
|
|
24
|
-
if recursive
|
|
25
|
-
generated_subgraph(Dependency).include?(obj)
|
|
26
|
-
else
|
|
27
|
-
child_object?(obj, Dependency)
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
# The set of parent objects in the Dependency relation
|
|
31
|
-
def parents; parent_objects(Dependency) end
|
|
32
|
-
# The set of child objects in the Dependency relation
|
|
33
|
-
def children; child_objects(Dependency) end
|
|
34
|
-
|
|
35
|
-
def roles_of(child)
|
|
36
|
-
info = self[child, Dependency]
|
|
37
|
-
info[:roles]
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
def realized_by(task, options = {})
|
|
41
|
-
Roby.warn_deprecated "#realized_by is deprecated. Use #depends_on instead"
|
|
42
|
-
depends_on(task, options)
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
# Adds +task+ as a child of +self+ in the Dependency relation. The
|
|
46
|
-
# following options are allowed:
|
|
47
|
-
#
|
|
48
|
-
# success:: the list of success events. The default is [:success]
|
|
49
|
-
# failure:: the list of failing events. The default is [:failed]
|
|
50
|
-
# model::
|
|
51
|
-
# a <tt>[task_model, arguments]</tt> pair which defines the task
|
|
52
|
-
# model the parent is expecting. The default value is to get these
|
|
53
|
-
# parameters from +task+
|
|
54
|
-
#
|
|
55
|
-
# The +success+ set describes the events of the child task that are
|
|
56
|
-
# _required_ by the parent task. More specifically, the child task
|
|
57
|
-
# remains useful for the parent task as long as none of these events are
|
|
58
|
-
# emitted. By default, it is the +success+ event. Of course, an error
|
|
59
|
-
# condition is encountered when all events of +success+ become
|
|
60
|
-
# unreachable. In addition, the relation is removed if the
|
|
61
|
-
# +remove_when_done+ flag is set to true (false by default).
|
|
62
|
-
#
|
|
63
|
-
# The +failure+ set describes the events of the child task which are an
|
|
64
|
-
# error condition from the parent task point of view.
|
|
65
|
-
#
|
|
66
|
-
# In both error cases, a +ChildFailedError+ exception is raised.
|
|
67
|
-
def depends_on(task, options = {})
|
|
68
|
-
options = validate_options options,
|
|
69
|
-
:model => [task.model, task.meaningful_arguments],
|
|
70
|
-
:success => [:success],
|
|
71
|
-
:failure => [],
|
|
72
|
-
:remove_when_done => true,
|
|
73
|
-
:roles => nil,
|
|
74
|
-
:role => nil
|
|
75
|
-
|
|
76
|
-
roles = options[:roles] || ValueSet.new
|
|
77
|
-
if role = options.delete(:role)
|
|
78
|
-
roles << role.to_str
|
|
79
|
-
end
|
|
80
|
-
roles = roles.map { |r| r.to_str }
|
|
81
|
-
options[:roles] = roles.to_set
|
|
82
|
-
|
|
83
|
-
options[:success] = Array[*options[:success]]
|
|
84
|
-
options[:failure] = Array[*options[:failure]]
|
|
85
|
-
options[:success] -= options[:failure]
|
|
86
|
-
|
|
87
|
-
# Validate failure and success event names
|
|
88
|
-
options[:success].each { |ev| task.event(ev) }
|
|
89
|
-
options[:failure].each { |ev| task.event(ev) }
|
|
90
|
-
|
|
91
|
-
options[:model] = [options[:model], {}] unless Array === options[:model]
|
|
92
|
-
required_model, required_args = *options[:model]
|
|
93
|
-
if !required_args.respond_to?(:to_hash)
|
|
94
|
-
raise ArgumentError, "argument specification must be a hash, got #{required_args} (#{required_args.class})"
|
|
95
|
-
elsif !task.fullfills?(required_model, required_args)
|
|
96
|
-
raise ArgumentError, "task #{task} does not fullfill the provided model #{options[:model]}"
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
# Check if there is already a dependency link. If it is the case,
|
|
100
|
-
# merge the options. Otherwise, just add.
|
|
101
|
-
add_child(task, options)
|
|
102
|
-
self
|
|
103
|
-
end
|
|
104
|
-
|
|
105
|
-
# Set up the event gathering needed by Dependency.check_structure
|
|
106
|
-
def added_child_object(child, relations, info) # :nodoc:
|
|
107
|
-
super if defined? super
|
|
108
|
-
if relations.include?(Dependency) && !respond_to?(:__getobj__) && !child.respond_to?(:__getobj__)
|
|
109
|
-
events = info[:success].map do |ev|
|
|
110
|
-
ev = child.event(ev)
|
|
111
|
-
ev.if_unreachable { Dependency.interesting_events << ev }
|
|
112
|
-
ev
|
|
113
|
-
end
|
|
114
|
-
events.concat info[:failure].map { |ev| child.event(ev) }
|
|
115
|
-
Roby::EventGenerator.gather_events(Dependency.interesting_events, events)
|
|
116
|
-
end
|
|
117
|
-
end
|
|
118
|
-
|
|
119
|
-
# Return the set of this task children for which the :start event has
|
|
120
|
-
# no parent in CausalLinks
|
|
121
|
-
def first_children
|
|
122
|
-
result = ValueSet.new
|
|
123
|
-
|
|
124
|
-
generated_subgraph(Dependency).each do |task|
|
|
125
|
-
next if task == self
|
|
126
|
-
if task.event(:start).root?(Roby::EventStructure::CausalLink)
|
|
127
|
-
result << task
|
|
128
|
-
end
|
|
129
|
-
end
|
|
130
|
-
result
|
|
131
|
-
end
|
|
132
|
-
|
|
133
|
-
# The set of events that are needed by the parent tasks
|
|
134
|
-
def fullfilled_events
|
|
135
|
-
needed = ValueSet.new
|
|
136
|
-
merged_relations(:each_parent_task, false) do |myself, parent|
|
|
137
|
-
needed.merge(parent[myself, Dependency][:success])
|
|
138
|
-
end
|
|
139
|
-
needed
|
|
140
|
-
end
|
|
141
|
-
|
|
142
|
-
# Return [tags, arguments] where +tags+ is a list of task models which
|
|
143
|
-
# are required by the parent tasks of this task, and arguments the
|
|
144
|
-
# required arguments
|
|
145
|
-
#
|
|
146
|
-
# If there is a task class in the required models, it is always the
|
|
147
|
-
# first element of +tags+
|
|
148
|
-
def fullfilled_model
|
|
149
|
-
model, tags, arguments = Roby::Task, [], {}
|
|
150
|
-
|
|
151
|
-
has_parent = false
|
|
152
|
-
merged_relations(:each_parent_task, false) do |myself, parent|
|
|
153
|
-
has_parent = true
|
|
154
|
-
|
|
155
|
-
required_models, required_arguments = parent[myself, Dependency][:model]
|
|
156
|
-
required_models = [required_models] if !required_models.respond_to?(:to_ary)
|
|
157
|
-
|
|
158
|
-
for m in required_models
|
|
159
|
-
if m.kind_of?(Roby::TaskModelTag)
|
|
160
|
-
tags << m
|
|
161
|
-
elsif m.has_ancestor?(model)
|
|
162
|
-
model = m
|
|
163
|
-
elsif !model.has_ancestor?(m)
|
|
164
|
-
raise Roby::ModelViolation, "inconsistency in fullfilled models: #{model} and #{m} are incompatible"
|
|
165
|
-
end
|
|
166
|
-
end
|
|
167
|
-
|
|
168
|
-
arguments.merge!(required_arguments) do |name, old, new|
|
|
169
|
-
if old != new
|
|
170
|
-
raise Roby::ModelViolation, "inconsistency in fullfilled models: #{old} and #{new}"
|
|
171
|
-
end
|
|
172
|
-
old
|
|
173
|
-
end
|
|
174
|
-
end
|
|
175
|
-
|
|
176
|
-
if !has_parent
|
|
177
|
-
[[self.model], self.arguments]
|
|
178
|
-
else
|
|
179
|
-
tags.unshift(model)
|
|
180
|
-
[tags, arguments]
|
|
181
|
-
end
|
|
182
|
-
end
|
|
183
|
-
|
|
184
|
-
# Remove all children that have successfully finished
|
|
185
|
-
def remove_finished_children
|
|
186
|
-
# We call #to_a to get a copy of children, since we will remove
|
|
187
|
-
# children in the block. Note that we can't use #delete_if here
|
|
188
|
-
# since #children is a relation enumerator (not the relation list
|
|
189
|
-
# itself)
|
|
190
|
-
children.to_a.each do |child|
|
|
191
|
-
success_events = self[child, Dependency][:success]
|
|
192
|
-
if success_events.any? { |ev| child.event(ev).happened? }
|
|
193
|
-
remove_child(child)
|
|
194
|
-
end
|
|
195
|
-
end
|
|
196
|
-
end
|
|
197
|
-
end
|
|
198
|
-
Hierarchy = Dependency
|
|
199
|
-
|
|
200
|
-
def Dependency.merge_info(parent, child, opt1, opt2)
|
|
201
|
-
if opt1[:remove_when_done] != opt2[:remove_when_done]
|
|
202
|
-
raise Roby::ModelViolation, "incompatible dependency specification: trying to change the value of +remove_when_done+"
|
|
203
|
-
end
|
|
204
|
-
|
|
205
|
-
result = { :remove_when_done => opt1[:remove_when_done] }
|
|
206
|
-
|
|
207
|
-
# Remove from :success the events listed in :failure. We can't remove
|
|
208
|
-
# the events in opt1[:success] that would lead to having opt2[:success]
|
|
209
|
-
# unreachable though ...
|
|
210
|
-
result[:success] = (opt1[:success] - opt2[:failure]) | (opt2[:success] - opt1[:failure])
|
|
211
|
-
result[:failure] = opt1[:failure] | opt2[:failure]
|
|
212
|
-
if result[:success].empty? && (!opt1[:success].empty? || !opt2[:success].empty?)
|
|
213
|
-
raise Roby::ModelViolation, "incompatibility between the :success and :failure sets of #{opt1} and #{opt2}"
|
|
214
|
-
end
|
|
215
|
-
|
|
216
|
-
# Check model compatibility
|
|
217
|
-
model1, arguments1 = opt1[:model]
|
|
218
|
-
model2, arguments2 = opt2[:model]
|
|
219
|
-
if model1 <= model2
|
|
220
|
-
result[:model] = [model1, {}]
|
|
221
|
-
elsif model2 < model1
|
|
222
|
-
result[:model] = [model2, {}]
|
|
223
|
-
else
|
|
224
|
-
# Find the most generic model that +task+ fullfills and that
|
|
225
|
-
# includes both +model1+ and +model2+
|
|
226
|
-
klass = child.model
|
|
227
|
-
while klass != Roby::Task && (klass <= model1 && klass <= model2)
|
|
228
|
-
candidate = klass
|
|
229
|
-
klass = klass.superclass
|
|
230
|
-
end
|
|
231
|
-
# We should always have a solution, as +task+ fullfills both model1 and model2
|
|
232
|
-
result[:model] = [candidate, []]
|
|
233
|
-
end
|
|
234
|
-
|
|
235
|
-
# Merge arguments
|
|
236
|
-
result[:model][1] = arguments1.merge(arguments2) do |key, old_value, new_value|
|
|
237
|
-
if old_value != new_value
|
|
238
|
-
raise Roby::ModelViolation, "incompatible argument constraint #{old_value} and #{new_value} for #{key}"
|
|
239
|
-
end
|
|
240
|
-
old_value
|
|
241
|
-
end
|
|
242
|
-
|
|
243
|
-
# Finally, merge the roles (the easy part ;-))
|
|
244
|
-
result[:roles] = opt1[:roles] | opt2[:roles]
|
|
245
|
-
|
|
246
|
-
result
|
|
247
|
-
end
|
|
248
|
-
|
|
249
|
-
# Checks the structure of +plan+ w.r.t. the constraints of the hierarchy
|
|
250
|
-
# relations. It returns an array of ChildFailedError for all failed
|
|
251
|
-
# hierarchy relations
|
|
252
|
-
def Dependency.check_structure(plan)
|
|
253
|
-
result = []
|
|
254
|
-
|
|
255
|
-
events = Hierarchy.interesting_events
|
|
256
|
-
return result if events.empty? && failing_tasks.empty?
|
|
257
|
-
|
|
258
|
-
# Get the set of tasks for which a possible failure has been
|
|
259
|
-
# registered The tasks that are failing the hierarchy requirements
|
|
260
|
-
# are registered in Hierarchy.failing_tasks. The interesting_events
|
|
261
|
-
# set is cleared at cycle end (see below)
|
|
262
|
-
tasks = events.inject(failing_tasks) do |set, event|
|
|
263
|
-
if event.respond_to?(:generator)
|
|
264
|
-
set << event.generator.task
|
|
265
|
-
else
|
|
266
|
-
set << event.task
|
|
267
|
-
end
|
|
268
|
-
set
|
|
269
|
-
end
|
|
270
|
-
|
|
271
|
-
@failing_tasks = ValueSet.new
|
|
272
|
-
tasks.each do |child|
|
|
273
|
-
# Check if the task has been removed from the plan
|
|
274
|
-
next unless child.plan
|
|
275
|
-
|
|
276
|
-
has_error = false
|
|
277
|
-
child.each_parent_task do |parent|
|
|
278
|
-
next unless parent.self_owned?
|
|
279
|
-
next if parent.finished? || parent.finishing?
|
|
280
|
-
|
|
281
|
-
options = parent[child, Hierarchy]
|
|
282
|
-
success = options[:success]
|
|
283
|
-
failure = options[:failure]
|
|
284
|
-
|
|
285
|
-
if success.any? { |e| child.event(e).happened? }
|
|
286
|
-
if options[:remove_when_done]
|
|
287
|
-
parent.remove_child child
|
|
288
|
-
end
|
|
289
|
-
elsif failing_event = failure.find { |e| child.event(e).happened? }
|
|
290
|
-
result << Roby::ChildFailedError.new(parent, child.event(failing_event).last)
|
|
291
|
-
failing_tasks << child
|
|
292
|
-
elsif success.all? { |e| child.event(e).unreachable? }
|
|
293
|
-
failing_event = success.find { |e| child.event(e).unreachability_reason }
|
|
294
|
-
failing_event = child.event(failing_event).unreachability_reason
|
|
295
|
-
if !failing_event
|
|
296
|
-
failing_event = child.event(success.find { |e| child.event(e) })
|
|
297
|
-
end
|
|
298
|
-
result << Roby::ChildFailedError.new(parent, failing_event)
|
|
299
|
-
failing_tasks << child
|
|
300
|
-
end
|
|
301
|
-
end
|
|
302
|
-
end
|
|
303
|
-
|
|
304
|
-
events.clear
|
|
305
|
-
result
|
|
306
|
-
end
|
|
307
|
-
|
|
308
|
-
class << Dependency
|
|
309
|
-
# The set of events that have been fired in this cycle and are involved in a Hierarchy relation
|
|
310
|
-
attribute(:interesting_events) { Array.new }
|
|
311
|
-
|
|
312
|
-
# The set of tasks that are currently failing
|
|
313
|
-
attribute(:failing_tasks) { ValueSet.new }
|
|
314
|
-
end
|
|
315
|
-
end
|
|
316
|
-
|
|
317
|
-
module Roby
|
|
318
|
-
# This exception is raised when a {hierarchy relation}[classes/Roby/TaskStructure/Hierarchy.html] fails
|
|
319
|
-
class ChildFailedError < LocalizedError
|
|
320
|
-
# The parent in the relation
|
|
321
|
-
attr_reader :parent
|
|
322
|
-
# The child in the relation
|
|
323
|
-
def child; failed_task end
|
|
324
|
-
# The relation parameters (i.e. the hash given to #depends_on)
|
|
325
|
-
attr_reader :relation
|
|
326
|
-
|
|
327
|
-
# The event which is the cause of this error. This is either the task
|
|
328
|
-
# source of a failure event, or the reason why a positive event has
|
|
329
|
-
# become unreachable (if there is one)
|
|
330
|
-
def initialize(parent, event)
|
|
331
|
-
super(event)
|
|
332
|
-
@parent = parent
|
|
333
|
-
@relation = parent[child, TaskStructure::Dependency]
|
|
334
|
-
end
|
|
335
|
-
|
|
336
|
-
def pretty_print(pp) # :nodoc:
|
|
337
|
-
super
|
|
338
|
-
pp.breakable
|
|
339
|
-
pp.breakable
|
|
340
|
-
pp.text "The failed relation is"
|
|
341
|
-
pp.breakable
|
|
342
|
-
pp.nest(2) do
|
|
343
|
-
pp.text " "
|
|
344
|
-
parent.pretty_print pp
|
|
345
|
-
pp.breakable
|
|
346
|
-
pp.text "depends_on "
|
|
347
|
-
child.pretty_print pp
|
|
348
|
-
end
|
|
349
|
-
end
|
|
350
|
-
def backtrace; [] end
|
|
351
|
-
|
|
352
|
-
# True if +obj+ is involved in this exception
|
|
353
|
-
def involved_plan_object?(obj)
|
|
354
|
-
super || obj == parent
|
|
355
|
-
end
|
|
356
|
-
end
|
|
357
|
-
end
|
|
358
|
-
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
module Roby::EventStructure
|
|
2
|
-
relation :EnsuredEvent, :noinfo => true do
|
|
3
|
-
def calling(context)
|
|
4
|
-
super if defined? super
|
|
5
|
-
each_ensured_event do |ev|
|
|
6
|
-
if !ev.happened?
|
|
7
|
-
postpone(ev, "waiting for ensured event #{ev}") do
|
|
8
|
-
ev.call(context) if ev.controlable?
|
|
9
|
-
end
|
|
10
|
-
end
|
|
11
|
-
end
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def ensure(event)
|
|
15
|
-
add_ensured_event event
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
module Roby::TaskStructure
|
|
2
|
-
class Roby::TaskEventGenerator
|
|
3
|
-
# Mark this event as being handled by the task +task+
|
|
4
|
-
def handle_with(repairing_task)
|
|
5
|
-
if !task.child_object?(repairing_task, ErrorHandling)
|
|
6
|
-
task.add_error_handler repairing_task, ValueSet.new
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
task[repairing_task, ErrorHandling] << symbol
|
|
10
|
-
end
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
relation :ErrorHandling, :child_name => :error_handler do
|
|
14
|
-
def failed_task
|
|
15
|
-
each_parent_object(ErrorHandling) do |task|
|
|
16
|
-
return task
|
|
17
|
-
end
|
|
18
|
-
nil
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
|