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,374 @@
|
|
|
1
|
+
module Origen
|
|
2
|
+
class Application
|
|
3
|
+
# Class to handle the target.
|
|
4
|
+
#
|
|
5
|
+
# The target is a Ruby file that is run prior to generating each pattern, and
|
|
6
|
+
# it should be used to instantiate the top-level models used by the application.
|
|
7
|
+
# It can also be used to override and settings within these classes after they
|
|
8
|
+
# have been instantiated and before they are run.
|
|
9
|
+
#
|
|
10
|
+
# All target files must live in Origen.root/target.
|
|
11
|
+
#
|
|
12
|
+
# An instance of this class is automatically instantiated and available globally
|
|
13
|
+
# as Origen.app.target
|
|
14
|
+
class Target
|
|
15
|
+
DIR = "#{Origen.root}/target" # :nodoc:
|
|
16
|
+
SAVE_FILE = "#{DIR}/.default" # :nodoc:
|
|
17
|
+
DEFAULT_FILE = "#{DIR}/default.rb" # :nodoc:
|
|
18
|
+
|
|
19
|
+
# Implement a target loop based on the supplied options.
|
|
20
|
+
# The options can contain the keys :target or :targets or neither.
|
|
21
|
+
#
|
|
22
|
+
# In the neither case the loop will run once for the current workspace
|
|
23
|
+
# default target.
|
|
24
|
+
#
|
|
25
|
+
# In the case where one of the keys is present the loop will run for each
|
|
26
|
+
# target and the options will be passed into the block with the key :target
|
|
27
|
+
# set to the current target.
|
|
28
|
+
def loop(options = {})
|
|
29
|
+
options = {
|
|
30
|
+
set_target: true,
|
|
31
|
+
force_debug: false, # Set true to force debug mode for all targets
|
|
32
|
+
}.merge(options)
|
|
33
|
+
targets = [options.delete(:target), options.delete(:targets)].flatten.compact.uniq
|
|
34
|
+
targets = [file!.basename.to_s] if targets.empty?
|
|
35
|
+
set = options.delete(:set_target)
|
|
36
|
+
targets.each do |target|
|
|
37
|
+
Origen.load_target(target, options) if set
|
|
38
|
+
options[:target] = target
|
|
39
|
+
yield options
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# Use this to implement a loop for each production target, it will automatically
|
|
44
|
+
# load each target before yielding to the block.
|
|
45
|
+
#
|
|
46
|
+
# The production targets are defined by the production_targets configuration
|
|
47
|
+
# option.
|
|
48
|
+
# === Example
|
|
49
|
+
# Origen.app.target.each_production do
|
|
50
|
+
# Run something within the context of each target
|
|
51
|
+
# end
|
|
52
|
+
def each_production(options = {})
|
|
53
|
+
options = {
|
|
54
|
+
force_debug: false, # Set true to force debug mode for all targets
|
|
55
|
+
}.merge(options)
|
|
56
|
+
prod_targets.each do |moo, targets|
|
|
57
|
+
[targets].flatten.each do |target|
|
|
58
|
+
self.temporary = target
|
|
59
|
+
Origen.app.load_target!(options)
|
|
60
|
+
yield moo
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# As each_production except it only yields unique targets. i.e. if you have two
|
|
66
|
+
# MOOs that use the same target file defined in the production_targets then this
|
|
67
|
+
# method will only yield once.
|
|
68
|
+
#
|
|
69
|
+
# An array of MOOs that use each target is returned each time.
|
|
70
|
+
# === Example
|
|
71
|
+
# Origen.app.target.each_unique_production do |moos|
|
|
72
|
+
# Run something within the context of each unique target
|
|
73
|
+
# end
|
|
74
|
+
def each_unique_production(options = {})
|
|
75
|
+
options = {
|
|
76
|
+
force_debug: false, # Set true to force debug mode for all targets
|
|
77
|
+
}.merge(options)
|
|
78
|
+
targets = {}
|
|
79
|
+
prod_targets.each do |moo, moos_targets|
|
|
80
|
+
[moos_targets].flatten.each do |target|
|
|
81
|
+
if targets[target]
|
|
82
|
+
targets[target] << moo
|
|
83
|
+
else
|
|
84
|
+
targets[target] = [moo]
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
targets.each do |target, moos|
|
|
89
|
+
self.temporary = target
|
|
90
|
+
Origen.app.load_target!(options)
|
|
91
|
+
yield moos
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
# If the production_targets moo number mapping inclues the current target then
|
|
96
|
+
# the MOO number will be returned, otherwise nil
|
|
97
|
+
def moo
|
|
98
|
+
prod_targets.each do |moo, targets|
|
|
99
|
+
[targets].flatten.each do |target|
|
|
100
|
+
return moo if File.basename(target, '.rb').to_s == file.basename('.rb').to_s
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
nil
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
# Returns the name (the filename) of the current target
|
|
107
|
+
def name
|
|
108
|
+
file.basename('.rb').to_s if file
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
# Load the target, calling this will re-instantiate all top-level objects
|
|
112
|
+
# defined there.
|
|
113
|
+
def load!(options = {})
|
|
114
|
+
options = {
|
|
115
|
+
force_debug: false, # Set true to force debug mode for all targets
|
|
116
|
+
}.merge(options)
|
|
117
|
+
Origen.app.load_target!(options)
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
# Returns Array of all targets available
|
|
121
|
+
def all_targets
|
|
122
|
+
targets = []
|
|
123
|
+
find('').sort.each do |file|
|
|
124
|
+
targets << File.basename(file)
|
|
125
|
+
end
|
|
126
|
+
targets # return
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
# Returns an array containing all current production targets
|
|
130
|
+
def production_targets
|
|
131
|
+
prod_targets.map { |_moo, targets| targets }.uniq
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
# Returns true if the target exists, this can be used to test for the presence
|
|
135
|
+
# of a target before calling one of the other methods to actually apply it.
|
|
136
|
+
#
|
|
137
|
+
# It will return true if one or more targets are found matching the given name,
|
|
138
|
+
# use the unique? method to test if the given name uniquely identifies a valid
|
|
139
|
+
# target.
|
|
140
|
+
def exists?(name)
|
|
141
|
+
tgts = resolve_mapping(name)
|
|
142
|
+
targets = tgts.is_a?(Array) ? tgts : find(tgts)
|
|
143
|
+
targets.size > 0
|
|
144
|
+
end
|
|
145
|
+
alias_method :exist?, :exists?
|
|
146
|
+
|
|
147
|
+
# Similar to the exists? method, this will return true only if the given name
|
|
148
|
+
# resolves to a single valid target.
|
|
149
|
+
def unique?(name)
|
|
150
|
+
tgts = resolve_mapping(name)
|
|
151
|
+
targets = tgts.is_a?(Array) ? tgts : find(tgts)
|
|
152
|
+
targets.size == 1
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
# Switch to the supplied target, name can be a fragment as long as it allows
|
|
156
|
+
# a unique target to be identified.
|
|
157
|
+
#
|
|
158
|
+
# The name can also be a MOO number mapping from the config.production_targets
|
|
159
|
+
# attribute of the application.
|
|
160
|
+
#
|
|
161
|
+
# Calling this method does not affect the default target setting in the workspace.
|
|
162
|
+
def temporary=(name)
|
|
163
|
+
tgts = resolve_mapping(name)
|
|
164
|
+
targets = tgts.is_a?(Array) ? tgts : find(tgts)
|
|
165
|
+
if targets.size == 0
|
|
166
|
+
puts "Sorry no targets were found matching '#{name}'!"
|
|
167
|
+
puts 'Here are the available options:'
|
|
168
|
+
find('').sort.each do |file|
|
|
169
|
+
puts File.basename(file)
|
|
170
|
+
end
|
|
171
|
+
exit 1
|
|
172
|
+
elsif targets.size > 1
|
|
173
|
+
if is_a_moo_number?(name) && prod_targets
|
|
174
|
+
puts "Multiple production targets exist for #{name.upcase}, use one of the following instead of the MOO number:"
|
|
175
|
+
targets.sort.each do |file|
|
|
176
|
+
puts File.basename(file)
|
|
177
|
+
end
|
|
178
|
+
else
|
|
179
|
+
puts 'Please try again with one of the following targets:'
|
|
180
|
+
targets.sort.each do |file|
|
|
181
|
+
puts File.basename(file)
|
|
182
|
+
end
|
|
183
|
+
end
|
|
184
|
+
exit 1
|
|
185
|
+
else
|
|
186
|
+
self.file = targets[0]
|
|
187
|
+
end
|
|
188
|
+
end
|
|
189
|
+
alias_method :switch, :temporary=
|
|
190
|
+
alias_method :switch_to, :temporary=
|
|
191
|
+
|
|
192
|
+
# Returns a signature for the current target, can be used to track target
|
|
193
|
+
# changes in cases where the name is not unique - i.e. when using a
|
|
194
|
+
# configurable target
|
|
195
|
+
def signature
|
|
196
|
+
@signature ||= set_signature(nil)
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
# @api private
|
|
200
|
+
def set_signature(options)
|
|
201
|
+
options ||= {}
|
|
202
|
+
@signature = options.merge(_tname: name).to_a.hash
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
# As #temporary= except that the given target will be set to the workspace default
|
|
206
|
+
def default=(name)
|
|
207
|
+
if name
|
|
208
|
+
self.temporary = name
|
|
209
|
+
else
|
|
210
|
+
@file = nil
|
|
211
|
+
end
|
|
212
|
+
save
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
# Prints out the current target details to the command line
|
|
216
|
+
def describe
|
|
217
|
+
f = self.file!
|
|
218
|
+
puts "Current target: #{f.basename}"
|
|
219
|
+
puts '*' * 70
|
|
220
|
+
File.open(f).each do |line|
|
|
221
|
+
puts " #{line}"
|
|
222
|
+
end
|
|
223
|
+
puts '*' * 70
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
# Returns an array of matching target file paths
|
|
227
|
+
def find(name)
|
|
228
|
+
if name
|
|
229
|
+
name = name.gsub('*', '')
|
|
230
|
+
if File.exist?(name)
|
|
231
|
+
[name]
|
|
232
|
+
elsif File.exist?("#{Origen.root}/target/#{name}") && name != ''
|
|
233
|
+
["#{Origen.root}/target/#{name}"]
|
|
234
|
+
else
|
|
235
|
+
# The below weirdness is to make it recurse into symlinked directories
|
|
236
|
+
Dir.glob("#{DIR}/**{,/*/**}/*").sort.uniq.select do |file|
|
|
237
|
+
File.basename(file) =~ /#{name}/ && file !~ /.*\.rb.+$/
|
|
238
|
+
end
|
|
239
|
+
end
|
|
240
|
+
else
|
|
241
|
+
[nil]
|
|
242
|
+
end
|
|
243
|
+
end
|
|
244
|
+
|
|
245
|
+
# Saves the current target as the workspace default, i.e. the current target
|
|
246
|
+
# will be used by Origen the next time if no other target is specified
|
|
247
|
+
def save # :nodoc:
|
|
248
|
+
if @file
|
|
249
|
+
File.open(SAVE_FILE, 'w') do |f|
|
|
250
|
+
Marshal.dump(file, f)
|
|
251
|
+
end
|
|
252
|
+
else
|
|
253
|
+
forget
|
|
254
|
+
end
|
|
255
|
+
end
|
|
256
|
+
|
|
257
|
+
# Load the default file from the workspace default if it exists and return it,
|
|
258
|
+
# otherwise returns nil
|
|
259
|
+
def default_file
|
|
260
|
+
return @default_file if @default_file
|
|
261
|
+
if File.exist?(SAVE_FILE)
|
|
262
|
+
File.open(SAVE_FILE) do |f|
|
|
263
|
+
@default_file = Marshal.load(f)
|
|
264
|
+
end
|
|
265
|
+
elsif File.exist?(DEFAULT_FILE)
|
|
266
|
+
@default_file = Pathname.new(DEFAULT_FILE)
|
|
267
|
+
end
|
|
268
|
+
@default_file
|
|
269
|
+
end
|
|
270
|
+
|
|
271
|
+
# Returns the target file (a Pathname object) if it has been defined, otherwise nil
|
|
272
|
+
def file # :nodoc:
|
|
273
|
+
return @file if @file
|
|
274
|
+
if default_file && File.exist?(default_file)
|
|
275
|
+
@file = default_file
|
|
276
|
+
end
|
|
277
|
+
end
|
|
278
|
+
|
|
279
|
+
# As file except will raise an exception if it hasn't been defined yet
|
|
280
|
+
def file! # :nodoc:
|
|
281
|
+
unless file
|
|
282
|
+
puts 'No target has been specified!'
|
|
283
|
+
puts 'To specify a target use the -t switch.'
|
|
284
|
+
puts 'Look in the target directory for a list of available target names.'
|
|
285
|
+
exit 1
|
|
286
|
+
end
|
|
287
|
+
file
|
|
288
|
+
end
|
|
289
|
+
|
|
290
|
+
def file=(path) # :nodoc:
|
|
291
|
+
if path
|
|
292
|
+
@file = Pathname.new(path)
|
|
293
|
+
else
|
|
294
|
+
@file = nil
|
|
295
|
+
end
|
|
296
|
+
end
|
|
297
|
+
|
|
298
|
+
# Remove the workspace default target
|
|
299
|
+
def forget
|
|
300
|
+
File.delete(SAVE_FILE) if File.exist?(SAVE_FILE)
|
|
301
|
+
@default_file = nil
|
|
302
|
+
end
|
|
303
|
+
|
|
304
|
+
# # This attribute is used by the Origen#compile and Origen#merge tasks to allow files
|
|
305
|
+
# # to be compiled on a per-target basis. If the ERB source file has 'target' in the
|
|
306
|
+
# # name then this will be substituted for the value returned from this attribute. <br>
|
|
307
|
+
# # For example to simply use the MOO number to identify the target you may
|
|
308
|
+
# # set up a simple task like this:
|
|
309
|
+
# # # Compile the J750 files for each target
|
|
310
|
+
# # Target.each_production do
|
|
311
|
+
# # $target.id = $target.moo.gsub("*","")
|
|
312
|
+
# # compile("templates/j750", "j750")
|
|
313
|
+
# # end
|
|
314
|
+
# attr_accessor :id
|
|
315
|
+
#
|
|
316
|
+
# def initialize # :nodoc:
|
|
317
|
+
# restore
|
|
318
|
+
# end
|
|
319
|
+
#
|
|
320
|
+
# # Yields a summary of the current target settings
|
|
321
|
+
# def summary
|
|
322
|
+
# yield "Top: #{$top.class}"
|
|
323
|
+
# yield "SoC: #{$soc.class}"
|
|
324
|
+
# yield "Tester: #{$tester.class}"
|
|
325
|
+
# end
|
|
326
|
+
|
|
327
|
+
# Returns true if running with a temporary target, i.e. if the current
|
|
328
|
+
# target is not the same as the default target
|
|
329
|
+
def temporary?
|
|
330
|
+
@file == @default_file
|
|
331
|
+
end
|
|
332
|
+
|
|
333
|
+
# Resolves the target name to a target file if a MOO number is supplied and
|
|
334
|
+
# app.config.production_targets has been defined
|
|
335
|
+
def resolve_mapping(name) # :nodoc:
|
|
336
|
+
if is_a_moo_number?(name) && prod_targets
|
|
337
|
+
# If an exact match
|
|
338
|
+
if prod_targets[name.upcase]
|
|
339
|
+
prod_targets[name.upcase]
|
|
340
|
+
# If a wildcard match
|
|
341
|
+
elsif prod_targets["*#{moo_number_minus_revision(name)}"]
|
|
342
|
+
prod_targets["*#{moo_number_minus_revision(name)}"]
|
|
343
|
+
# Else just return the given name
|
|
344
|
+
else
|
|
345
|
+
name
|
|
346
|
+
end
|
|
347
|
+
else
|
|
348
|
+
name
|
|
349
|
+
end
|
|
350
|
+
end
|
|
351
|
+
|
|
352
|
+
# Returns config.production_targets with all keys forced to upper case
|
|
353
|
+
def prod_targets # :nodoc:
|
|
354
|
+
return {} unless Origen.config.production_targets
|
|
355
|
+
return @prod_targets if @prod_targets
|
|
356
|
+
@prod_targets = {}
|
|
357
|
+
Origen.config.production_targets.each do |key, value|
|
|
358
|
+
@prod_targets[key.upcase] = value
|
|
359
|
+
end
|
|
360
|
+
@prod_targets
|
|
361
|
+
end
|
|
362
|
+
|
|
363
|
+
# Returns true if the supplied target name is a moo number format
|
|
364
|
+
def is_a_moo_number?(name) # :nodoc:
|
|
365
|
+
!!(name.to_s.upcase =~ /^\d?\d?\*?[A-Z]\d\d[A-Z]$/)
|
|
366
|
+
end
|
|
367
|
+
|
|
368
|
+
def moo_number_minus_revision(name) # :nodoc:
|
|
369
|
+
name.to_s.upcase =~ /^\d?\d?([A-Z]\d\d[A-Z])$/
|
|
370
|
+
Regexp.last_match[1]
|
|
371
|
+
end
|
|
372
|
+
end
|
|
373
|
+
end
|
|
374
|
+
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
module Origen
|
|
2
|
+
class Application
|
|
3
|
+
# Keeps track of production released versions
|
|
4
|
+
class VersionTracker
|
|
5
|
+
STORAGE_FILE = "#{Origen.root}/.version_tracker"
|
|
6
|
+
|
|
7
|
+
# Returns an array containing all Production release
|
|
8
|
+
# tags since they started being tracked
|
|
9
|
+
def versions
|
|
10
|
+
storage[:versions] ||= []
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# Adds a new version to the tracker
|
|
14
|
+
def add_version(version)
|
|
15
|
+
restore_to_latest
|
|
16
|
+
versions << version
|
|
17
|
+
save
|
|
18
|
+
check_in
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# Returns the persisted storage container (a Hash)
|
|
22
|
+
def storage
|
|
23
|
+
return @storage if @storage
|
|
24
|
+
if File.exist?(STORAGE_FILE)
|
|
25
|
+
File.open(STORAGE_FILE) do |f|
|
|
26
|
+
begin
|
|
27
|
+
@storage = Marshal.load(f)
|
|
28
|
+
rescue
|
|
29
|
+
@storage = {}
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
else
|
|
33
|
+
@storage = {}
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Save the persisted storage container to disk
|
|
38
|
+
def save
|
|
39
|
+
File.open(STORAGE_FILE, 'w') do |f|
|
|
40
|
+
Marshal.dump(storage, f)
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Check in the persisted storage container
|
|
45
|
+
def check_in
|
|
46
|
+
Origen.app.rc.checkin(STORAGE_FILE, force: true, unmanaged: true)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Force the storage container to the latest checked in version
|
|
50
|
+
def restore_to_latest
|
|
51
|
+
@storage = nil
|
|
52
|
+
# Check out the latest version of the storage, forcing to Trunk
|
|
53
|
+
system "dssc co -get -force '#{STORAGE_FILE};Trunk:Latest'"
|
|
54
|
+
system "dssc setselector 'Trunk' #{STORAGE_FILE}"
|
|
55
|
+
`chmod 666 #{STORAGE_FILE}`
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
module Origen
|
|
2
|
+
class Application
|
|
3
|
+
class WorkspaceManager
|
|
4
|
+
# Returns the directory that contains the current application's revision control
|
|
5
|
+
# root (basically just Origen.app.rc.root.parent)
|
|
6
|
+
def container_directory
|
|
7
|
+
if Origen.running_on_windows?
|
|
8
|
+
dir = revision_control_root.parent
|
|
9
|
+
Pathname.new(dir.to_s.sub(/\/$/, ''))
|
|
10
|
+
else
|
|
11
|
+
revision_control_root.parent
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Returns the path to the root directory of the revision control system
|
|
16
|
+
# that is managing the application.
|
|
17
|
+
#
|
|
18
|
+
# This may not necessarily be Origen.root if the application is embedded within
|
|
19
|
+
# a larger project workspace (for example in tool_data/origen)
|
|
20
|
+
def revision_control_root
|
|
21
|
+
Origen.app.rc.root
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Origen.root may not necessarily be the same as the revision control root.
|
|
25
|
+
# This method will return the relative path from the revision control root to
|
|
26
|
+
# Origen.root.
|
|
27
|
+
def path_to_origen_root
|
|
28
|
+
path = Origen.root.to_s.sub(revision_control_root.to_s, '').sub(/^(\/|\\)/, '')
|
|
29
|
+
path = '.' if path.empty?
|
|
30
|
+
path
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Provides a proposal for where the reference workspace should live
|
|
34
|
+
def reference_workspace_proposal
|
|
35
|
+
"#{container_directory}/#{Origen.app.name}_reference"
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# Returns the path to the actual reference workspace if it is set,
|
|
39
|
+
# otherwise returns nil
|
|
40
|
+
def reference_workspace
|
|
41
|
+
if reference_workspace_set?
|
|
42
|
+
dir = File.readlink(reference_dir)
|
|
43
|
+
dir.gsub!('.ref', '')
|
|
44
|
+
dir.gsub!(/#{Regexp.escape(path_to_origen_root)}\/?$/, '')
|
|
45
|
+
Pathname.new(dir).cleanpath
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Returns the path to the directory that will be used to contain
|
|
50
|
+
# all imported application workspaces
|
|
51
|
+
def imports_directory
|
|
52
|
+
return @imports_directory if @imports_directory
|
|
53
|
+
old = "#{container_directory}/#{revision_control_root.basename}_imports_DO_NOT_HAND_MODIFY"
|
|
54
|
+
@imports_directory = "#{container_directory}/.#{revision_control_root.basename}_imports_DO_NOT_HAND_MODIFY"
|
|
55
|
+
FileUtils.rm_rf(old) if File.exist?(old)
|
|
56
|
+
@imports_directory
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# Returns the path to the directory that will be used to contain
|
|
60
|
+
# all remotes workspaces
|
|
61
|
+
def remotes_directory
|
|
62
|
+
return @remotes_directory if @remotes_directory
|
|
63
|
+
old = "#{container_directory}/#{revision_control_root.basename}_remotes_DO_NOT_HAND_MODIFY"
|
|
64
|
+
@remotes_directory = "#{container_directory}/.#{revision_control_root.basename}_remotes_DO_NOT_HAND_MODIFY"
|
|
65
|
+
FileUtils.rm_rf(old) if File.exist?(old)
|
|
66
|
+
@remotes_directory
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# Returns true if the local reference directory is already
|
|
70
|
+
# pointing to an external workspace.
|
|
71
|
+
def reference_workspace_set?
|
|
72
|
+
f = reference_dir
|
|
73
|
+
File.exist?(f) && File.symlink?(f) &&
|
|
74
|
+
File.exist?(File.readlink(f))
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def set_reference_workspace(workspace)
|
|
78
|
+
f = reference_dir
|
|
79
|
+
if File.exist?(f)
|
|
80
|
+
if File.symlink?(f)
|
|
81
|
+
FileUtils.rm_f(f)
|
|
82
|
+
else
|
|
83
|
+
FileUtils.rm_rf(f)
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
remote_ref = "#{origen_root(workspace)}/.ref"
|
|
87
|
+
unless File.exist?(remote_ref)
|
|
88
|
+
FileUtils.mkdir_p(remote_ref)
|
|
89
|
+
`touch #{remote_ref}/dont_delete` # Make sure the pop does not blow this away
|
|
90
|
+
end
|
|
91
|
+
if Origen.running_on_windows?
|
|
92
|
+
system("call mklink /h #{reference_dir} #{remote_ref}")
|
|
93
|
+
else
|
|
94
|
+
File.symlink(remote_ref, reference_dir)
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# Returns the full path to Origen.root within the given workspace
|
|
99
|
+
def origen_root(workspace)
|
|
100
|
+
Pathname.new("#{workspace}/#{path_to_origen_root}").cleanpath
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def reference_dir
|
|
104
|
+
"#{Origen.root}/.ref" # Should probably be set by a config parameter
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
# Builds a new workspace at the given path
|
|
108
|
+
def build(path, options = {})
|
|
109
|
+
options = {
|
|
110
|
+
rc_url: Origen.app.config.rc_url || Origen.app.config.vault,
|
|
111
|
+
allow_rebuild: false
|
|
112
|
+
}.merge(options)
|
|
113
|
+
if File.exist?(path.to_s) && !options[:allow_rebuild]
|
|
114
|
+
fail "Sorry but #{path} already exists!"
|
|
115
|
+
end
|
|
116
|
+
FileUtils.rm_rf(path.to_s) if File.exist?(path.to_s)
|
|
117
|
+
rc = RevisionControl.new remote: options[:rc_url], local: path.to_s
|
|
118
|
+
rc.build
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
# Switches the given workspace path to the given version tag
|
|
122
|
+
def switch_version(workspace, tag, options = {})
|
|
123
|
+
options = {
|
|
124
|
+
origen_root_only: false, # When true pop the Origen.root dir only instead
|
|
125
|
+
# of the whole application workspace - these may or may
|
|
126
|
+
# not be the same thing depending on the application.
|
|
127
|
+
}.merge(options)
|
|
128
|
+
version_file = "#{workspace}/.current_version"
|
|
129
|
+
FileUtils.rm_f(version_file) if File.exist?(version_file)
|
|
130
|
+
if options[:origen_root_only]
|
|
131
|
+
dir = "#{workspace}/#{path_to_origen_root}"
|
|
132
|
+
else
|
|
133
|
+
dir = workspace
|
|
134
|
+
end
|
|
135
|
+
rc_url = Origen.app.config.rc_url || Origen.app.config.vault
|
|
136
|
+
rc = RevisionControl.new remote: rc_url, local: dir.to_s
|
|
137
|
+
rc.checkout version: tag, force: true
|
|
138
|
+
File.open(version_file, 'w') do |f|
|
|
139
|
+
f.puts tag
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
def current_version_of(workspace)
|
|
144
|
+
f = "#{workspace}/.current_version"
|
|
145
|
+
if File.exist?(f)
|
|
146
|
+
File.readlines(f).first.strip
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
end
|