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,78 @@
1
+ module Origen
2
+ class Application
3
+ # All access to the configuration management system should be done
4
+ # through methods of this class, an instance of which is accessible via
5
+ # Origen.app.cm
6
+ #
7
+ # Where possible external arguments relating to the underlying CM tool should
8
+ # not be used, try and keep method names and arguments generic.
9
+ #
10
+ # Right now it supports Design Sync only, but by eliminating interaction
11
+ # with DS outside of this class it means that a future change to the CM
12
+ # system should be easily handled by simply swapping in a new ConfigurationManager
13
+ # class.
14
+ class ConfigurationManager
15
+ def initialize
16
+ @cm = Origen::Utility::DesignSync.new
17
+ end
18
+
19
+ def modified_objects_in_workspace?
20
+ @cm.modified_objects?(workspace_dirs, rec: true, fullpath: true)
21
+ end
22
+
23
+ def modified_objects_in_workspace_list
24
+ @cm.modified_objects(workspace_dirs, rec: true, fullpath: true)
25
+ end
26
+
27
+ def unmanaged_objects_in_workspace?
28
+ @cm.modified_objects?(workspace_dirs, rec: true, unmanaged: true, managed: false, fullpath: true)
29
+ end
30
+
31
+ def unmanaged_objects_in_workspace_list
32
+ @cm.modified_objects(workspace_dirs, rec: true, unmanaged: true, managed: false, fullpath: true)
33
+ end
34
+
35
+ def modified_objects_in_repository?
36
+ @cm.modified_objects?(workspace_dirs, rec: true, fullpath: true, remote: true)
37
+ end
38
+
39
+ def modified_objects_in_repository_list
40
+ @cm.modified_objects(workspace_dirs, rec: true, fullpath: true, remote: true)
41
+ end
42
+
43
+ def workspace_dirs
44
+ "#{Origen.root} " + Origen.app.config.external_app_dirs.join(' ')
45
+ end
46
+
47
+ # Fetch the latest version of the application
48
+ def fetch_latest(options = {})
49
+ options = {
50
+ force: false
51
+ }.merge(options)
52
+ @cm.populate(workspace_dirs, rec: true, verbose: true, force: options[:force])
53
+ end
54
+
55
+ def diff_cmd(options = {})
56
+ @cm.diff_cmd(options)
57
+ end
58
+
59
+ def import(*args)
60
+ @cm.import(*args)
61
+ end
62
+
63
+ def ensure_workspace_unmodified!
64
+ if modified_objects_in_workspace?
65
+ puts <<-EOT
66
+ Your workspace has local modifications that are preventing the requested action
67
+ - run 'origen rc mods' to see them.
68
+ EOT
69
+ exit 1
70
+ end
71
+ end
72
+
73
+ def method_missing(method, *args, &blk)
74
+ @cm.send(method, *args, &blk)
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,367 @@
1
+ module Origen
2
+ class Application
3
+ # This class currently serves two APIs and is a bit of a mess.
4
+ # The first API is the old style deploy which is deprecated, in this approach the
5
+ # entire application was built and manged remotely with pages compiled in the remote
6
+ # application.
7
+ #
8
+ # The new appraoch is that the web pages are compiled in the local application and
9
+ # then deploy consists of simply copying them to the remote location.
10
+ class Deployer
11
+ require 'fileutils'
12
+
13
+ attr_writer :version, :directory, :origen_directory, :rdoc_command, :test
14
+
15
+ # Deploys this release to origen.freescale.net/tfs
16
+ # This needs to be made generic so that projects can use it to, right now this
17
+ # code exists both here and in the TFS project
18
+ def deploy(options = {})
19
+ options = {
20
+ test: false, # Do a test run deploy in the local workspace
21
+ archive: false
22
+ }.merge(options)
23
+ @directory = options[:directory]
24
+ @app_sub_directory = options[:app_sub_directory]
25
+ @test = options[:test]
26
+ @version = options[:version]
27
+ @rdoc_command = options[:rdoc_command]
28
+ @successful = false
29
+
30
+ puts '***********************************************************************'
31
+ puts "'deploy' is deprecated, please transition to 'origen web compile' instead"
32
+ puts '***********************************************************************'
33
+
34
+ begin
35
+ puts ''
36
+ puts 'Deploying...'
37
+ puts ''
38
+ populate(offline_release_dir) unless test_run?
39
+ generate_web_pages
40
+ generate_rdoc_pages if @rdoc_command
41
+ # If web pages were generated compile them through nanoc, this is not done
42
+ # as part of generate web pages to allow the application to add additional web
43
+ # pages during the rdoc command
44
+ if @nanoc_dir
45
+ Dir.chdir @nanoc_dir do
46
+ system 'nanoc'
47
+ end
48
+ end
49
+ unless test_run?
50
+ create_symlinks
51
+ make_archive if options[:archive]
52
+ end
53
+ @successful = true
54
+ true
55
+ rescue Exception => e
56
+ puts e.message
57
+ puts e.backtrace
58
+ deploy_unsuccessful(@directory)
59
+ @successful = false
60
+ false
61
+ end
62
+ end
63
+
64
+ # Reports whether the last deploy was successful or not
65
+ def successful?
66
+ @successful
67
+ end
68
+
69
+ def test_run?
70
+ @test
71
+ end
72
+
73
+ def require_remote_directories
74
+ %w(remote1 remote2).each do |dir|
75
+ dir = "#{Origen.config.web_directory}/#{dir}"
76
+ unless File.exist?(dir)
77
+ FileUtils.mkdir_p dir
78
+ end
79
+ end
80
+ end
81
+
82
+ def latest_symlink
83
+ "#{Origen.config.web_directory}/latest"
84
+ end
85
+
86
+ def offline_remote_directory
87
+ if File.exist?(latest_symlink)
88
+ if File.readlink(latest_symlink) =~ /remote1/
89
+ "#{Origen.config.web_directory}/remote2"
90
+ else
91
+ "#{Origen.config.web_directory}/remote1"
92
+ end
93
+ else
94
+ "#{Origen.config.web_directory}/remote1"
95
+ end
96
+ end
97
+
98
+ def live_remote_directory
99
+ if File.exist?(latest_symlink)
100
+ if File.readlink(latest_symlink) =~ /remote1/
101
+ "#{Origen.config.web_directory}/remote1"
102
+ elsif File.readlink(latest_symlink) =~ /remote2/
103
+ "#{Origen.config.web_directory}/remote2"
104
+ end
105
+ end
106
+ end
107
+
108
+ # Deploy a whole web site.
109
+ #
110
+ # This copies the entire contents of web/output in the application
111
+ # directory to the remote server.
112
+ def deploy_site
113
+ Origen.app.listeners_for(:before_deploy_site).each(&:before_deploy_site)
114
+ # Empty the contents of the remote dir
115
+ if File.exist?(offline_remote_directory)
116
+ FileUtils.remove_dir(offline_remote_directory, true)
117
+ require_remote_directories
118
+ end
119
+ # Copy the new contents accross
120
+ `chmod g+w -R #{Origen.root}/web/output` # Ensure group writable
121
+ FileUtils.cp_r "#{Origen.root}/web/output/.", offline_remote_directory
122
+ `chmod g+w -R #{offline_remote_directory}` # Double ensure group writable
123
+ # Make live
124
+ create_symlink offline_remote_directory, latest_symlink
125
+ index = "#{Origen.config.web_directory}/index.html"
126
+ # This symlink allows the site homepage to be accessed from the web root
127
+ # directory rather than root directory/latest
128
+ unless File.exist?(index)
129
+ create_symlink "#{latest_symlink}/index.html", index
130
+ end
131
+ end
132
+
133
+ def deploy_file(file)
134
+ remote_dir = live_remote_directory
135
+ if remote_dir
136
+ file = Origen.file_handler.clean_path_to(file)
137
+ sub_dir = Origen.file_handler.sub_dir_of(file, "#{Origen.root}/templates/web") .to_s
138
+ page = file.basename.to_s.sub(/\..*/, '')
139
+ # Special case for the main index page
140
+ if page == 'index' && sub_dir == '.'
141
+ FileUtils.cp "#{Origen.root}/web/output/index.html", remote_dir
142
+ else
143
+ FileUtils.mkdir_p("#{remote_dir}/#{sub_dir}/#{page}")
144
+ FileUtils.cp "#{Origen.root}/web/output/#{sub_dir}/#{page}/index.html", "#{remote_dir}/#{sub_dir}/#{page}"
145
+ end
146
+ end
147
+ end
148
+
149
+ def generate_api
150
+ dir = "#{Origen.root}/web/output/api"
151
+ FileUtils.rm_rf(dir) if File.exist?(dir)
152
+ # system("cd #{Origen.root} && rdoc --op api --tab-width 4 --main api_doc/README.txt --title 'Origen (#{Origen.version})' api_doc lib/origen")
153
+ if Origen.root == Origen.top
154
+ title = "#{Origen.config.name} #{Origen.version}"
155
+ else
156
+ title = "#{Origen.config.name} #{Origen.app.version}"
157
+ end
158
+ system("yard doc --output-dir #{Origen.root}/web/output/api --title '#{title}'")
159
+ end
160
+
161
+ def deploy_archive(id)
162
+ dir = live_remote_directory
163
+ if dir
164
+ id.gsub!('.', '_')
165
+ archive_dir = "#{Origen.config.web_directory}/#{id}"
166
+ FileUtils.rm_rf(archive_dir) if File.exist?(archive_dir)
167
+ FileUtils.mkdir_p archive_dir
168
+ FileUtils.cp_r "#{Origen.root}/web/output/.", archive_dir
169
+ end
170
+ end
171
+
172
+ # Make an archive directory for the current release, this will create
173
+ # a new directory specifically for this release and copy over the web
174
+ # pages and api docs.
175
+ def make_archive
176
+ if version == 'latest'
177
+ puts 'Cannot archive latest, need a tag reference'
178
+ else
179
+ dir = archive_directory(force_clear: true)
180
+ FileUtils.cp_r Dir.glob("#{origen_directory}/web/output/*").sort, dir
181
+ api = "#{archive_directory}/api"
182
+ FileUtils.mkdir_p api unless File.exist?(api)
183
+ FileUtils.cp_r Dir.glob("#{origen_directory}/api/*").sort, api
184
+ end
185
+ end
186
+
187
+ def create_symlinks
188
+ {
189
+ "#{origen_directory}/web/output" => "#{root_directory}/latest",
190
+ "#{origen_directory}/api" => "#{origen_directory}/web/output/api"
191
+
192
+ }.each do |from, to|
193
+ create_symlink(from, to)
194
+ end
195
+ end
196
+
197
+ def create_symlink(from, to)
198
+ `rm -f #{to}` if File.exist?(to)
199
+ `ln -s #{from} #{to}` if File.exist?(from)
200
+ end
201
+
202
+ def populate(dir)
203
+ # Populate to the new tag
204
+ system "dssc setvault #{Origen.config.vault} #{dir}"
205
+ system "dssc pop -rec -uni -force -ver #{version} #{dir}"
206
+ end
207
+
208
+ def web_server_dir
209
+ "#{origen_directory}/web"
210
+ end
211
+
212
+ def create_web_server_dir
213
+ if File.exist?("#{origen_directory}/templates/web")
214
+ dir = web_server_dir
215
+ FileUtils.rm_rf dir if File.exist?(dir)
216
+ FileUtils.mkdir_p dir
217
+ # Copy the web infrastructure
218
+ FileUtils.cp_r Dir.glob("#{Origen.top}/templates/nanoc/*").sort, dir
219
+ # Compile the dynamic stuff
220
+ Origen.app.runner.launch action: :compile,
221
+ files: "#{Origen.top}/templates/nanoc_dynamic",
222
+ output: dir
223
+ unless Origen.root == origen_directory
224
+ # Copy any application overrides if they exist
225
+ if File.exist?("#{origen_directory}/templates/nanoc")
226
+ FileUtils.cp_r Dir.glob("#{origen_directory}/templates/nanoc/*").sort, dir, remove_destination: true
227
+ end
228
+ end
229
+ # Remove the .SYNCs
230
+ system "find #{dir} -name \".SYNC\" | xargs rm -fr"
231
+ @nanoc_dir = dir
232
+ end
233
+ end
234
+
235
+ # Compiles and creates the web documentation pages, combining the Origen Jekyll
236
+ # infrastructure and the application specific content
237
+ def generate_web_pages
238
+ if File.exist?("#{origen_directory}/templates/web")
239
+ create_web_server_dir
240
+ # Finally compile the application web pages
241
+ Origen.app.runner.generate(files: "#{origen_directory}/templates/web",
242
+ compile: true,
243
+ output: "#{@nanoc_dir}/content")
244
+ end
245
+ end
246
+
247
+ # Run the rdoc task
248
+ def generate_rdoc_pages
249
+ if File.exist?("#{origen_directory}/templates/api_doc")
250
+ Origen.app.runner.generate(files: "#{origen_directory}/templates/api_doc",
251
+ compile: true,
252
+ output: "#{origen_directory}/api_doc")
253
+ end
254
+ Dir.chdir origen_directory do
255
+ system "origen #{rdoc_command}"
256
+ end
257
+ end
258
+
259
+ def rdoc_command
260
+ @rdoc_command || 'rdoc'
261
+ end
262
+
263
+ # The top level directory that hosts all releases
264
+ def root_directory
265
+ return @root_directory if @root_directory
266
+ FileUtils.mkdir_p @directory unless File.exist?(@directory)
267
+ @root_directory = @directory
268
+ end
269
+
270
+ # The directory that contains the current release
271
+ def release_directory1
272
+ return @release_directory1 if @release_directory1
273
+ if test_run?
274
+ @release_directory1 = Origen.root
275
+ else
276
+ @release_directory1 = "#{root_directory}/release_1"
277
+ unless File.exist?(@release_directory1)
278
+ FileUtils.mkdir_p @release_directory1
279
+ populate(@release_directory1)
280
+ end
281
+ end
282
+ @release_directory1
283
+ end
284
+
285
+ def release_directory2
286
+ return @release_directory2 if @release_directory2
287
+ if test_run?
288
+ @release_directory2 = Origen.root
289
+ else
290
+ @release_directory2 = "#{root_directory}/release_2"
291
+ unless File.exist?(@release_directory2)
292
+ FileUtils.mkdir_p @release_directory2
293
+ populate(@release_directory2)
294
+ end
295
+ end
296
+ @release_directory2
297
+ end
298
+
299
+ def archive_directory(options = {})
300
+ ver = version
301
+ return Origen.root if test_run?
302
+ if options[:force_clear]
303
+ @archive_directory = "#{root_directory}/#{ver}"
304
+ FileUtils.rm_rf @archive_directory if File.exist?(@archive_directory)
305
+ else
306
+ return @archive_directory if @archive_directory
307
+ @archive_directory = "#{root_directory}/#{ver}"
308
+ end
309
+ FileUtils.mkdir_p @archive_directory unless File.exist?(@archive_directory)
310
+ @archive_directory
311
+ end
312
+
313
+ def offline_release_dir
314
+ link = "#{root_directory}/latest"
315
+ if File.exist?(link)
316
+ if File.readlink(link) =~ /release_1/
317
+ @offline_release_dir = release_directory2
318
+ else
319
+ @offline_release_dir = release_directory1
320
+ end
321
+ else
322
+ @offline_release_dir = release_directory1
323
+ end
324
+ end
325
+
326
+ # The directory that contains the Origen app for the current release
327
+ def origen_directory
328
+ return @origen_directory if @origen_directory
329
+ if test_run?
330
+ @origen_directory = Origen.root
331
+ else
332
+ @origen_directory = @app_sub_directory ? "#{offline_release_dir}/#{@app_sub_directory}" : offline_release_dir
333
+ FileUtils.mkdir_p @origen_directory unless File.exist?(@origen_directory)
334
+ end
335
+ @origen_directory
336
+ end
337
+
338
+ def version
339
+ @version
340
+ end
341
+
342
+ # Returns true if the user account belongs to the origen group
343
+ def user_belongs_to_origen?
344
+ if Origen.running_on_windows?
345
+ false
346
+ else
347
+ `"groups"`.gsub("\n", '').split(' ').include?('origen')
348
+ end
349
+ end
350
+
351
+ # Returns true if running on CDE
352
+ def running_on_cde?
353
+ if Origen.running_on_windows?
354
+ false
355
+ else
356
+ !!(`"domainname"` =~ /cde/i)
357
+ end
358
+ end
359
+
360
+ def deploy_unsuccessful(directory)
361
+ puts ''
362
+ puts "*** ERROR *** - Could not deploy to: #{directory}"
363
+ puts ''
364
+ end
365
+ end
366
+ end
367
+ end
@@ -0,0 +1,186 @@
1
+ module Origen
2
+ class Application
3
+ # Class to control the environment.
4
+ #
5
+ # The environment is a Ruby file that is loaded prior to generating every piece of output.
6
+ # It is optional, and is loaded before the target, thereby allowing targets to override
7
+ # environment settings.
8
+ #
9
+ # A typical use case for the environment is to setup the test platform, or to set Origen
10
+ # to run in debug or simulation mode. It can generally be thought of as a global target.
11
+ #
12
+ # All environment definition files must live in Origen.root/environment.
13
+ #
14
+ # An instance of this class is automatically
15
+ # instantiated and available globally as Origen.environment.
16
+ class Environment
17
+ DIR = "#{Origen.root}/environment" # :nodoc:
18
+ SAVE_FILE = "#{DIR}/.default" # :nodoc:
19
+ DEFAULT_FILE = "#{DIR}/default.rb" # :nodoc:
20
+
21
+ # Returns the name (the filename) of the current environment
22
+ def name
23
+ file.basename('.rb').to_s if file
24
+ end
25
+
26
+ # Returns Array of all environments available
27
+ def all_environments
28
+ envs = []
29
+ find('').sort.each do |file|
30
+ envs << File.basename(file)
31
+ end
32
+ envs
33
+ end
34
+
35
+ # Returns true if the environment exists, this can be used to test for the presence
36
+ # of an environment before calling one of the other methods to actually apply it.
37
+ #
38
+ # It will return true if one or more environments are found matching the given name,
39
+ # use the unique? method to test if the given name uniquely identifies a valid
40
+ # environment.
41
+ def exists?(name)
42
+ envs = find(name)
43
+ envs.size > 0
44
+ end
45
+ alias_method :exist?, :exists?
46
+
47
+ # Similar to the exists? method, this will return true only if the given name
48
+ # resolves to a single valid environment.
49
+ def unique?(name)
50
+ envs = find(name)
51
+ envs.size == 1
52
+ end
53
+
54
+ # Switch to the supplied environment, name can be a fragment as long as it allows
55
+ # a unique environment to be identified.
56
+ #
57
+ # Calling this method does not affect the default environment setting in the workspace.
58
+ def temporary=(name)
59
+ envs = find(name)
60
+ if envs.size == 0
61
+ puts "Sorry no environments were found matching '#{name}'!"
62
+ puts 'Here are the available options:'
63
+ find('').sort.each do |file|
64
+ puts File.basename(file)
65
+ end
66
+ exit 1
67
+ elsif envs.size > 1
68
+ puts 'Please try again with one of the following environments:'
69
+ envs.sort.each do |file|
70
+ puts File.basename(file)
71
+ end
72
+ exit 1
73
+ else
74
+ self.file = envs[0]
75
+ end
76
+ end
77
+ alias_method :switch, :temporary=
78
+ alias_method :switch_to, :temporary=
79
+
80
+ # As #temporary= except that the given environment will be set to the workspace default
81
+ def default=(name)
82
+ if name
83
+ self.temporary = name
84
+ else
85
+ @file = nil
86
+ end
87
+ save
88
+ end
89
+
90
+ # Prints out the current environment details to the command line
91
+ def describe
92
+ f = self.file!
93
+ puts "Current environment: #{f.basename}"
94
+ puts '*' * 70
95
+ File.open(f).each do |line|
96
+ puts " #{line}"
97
+ end
98
+ puts '*' * 70
99
+ end
100
+
101
+ # Returns an array of matching environment file paths
102
+ def find(name)
103
+ if name
104
+ name = name.gsub('*', '')
105
+ if File.exist?(name)
106
+ [name]
107
+ elsif File.exist?("#{Origen.root}/environment/#{name}") && name != ''
108
+ ["#{Origen.root}/environment/#{name}"]
109
+ else
110
+ # The below weirdness is to make it recurse into symlinked directories
111
+ Dir.glob("#{DIR}/**{,/*/**}/*").sort.uniq.select do |file|
112
+ File.basename(file) =~ /#{name}/ && file !~ /.*\.rb.+$/
113
+ end
114
+ end
115
+ else
116
+ [nil]
117
+ end
118
+ end
119
+
120
+ # Saves the current environment as the workspace default, i.e. the current environment
121
+ # will be used by Origen the next time if no other environment is specified
122
+ def save # :nodoc:
123
+ if @file
124
+ File.open(SAVE_FILE, 'w') do |f|
125
+ Marshal.dump(file, f)
126
+ end
127
+ else
128
+ forget
129
+ end
130
+ end
131
+
132
+ # Load the default file from the workspace default if it exists and return it,
133
+ # otherwise returns nil
134
+ def default_file
135
+ return @default_file if @default_file
136
+ if File.exist?(SAVE_FILE)
137
+ File.open(SAVE_FILE) do |f|
138
+ @default_file = Marshal.load(f)
139
+ end
140
+ elsif File.exist?(DEFAULT_FILE)
141
+ @default_file = Pathname.new(DEFAULT_FILE)
142
+ end
143
+ @default_file
144
+ end
145
+
146
+ # Returns the environment file (a Pathname object) if it has been defined, otherwise nil
147
+ def file # :nodoc:
148
+ return @file if @file
149
+ if default_file && File.exist?(default_file)
150
+ @file = default_file
151
+ end
152
+ end
153
+
154
+ # As file except will raise an exception if it hasn't been defined yet
155
+ def file! # :nodoc:
156
+ unless file
157
+ puts 'No environment has been specified!'
158
+ puts 'To specify an environment use the -e switch.'
159
+ puts 'Look in the environment directory for a list of available environment names.'
160
+ exit 1
161
+ end
162
+ file
163
+ end
164
+
165
+ def file=(path) # :nodoc:
166
+ if path
167
+ @file = Pathname.new(path)
168
+ else
169
+ @file = nil
170
+ end
171
+ end
172
+
173
+ # Remove the workspace default environment
174
+ def forget
175
+ File.delete(SAVE_FILE) if File.exist?(SAVE_FILE)
176
+ @default_file = nil
177
+ end
178
+
179
+ # Returns true if running with a temporary environment, i.e. if the current
180
+ # environment is not the same as the default environment
181
+ def temporary?
182
+ @file == @default_file
183
+ end
184
+ end
185
+ end
186
+ end