origen 0.0.1 → 0.0.2
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 +4 -4
- data/bin/ctags +0 -0
- data/bin/origen +165 -1
- data/bin/rgen +2 -0
- data/config/application.rb +141 -0
- data/config/commands.rb +72 -0
- data/config/development.rb +7 -0
- data/config/environment.rb +0 -0
- data/config/rgen.policy +7 -0
- data/config/rubocop/easy.yml +620 -0
- data/config/rubocop/easy_disabled.yml +271 -0
- data/config/rubocop/easy_enabled.yml +731 -0
- data/config/rubocop/strict.yml +620 -0
- data/config/rubocop/strict_disabled.yml +247 -0
- data/config/rubocop/strict_enabled.yml +755 -0
- data/config/users.rb +20 -0
- data/config/version.rb +1 -1
- data/helpers/url.rb +68 -0
- data/lib/c99/doc_interface.rb +56 -0
- data/lib/c99/j750_interface.rb +85 -0
- data/lib/c99/nvm.rb +89 -0
- data/lib/c99/target/mock2.rb +1 -0
- data/lib/c99/target/subdir/mock3.rb +1 -0
- data/lib/option_parser/optparse.rb +12 -0
- data/lib/origen/acronyms.rb +60 -0
- data/lib/origen/application/command_dispatcher.rb +12 -0
- data/lib/origen/application/configuration.rb +206 -0
- data/lib/origen/application/configuration_manager.rb +78 -0
- data/lib/origen/application/deployer.rb +367 -0
- data/lib/origen/application/environment.rb +186 -0
- data/lib/origen/application/lsf.rb +145 -0
- data/lib/origen/application/lsf_manager.rb +657 -0
- data/lib/origen/application/plugins_manager.rb +280 -0
- data/lib/origen/application/release.rb +359 -0
- data/lib/origen/application/runner.rb +246 -0
- data/lib/origen/application/statistics.rb +191 -0
- data/lib/origen/application/target.rb +374 -0
- data/lib/origen/application/version_tracker.rb +59 -0
- data/lib/origen/application/workspace_manager.rb +151 -0
- data/lib/origen/application.rb +746 -0
- data/lib/origen/bugs/bug.rb +36 -0
- data/lib/origen/bugs.rb +45 -0
- data/lib/origen/callbacks.rb +35 -0
- data/lib/origen/chip_mode.rb +118 -0
- data/lib/origen/chip_package.rb +461 -0
- data/lib/origen/client.rb +87 -0
- data/lib/origen/code_generators/actions.rb +258 -0
- data/lib/origen/code_generators/base.rb +57 -0
- data/lib/origen/code_generators/bundler.rb +17 -0
- data/lib/origen/code_generators/gem_setup.rb +49 -0
- data/lib/origen/code_generators/rake.rb +13 -0
- data/lib/origen/code_generators/rspec.rb +12 -0
- data/lib/origen/code_generators/semver.rb +39 -0
- data/lib/origen/code_generators/timever.rb +37 -0
- data/lib/origen/code_generators.rb +111 -0
- data/lib/origen/commands/add.rb +12 -0
- data/lib/origen/commands/compile.rb +62 -0
- data/lib/origen/commands/ctags.rb +9 -0
- data/lib/origen/commands/dispatch.rb +22 -0
- data/lib/origen/commands/environment.rb +11 -0
- data/lib/origen/commands/fetch.rb +63 -0
- data/lib/origen/commands/generate.rb +130 -0
- data/lib/origen/commands/interactive.rb +73 -0
- data/lib/origen/commands/lint.rb +82 -0
- data/lib/origen/commands/lsf.rb +93 -0
- data/lib/origen/commands/merge.rb +55 -0
- data/lib/origen/commands/modifications.rb +12 -0
- data/lib/origen/commands/new.rb +113 -0
- data/lib/origen/commands/plugin.rb +105 -0
- data/lib/origen/commands/program.rb +70 -0
- data/lib/origen/commands/rc.rb +442 -0
- data/lib/origen/commands/save.rb +56 -0
- data/lib/origen/commands/target.rb +27 -0
- data/lib/origen/commands/time.rb +127 -0
- data/lib/origen/commands/version.rb +17 -0
- data/lib/origen/commands/web.rb +221 -0
- data/lib/origen/commands.rb +272 -0
- data/lib/origen/commands_global.rb +76 -0
- data/lib/origen/controller.rb +94 -0
- data/lib/origen/core_ext/array.rb +23 -0
- data/lib/origen/core_ext/bignum.rb +36 -0
- data/lib/origen/core_ext/enumerable.rb +76 -0
- data/lib/origen/core_ext/fixnum.rb +46 -0
- data/lib/origen/core_ext/hash.rb +52 -0
- data/lib/origen/core_ext/module.rb +14 -0
- data/lib/origen/core_ext/numeric.rb +126 -0
- data/lib/origen/core_ext/object.rb +13 -0
- data/lib/origen/core_ext/range.rb +7 -0
- data/lib/origen/core_ext/string.rb +124 -0
- data/lib/origen/core_ext.rb +10 -0
- data/lib/origen/database/key_value_store.rb +111 -0
- data/lib/origen/database/key_value_stores.rb +108 -0
- data/lib/origen/database.rb +6 -0
- data/lib/origen/encodings.rb +102 -0
- data/lib/origen/features/feature.rb +22 -0
- data/lib/origen/features.rb +104 -0
- data/lib/origen/file_handler.rb +429 -0
- data/lib/origen/generator/comparator.rb +56 -0
- data/lib/origen/generator/compiler.rb +277 -0
- data/lib/origen/generator/flow.rb +49 -0
- data/lib/origen/generator/job.rb +131 -0
- data/lib/origen/generator/pattern.rb +356 -0
- data/lib/origen/generator/pattern_finder.rb +155 -0
- data/lib/origen/generator/pattern_iterator.rb +55 -0
- data/lib/origen/generator/renderer.rb +113 -0
- data/lib/origen/generator/resources.rb +40 -0
- data/lib/origen/generator/stage.rb +89 -0
- data/lib/origen/generator.rb +85 -0
- data/lib/origen/global_methods.rb +205 -0
- data/lib/origen/import_manager.rb +596 -0
- data/lib/origen/location/base.rb +116 -0
- data/lib/origen/location/map.rb +83 -0
- data/lib/origen/location.rb +6 -0
- data/lib/origen/log.rb +217 -0
- data/lib/origen/logger_methods.rb +56 -0
- data/lib/origen/mode.rb +61 -0
- data/lib/origen/model.rb +267 -0
- data/lib/origen/model_initializer.rb +45 -0
- data/lib/origen/nvm/block_array.rb +72 -0
- data/lib/origen/nvm.rb +6 -0
- data/lib/origen/parameters/live.rb +22 -0
- data/lib/origen/parameters/missing.rb +28 -0
- data/lib/origen/parameters/set.rb +144 -0
- data/lib/origen/parameters.rb +107 -0
- data/lib/origen/pdm.rb +218 -0
- data/lib/origen/pins/function_proxy.rb +36 -0
- data/lib/origen/pins/ground_pin.rb +6 -0
- data/lib/origen/pins/pin.rb +860 -0
- data/lib/origen/pins/pin_bank.rb +349 -0
- data/lib/origen/pins/pin_clock.rb +124 -0
- data/lib/origen/pins/pin_collection.rb +492 -0
- data/lib/origen/pins/pin_common.rb +206 -0
- data/lib/origen/pins/port.rb +268 -0
- data/lib/origen/pins/power_pin.rb +30 -0
- data/lib/origen/pins.rb +696 -0
- data/lib/origen/registers/bit.rb +562 -0
- data/lib/origen/registers/bit_collection.rb +787 -0
- data/lib/origen/registers/container.rb +288 -0
- data/lib/origen/registers/domain.rb +16 -0
- data/lib/origen/registers/reg.rb +1406 -0
- data/lib/origen/registers/reg_collection.rb +24 -0
- data/lib/origen/registers.rb +652 -0
- data/lib/origen/regression_manager.rb +251 -0
- data/lib/origen/remote_manager.rb +340 -0
- data/lib/origen/revision_control/base.rb +257 -0
- data/lib/origen/revision_control/design_sync.rb +276 -0
- data/lib/origen/revision_control/git.rb +243 -0
- data/lib/origen/revision_control/subversion.rb +6 -0
- data/lib/origen/revision_control.rb +44 -0
- data/lib/origen/ruby_version_check.rb +131 -0
- data/lib/origen/site_config.rb +61 -0
- data/lib/origen/specs/checkers.rb +103 -0
- data/lib/origen/specs/creation_info.rb +17 -0
- data/lib/origen/specs/doc_resource.rb +91 -0
- data/lib/origen/specs/exhibit.rb +17 -0
- data/lib/origen/specs/mode_select.rb +16 -0
- data/lib/origen/specs/note.rb +17 -0
- data/lib/origen/specs/override.rb +21 -0
- data/lib/origen/specs/power_supply.rb +13 -0
- data/lib/origen/specs/spec.rb +226 -0
- data/lib/origen/specs/version_history.rb +14 -0
- data/lib/origen/specs.rb +552 -0
- data/lib/origen/sub_blocks.rb +298 -0
- data/lib/origen/tester/api.rb +277 -0
- data/lib/origen/tester/bdm/bdm.rb +25 -0
- data/lib/origen/tester/command_based_tester.rb +46 -0
- data/lib/origen/tester/doc/doc.rb +226 -0
- data/lib/origen/tester/doc/generator/flow.rb +71 -0
- data/lib/origen/tester/doc/generator/flow_line.rb +203 -0
- data/lib/origen/tester/doc/generator/test.rb +68 -0
- data/lib/origen/tester/doc/generator/test_group.rb +66 -0
- data/lib/origen/tester/doc/generator/tests.rb +47 -0
- data/lib/origen/tester/doc/generator.rb +126 -0
- data/lib/origen/tester/doc/model.rb +162 -0
- data/lib/origen/tester/generator/flow_control_api.rb +606 -0
- data/lib/origen/tester/generator/identity_map.rb +25 -0
- data/lib/origen/tester/generator/placeholder.rb +13 -0
- data/lib/origen/tester/generator/test_numberer.rb +25 -0
- data/lib/origen/tester/generator.rb +271 -0
- data/lib/origen/tester/interface.rb +154 -0
- data/lib/origen/tester/j750/files.rb +45 -0
- data/lib/origen/tester/j750/generator/flow.rb +123 -0
- data/lib/origen/tester/j750/generator/flow_line.rb +288 -0
- data/lib/origen/tester/j750/generator/patgroup.rb +111 -0
- data/lib/origen/tester/j750/generator/patgroups.rb +41 -0
- data/lib/origen/tester/j750/generator/patset.rb +111 -0
- data/lib/origen/tester/j750/generator/patsets.rb +41 -0
- data/lib/origen/tester/j750/generator/templates/flow.txt.erb +9 -0
- data/lib/origen/tester/j750/generator/templates/instances.txt.erb +16 -0
- data/lib/origen/tester/j750/generator/templates/patgroups.txt.erb +8 -0
- data/lib/origen/tester/j750/generator/templates/patsets.txt.erb +10 -0
- data/lib/origen/tester/j750/generator/test_instance.rb +846 -0
- data/lib/origen/tester/j750/generator/test_instance_group.rb +60 -0
- data/lib/origen/tester/j750/generator/test_instances.rb +182 -0
- data/lib/origen/tester/j750/generator.rb +203 -0
- data/lib/origen/tester/j750/j750.rb +845 -0
- data/lib/origen/tester/j750/j750_hpt.rb +35 -0
- data/lib/origen/tester/j750/parser/ac_spec.rb +11 -0
- data/lib/origen/tester/j750/parser/ac_specs.rb +0 -0
- data/lib/origen/tester/j750/parser/dc_spec.rb +36 -0
- data/lib/origen/tester/j750/parser/dc_specs.rb +50 -0
- data/lib/origen/tester/j750/parser/descriptions.rb +340 -0
- data/lib/origen/tester/j750/parser/flow.rb +111 -0
- data/lib/origen/tester/j750/parser/flow_line.rb +207 -0
- data/lib/origen/tester/j750/parser/flows.rb +23 -0
- data/lib/origen/tester/j750/parser/pattern_set.rb +94 -0
- data/lib/origen/tester/j750/parser/pattern_sets.rb +33 -0
- data/lib/origen/tester/j750/parser/test_instance.rb +322 -0
- data/lib/origen/tester/j750/parser/test_instances.rb +26 -0
- data/lib/origen/tester/j750/parser/timeset.rb +15 -0
- data/lib/origen/tester/j750/parser/timesets.rb +0 -0
- data/lib/origen/tester/j750/parser.rb +104 -0
- data/lib/origen/tester/jlink/jlink.rb +33 -0
- data/lib/origen/tester/parser/description_lookup.rb +64 -0
- data/lib/origen/tester/parser/searchable_array.rb +32 -0
- data/lib/origen/tester/parser/searchable_hash.rb +32 -0
- data/lib/origen/tester/parser.rb +24 -0
- data/lib/origen/tester/time.rb +338 -0
- data/lib/origen/tester/timing.rb +253 -0
- data/lib/origen/tester/ultraflex/files.rb +45 -0
- data/lib/origen/tester/ultraflex/generator/flow.rb +119 -0
- data/lib/origen/tester/ultraflex/generator/flow_line.rb +269 -0
- data/lib/origen/tester/ultraflex/generator/patgroup.rb +111 -0
- data/lib/origen/tester/ultraflex/generator/patgroups.rb +41 -0
- data/lib/origen/tester/ultraflex/generator/patset.rb +111 -0
- data/lib/origen/tester/ultraflex/generator/patsets.rb +41 -0
- data/lib/origen/tester/ultraflex/generator/templates/flow.txt.erb +9 -0
- data/lib/origen/tester/ultraflex/generator/templates/instances.txt.erb +16 -0
- data/lib/origen/tester/ultraflex/generator/templates/patgroups.txt.erb +8 -0
- data/lib/origen/tester/ultraflex/generator/templates/patsets.txt.erb +10 -0
- data/lib/origen/tester/ultraflex/generator/test_instance.rb +622 -0
- data/lib/origen/tester/ultraflex/generator/test_instance_group.rb +60 -0
- data/lib/origen/tester/ultraflex/generator/test_instances.rb +174 -0
- data/lib/origen/tester/ultraflex/generator.rb +200 -0
- data/lib/origen/tester/ultraflex/parser/ac_spec.rb +11 -0
- data/lib/origen/tester/ultraflex/parser/ac_specs.rb +0 -0
- data/lib/origen/tester/ultraflex/parser/dc_spec.rb +36 -0
- data/lib/origen/tester/ultraflex/parser/dc_specs.rb +50 -0
- data/lib/origen/tester/ultraflex/parser/descriptions.rb +342 -0
- data/lib/origen/tester/ultraflex/parser/flow.rb +111 -0
- data/lib/origen/tester/ultraflex/parser/flow_line.rb +207 -0
- data/lib/origen/tester/ultraflex/parser/flows.rb +23 -0
- data/lib/origen/tester/ultraflex/parser/pattern_set.rb +94 -0
- data/lib/origen/tester/ultraflex/parser/pattern_sets.rb +33 -0
- data/lib/origen/tester/ultraflex/parser/test_instance.rb +262 -0
- data/lib/origen/tester/ultraflex/parser/test_instances.rb +26 -0
- data/lib/origen/tester/ultraflex/parser/timeset.rb +15 -0
- data/lib/origen/tester/ultraflex/parser/timesets.rb +0 -0
- data/lib/origen/tester/ultraflex/parser.rb +104 -0
- data/lib/origen/tester/ultraflex/ultraflex.rb +759 -0
- data/lib/origen/tester/v93k/generator/flow.rb +63 -0
- data/lib/origen/tester/v93k/generator/flow_node/print.rb +10 -0
- data/lib/origen/tester/v93k/generator/flow_node.rb +17 -0
- data/lib/origen/tester/v93k/generator/pattern.rb +16 -0
- data/lib/origen/tester/v93k/generator/pattern_master.rb +54 -0
- data/lib/origen/tester/v93k/generator/templates/_test_method.txt.erb +6 -0
- data/lib/origen/tester/v93k/generator/templates/_test_suite.txt.erb +11 -0
- data/lib/origen/tester/v93k/generator/templates/template.flow.erb +121 -0
- data/lib/origen/tester/v93k/generator/templates/template.pmfl.erb +9 -0
- data/lib/origen/tester/v93k/generator/test_function.rb +103 -0
- data/lib/origen/tester/v93k/generator/test_functions.rb +79 -0
- data/lib/origen/tester/v93k/generator/test_method.rb +46 -0
- data/lib/origen/tester/v93k/generator/test_methods.rb +75 -0
- data/lib/origen/tester/v93k/generator/test_suite.rb +54 -0
- data/lib/origen/tester/v93k/generator/test_suites.rb +65 -0
- data/lib/origen/tester/v93k/generator.rb +80 -0
- data/lib/origen/tester/v93k/v93k.rb +420 -0
- data/lib/origen/tester/vector.rb +86 -0
- data/lib/origen/tester/vector_generator.rb +633 -0
- data/lib/origen/tester/vector_pipeline.rb +150 -0
- data/lib/origen/tester.rb +56 -0
- data/lib/origen/top_level.rb +134 -0
- data/lib/origen/users/ldap.rb +65 -0
- data/lib/origen/users/user.rb +149 -0
- data/lib/origen/users.rb +30 -0
- data/lib/origen/utility/block_args.rb +93 -0
- data/lib/origen/utility/csv_data.rb +110 -0
- data/lib/origen/utility/design_sync.rb +494 -0
- data/lib/origen/utility/diff.rb +158 -0
- data/lib/origen/utility/input_capture.rb +121 -0
- data/lib/origen/utility/mailer.rb +143 -0
- data/lib/origen/utility/s_record.rb +205 -0
- data/lib/origen/utility/time_and_date.rb +30 -0
- data/lib/origen/utility.rb +12 -0
- data/lib/origen/version_checker.rb +117 -0
- data/lib/origen/version_string.rb +356 -0
- data/lib/origen.rb +648 -0
- data/lib/tasks/gem.rake +27 -22
- data/origen_site_config.yml +36 -0
- data/source_setup +17 -0
- data/spec/format/rgen_formatter.rb +14 -0
- data/templates/api_doc/README.txt.erb +24 -0
- data/templates/code_generators/gemfile_app.rb +4 -0
- data/templates/code_generators/gemfile_plugin.rb +6 -0
- data/templates/code_generators/gemspec.rb +33 -0
- data/templates/code_generators/rakefile.rb +10 -0
- data/templates/code_generators/spec_helper.rb +49 -0
- data/templates/code_generators/version.rb +8 -0
- data/templates/code_generators/version_time.rb +3 -0
- data/templates/git/gitignore.erb +33 -0
- data/templates/j750/_vt_flow.txt.erb +8 -0
- data/templates/j750/_vt_instances.txt.erb +4 -0
- data/templates/j750/program_sheet.txt.erb +9 -0
- data/templates/nanoc/Rules +74 -0
- data/templates/nanoc/config.yaml +77 -0
- data/templates/nanoc/content/favicon.ico +0 -0
- data/templates/nanoc/layouts/bootstrap.html.erb +63 -0
- data/templates/nanoc/layouts/bootstrap3.html.erb +71 -0
- data/templates/nanoc/layouts/freescale.html.erb +79 -0
- data/templates/nanoc/lib/bootstrap_filter.rb +49 -0
- data/templates/nanoc/lib/codeblocks_filter.rb +41 -0
- data/templates/nanoc/lib/default.rb +2 -0
- data/templates/nanoc/lib/gzip_filter.rb +16 -0
- data/templates/nanoc/lib/haml_code_filter.rb +41 -0
- data/templates/nanoc/lib/helpers.rb +1 -0
- data/templates/nanoc/lib/search_filter.rb +62 -0
- data/templates/nanoc_dynamic/content/search.js.erb +92 -0
- data/templates/shared/web/_logo.html +10 -0
- data/templates/test/_inline_sub.txt.erb +2 -0
- data/templates/test/environment.txt.erb +1 -0
- data/templates/test/inline.txt.erb +11 -0
- data/templates/test/inspections.txt.erb +19 -0
- data/templates/test/set1/_sub1.txt.erb +12 -0
- data/templates/test/set1/_sub4.txt.erb +1 -0
- data/templates/test/set1/_sub5.txt.erb +1 -0
- data/templates/test/set1/main.txt.erb +53 -0
- data/templates/test/set1/sub_dir/_sub2.txt.erb +20 -0
- data/templates/test/set1/sub_dir/_sub3.txt.erb +12 -0
- data/templates/test/set1/sub_dir/main2.txt.erb +4 -0
- data/templates/test/set2/template_with_no_erb_1.txt +9 -0
- data/templates/test/set2/template_with_no_erb_2.txt +9 -0
- data/templates/test/set3/_layout.html.erb +4 -0
- data/templates/test/set3/content.html.erb +6 -0
- data/templates/time/filter.rb.erb +15 -0
- data/templates/time/rules.rb.erb +45 -0
- metadata +639 -5
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
module Origen
|
|
2
|
+
class Application
|
|
3
|
+
# All access to the configuration management system should be done
|
|
4
|
+
# through methods of this class, an instance of which is accessible via
|
|
5
|
+
# Origen.app.cm
|
|
6
|
+
#
|
|
7
|
+
# Where possible external arguments relating to the underlying CM tool should
|
|
8
|
+
# not be used, try and keep method names and arguments generic.
|
|
9
|
+
#
|
|
10
|
+
# Right now it supports Design Sync only, but by eliminating interaction
|
|
11
|
+
# with DS outside of this class it means that a future change to the CM
|
|
12
|
+
# system should be easily handled by simply swapping in a new ConfigurationManager
|
|
13
|
+
# class.
|
|
14
|
+
class ConfigurationManager
|
|
15
|
+
def initialize
|
|
16
|
+
@cm = Origen::Utility::DesignSync.new
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def modified_objects_in_workspace?
|
|
20
|
+
@cm.modified_objects?(workspace_dirs, rec: true, fullpath: true)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def modified_objects_in_workspace_list
|
|
24
|
+
@cm.modified_objects(workspace_dirs, rec: true, fullpath: true)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def unmanaged_objects_in_workspace?
|
|
28
|
+
@cm.modified_objects?(workspace_dirs, rec: true, unmanaged: true, managed: false, fullpath: true)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def unmanaged_objects_in_workspace_list
|
|
32
|
+
@cm.modified_objects(workspace_dirs, rec: true, unmanaged: true, managed: false, fullpath: true)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def modified_objects_in_repository?
|
|
36
|
+
@cm.modified_objects?(workspace_dirs, rec: true, fullpath: true, remote: true)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def modified_objects_in_repository_list
|
|
40
|
+
@cm.modified_objects(workspace_dirs, rec: true, fullpath: true, remote: true)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def workspace_dirs
|
|
44
|
+
"#{Origen.root} " + Origen.app.config.external_app_dirs.join(' ')
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# Fetch the latest version of the application
|
|
48
|
+
def fetch_latest(options = {})
|
|
49
|
+
options = {
|
|
50
|
+
force: false
|
|
51
|
+
}.merge(options)
|
|
52
|
+
@cm.populate(workspace_dirs, rec: true, verbose: true, force: options[:force])
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def diff_cmd(options = {})
|
|
56
|
+
@cm.diff_cmd(options)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def import(*args)
|
|
60
|
+
@cm.import(*args)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def ensure_workspace_unmodified!
|
|
64
|
+
if modified_objects_in_workspace?
|
|
65
|
+
puts <<-EOT
|
|
66
|
+
Your workspace has local modifications that are preventing the requested action
|
|
67
|
+
- run 'origen rc mods' to see them.
|
|
68
|
+
EOT
|
|
69
|
+
exit 1
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def method_missing(method, *args, &blk)
|
|
74
|
+
@cm.send(method, *args, &blk)
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
module Origen
|
|
2
|
+
class Application
|
|
3
|
+
# This class currently serves two APIs and is a bit of a mess.
|
|
4
|
+
# The first API is the old style deploy which is deprecated, in this approach the
|
|
5
|
+
# entire application was built and manged remotely with pages compiled in the remote
|
|
6
|
+
# application.
|
|
7
|
+
#
|
|
8
|
+
# The new appraoch is that the web pages are compiled in the local application and
|
|
9
|
+
# then deploy consists of simply copying them to the remote location.
|
|
10
|
+
class Deployer
|
|
11
|
+
require 'fileutils'
|
|
12
|
+
|
|
13
|
+
attr_writer :version, :directory, :origen_directory, :rdoc_command, :test
|
|
14
|
+
|
|
15
|
+
# Deploys this release to origen.freescale.net/tfs
|
|
16
|
+
# This needs to be made generic so that projects can use it to, right now this
|
|
17
|
+
# code exists both here and in the TFS project
|
|
18
|
+
def deploy(options = {})
|
|
19
|
+
options = {
|
|
20
|
+
test: false, # Do a test run deploy in the local workspace
|
|
21
|
+
archive: false
|
|
22
|
+
}.merge(options)
|
|
23
|
+
@directory = options[:directory]
|
|
24
|
+
@app_sub_directory = options[:app_sub_directory]
|
|
25
|
+
@test = options[:test]
|
|
26
|
+
@version = options[:version]
|
|
27
|
+
@rdoc_command = options[:rdoc_command]
|
|
28
|
+
@successful = false
|
|
29
|
+
|
|
30
|
+
puts '***********************************************************************'
|
|
31
|
+
puts "'deploy' is deprecated, please transition to 'origen web compile' instead"
|
|
32
|
+
puts '***********************************************************************'
|
|
33
|
+
|
|
34
|
+
begin
|
|
35
|
+
puts ''
|
|
36
|
+
puts 'Deploying...'
|
|
37
|
+
puts ''
|
|
38
|
+
populate(offline_release_dir) unless test_run?
|
|
39
|
+
generate_web_pages
|
|
40
|
+
generate_rdoc_pages if @rdoc_command
|
|
41
|
+
# If web pages were generated compile them through nanoc, this is not done
|
|
42
|
+
# as part of generate web pages to allow the application to add additional web
|
|
43
|
+
# pages during the rdoc command
|
|
44
|
+
if @nanoc_dir
|
|
45
|
+
Dir.chdir @nanoc_dir do
|
|
46
|
+
system 'nanoc'
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
unless test_run?
|
|
50
|
+
create_symlinks
|
|
51
|
+
make_archive if options[:archive]
|
|
52
|
+
end
|
|
53
|
+
@successful = true
|
|
54
|
+
true
|
|
55
|
+
rescue Exception => e
|
|
56
|
+
puts e.message
|
|
57
|
+
puts e.backtrace
|
|
58
|
+
deploy_unsuccessful(@directory)
|
|
59
|
+
@successful = false
|
|
60
|
+
false
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# Reports whether the last deploy was successful or not
|
|
65
|
+
def successful?
|
|
66
|
+
@successful
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def test_run?
|
|
70
|
+
@test
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def require_remote_directories
|
|
74
|
+
%w(remote1 remote2).each do |dir|
|
|
75
|
+
dir = "#{Origen.config.web_directory}/#{dir}"
|
|
76
|
+
unless File.exist?(dir)
|
|
77
|
+
FileUtils.mkdir_p dir
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def latest_symlink
|
|
83
|
+
"#{Origen.config.web_directory}/latest"
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def offline_remote_directory
|
|
87
|
+
if File.exist?(latest_symlink)
|
|
88
|
+
if File.readlink(latest_symlink) =~ /remote1/
|
|
89
|
+
"#{Origen.config.web_directory}/remote2"
|
|
90
|
+
else
|
|
91
|
+
"#{Origen.config.web_directory}/remote1"
|
|
92
|
+
end
|
|
93
|
+
else
|
|
94
|
+
"#{Origen.config.web_directory}/remote1"
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def live_remote_directory
|
|
99
|
+
if File.exist?(latest_symlink)
|
|
100
|
+
if File.readlink(latest_symlink) =~ /remote1/
|
|
101
|
+
"#{Origen.config.web_directory}/remote1"
|
|
102
|
+
elsif File.readlink(latest_symlink) =~ /remote2/
|
|
103
|
+
"#{Origen.config.web_directory}/remote2"
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
# Deploy a whole web site.
|
|
109
|
+
#
|
|
110
|
+
# This copies the entire contents of web/output in the application
|
|
111
|
+
# directory to the remote server.
|
|
112
|
+
def deploy_site
|
|
113
|
+
Origen.app.listeners_for(:before_deploy_site).each(&:before_deploy_site)
|
|
114
|
+
# Empty the contents of the remote dir
|
|
115
|
+
if File.exist?(offline_remote_directory)
|
|
116
|
+
FileUtils.remove_dir(offline_remote_directory, true)
|
|
117
|
+
require_remote_directories
|
|
118
|
+
end
|
|
119
|
+
# Copy the new contents accross
|
|
120
|
+
`chmod g+w -R #{Origen.root}/web/output` # Ensure group writable
|
|
121
|
+
FileUtils.cp_r "#{Origen.root}/web/output/.", offline_remote_directory
|
|
122
|
+
`chmod g+w -R #{offline_remote_directory}` # Double ensure group writable
|
|
123
|
+
# Make live
|
|
124
|
+
create_symlink offline_remote_directory, latest_symlink
|
|
125
|
+
index = "#{Origen.config.web_directory}/index.html"
|
|
126
|
+
# This symlink allows the site homepage to be accessed from the web root
|
|
127
|
+
# directory rather than root directory/latest
|
|
128
|
+
unless File.exist?(index)
|
|
129
|
+
create_symlink "#{latest_symlink}/index.html", index
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
def deploy_file(file)
|
|
134
|
+
remote_dir = live_remote_directory
|
|
135
|
+
if remote_dir
|
|
136
|
+
file = Origen.file_handler.clean_path_to(file)
|
|
137
|
+
sub_dir = Origen.file_handler.sub_dir_of(file, "#{Origen.root}/templates/web") .to_s
|
|
138
|
+
page = file.basename.to_s.sub(/\..*/, '')
|
|
139
|
+
# Special case for the main index page
|
|
140
|
+
if page == 'index' && sub_dir == '.'
|
|
141
|
+
FileUtils.cp "#{Origen.root}/web/output/index.html", remote_dir
|
|
142
|
+
else
|
|
143
|
+
FileUtils.mkdir_p("#{remote_dir}/#{sub_dir}/#{page}")
|
|
144
|
+
FileUtils.cp "#{Origen.root}/web/output/#{sub_dir}/#{page}/index.html", "#{remote_dir}/#{sub_dir}/#{page}"
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
def generate_api
|
|
150
|
+
dir = "#{Origen.root}/web/output/api"
|
|
151
|
+
FileUtils.rm_rf(dir) if File.exist?(dir)
|
|
152
|
+
# system("cd #{Origen.root} && rdoc --op api --tab-width 4 --main api_doc/README.txt --title 'Origen (#{Origen.version})' api_doc lib/origen")
|
|
153
|
+
if Origen.root == Origen.top
|
|
154
|
+
title = "#{Origen.config.name} #{Origen.version}"
|
|
155
|
+
else
|
|
156
|
+
title = "#{Origen.config.name} #{Origen.app.version}"
|
|
157
|
+
end
|
|
158
|
+
system("yard doc --output-dir #{Origen.root}/web/output/api --title '#{title}'")
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
def deploy_archive(id)
|
|
162
|
+
dir = live_remote_directory
|
|
163
|
+
if dir
|
|
164
|
+
id.gsub!('.', '_')
|
|
165
|
+
archive_dir = "#{Origen.config.web_directory}/#{id}"
|
|
166
|
+
FileUtils.rm_rf(archive_dir) if File.exist?(archive_dir)
|
|
167
|
+
FileUtils.mkdir_p archive_dir
|
|
168
|
+
FileUtils.cp_r "#{Origen.root}/web/output/.", archive_dir
|
|
169
|
+
end
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
# Make an archive directory for the current release, this will create
|
|
173
|
+
# a new directory specifically for this release and copy over the web
|
|
174
|
+
# pages and api docs.
|
|
175
|
+
def make_archive
|
|
176
|
+
if version == 'latest'
|
|
177
|
+
puts 'Cannot archive latest, need a tag reference'
|
|
178
|
+
else
|
|
179
|
+
dir = archive_directory(force_clear: true)
|
|
180
|
+
FileUtils.cp_r Dir.glob("#{origen_directory}/web/output/*").sort, dir
|
|
181
|
+
api = "#{archive_directory}/api"
|
|
182
|
+
FileUtils.mkdir_p api unless File.exist?(api)
|
|
183
|
+
FileUtils.cp_r Dir.glob("#{origen_directory}/api/*").sort, api
|
|
184
|
+
end
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
def create_symlinks
|
|
188
|
+
{
|
|
189
|
+
"#{origen_directory}/web/output" => "#{root_directory}/latest",
|
|
190
|
+
"#{origen_directory}/api" => "#{origen_directory}/web/output/api"
|
|
191
|
+
|
|
192
|
+
}.each do |from, to|
|
|
193
|
+
create_symlink(from, to)
|
|
194
|
+
end
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
def create_symlink(from, to)
|
|
198
|
+
`rm -f #{to}` if File.exist?(to)
|
|
199
|
+
`ln -s #{from} #{to}` if File.exist?(from)
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
def populate(dir)
|
|
203
|
+
# Populate to the new tag
|
|
204
|
+
system "dssc setvault #{Origen.config.vault} #{dir}"
|
|
205
|
+
system "dssc pop -rec -uni -force -ver #{version} #{dir}"
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
def web_server_dir
|
|
209
|
+
"#{origen_directory}/web"
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
def create_web_server_dir
|
|
213
|
+
if File.exist?("#{origen_directory}/templates/web")
|
|
214
|
+
dir = web_server_dir
|
|
215
|
+
FileUtils.rm_rf dir if File.exist?(dir)
|
|
216
|
+
FileUtils.mkdir_p dir
|
|
217
|
+
# Copy the web infrastructure
|
|
218
|
+
FileUtils.cp_r Dir.glob("#{Origen.top}/templates/nanoc/*").sort, dir
|
|
219
|
+
# Compile the dynamic stuff
|
|
220
|
+
Origen.app.runner.launch action: :compile,
|
|
221
|
+
files: "#{Origen.top}/templates/nanoc_dynamic",
|
|
222
|
+
output: dir
|
|
223
|
+
unless Origen.root == origen_directory
|
|
224
|
+
# Copy any application overrides if they exist
|
|
225
|
+
if File.exist?("#{origen_directory}/templates/nanoc")
|
|
226
|
+
FileUtils.cp_r Dir.glob("#{origen_directory}/templates/nanoc/*").sort, dir, remove_destination: true
|
|
227
|
+
end
|
|
228
|
+
end
|
|
229
|
+
# Remove the .SYNCs
|
|
230
|
+
system "find #{dir} -name \".SYNC\" | xargs rm -fr"
|
|
231
|
+
@nanoc_dir = dir
|
|
232
|
+
end
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
# Compiles and creates the web documentation pages, combining the Origen Jekyll
|
|
236
|
+
# infrastructure and the application specific content
|
|
237
|
+
def generate_web_pages
|
|
238
|
+
if File.exist?("#{origen_directory}/templates/web")
|
|
239
|
+
create_web_server_dir
|
|
240
|
+
# Finally compile the application web pages
|
|
241
|
+
Origen.app.runner.generate(files: "#{origen_directory}/templates/web",
|
|
242
|
+
compile: true,
|
|
243
|
+
output: "#{@nanoc_dir}/content")
|
|
244
|
+
end
|
|
245
|
+
end
|
|
246
|
+
|
|
247
|
+
# Run the rdoc task
|
|
248
|
+
def generate_rdoc_pages
|
|
249
|
+
if File.exist?("#{origen_directory}/templates/api_doc")
|
|
250
|
+
Origen.app.runner.generate(files: "#{origen_directory}/templates/api_doc",
|
|
251
|
+
compile: true,
|
|
252
|
+
output: "#{origen_directory}/api_doc")
|
|
253
|
+
end
|
|
254
|
+
Dir.chdir origen_directory do
|
|
255
|
+
system "origen #{rdoc_command}"
|
|
256
|
+
end
|
|
257
|
+
end
|
|
258
|
+
|
|
259
|
+
def rdoc_command
|
|
260
|
+
@rdoc_command || 'rdoc'
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
# The top level directory that hosts all releases
|
|
264
|
+
def root_directory
|
|
265
|
+
return @root_directory if @root_directory
|
|
266
|
+
FileUtils.mkdir_p @directory unless File.exist?(@directory)
|
|
267
|
+
@root_directory = @directory
|
|
268
|
+
end
|
|
269
|
+
|
|
270
|
+
# The directory that contains the current release
|
|
271
|
+
def release_directory1
|
|
272
|
+
return @release_directory1 if @release_directory1
|
|
273
|
+
if test_run?
|
|
274
|
+
@release_directory1 = Origen.root
|
|
275
|
+
else
|
|
276
|
+
@release_directory1 = "#{root_directory}/release_1"
|
|
277
|
+
unless File.exist?(@release_directory1)
|
|
278
|
+
FileUtils.mkdir_p @release_directory1
|
|
279
|
+
populate(@release_directory1)
|
|
280
|
+
end
|
|
281
|
+
end
|
|
282
|
+
@release_directory1
|
|
283
|
+
end
|
|
284
|
+
|
|
285
|
+
def release_directory2
|
|
286
|
+
return @release_directory2 if @release_directory2
|
|
287
|
+
if test_run?
|
|
288
|
+
@release_directory2 = Origen.root
|
|
289
|
+
else
|
|
290
|
+
@release_directory2 = "#{root_directory}/release_2"
|
|
291
|
+
unless File.exist?(@release_directory2)
|
|
292
|
+
FileUtils.mkdir_p @release_directory2
|
|
293
|
+
populate(@release_directory2)
|
|
294
|
+
end
|
|
295
|
+
end
|
|
296
|
+
@release_directory2
|
|
297
|
+
end
|
|
298
|
+
|
|
299
|
+
def archive_directory(options = {})
|
|
300
|
+
ver = version
|
|
301
|
+
return Origen.root if test_run?
|
|
302
|
+
if options[:force_clear]
|
|
303
|
+
@archive_directory = "#{root_directory}/#{ver}"
|
|
304
|
+
FileUtils.rm_rf @archive_directory if File.exist?(@archive_directory)
|
|
305
|
+
else
|
|
306
|
+
return @archive_directory if @archive_directory
|
|
307
|
+
@archive_directory = "#{root_directory}/#{ver}"
|
|
308
|
+
end
|
|
309
|
+
FileUtils.mkdir_p @archive_directory unless File.exist?(@archive_directory)
|
|
310
|
+
@archive_directory
|
|
311
|
+
end
|
|
312
|
+
|
|
313
|
+
def offline_release_dir
|
|
314
|
+
link = "#{root_directory}/latest"
|
|
315
|
+
if File.exist?(link)
|
|
316
|
+
if File.readlink(link) =~ /release_1/
|
|
317
|
+
@offline_release_dir = release_directory2
|
|
318
|
+
else
|
|
319
|
+
@offline_release_dir = release_directory1
|
|
320
|
+
end
|
|
321
|
+
else
|
|
322
|
+
@offline_release_dir = release_directory1
|
|
323
|
+
end
|
|
324
|
+
end
|
|
325
|
+
|
|
326
|
+
# The directory that contains the Origen app for the current release
|
|
327
|
+
def origen_directory
|
|
328
|
+
return @origen_directory if @origen_directory
|
|
329
|
+
if test_run?
|
|
330
|
+
@origen_directory = Origen.root
|
|
331
|
+
else
|
|
332
|
+
@origen_directory = @app_sub_directory ? "#{offline_release_dir}/#{@app_sub_directory}" : offline_release_dir
|
|
333
|
+
FileUtils.mkdir_p @origen_directory unless File.exist?(@origen_directory)
|
|
334
|
+
end
|
|
335
|
+
@origen_directory
|
|
336
|
+
end
|
|
337
|
+
|
|
338
|
+
def version
|
|
339
|
+
@version
|
|
340
|
+
end
|
|
341
|
+
|
|
342
|
+
# Returns true if the user account belongs to the origen group
|
|
343
|
+
def user_belongs_to_origen?
|
|
344
|
+
if Origen.running_on_windows?
|
|
345
|
+
false
|
|
346
|
+
else
|
|
347
|
+
`"groups"`.gsub("\n", '').split(' ').include?('origen')
|
|
348
|
+
end
|
|
349
|
+
end
|
|
350
|
+
|
|
351
|
+
# Returns true if running on CDE
|
|
352
|
+
def running_on_cde?
|
|
353
|
+
if Origen.running_on_windows?
|
|
354
|
+
false
|
|
355
|
+
else
|
|
356
|
+
!!(`"domainname"` =~ /cde/i)
|
|
357
|
+
end
|
|
358
|
+
end
|
|
359
|
+
|
|
360
|
+
def deploy_unsuccessful(directory)
|
|
361
|
+
puts ''
|
|
362
|
+
puts "*** ERROR *** - Could not deploy to: #{directory}"
|
|
363
|
+
puts ''
|
|
364
|
+
end
|
|
365
|
+
end
|
|
366
|
+
end
|
|
367
|
+
end
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
module Origen
|
|
2
|
+
class Application
|
|
3
|
+
# Class to control the environment.
|
|
4
|
+
#
|
|
5
|
+
# The environment is a Ruby file that is loaded prior to generating every piece of output.
|
|
6
|
+
# It is optional, and is loaded before the target, thereby allowing targets to override
|
|
7
|
+
# environment settings.
|
|
8
|
+
#
|
|
9
|
+
# A typical use case for the environment is to setup the test platform, or to set Origen
|
|
10
|
+
# to run in debug or simulation mode. It can generally be thought of as a global target.
|
|
11
|
+
#
|
|
12
|
+
# All environment definition files must live in Origen.root/environment.
|
|
13
|
+
#
|
|
14
|
+
# An instance of this class is automatically
|
|
15
|
+
# instantiated and available globally as Origen.environment.
|
|
16
|
+
class Environment
|
|
17
|
+
DIR = "#{Origen.root}/environment" # :nodoc:
|
|
18
|
+
SAVE_FILE = "#{DIR}/.default" # :nodoc:
|
|
19
|
+
DEFAULT_FILE = "#{DIR}/default.rb" # :nodoc:
|
|
20
|
+
|
|
21
|
+
# Returns the name (the filename) of the current environment
|
|
22
|
+
def name
|
|
23
|
+
file.basename('.rb').to_s if file
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Returns Array of all environments available
|
|
27
|
+
def all_environments
|
|
28
|
+
envs = []
|
|
29
|
+
find('').sort.each do |file|
|
|
30
|
+
envs << File.basename(file)
|
|
31
|
+
end
|
|
32
|
+
envs
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Returns true if the environment exists, this can be used to test for the presence
|
|
36
|
+
# of an environment before calling one of the other methods to actually apply it.
|
|
37
|
+
#
|
|
38
|
+
# It will return true if one or more environments are found matching the given name,
|
|
39
|
+
# use the unique? method to test if the given name uniquely identifies a valid
|
|
40
|
+
# environment.
|
|
41
|
+
def exists?(name)
|
|
42
|
+
envs = find(name)
|
|
43
|
+
envs.size > 0
|
|
44
|
+
end
|
|
45
|
+
alias_method :exist?, :exists?
|
|
46
|
+
|
|
47
|
+
# Similar to the exists? method, this will return true only if the given name
|
|
48
|
+
# resolves to a single valid environment.
|
|
49
|
+
def unique?(name)
|
|
50
|
+
envs = find(name)
|
|
51
|
+
envs.size == 1
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# Switch to the supplied environment, name can be a fragment as long as it allows
|
|
55
|
+
# a unique environment to be identified.
|
|
56
|
+
#
|
|
57
|
+
# Calling this method does not affect the default environment setting in the workspace.
|
|
58
|
+
def temporary=(name)
|
|
59
|
+
envs = find(name)
|
|
60
|
+
if envs.size == 0
|
|
61
|
+
puts "Sorry no environments were found matching '#{name}'!"
|
|
62
|
+
puts 'Here are the available options:'
|
|
63
|
+
find('').sort.each do |file|
|
|
64
|
+
puts File.basename(file)
|
|
65
|
+
end
|
|
66
|
+
exit 1
|
|
67
|
+
elsif envs.size > 1
|
|
68
|
+
puts 'Please try again with one of the following environments:'
|
|
69
|
+
envs.sort.each do |file|
|
|
70
|
+
puts File.basename(file)
|
|
71
|
+
end
|
|
72
|
+
exit 1
|
|
73
|
+
else
|
|
74
|
+
self.file = envs[0]
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
alias_method :switch, :temporary=
|
|
78
|
+
alias_method :switch_to, :temporary=
|
|
79
|
+
|
|
80
|
+
# As #temporary= except that the given environment will be set to the workspace default
|
|
81
|
+
def default=(name)
|
|
82
|
+
if name
|
|
83
|
+
self.temporary = name
|
|
84
|
+
else
|
|
85
|
+
@file = nil
|
|
86
|
+
end
|
|
87
|
+
save
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
# Prints out the current environment details to the command line
|
|
91
|
+
def describe
|
|
92
|
+
f = self.file!
|
|
93
|
+
puts "Current environment: #{f.basename}"
|
|
94
|
+
puts '*' * 70
|
|
95
|
+
File.open(f).each do |line|
|
|
96
|
+
puts " #{line}"
|
|
97
|
+
end
|
|
98
|
+
puts '*' * 70
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
# Returns an array of matching environment file paths
|
|
102
|
+
def find(name)
|
|
103
|
+
if name
|
|
104
|
+
name = name.gsub('*', '')
|
|
105
|
+
if File.exist?(name)
|
|
106
|
+
[name]
|
|
107
|
+
elsif File.exist?("#{Origen.root}/environment/#{name}") && name != ''
|
|
108
|
+
["#{Origen.root}/environment/#{name}"]
|
|
109
|
+
else
|
|
110
|
+
# The below weirdness is to make it recurse into symlinked directories
|
|
111
|
+
Dir.glob("#{DIR}/**{,/*/**}/*").sort.uniq.select do |file|
|
|
112
|
+
File.basename(file) =~ /#{name}/ && file !~ /.*\.rb.+$/
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
else
|
|
116
|
+
[nil]
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
# Saves the current environment as the workspace default, i.e. the current environment
|
|
121
|
+
# will be used by Origen the next time if no other environment is specified
|
|
122
|
+
def save # :nodoc:
|
|
123
|
+
if @file
|
|
124
|
+
File.open(SAVE_FILE, 'w') do |f|
|
|
125
|
+
Marshal.dump(file, f)
|
|
126
|
+
end
|
|
127
|
+
else
|
|
128
|
+
forget
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
# Load the default file from the workspace default if it exists and return it,
|
|
133
|
+
# otherwise returns nil
|
|
134
|
+
def default_file
|
|
135
|
+
return @default_file if @default_file
|
|
136
|
+
if File.exist?(SAVE_FILE)
|
|
137
|
+
File.open(SAVE_FILE) do |f|
|
|
138
|
+
@default_file = Marshal.load(f)
|
|
139
|
+
end
|
|
140
|
+
elsif File.exist?(DEFAULT_FILE)
|
|
141
|
+
@default_file = Pathname.new(DEFAULT_FILE)
|
|
142
|
+
end
|
|
143
|
+
@default_file
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
# Returns the environment file (a Pathname object) if it has been defined, otherwise nil
|
|
147
|
+
def file # :nodoc:
|
|
148
|
+
return @file if @file
|
|
149
|
+
if default_file && File.exist?(default_file)
|
|
150
|
+
@file = default_file
|
|
151
|
+
end
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
# As file except will raise an exception if it hasn't been defined yet
|
|
155
|
+
def file! # :nodoc:
|
|
156
|
+
unless file
|
|
157
|
+
puts 'No environment has been specified!'
|
|
158
|
+
puts 'To specify an environment use the -e switch.'
|
|
159
|
+
puts 'Look in the environment directory for a list of available environment names.'
|
|
160
|
+
exit 1
|
|
161
|
+
end
|
|
162
|
+
file
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
def file=(path) # :nodoc:
|
|
166
|
+
if path
|
|
167
|
+
@file = Pathname.new(path)
|
|
168
|
+
else
|
|
169
|
+
@file = nil
|
|
170
|
+
end
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
# Remove the workspace default environment
|
|
174
|
+
def forget
|
|
175
|
+
File.delete(SAVE_FILE) if File.exist?(SAVE_FILE)
|
|
176
|
+
@default_file = nil
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
# Returns true if running with a temporary environment, i.e. if the current
|
|
180
|
+
# environment is not the same as the default environment
|
|
181
|
+
def temporary?
|
|
182
|
+
@file == @default_file
|
|
183
|
+
end
|
|
184
|
+
end
|
|
185
|
+
end
|
|
186
|
+
end
|