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.
Files changed (336) hide show
  1. checksums.yaml +4 -4
  2. data/bin/ctags +0 -0
  3. data/bin/origen +165 -1
  4. data/bin/rgen +2 -0
  5. data/config/application.rb +141 -0
  6. data/config/commands.rb +72 -0
  7. data/config/development.rb +7 -0
  8. data/config/environment.rb +0 -0
  9. data/config/rgen.policy +7 -0
  10. data/config/rubocop/easy.yml +620 -0
  11. data/config/rubocop/easy_disabled.yml +271 -0
  12. data/config/rubocop/easy_enabled.yml +731 -0
  13. data/config/rubocop/strict.yml +620 -0
  14. data/config/rubocop/strict_disabled.yml +247 -0
  15. data/config/rubocop/strict_enabled.yml +755 -0
  16. data/config/users.rb +20 -0
  17. data/config/version.rb +1 -1
  18. data/helpers/url.rb +68 -0
  19. data/lib/c99/doc_interface.rb +56 -0
  20. data/lib/c99/j750_interface.rb +85 -0
  21. data/lib/c99/nvm.rb +89 -0
  22. data/lib/c99/target/mock2.rb +1 -0
  23. data/lib/c99/target/subdir/mock3.rb +1 -0
  24. data/lib/option_parser/optparse.rb +12 -0
  25. data/lib/origen/acronyms.rb +60 -0
  26. data/lib/origen/application/command_dispatcher.rb +12 -0
  27. data/lib/origen/application/configuration.rb +206 -0
  28. data/lib/origen/application/configuration_manager.rb +78 -0
  29. data/lib/origen/application/deployer.rb +367 -0
  30. data/lib/origen/application/environment.rb +186 -0
  31. data/lib/origen/application/lsf.rb +145 -0
  32. data/lib/origen/application/lsf_manager.rb +657 -0
  33. data/lib/origen/application/plugins_manager.rb +280 -0
  34. data/lib/origen/application/release.rb +359 -0
  35. data/lib/origen/application/runner.rb +246 -0
  36. data/lib/origen/application/statistics.rb +191 -0
  37. data/lib/origen/application/target.rb +374 -0
  38. data/lib/origen/application/version_tracker.rb +59 -0
  39. data/lib/origen/application/workspace_manager.rb +151 -0
  40. data/lib/origen/application.rb +746 -0
  41. data/lib/origen/bugs/bug.rb +36 -0
  42. data/lib/origen/bugs.rb +45 -0
  43. data/lib/origen/callbacks.rb +35 -0
  44. data/lib/origen/chip_mode.rb +118 -0
  45. data/lib/origen/chip_package.rb +461 -0
  46. data/lib/origen/client.rb +87 -0
  47. data/lib/origen/code_generators/actions.rb +258 -0
  48. data/lib/origen/code_generators/base.rb +57 -0
  49. data/lib/origen/code_generators/bundler.rb +17 -0
  50. data/lib/origen/code_generators/gem_setup.rb +49 -0
  51. data/lib/origen/code_generators/rake.rb +13 -0
  52. data/lib/origen/code_generators/rspec.rb +12 -0
  53. data/lib/origen/code_generators/semver.rb +39 -0
  54. data/lib/origen/code_generators/timever.rb +37 -0
  55. data/lib/origen/code_generators.rb +111 -0
  56. data/lib/origen/commands/add.rb +12 -0
  57. data/lib/origen/commands/compile.rb +62 -0
  58. data/lib/origen/commands/ctags.rb +9 -0
  59. data/lib/origen/commands/dispatch.rb +22 -0
  60. data/lib/origen/commands/environment.rb +11 -0
  61. data/lib/origen/commands/fetch.rb +63 -0
  62. data/lib/origen/commands/generate.rb +130 -0
  63. data/lib/origen/commands/interactive.rb +73 -0
  64. data/lib/origen/commands/lint.rb +82 -0
  65. data/lib/origen/commands/lsf.rb +93 -0
  66. data/lib/origen/commands/merge.rb +55 -0
  67. data/lib/origen/commands/modifications.rb +12 -0
  68. data/lib/origen/commands/new.rb +113 -0
  69. data/lib/origen/commands/plugin.rb +105 -0
  70. data/lib/origen/commands/program.rb +70 -0
  71. data/lib/origen/commands/rc.rb +442 -0
  72. data/lib/origen/commands/save.rb +56 -0
  73. data/lib/origen/commands/target.rb +27 -0
  74. data/lib/origen/commands/time.rb +127 -0
  75. data/lib/origen/commands/version.rb +17 -0
  76. data/lib/origen/commands/web.rb +221 -0
  77. data/lib/origen/commands.rb +272 -0
  78. data/lib/origen/commands_global.rb +76 -0
  79. data/lib/origen/controller.rb +94 -0
  80. data/lib/origen/core_ext/array.rb +23 -0
  81. data/lib/origen/core_ext/bignum.rb +36 -0
  82. data/lib/origen/core_ext/enumerable.rb +76 -0
  83. data/lib/origen/core_ext/fixnum.rb +46 -0
  84. data/lib/origen/core_ext/hash.rb +52 -0
  85. data/lib/origen/core_ext/module.rb +14 -0
  86. data/lib/origen/core_ext/numeric.rb +126 -0
  87. data/lib/origen/core_ext/object.rb +13 -0
  88. data/lib/origen/core_ext/range.rb +7 -0
  89. data/lib/origen/core_ext/string.rb +124 -0
  90. data/lib/origen/core_ext.rb +10 -0
  91. data/lib/origen/database/key_value_store.rb +111 -0
  92. data/lib/origen/database/key_value_stores.rb +108 -0
  93. data/lib/origen/database.rb +6 -0
  94. data/lib/origen/encodings.rb +102 -0
  95. data/lib/origen/features/feature.rb +22 -0
  96. data/lib/origen/features.rb +104 -0
  97. data/lib/origen/file_handler.rb +429 -0
  98. data/lib/origen/generator/comparator.rb +56 -0
  99. data/lib/origen/generator/compiler.rb +277 -0
  100. data/lib/origen/generator/flow.rb +49 -0
  101. data/lib/origen/generator/job.rb +131 -0
  102. data/lib/origen/generator/pattern.rb +356 -0
  103. data/lib/origen/generator/pattern_finder.rb +155 -0
  104. data/lib/origen/generator/pattern_iterator.rb +55 -0
  105. data/lib/origen/generator/renderer.rb +113 -0
  106. data/lib/origen/generator/resources.rb +40 -0
  107. data/lib/origen/generator/stage.rb +89 -0
  108. data/lib/origen/generator.rb +85 -0
  109. data/lib/origen/global_methods.rb +205 -0
  110. data/lib/origen/import_manager.rb +596 -0
  111. data/lib/origen/location/base.rb +116 -0
  112. data/lib/origen/location/map.rb +83 -0
  113. data/lib/origen/location.rb +6 -0
  114. data/lib/origen/log.rb +217 -0
  115. data/lib/origen/logger_methods.rb +56 -0
  116. data/lib/origen/mode.rb +61 -0
  117. data/lib/origen/model.rb +267 -0
  118. data/lib/origen/model_initializer.rb +45 -0
  119. data/lib/origen/nvm/block_array.rb +72 -0
  120. data/lib/origen/nvm.rb +6 -0
  121. data/lib/origen/parameters/live.rb +22 -0
  122. data/lib/origen/parameters/missing.rb +28 -0
  123. data/lib/origen/parameters/set.rb +144 -0
  124. data/lib/origen/parameters.rb +107 -0
  125. data/lib/origen/pdm.rb +218 -0
  126. data/lib/origen/pins/function_proxy.rb +36 -0
  127. data/lib/origen/pins/ground_pin.rb +6 -0
  128. data/lib/origen/pins/pin.rb +860 -0
  129. data/lib/origen/pins/pin_bank.rb +349 -0
  130. data/lib/origen/pins/pin_clock.rb +124 -0
  131. data/lib/origen/pins/pin_collection.rb +492 -0
  132. data/lib/origen/pins/pin_common.rb +206 -0
  133. data/lib/origen/pins/port.rb +268 -0
  134. data/lib/origen/pins/power_pin.rb +30 -0
  135. data/lib/origen/pins.rb +696 -0
  136. data/lib/origen/registers/bit.rb +562 -0
  137. data/lib/origen/registers/bit_collection.rb +787 -0
  138. data/lib/origen/registers/container.rb +288 -0
  139. data/lib/origen/registers/domain.rb +16 -0
  140. data/lib/origen/registers/reg.rb +1406 -0
  141. data/lib/origen/registers/reg_collection.rb +24 -0
  142. data/lib/origen/registers.rb +652 -0
  143. data/lib/origen/regression_manager.rb +251 -0
  144. data/lib/origen/remote_manager.rb +340 -0
  145. data/lib/origen/revision_control/base.rb +257 -0
  146. data/lib/origen/revision_control/design_sync.rb +276 -0
  147. data/lib/origen/revision_control/git.rb +243 -0
  148. data/lib/origen/revision_control/subversion.rb +6 -0
  149. data/lib/origen/revision_control.rb +44 -0
  150. data/lib/origen/ruby_version_check.rb +131 -0
  151. data/lib/origen/site_config.rb +61 -0
  152. data/lib/origen/specs/checkers.rb +103 -0
  153. data/lib/origen/specs/creation_info.rb +17 -0
  154. data/lib/origen/specs/doc_resource.rb +91 -0
  155. data/lib/origen/specs/exhibit.rb +17 -0
  156. data/lib/origen/specs/mode_select.rb +16 -0
  157. data/lib/origen/specs/note.rb +17 -0
  158. data/lib/origen/specs/override.rb +21 -0
  159. data/lib/origen/specs/power_supply.rb +13 -0
  160. data/lib/origen/specs/spec.rb +226 -0
  161. data/lib/origen/specs/version_history.rb +14 -0
  162. data/lib/origen/specs.rb +552 -0
  163. data/lib/origen/sub_blocks.rb +298 -0
  164. data/lib/origen/tester/api.rb +277 -0
  165. data/lib/origen/tester/bdm/bdm.rb +25 -0
  166. data/lib/origen/tester/command_based_tester.rb +46 -0
  167. data/lib/origen/tester/doc/doc.rb +226 -0
  168. data/lib/origen/tester/doc/generator/flow.rb +71 -0
  169. data/lib/origen/tester/doc/generator/flow_line.rb +203 -0
  170. data/lib/origen/tester/doc/generator/test.rb +68 -0
  171. data/lib/origen/tester/doc/generator/test_group.rb +66 -0
  172. data/lib/origen/tester/doc/generator/tests.rb +47 -0
  173. data/lib/origen/tester/doc/generator.rb +126 -0
  174. data/lib/origen/tester/doc/model.rb +162 -0
  175. data/lib/origen/tester/generator/flow_control_api.rb +606 -0
  176. data/lib/origen/tester/generator/identity_map.rb +25 -0
  177. data/lib/origen/tester/generator/placeholder.rb +13 -0
  178. data/lib/origen/tester/generator/test_numberer.rb +25 -0
  179. data/lib/origen/tester/generator.rb +271 -0
  180. data/lib/origen/tester/interface.rb +154 -0
  181. data/lib/origen/tester/j750/files.rb +45 -0
  182. data/lib/origen/tester/j750/generator/flow.rb +123 -0
  183. data/lib/origen/tester/j750/generator/flow_line.rb +288 -0
  184. data/lib/origen/tester/j750/generator/patgroup.rb +111 -0
  185. data/lib/origen/tester/j750/generator/patgroups.rb +41 -0
  186. data/lib/origen/tester/j750/generator/patset.rb +111 -0
  187. data/lib/origen/tester/j750/generator/patsets.rb +41 -0
  188. data/lib/origen/tester/j750/generator/templates/flow.txt.erb +9 -0
  189. data/lib/origen/tester/j750/generator/templates/instances.txt.erb +16 -0
  190. data/lib/origen/tester/j750/generator/templates/patgroups.txt.erb +8 -0
  191. data/lib/origen/tester/j750/generator/templates/patsets.txt.erb +10 -0
  192. data/lib/origen/tester/j750/generator/test_instance.rb +846 -0
  193. data/lib/origen/tester/j750/generator/test_instance_group.rb +60 -0
  194. data/lib/origen/tester/j750/generator/test_instances.rb +182 -0
  195. data/lib/origen/tester/j750/generator.rb +203 -0
  196. data/lib/origen/tester/j750/j750.rb +845 -0
  197. data/lib/origen/tester/j750/j750_hpt.rb +35 -0
  198. data/lib/origen/tester/j750/parser/ac_spec.rb +11 -0
  199. data/lib/origen/tester/j750/parser/ac_specs.rb +0 -0
  200. data/lib/origen/tester/j750/parser/dc_spec.rb +36 -0
  201. data/lib/origen/tester/j750/parser/dc_specs.rb +50 -0
  202. data/lib/origen/tester/j750/parser/descriptions.rb +340 -0
  203. data/lib/origen/tester/j750/parser/flow.rb +111 -0
  204. data/lib/origen/tester/j750/parser/flow_line.rb +207 -0
  205. data/lib/origen/tester/j750/parser/flows.rb +23 -0
  206. data/lib/origen/tester/j750/parser/pattern_set.rb +94 -0
  207. data/lib/origen/tester/j750/parser/pattern_sets.rb +33 -0
  208. data/lib/origen/tester/j750/parser/test_instance.rb +322 -0
  209. data/lib/origen/tester/j750/parser/test_instances.rb +26 -0
  210. data/lib/origen/tester/j750/parser/timeset.rb +15 -0
  211. data/lib/origen/tester/j750/parser/timesets.rb +0 -0
  212. data/lib/origen/tester/j750/parser.rb +104 -0
  213. data/lib/origen/tester/jlink/jlink.rb +33 -0
  214. data/lib/origen/tester/parser/description_lookup.rb +64 -0
  215. data/lib/origen/tester/parser/searchable_array.rb +32 -0
  216. data/lib/origen/tester/parser/searchable_hash.rb +32 -0
  217. data/lib/origen/tester/parser.rb +24 -0
  218. data/lib/origen/tester/time.rb +338 -0
  219. data/lib/origen/tester/timing.rb +253 -0
  220. data/lib/origen/tester/ultraflex/files.rb +45 -0
  221. data/lib/origen/tester/ultraflex/generator/flow.rb +119 -0
  222. data/lib/origen/tester/ultraflex/generator/flow_line.rb +269 -0
  223. data/lib/origen/tester/ultraflex/generator/patgroup.rb +111 -0
  224. data/lib/origen/tester/ultraflex/generator/patgroups.rb +41 -0
  225. data/lib/origen/tester/ultraflex/generator/patset.rb +111 -0
  226. data/lib/origen/tester/ultraflex/generator/patsets.rb +41 -0
  227. data/lib/origen/tester/ultraflex/generator/templates/flow.txt.erb +9 -0
  228. data/lib/origen/tester/ultraflex/generator/templates/instances.txt.erb +16 -0
  229. data/lib/origen/tester/ultraflex/generator/templates/patgroups.txt.erb +8 -0
  230. data/lib/origen/tester/ultraflex/generator/templates/patsets.txt.erb +10 -0
  231. data/lib/origen/tester/ultraflex/generator/test_instance.rb +622 -0
  232. data/lib/origen/tester/ultraflex/generator/test_instance_group.rb +60 -0
  233. data/lib/origen/tester/ultraflex/generator/test_instances.rb +174 -0
  234. data/lib/origen/tester/ultraflex/generator.rb +200 -0
  235. data/lib/origen/tester/ultraflex/parser/ac_spec.rb +11 -0
  236. data/lib/origen/tester/ultraflex/parser/ac_specs.rb +0 -0
  237. data/lib/origen/tester/ultraflex/parser/dc_spec.rb +36 -0
  238. data/lib/origen/tester/ultraflex/parser/dc_specs.rb +50 -0
  239. data/lib/origen/tester/ultraflex/parser/descriptions.rb +342 -0
  240. data/lib/origen/tester/ultraflex/parser/flow.rb +111 -0
  241. data/lib/origen/tester/ultraflex/parser/flow_line.rb +207 -0
  242. data/lib/origen/tester/ultraflex/parser/flows.rb +23 -0
  243. data/lib/origen/tester/ultraflex/parser/pattern_set.rb +94 -0
  244. data/lib/origen/tester/ultraflex/parser/pattern_sets.rb +33 -0
  245. data/lib/origen/tester/ultraflex/parser/test_instance.rb +262 -0
  246. data/lib/origen/tester/ultraflex/parser/test_instances.rb +26 -0
  247. data/lib/origen/tester/ultraflex/parser/timeset.rb +15 -0
  248. data/lib/origen/tester/ultraflex/parser/timesets.rb +0 -0
  249. data/lib/origen/tester/ultraflex/parser.rb +104 -0
  250. data/lib/origen/tester/ultraflex/ultraflex.rb +759 -0
  251. data/lib/origen/tester/v93k/generator/flow.rb +63 -0
  252. data/lib/origen/tester/v93k/generator/flow_node/print.rb +10 -0
  253. data/lib/origen/tester/v93k/generator/flow_node.rb +17 -0
  254. data/lib/origen/tester/v93k/generator/pattern.rb +16 -0
  255. data/lib/origen/tester/v93k/generator/pattern_master.rb +54 -0
  256. data/lib/origen/tester/v93k/generator/templates/_test_method.txt.erb +6 -0
  257. data/lib/origen/tester/v93k/generator/templates/_test_suite.txt.erb +11 -0
  258. data/lib/origen/tester/v93k/generator/templates/template.flow.erb +121 -0
  259. data/lib/origen/tester/v93k/generator/templates/template.pmfl.erb +9 -0
  260. data/lib/origen/tester/v93k/generator/test_function.rb +103 -0
  261. data/lib/origen/tester/v93k/generator/test_functions.rb +79 -0
  262. data/lib/origen/tester/v93k/generator/test_method.rb +46 -0
  263. data/lib/origen/tester/v93k/generator/test_methods.rb +75 -0
  264. data/lib/origen/tester/v93k/generator/test_suite.rb +54 -0
  265. data/lib/origen/tester/v93k/generator/test_suites.rb +65 -0
  266. data/lib/origen/tester/v93k/generator.rb +80 -0
  267. data/lib/origen/tester/v93k/v93k.rb +420 -0
  268. data/lib/origen/tester/vector.rb +86 -0
  269. data/lib/origen/tester/vector_generator.rb +633 -0
  270. data/lib/origen/tester/vector_pipeline.rb +150 -0
  271. data/lib/origen/tester.rb +56 -0
  272. data/lib/origen/top_level.rb +134 -0
  273. data/lib/origen/users/ldap.rb +65 -0
  274. data/lib/origen/users/user.rb +149 -0
  275. data/lib/origen/users.rb +30 -0
  276. data/lib/origen/utility/block_args.rb +93 -0
  277. data/lib/origen/utility/csv_data.rb +110 -0
  278. data/lib/origen/utility/design_sync.rb +494 -0
  279. data/lib/origen/utility/diff.rb +158 -0
  280. data/lib/origen/utility/input_capture.rb +121 -0
  281. data/lib/origen/utility/mailer.rb +143 -0
  282. data/lib/origen/utility/s_record.rb +205 -0
  283. data/lib/origen/utility/time_and_date.rb +30 -0
  284. data/lib/origen/utility.rb +12 -0
  285. data/lib/origen/version_checker.rb +117 -0
  286. data/lib/origen/version_string.rb +356 -0
  287. data/lib/origen.rb +648 -0
  288. data/lib/tasks/gem.rake +27 -22
  289. data/origen_site_config.yml +36 -0
  290. data/source_setup +17 -0
  291. data/spec/format/rgen_formatter.rb +14 -0
  292. data/templates/api_doc/README.txt.erb +24 -0
  293. data/templates/code_generators/gemfile_app.rb +4 -0
  294. data/templates/code_generators/gemfile_plugin.rb +6 -0
  295. data/templates/code_generators/gemspec.rb +33 -0
  296. data/templates/code_generators/rakefile.rb +10 -0
  297. data/templates/code_generators/spec_helper.rb +49 -0
  298. data/templates/code_generators/version.rb +8 -0
  299. data/templates/code_generators/version_time.rb +3 -0
  300. data/templates/git/gitignore.erb +33 -0
  301. data/templates/j750/_vt_flow.txt.erb +8 -0
  302. data/templates/j750/_vt_instances.txt.erb +4 -0
  303. data/templates/j750/program_sheet.txt.erb +9 -0
  304. data/templates/nanoc/Rules +74 -0
  305. data/templates/nanoc/config.yaml +77 -0
  306. data/templates/nanoc/content/favicon.ico +0 -0
  307. data/templates/nanoc/layouts/bootstrap.html.erb +63 -0
  308. data/templates/nanoc/layouts/bootstrap3.html.erb +71 -0
  309. data/templates/nanoc/layouts/freescale.html.erb +79 -0
  310. data/templates/nanoc/lib/bootstrap_filter.rb +49 -0
  311. data/templates/nanoc/lib/codeblocks_filter.rb +41 -0
  312. data/templates/nanoc/lib/default.rb +2 -0
  313. data/templates/nanoc/lib/gzip_filter.rb +16 -0
  314. data/templates/nanoc/lib/haml_code_filter.rb +41 -0
  315. data/templates/nanoc/lib/helpers.rb +1 -0
  316. data/templates/nanoc/lib/search_filter.rb +62 -0
  317. data/templates/nanoc_dynamic/content/search.js.erb +92 -0
  318. data/templates/shared/web/_logo.html +10 -0
  319. data/templates/test/_inline_sub.txt.erb +2 -0
  320. data/templates/test/environment.txt.erb +1 -0
  321. data/templates/test/inline.txt.erb +11 -0
  322. data/templates/test/inspections.txt.erb +19 -0
  323. data/templates/test/set1/_sub1.txt.erb +12 -0
  324. data/templates/test/set1/_sub4.txt.erb +1 -0
  325. data/templates/test/set1/_sub5.txt.erb +1 -0
  326. data/templates/test/set1/main.txt.erb +53 -0
  327. data/templates/test/set1/sub_dir/_sub2.txt.erb +20 -0
  328. data/templates/test/set1/sub_dir/_sub3.txt.erb +12 -0
  329. data/templates/test/set1/sub_dir/main2.txt.erb +4 -0
  330. data/templates/test/set2/template_with_no_erb_1.txt +9 -0
  331. data/templates/test/set2/template_with_no_erb_2.txt +9 -0
  332. data/templates/test/set3/_layout.html.erb +4 -0
  333. data/templates/test/set3/content.html.erb +6 -0
  334. data/templates/time/filter.rb.erb +15 -0
  335. data/templates/time/rules.rb.erb +45 -0
  336. 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