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,117 @@
|
|
|
1
|
+
require 'readline'
|
|
2
|
+
module Origen
|
|
3
|
+
class VersionChecker
|
|
4
|
+
include Origen::Utility::InputCapture
|
|
5
|
+
|
|
6
|
+
def initialize(_options = {})
|
|
7
|
+
@disable_origen_version_check = false
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# Check that the required origen version dependency is satisfied, or else
|
|
11
|
+
# update to it.
|
|
12
|
+
#
|
|
13
|
+
# This method will be disabled if version_check_disabled? returns true.
|
|
14
|
+
def check!
|
|
15
|
+
unless version_check_disabled?
|
|
16
|
+
if Origen.config.required_origen_version
|
|
17
|
+
if Origen.config.required_origen_version != Origen.version
|
|
18
|
+
update_origen(Origen.config.required_origen_version)
|
|
19
|
+
end
|
|
20
|
+
else
|
|
21
|
+
if Origen.config.min_required_origen_version
|
|
22
|
+
if Origen.version.less_than?(Origen.config.min_required_origen_version) ||
|
|
23
|
+
Origen.version.greater_than?(Origen.config.max_required_origen_version)
|
|
24
|
+
update_origen(Origen.config.min_required_origen_version)
|
|
25
|
+
end
|
|
26
|
+
elsif Origen.config.max_required_origen_version
|
|
27
|
+
fail "You can't specify a max_required_origen_version without providing a min_required_origen_version"
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Returns true if the given condition is satisfied by the current Origen
|
|
34
|
+
# version, examples of valid conditions are:
|
|
35
|
+
#
|
|
36
|
+
# "v2.1.0"
|
|
37
|
+
# "v2.1.0.dev10"
|
|
38
|
+
# "> v2.1.0.dev10"
|
|
39
|
+
# ">= v2.1.0.dev10"
|
|
40
|
+
def condition_satisfied?(condition, _options = {})
|
|
41
|
+
Origen.version.condition_met?(condition)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Disable all Origen version checks called from within the given block.
|
|
45
|
+
# By default this will apply only to the current process, if :all_processes is
|
|
46
|
+
# supplied and set to true then this will also apply to any additional
|
|
47
|
+
# process threads started within the block.
|
|
48
|
+
def with_disable_origen_version_check(options = {})
|
|
49
|
+
if options[:all_processes]
|
|
50
|
+
system "touch #{Origen.root}/.disable_origen_version_check"
|
|
51
|
+
end
|
|
52
|
+
@disable_origen_version_check = true
|
|
53
|
+
begin
|
|
54
|
+
yield
|
|
55
|
+
ensure
|
|
56
|
+
if options[:all_processes]
|
|
57
|
+
system "rm -f #{Origen.root}/.disable_origen_version_check"
|
|
58
|
+
end
|
|
59
|
+
@disable_origen_version_check = false
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
alias_method :disable_origen_version_check, :with_disable_origen_version_check
|
|
63
|
+
|
|
64
|
+
# Returns true if version checking has been disabled or turned off
|
|
65
|
+
# for a particular workspace.
|
|
66
|
+
# Generally these are not things that an application can or should do, and are
|
|
67
|
+
# more features to allow Origen to internally handle multi-application scenarios.
|
|
68
|
+
def version_check_disabled?
|
|
69
|
+
@disable_origen_version_check ||
|
|
70
|
+
File.exist?("#{Origen.root}/.disable_origen_version_check")
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
# Check that the required origen version dependency is satisfied, or else
|
|
74
|
+
# update to it.
|
|
75
|
+
def update_origen(version, _options = {})
|
|
76
|
+
puts ''
|
|
77
|
+
puts 'Your Origen version needs to be changed, would you like this to be corrected automatically?'
|
|
78
|
+
puts ''
|
|
79
|
+
get_text(confirm: true, default: 'yes')
|
|
80
|
+
|
|
81
|
+
ds = Origen::Utility::DesignSync.new
|
|
82
|
+
mods = ds.modified_objects(Origen.top, rec: true, refresh: true)
|
|
83
|
+
unless mods.empty?
|
|
84
|
+
|
|
85
|
+
mods.map! do |local_path|
|
|
86
|
+
p = Pathname.new("#{Origen.top}/#{local_path}")
|
|
87
|
+
p.relative_path_from(Pathname.pwd)
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
puts 'Sorry but your environment has the following edits to Origen that are preventing automatic update:'
|
|
91
|
+
puts ''
|
|
92
|
+
mods.each do |file|
|
|
93
|
+
puts ' ' + Origen.app.cm.diff_cmd + ' ' + file.to_s
|
|
94
|
+
end
|
|
95
|
+
puts ''
|
|
96
|
+
|
|
97
|
+
abort <<-end_message
|
|
98
|
+
If you don't care about these edits you can force un update now by running the following comand:
|
|
99
|
+
|
|
100
|
+
dssc pop -rec -uni -force -ver #{version} #{Origen.top}
|
|
101
|
+
|
|
102
|
+
end_message
|
|
103
|
+
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
ds.populate(Origen.top, version: version, rec: true, force: true,
|
|
107
|
+
unify: true, verbose: true, exclude: '.ref,.firmware',
|
|
108
|
+
incremental: true)
|
|
109
|
+
|
|
110
|
+
puts ''
|
|
111
|
+
puts 'Origen has been updated, please re-run your previous command.'
|
|
112
|
+
puts ''
|
|
113
|
+
|
|
114
|
+
exit 0
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
end
|
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
module Origen
|
|
2
|
+
class VersionString < String
|
|
3
|
+
include Utility::TimeAndDate
|
|
4
|
+
require 'date'
|
|
5
|
+
|
|
6
|
+
# Returns a new production timestamp version string
|
|
7
|
+
def self.production_timestamp
|
|
8
|
+
VersionString.new("Rel#{time_now(format: :universal, include_time: false)}")
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
# Returns a new development timestamp version string
|
|
12
|
+
def self.development_timestamp
|
|
13
|
+
VersionString.new("#{User.current.initials}_#{time_now(format: :universal, underscore: true)}")
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# Returns true if the version is a production tag
|
|
17
|
+
def production?
|
|
18
|
+
!!(self =~ /^v?\d+\.\d+\.\d+$/ || self =~ /^Rel\d+$/)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# Returns true if the version is a development tag
|
|
22
|
+
def development?
|
|
23
|
+
!production?
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def less_than?(version)
|
|
27
|
+
condition_met?("< #{version}")
|
|
28
|
+
end
|
|
29
|
+
alias_method :lt?, :less_than?
|
|
30
|
+
|
|
31
|
+
def less_than_or_equal_to?(version)
|
|
32
|
+
condition_met?("<= #{version}")
|
|
33
|
+
end
|
|
34
|
+
alias_method :lte?, :less_than_or_equal_to?
|
|
35
|
+
|
|
36
|
+
def greater_than?(version)
|
|
37
|
+
condition_met?("> #{version}")
|
|
38
|
+
end
|
|
39
|
+
alias_method :gt?, :greater_than?
|
|
40
|
+
|
|
41
|
+
def greater_than_or_equal_to?(version)
|
|
42
|
+
condition_met?(">= #{version}")
|
|
43
|
+
end
|
|
44
|
+
alias_method :gte?, :greater_than_or_equal_to?
|
|
45
|
+
|
|
46
|
+
# Returns true if the version is a correctly formatted semantic
|
|
47
|
+
# or timestamp version number
|
|
48
|
+
def valid?(_options = {})
|
|
49
|
+
latest? || semantic? || timestamp?
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# Returns true if the version is a semantic format version number
|
|
53
|
+
def semantic?
|
|
54
|
+
!!(self =~ /^v?\d+\.\d+\.\d+$/ ||
|
|
55
|
+
self =~ /^v?\d+\.\d+\.\d+\.(dev|pre)\d+$/
|
|
56
|
+
)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def next_dev(type = :minor)
|
|
60
|
+
if semantic?
|
|
61
|
+
if pre
|
|
62
|
+
if self =~ /dev/
|
|
63
|
+
VersionString.new("#{major}.#{minor + 1}.0.pre#{pre + 1}")
|
|
64
|
+
else
|
|
65
|
+
VersionString.new("#{major}.#{minor}.#{tiny}.pre#{pre + 1}")
|
|
66
|
+
end
|
|
67
|
+
else
|
|
68
|
+
case type
|
|
69
|
+
when :major
|
|
70
|
+
VersionString.new("#{major + 1}.0.0.pre0")
|
|
71
|
+
when :minor, :development
|
|
72
|
+
VersionString.new("#{major}.#{minor + 1}.0.pre0")
|
|
73
|
+
when :tiny, :bugfix
|
|
74
|
+
VersionString.new("#{major}.#{minor}.#{tiny + 1}.pre0")
|
|
75
|
+
else
|
|
76
|
+
fail "Unknown version counter type '#{type}', must be :major, :minor or :tiny"
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
else
|
|
80
|
+
VersionString.new("#{User.current.initials}_#{time_now(format: :universal, underscore: true)}")
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def next_prod(type = :minor)
|
|
85
|
+
if semantic?
|
|
86
|
+
if pre
|
|
87
|
+
if self =~ /dev/
|
|
88
|
+
case type
|
|
89
|
+
when :major
|
|
90
|
+
VersionString.new("#{major + 1}.0.0")
|
|
91
|
+
when :minor, :production
|
|
92
|
+
VersionString.new("#{major}.#{minor + 1}.0")
|
|
93
|
+
when :tiny, :bugfix
|
|
94
|
+
VersionString.new("#{major}.#{minor}.#{tiny + 1}")
|
|
95
|
+
else
|
|
96
|
+
fail "Unknown version counter type '#{type}', must be :major, :minor or :tiny"
|
|
97
|
+
end
|
|
98
|
+
else
|
|
99
|
+
VersionString.new("#{major}.#{minor}.#{tiny}")
|
|
100
|
+
end
|
|
101
|
+
else
|
|
102
|
+
case type
|
|
103
|
+
when :major
|
|
104
|
+
VersionString.new("#{major + 1}.0.0")
|
|
105
|
+
when :minor, :production
|
|
106
|
+
VersionString.new("#{major}.#{minor + 1}.0")
|
|
107
|
+
when :tiny, :bugfix
|
|
108
|
+
VersionString.new("#{major}.#{minor}.#{tiny + 1}")
|
|
109
|
+
else
|
|
110
|
+
fail "Unknown version counter type '#{type}', must be :major, :minor or :tiny"
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
else
|
|
114
|
+
VersionString.new("Rel#{time_now(format: :universal, include_time: false)}")
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def major
|
|
119
|
+
@major ||= begin
|
|
120
|
+
if semantic?
|
|
121
|
+
self =~ /v?(\d+)/
|
|
122
|
+
Regexp.last_match[1].to_i
|
|
123
|
+
else
|
|
124
|
+
fail "#{self} is not a valid semantic version number!"
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
def minor
|
|
130
|
+
@minor ||= begin
|
|
131
|
+
if semantic?
|
|
132
|
+
self =~ /v?\d+.(\d+)/
|
|
133
|
+
Regexp.last_match[1].to_i
|
|
134
|
+
else
|
|
135
|
+
fail "#{self} is not a valid semantic version number!"
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
def bugfix
|
|
141
|
+
@bugfix ||= begin
|
|
142
|
+
if semantic?
|
|
143
|
+
self =~ /v?\d+.\d+.(\d+)/
|
|
144
|
+
Regexp.last_match[1].to_i
|
|
145
|
+
else
|
|
146
|
+
fail "#{self} is not a valid semantic version number!"
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
alias_method :tiny, :bugfix
|
|
151
|
+
|
|
152
|
+
def pre
|
|
153
|
+
@pre ||= begin
|
|
154
|
+
if semantic?
|
|
155
|
+
if self =~ /(dev|pre)(\d+)$/
|
|
156
|
+
Regexp.last_match[2].to_i
|
|
157
|
+
end
|
|
158
|
+
else
|
|
159
|
+
fail "#{self} is not a valid semantic version number!"
|
|
160
|
+
end
|
|
161
|
+
end
|
|
162
|
+
end
|
|
163
|
+
alias_method :dev, :pre
|
|
164
|
+
|
|
165
|
+
def latest?
|
|
166
|
+
downcase == 'trunk' || downcase == 'latest'
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
# Returns true if the version is a timestamp format version number
|
|
170
|
+
def timestamp?
|
|
171
|
+
!!(self =~ /^Rel\d\d\d\d\d\d\d\d$/ ||
|
|
172
|
+
self =~ /^\w\w\w?_\d\d\d\d_\d\d_\d\d_\d\d_\d\d$/)
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
# Returns true if the version fulfills the supplied condition.
|
|
176
|
+
# Example conditions:
|
|
177
|
+
#
|
|
178
|
+
# "v2.1.3" # must equal the given version
|
|
179
|
+
# "= v2.1.3" # alias for the above
|
|
180
|
+
# "> v2.1.3" # must be greater than the given version
|
|
181
|
+
# ">= v2.1.3" # must be greater than or equal to the given version
|
|
182
|
+
# "< v2.1.3" # must be less than the given version
|
|
183
|
+
# "<= v2.1.3" # must be less than or equal to the given version
|
|
184
|
+
# "production" # must be a production tag
|
|
185
|
+
def condition_met?(condition)
|
|
186
|
+
condition = condition.to_s.strip
|
|
187
|
+
if condition == 'prod' || condition == 'production'
|
|
188
|
+
production?
|
|
189
|
+
|
|
190
|
+
elsif condition =~ /^>=\s*(.*)/
|
|
191
|
+
tag = validate_condition!(condition, Regexp.last_match[1])
|
|
192
|
+
# Force false in the case where a production and development
|
|
193
|
+
# timestamp fall on the same date. Since the production tag
|
|
194
|
+
# does not contain time information it is impossible to say
|
|
195
|
+
# which one is greater
|
|
196
|
+
if production? != tag.production? && timestamp? &&
|
|
197
|
+
to_date == tag.to_date
|
|
198
|
+
false
|
|
199
|
+
else
|
|
200
|
+
numeric >= tag.numeric && ((self.latest? || tag.latest?) || self.timestamp? == tag.timestamp?)
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
elsif condition =~ /^>\s*(.*)/
|
|
204
|
+
tag = validate_condition!(condition, Regexp.last_match[1])
|
|
205
|
+
if production? != tag.production? && timestamp? &&
|
|
206
|
+
to_date == tag.to_date
|
|
207
|
+
false
|
|
208
|
+
else
|
|
209
|
+
numeric > tag.numeric && ((self.latest? || tag.latest?) || self.timestamp? == tag.timestamp?)
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
elsif condition =~ /^<=\s*(.*)/
|
|
213
|
+
tag = validate_condition!(condition, Regexp.last_match[1])
|
|
214
|
+
numeric <= tag.numeric && ((self.latest? || tag.latest?) || self.timestamp? == tag.timestamp?)
|
|
215
|
+
|
|
216
|
+
elsif condition =~ /^<\s*(.*)/
|
|
217
|
+
tag = validate_condition!(condition, Regexp.last_match[1])
|
|
218
|
+
numeric < tag.numeric && ((self.latest? || tag.latest?) || self.timestamp? == tag.timestamp?)
|
|
219
|
+
|
|
220
|
+
elsif condition =~ /^==?\s*(.*)/
|
|
221
|
+
tag = validate_condition!(condition, Regexp.last_match[1])
|
|
222
|
+
self == tag
|
|
223
|
+
|
|
224
|
+
else
|
|
225
|
+
tag = validate_condition!(condition, condition)
|
|
226
|
+
self == tag
|
|
227
|
+
end
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
# Returns a numeric representation of the version, this can be used
|
|
231
|
+
# for chronological comparison with other versions
|
|
232
|
+
def numeric
|
|
233
|
+
if latest?
|
|
234
|
+
1_000_000_000_000_000_000_000_000_000
|
|
235
|
+
elsif semantic?
|
|
236
|
+
# This assumes each counter will never go > 1000
|
|
237
|
+
if development?
|
|
238
|
+
self =~ /v?(\d+).(\d+).(\d+).(dev|pre)(\d+)/
|
|
239
|
+
(Regexp.last_match[1].to_i * 1000 * 1000 * 1000) +
|
|
240
|
+
(Regexp.last_match[2].to_i * 1000 * 1000) +
|
|
241
|
+
(Regexp.last_match[3].to_i * 1000) +
|
|
242
|
+
Regexp.last_match[5].to_i
|
|
243
|
+
else
|
|
244
|
+
self =~ /v?(\d+).(\d+).(\d+)/
|
|
245
|
+
(Regexp.last_match[1].to_i * 1000 * 1000 * 1000) +
|
|
246
|
+
(Regexp.last_match[2].to_i * 1000 * 1000) +
|
|
247
|
+
(Regexp.last_match[3].to_i * 1000)
|
|
248
|
+
end
|
|
249
|
+
elsif timestamp?
|
|
250
|
+
to_time.to_i
|
|
251
|
+
else
|
|
252
|
+
validate!
|
|
253
|
+
end
|
|
254
|
+
end
|
|
255
|
+
|
|
256
|
+
# Returns the version as a time, only applicable for timestamps,
|
|
257
|
+
# otherwise an error will be raised
|
|
258
|
+
def to_time
|
|
259
|
+
if latest?
|
|
260
|
+
Time.new(10_000, 1, 1)
|
|
261
|
+
elsif timestamp?
|
|
262
|
+
if development?
|
|
263
|
+
self =~ /\w+_(\d\d\d\d)_(\d\d)_(\d\d)_(\d\d)_(\d\d)$/
|
|
264
|
+
Time.new(Regexp.last_match[1], Regexp.last_match[2], Regexp.last_match[3], Regexp.last_match[4], Regexp.last_match[5])
|
|
265
|
+
else
|
|
266
|
+
self =~ /Rel(\d\d\d\d)(\d\d)(\d\d)/
|
|
267
|
+
Time.new(Regexp.last_match[1], Regexp.last_match[2], Regexp.last_match[3])
|
|
268
|
+
end
|
|
269
|
+
else
|
|
270
|
+
fail "Version tag #{self} cannot be converted to a time!"
|
|
271
|
+
end
|
|
272
|
+
end
|
|
273
|
+
|
|
274
|
+
# Returns the version as a date, only applicable for timestamps,
|
|
275
|
+
# otherwise an error will be raised
|
|
276
|
+
def to_date
|
|
277
|
+
if latest?
|
|
278
|
+
Date.new(10_000, 1, 1)
|
|
279
|
+
elsif timestamp?
|
|
280
|
+
to_time.to_date
|
|
281
|
+
else
|
|
282
|
+
fail "Version tag #{self} cannot be converted to a date!"
|
|
283
|
+
end
|
|
284
|
+
end
|
|
285
|
+
|
|
286
|
+
# Validates the given condition and the extracted tag, returns the
|
|
287
|
+
# tag wrapped in a VersionString if valid, will raise an error if
|
|
288
|
+
# not
|
|
289
|
+
def validate_condition!(condition, tag)
|
|
290
|
+
tag = VersionString.new(tag)
|
|
291
|
+
tag.validate!("The version condition, #{condition}, is not valid!")
|
|
292
|
+
tag
|
|
293
|
+
end
|
|
294
|
+
|
|
295
|
+
# Will raise an error if the version is not valid, i.e. if valid?
|
|
296
|
+
# returns false
|
|
297
|
+
def validate!(msg = nil)
|
|
298
|
+
unless valid?
|
|
299
|
+
if msg
|
|
300
|
+
fail msg
|
|
301
|
+
else
|
|
302
|
+
fail "The version string, #{self}, is not valid!"
|
|
303
|
+
end
|
|
304
|
+
end
|
|
305
|
+
self
|
|
306
|
+
end
|
|
307
|
+
|
|
308
|
+
# Returns the minimum Origen version that would satisfy the given condition,
|
|
309
|
+
# if the condition does not specify a minimum nil will be returned
|
|
310
|
+
def self.minimum_version(condition)
|
|
311
|
+
if condition =~ /^==?\s*(.*)/
|
|
312
|
+
version = Regexp.last_match[1]
|
|
313
|
+
elsif condition =~ /^>=\s*(.*)/
|
|
314
|
+
version = Regexp.last_match[1]
|
|
315
|
+
elsif condition =~ /^>\s*(.*)/
|
|
316
|
+
# This is tricky to support, would probably require a lookup
|
|
317
|
+
# table of all versions to be maintained
|
|
318
|
+
fail 'Minimum > version is currently not supported!'
|
|
319
|
+
elsif condition =~ /^<=?\s*(.*)/
|
|
320
|
+
nil
|
|
321
|
+
else
|
|
322
|
+
version = condition
|
|
323
|
+
end
|
|
324
|
+
VersionString.new(version).validate! if version
|
|
325
|
+
end
|
|
326
|
+
|
|
327
|
+
# Returns the maximum Origen version that would satisfy the given condition,
|
|
328
|
+
# if the condition does not specify a maximum nil will be returned
|
|
329
|
+
def self.maximum_version(condition)
|
|
330
|
+
if condition =~ /^==?\s*(.*)/
|
|
331
|
+
version = Regexp.last_match[1]
|
|
332
|
+
elsif condition =~ /^<=\s*(.*)/
|
|
333
|
+
version = Regexp.last_match[1]
|
|
334
|
+
elsif condition =~ /^<\s*(.*)/
|
|
335
|
+
# This is tricky to support, would probably require a lookup
|
|
336
|
+
# table of all versions to be maintained
|
|
337
|
+
fail 'Maximum < version is currently not supported!'
|
|
338
|
+
elsif condition =~ /^>=?\s*(.*)/
|
|
339
|
+
nil
|
|
340
|
+
else
|
|
341
|
+
version = condition
|
|
342
|
+
end
|
|
343
|
+
VersionString.new(version).validate! if version
|
|
344
|
+
end
|
|
345
|
+
|
|
346
|
+
# Returns the version prefixed with the given value ('v' by default) if not
|
|
347
|
+
# already present
|
|
348
|
+
def prefixed(str = 'v')
|
|
349
|
+
if self =~ /^#{str}/
|
|
350
|
+
to_s
|
|
351
|
+
else
|
|
352
|
+
"#{str}#{self}"
|
|
353
|
+
end
|
|
354
|
+
end
|
|
355
|
+
end
|
|
356
|
+
end
|