origen 0.28.2 → 0.29.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/bin/origen +14 -2
  3. data/config/version.rb +2 -2
  4. data/lib/origen.rb +72 -45
  5. data/lib/origen/application.rb +29 -19
  6. data/lib/origen/application/deployer.rb +3 -1
  7. data/lib/origen/application/runner.rb +10 -8
  8. data/lib/origen/chip_mode.rb +1 -1
  9. data/lib/origen/commands.rb +24 -12
  10. data/lib/origen/commands/version.rb +1 -1
  11. data/lib/origen/commands_global.rb +32 -8
  12. data/lib/origen/core_ext.rb +1 -2
  13. data/lib/origen/core_ext/enumerable.rb +2 -2
  14. data/lib/origen/core_ext/integer.rb +85 -0
  15. data/lib/origen/core_ext/numeric.rb +28 -4
  16. data/lib/origen/global_app.rb +9 -0
  17. data/lib/origen/log.rb +1 -1
  18. data/lib/origen/model_initializer.rb +6 -1
  19. data/lib/origen/netlist/list.rb +2 -2
  20. data/lib/origen/org_file.rb +125 -0
  21. data/lib/origen/org_file/interceptable.rb +44 -0
  22. data/lib/origen/org_file/interceptor.rb +100 -0
  23. data/lib/origen/parameters/set.rb +1 -1
  24. data/lib/origen/pins.rb +4 -0
  25. data/lib/origen/pins/function_proxy.rb +8 -0
  26. data/lib/origen/pins/pin.rb +90 -38
  27. data/lib/origen/pins/pin_collection.rb +61 -21
  28. data/lib/origen/ports/port.rb +1 -1
  29. data/lib/origen/registers.rb +1 -1
  30. data/lib/origen/registers/reg.rb +1 -1
  31. data/lib/origen/remote_manager.rb +25 -15
  32. data/lib/origen/site_config.rb +140 -13
  33. data/lib/origen/specs/checkers.rb +2 -2
  34. data/lib/origen/sub_blocks.rb +6 -1
  35. data/lib/origen/value.rb +119 -0
  36. data/lib/origen/value/bin_str_val.rb +72 -0
  37. data/lib/origen/value/hex_str_val.rb +100 -0
  38. data/origen_site_config.yml +15 -8
  39. metadata +12 -6
  40. data/lib/origen/core_ext/bignum.rb +0 -38
  41. data/lib/origen/core_ext/fixnum.rb +0 -56
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b668d7712bef8be358291fe9bec47914b1738b43
4
- data.tar.gz: f24c2df62d2f22ec88a6e9d417205129e5923ce4
3
+ metadata.gz: 8d5351ecf83d751f998bd4d0a533dd7bb741a08a
4
+ data.tar.gz: ea50032d8fbcf618062720ee47e40b8d0416cf0f
5
5
  SHA512:
6
- metadata.gz: e0eafb6914409f6a5ebdf07c03e769caf9457858570050d89ff4af0e4cd0672d5153802d31d448eb00c18b89dce97ef66908ef34972fec196f32c5f94dd4ba6a
7
- data.tar.gz: e4616d302bd38753d3abd11feabc11a5e21cdc8bfe32f42415ec859eb094df3c93a5ff7412f42acdd11010e80f179bda5edec7fc145fa587fd1c52e5f3fc0c50
6
+ metadata.gz: 117326d05b4e9c7a7adc06d6ca8c16025eb31bae81db228922c965358e5898e6cd039f9fa8d6d8e38f61c63450850c60a1e408e87de86e3235847700d42ed761
7
+ data.tar.gz: 66b8a64e922594ada9b81c7369cbe8a468033aa6f4ac98452ed05716a346686229ff49b9ef55896378825c64a6614d834b7d2b7b1274c0cdc5e67b8fac500e45
data/bin/origen CHANGED
@@ -43,6 +43,7 @@ else
43
43
  end
44
44
  end
45
45
 
46
+ # If running inside an application workspace
46
47
  if origen_root
47
48
  # Force everyone to have a consistent way of installing gems with bundler
48
49
  ENV['BUNDLE_GEMFILE'] = File.join(origen_root, 'Gemfile')
@@ -58,6 +59,8 @@ if origen_root
58
59
  end
59
60
 
60
61
  boot_app = true
62
+
63
+ # If running outside an application and a user or central tool Origen bundle is to be used
61
64
  elsif Origen.site_config.gem_manage_bundler && (Origen.site_config.user_install_enable || Origen.site_config.tool_repo_install_dir)
62
65
  # Force everyone to have a consistent way of installing gems with bundler.
63
66
  # In this case, we aren't running from an Origen application, so build everything at Origen.home instead
@@ -91,8 +94,17 @@ elsif Origen.site_config.gem_manage_bundler && (Origen.site_config.user_install_
91
94
  ENV['BUNDLE_GEMFILE'] = gemfile
92
95
  ENV['BUNDLE_PATH'] = File.expand_path(Origen.site_config.gem_install_dir)
93
96
  ENV['BUNDLE_BIN'] = File.join(origen_root, 'lbin')
94
-
95
- boot_app = false
97
+
98
+ origen_exec = File.join(ENV['BUNDLE_BIN'], 'origen')
99
+
100
+ # If the user/tool bundle already exists but we have not been invoked through that, abort this thread
101
+ # and re-launch under the required bundler environment
102
+ if File.exist?(origen_exec) && !ENV['BUNDLE_BIN_PATH'] && File.exist?(ENV['BUNDLE_PATH'])
103
+ exec Gem.ruby, origen_exec, *ARGV
104
+ exit 0
105
+ else
106
+ boot_app = false
107
+ end
96
108
  end
97
109
 
98
110
  if origen_root && File.exist?(ENV['BUNDLE_GEMFILE']) && Origen.site_config.gem_manage_bundler && (boot_app || Origen.site_config.user_install_enable || Origen.site_config.tool_repo_install_dir)
@@ -1,7 +1,7 @@
1
1
  module Origen
2
2
  MAJOR = 0
3
- MINOR = 28
4
- BUGFIX = 2
3
+ MINOR = 29
4
+ BUGFIX = 0
5
5
  DEV = nil
6
6
 
7
7
  VERSION = [MAJOR, MINOR, BUGFIX].join(".") + (DEV ? ".pre#{DEV}" : '')
@@ -65,6 +65,8 @@ unless defined? RGen::ORIGENTRANSITION
65
65
  autoload :Tests, 'origen/tests'
66
66
  autoload :PowerDomains, 'origen/power_domains'
67
67
  autoload :Clocks, 'origen/clocks'
68
+ autoload :Value, 'origen/value'
69
+ autoload :OrgFile, 'origen/org_file'
68
70
 
69
71
  attr_reader :switch_user
70
72
 
@@ -79,10 +81,23 @@ unless defined? RGen::ORIGENTRANSITION
79
81
  class GitError < OrigenError; status_code(11); end
80
82
  class DesignSyncError < OrigenError; status_code(12); end
81
83
  class RevisionControlUninitializedError < OrigenError; status_code(13); end
84
+ class SyntaxError < OrigenError; status_code(14); end
82
85
 
83
86
  class << self
84
87
  include Origen::Utility::TimeAndDate
85
88
 
89
+ # Uniformly justifies the given help command line for display in a command line help output
90
+ def clean_help_line(str)
91
+ if str =~ /^\s\s\s\s\s\s\s*(.*)/
92
+ (' ' * 20) + Regexp.last_match(1)
93
+ # http://rubular.com/r/MKmU4xZgO2
94
+ elsif str =~ /^\s*([^\s]+)\s+*(.*)/
95
+ ' ' + Regexp.last_match(1).ljust(19) + Regexp.last_match(2)
96
+ else
97
+ str
98
+ end
99
+ end
100
+
86
101
  def enable_profiling
87
102
  @profiling = true
88
103
  end
@@ -272,17 +287,19 @@ unless defined? RGen::ORIGENTRANSITION
272
287
 
273
288
  # Returns true if Origen is running in an application workspace
274
289
  def in_app_workspace?
275
- path = Pathname.new(Dir.pwd)
276
- until path.root? || File.exist?(File.join(path, APP_CONFIG))
277
- path = path.parent
290
+ @in_app_workspace ||= begin
291
+ path = Pathname.new(Dir.pwd)
292
+ until path.root? || File.exist?(File.join(path, APP_CONFIG))
293
+ path = path.parent
294
+ end
295
+ !path.root?
278
296
  end
279
- !path.root?
280
297
  end
281
298
 
282
299
  # Shortcut method to find if Origen was invoked from within an application or from
283
300
  # the global Origen install. This is just the opposite of in_app_workspace?
284
301
  def running_globally?
285
- !in_app_workspace?
302
+ @running_globally ||= !in_app_workspace?
286
303
  end
287
304
  alias_method :invoked_globally?, :running_globally?
288
305
 
@@ -299,7 +316,10 @@ unless defined? RGen::ORIGENTRANSITION
299
316
  path = path.parent
300
317
  end
301
318
  if path.root?
302
- path = top
319
+ @running_globally = true
320
+ path = Pathname.new($_origen_invocation_pwd || Dir.pwd)
321
+ else
322
+ @in_app_workspace = true
303
323
  end
304
324
  path
305
325
  end
@@ -451,47 +471,54 @@ unless defined? RGen::ORIGENTRANSITION
451
471
  # automatically the first time the application is referenced via Origen.app
452
472
  def load_application(options = {})
453
473
  @application ||= begin
454
- # Make sure the top-level root is always in the load path, it seems that some existing
455
- # plugins do some strange things to require stuff from the top-level app and rely on this
456
- path = File.join(root, 'lib')
457
- $LOAD_PATH.unshift(path) unless $LOAD_PATH.include?(path)
458
- # This flag is set so that when a thread starts with no app it remains with no app. This
459
- # was an issue when building a new app with the fetch command and when the thread did a
460
- # chdir to the new app directory (to fetch it) Origen.log would try to load the partial app.
461
- @running_outside_an_app = true unless in_app_workspace?
462
- return nil if @running_outside_an_app
463
- # Load the app's plugins and other gem requirements
464
- if File.exist?(File.join(root, 'Gemfile')) && !@with_boot_environment
465
- # Don't understand the rules here, belt and braces approach for now to make
466
- # sure that all Origen plugins are auto-required (otherwise Origen won't know
467
- # about them to plug them into the application)
468
- Bundler.require
469
- Bundler.require(:development)
470
- Bundler.require(:runtime)
471
- Bundler.require(:default)
472
- end
473
- @plugins_loaded = true
474
- # Now load the app
475
- @loading_top_level = true
476
- require File.join(root, APP_CONFIG)
477
- @application = _applications_lookup[:root][root.to_s]
478
- @loading_top_level = false
479
- if @with_boot_environment
480
- @application.plugins.disable_current
474
+ # If running globally (outside of an app workspace), instantiate a bare bones app to help
475
+ # many of Origen's features that expect an app to be present.
476
+ if running_globally?
477
+ @plugins_loaded = true
478
+ # Now load the app
479
+ @loading_top_level = true
480
+ require 'origen/global_app'
481
+ @application = _applications_lookup[:root][root.to_s]
482
+ @loading_top_level = false
483
+ @application_loaded = true
484
+ @application
481
485
  else
482
- Origen.remote_manager.require!
486
+ # Make sure the top-level root is always in the load path, it seems that some existing
487
+ # plugins do some strange things to require stuff from the top-level app and rely on this
488
+ path = File.join(root, 'lib')
489
+ $LOAD_PATH.unshift(path) unless $LOAD_PATH.include?(path)
490
+ if File.exist?(File.join(root, 'Gemfile')) && !@with_boot_environment
491
+ # Don't understand the rules here, belt and braces approach for now to make
492
+ # sure that all Origen plugins are auto-required (otherwise Origen won't know
493
+ # about them to plug them into the application)
494
+ Bundler.require
495
+ Bundler.require(:development)
496
+ Bundler.require(:runtime)
497
+ Bundler.require(:default)
498
+ end
499
+ @plugins_loaded = true
500
+ # Now load the app
501
+ @loading_top_level = true
502
+ require File.join(root, APP_CONFIG)
503
+ @application = _applications_lookup[:root][root.to_s]
504
+ @loading_top_level = false
505
+ if @with_boot_environment
506
+ @application.plugins.disable_current
507
+ else
508
+ Origen.remote_manager.require!
509
+ end
510
+ boot = File.join(root, 'config', 'boot.rb')
511
+ require boot if File.exist?(boot)
512
+ env = File.join(root, 'config', 'environment.rb')
513
+ require env if File.exist?(env)
514
+ dev = File.join(root, 'config', 'development.rb')
515
+ require dev if File.exist?(dev)
516
+ validate_origen_dev_configuration!
517
+ ([@application] + Origen.app.plugins).each(&:on_loaded)
518
+ @application_loaded = true
519
+ Array(@after_app_loaded_blocks).each { |b| b.call(@application) }
520
+ @application
483
521
  end
484
- boot = File.join(root, 'config', 'boot.rb')
485
- require boot if File.exist?(boot)
486
- env = File.join(root, 'config', 'environment.rb')
487
- require env if File.exist?(env)
488
- dev = File.join(root, 'config', 'development.rb')
489
- require dev if File.exist?(dev)
490
- validate_origen_dev_configuration!
491
- ([@application] + Origen.app.plugins).each(&:on_loaded)
492
- @application_loaded = true
493
- Array(@after_app_loaded_blocks).each { |b| b.call(@application) }
494
- @application
495
522
  end
496
523
  end
497
524
 
@@ -31,20 +31,26 @@ module Origen
31
31
  # Somehow using the old import system and version file format we can get in here when
32
32
  # loading the version, this can be removed in future when the imports API is retired
33
33
  unless caller[0] =~ /version.rb.*/
34
- root = Pathname.new(caller[0].sub(/(\\|\/)?config(\\|\/)application.rb.*/, '')).realpath
35
- app = base.instance
36
- app.root = root.to_s
37
- if Origen.plugins_loaded? && !Origen.loading_top_level?
38
- # This situation of a plugin being loaded after the top-level app could occur if the app
39
- # doesn't require the plugin until later, in that case there is nothing the plugin owner
40
- # can do and we just need to accept that this can happen.
41
- # Origen.log.warning "The #{app.name} plugin is using a non-standard loading mechanism, upgrade to a newer version of it to get rid of this warning (please report a bug to its owner if this warning persists)"
34
+ if base.to_s == 'OrigenGlobalApplication'
35
+ app = base.instance
36
+ app.root = Origen.root
42
37
  Origen.register_application(app)
43
- # Origen.app.plugins << app
44
38
  else
45
- Origen.register_application(app)
39
+ root = Pathname.new(caller[0].sub(/(\\|\/)?config(\\|\/)application.rb.*/, '')).realpath
40
+ app = base.instance
41
+ app.root = root.to_s
42
+ if Origen.plugins_loaded? && !Origen.loading_top_level?
43
+ # This situation of a plugin being loaded after the top-level app could occur if the app
44
+ # doesn't require the plugin until later, in that case there is nothing the plugin owner
45
+ # can do and we just need to accept that this can happen.
46
+ # Origen.log.warning "The #{app.name} plugin is using a non-standard loading mechanism, upgrade to a newer version of it to get rid of this warning (please report a bug to its owner if this warning persists)"
47
+ Origen.register_application(app)
48
+ # Origen.app.plugins << app
49
+ else
50
+ Origen.register_application(app)
51
+ end
52
+ app.add_lib_to_load_path!
46
53
  end
47
- app.add_lib_to_load_path!
48
54
  end
49
55
  end
50
56
 
@@ -372,15 +378,19 @@ END
372
378
  def version(options = {})
373
379
  @version = nil if options[:refresh]
374
380
  return @version if @version
375
- load File.join(root, 'config', 'version.rb')
376
- if defined? eval(namespace)::VERSION
377
- @version = Origen::VersionString.new(eval(namespace)::VERSION)
381
+ if Origen.running_globally?
382
+ @version = Origen.version
378
383
  else
379
- # The eval of the class is required here as somehow when plugins are imported under the old
380
- # imports system and with the old version file format we can end up with two copies of the
381
- # same class constant. Don't understand it, but it is fixed with the move to gems and the
382
- # namespace-based version file format.
383
- @version = Origen::VersionString.new(eval(self.class.to_s)::VERSION)
384
+ load File.join(root, 'config', 'version.rb')
385
+ if defined? eval(namespace)::VERSION
386
+ @version = Origen::VersionString.new(eval(namespace)::VERSION)
387
+ else
388
+ # The eval of the class is required here as somehow when plugins are imported under the old
389
+ # imports system and with the old version file format we can end up with two copies of the
390
+ # same class constant. Don't understand it, but it is fixed with the move to gems and the
391
+ # namespace-based version file format.
392
+ @version = Origen::VersionString.new(eval(self.class.to_s)::VERSION)
393
+ end
384
394
  end
385
395
  @version
386
396
  end
@@ -61,7 +61,9 @@ module Origen
61
61
  # which is will build and checkout as required
62
62
  def git_repo
63
63
  @git_repo ||= begin
64
- local = Pathname.new("#{Origen.app.workspace_manager.imports_directory}/git/#{Origen.config.web_directory.gsub('/', '-').symbolize}")
64
+ local_path = "#{Origen.config.web_directory.gsub('/', '-').symbolize}"
65
+ local_path.gsub!(':', '-') if Origen.os.windows?
66
+ local = Pathname.new("#{Origen.app.workspace_manager.imports_directory}/git/#{local_path}")
65
67
  if git_sub_dir
66
68
  remote = Origen.config.web_directory.sub("\/#{git_sub_dir}", '')
67
69
  else
@@ -228,14 +228,16 @@ module Origen
228
228
  # submitted the job.
229
229
  Origen.file_handler.set_output_directory(options.merge(create: Origen.running_locally?))
230
230
  Origen.file_handler.set_reference_directory(options.merge(create: Origen.running_locally?))
231
- tmp = "#{Origen.root}/tmp"
232
- FileUtils.mkdir(tmp) unless File.exist?(tmp)
233
- if Origen.running_locally?
234
- mkdir Origen::Log.log_file_directory
235
- mkdir "#{Origen.root}/.lsf"
236
- end
237
- if options[:lsf]
238
- mkdir Origen.app.lsf_manager.log_file_directory
231
+ unless Origen.running_globally?
232
+ tmp = "#{Origen.root}/tmp"
233
+ FileUtils.mkdir(tmp) unless File.exist?(tmp)
234
+ if Origen.running_locally?
235
+ mkdir Origen::Log.log_file_directory
236
+ mkdir "#{Origen.root}/.lsf"
237
+ end
238
+ if options[:lsf]
239
+ mkdir Origen.app.lsf_manager.log_file_directory
240
+ end
239
241
  end
240
242
  end
241
243
 
@@ -46,7 +46,7 @@ module Origen
46
46
  # The data rate unit was validated on init so it is good to go
47
47
  # in theory but should still check if it returns a numeric
48
48
  value = @data_rate.send(@data_rate_unit.to_sym)
49
- if [Fixnum, Bignum, Float, Integer, Numeric].include? value.class
49
+ if value.is_a?(Numeric)
50
50
  return value
51
51
  else
52
52
  Origen.log.error "@data_rate '#{@data_rate}' conversion using @data_rate_unit '#{@data_rate_unit}' did not product a Numeric, exiting..."
@@ -217,7 +217,7 @@ if shared_commands && shared_commands.size != 0
217
217
  end
218
218
 
219
219
  # Get a list of registered plugins and get the global launcher
220
- @global_launcher = Origen._applications_lookup[:name].map do |plugin_name, plugin|
220
+ @global_launcher = Origen._applications_lookup[:name].dup.map do |plugin_name, plugin|
221
221
  shared = plugin.config.shared || {}
222
222
  if shared[:global_launcher]
223
223
  file = "#{plugin.root}/#{shared[:global_launcher]}"
@@ -253,6 +253,8 @@ else
253
253
  Usage: origen COMMAND [ARGS]
254
254
 
255
255
  The core origen commands are:
256
+ EOT
257
+ cmds = <<-EOT
256
258
  environment Display or set the environment (short-cut alias: "e")
257
259
  target Display or set the target (short-cut alias: "t")
258
260
  mode Display or set the mode (short-cut alias: "m")
@@ -269,32 +271,42 @@ The core origen commands are:
269
271
  web Web page tools, see -h for details
270
272
  time Tools for test time analysis and forecasting
271
273
  lint Lint and style check (and correct) your application code
272
-
273
274
  EOT
275
+ cmds.split(/\n/).each do |line|
276
+ puts Origen.clean_help_line(line)
277
+ end
278
+ puts
274
279
  if @application_commands && !@application_commands.empty?
275
- puts <<-EOT
276
- In addition to these the application has added:
277
- #{@application_commands}
278
- EOT
280
+ puts 'In addition to these the application has added:'
281
+ @application_commands.split(/\n/).each do |cmds|
282
+ cmds.split(/\n/).each do |line|
283
+ puts Origen.clean_help_line(line)
284
+ end
285
+ end
286
+ puts
279
287
  end
280
288
 
281
289
  if @plugin_commands && !@plugin_commands.empty?
282
290
  puts 'The following commands are provided by plugins:'
283
- @plugin_commands.each do |str|
284
- puts str
291
+ @plugin_commands.each do |cmds|
292
+ cmds.split(/\n/).each do |line|
293
+ puts Origen.clean_help_line(line)
294
+ end
285
295
  end
296
+ puts
286
297
  end
287
298
 
288
299
  if @global_launcher && !@global_launcher.empty?
289
- puts ''
290
300
  puts 'The following global commands are provided by plugins:'
291
- @global_commands.each do |str|
292
- puts str
301
+ @global_commands.each do |cmds|
302
+ cmds.split(/\n/).each do |line|
303
+ puts Origen.clean_help_line(line)
304
+ end
293
305
  end
306
+ puts
294
307
  end
295
308
 
296
309
  puts <<-EOT
297
-
298
310
  All commands can be run with -d (or --debugger) to enable the debugger.
299
311
  All commands can be run with --coverage to enable code coverage.
300
312
  Many commands can be run with -h (or --help) for more information.
@@ -1,2 +1,2 @@
1
- puts "Application: #{Origen.app.version}" if Origen.app_loaded?
1
+ puts "Application: #{Origen.app.version}" if Origen.app_loaded? && !Origen.running_globally?
2
2
  puts " Origen: #{Origen.version}"
@@ -23,10 +23,29 @@ if ENV['BUNDLE_GEMFILE']
23
23
  Bundler.require(:development)
24
24
  Bundler.require(:runtime)
25
25
  Bundler.require(:default)
26
+ else
27
+ # If we're not running from a Bundler build, which we aren't here,
28
+ # get a list of installed system gems. Go through this list finding and get any that has a dependency
29
+ # on Origen. If so, assume that gem is a plugin.
30
+ # For all plugins, require it to register as a plugin.
31
+ # The global handler below will take it from there.
32
+ Gem::Specification.each do |gem|
33
+ gem.dependencies.each do |d|
34
+ if d.name == 'origen'
35
+ require gem.name
36
+ end
37
+ end
38
+ end
26
39
  end
27
40
 
41
+ # Load the global app and an empty target, this helps to ensure that all of Origen's functionality
42
+ # is available to global commands, since many features implicitly assume the presence of an app
43
+ Origen.app
44
+ Origen.target.temporary = -> {}
45
+ Origen.load_target
46
+
28
47
  # Get a list of registered plugins and get the global launcher
29
- @global_launcher = Origen._applications_lookup[:name].map do |plugin_name, plugin|
48
+ @global_launcher = Origen._applications_lookup[:name].dup.map do |plugin_name, plugin|
30
49
  shared = plugin.config.shared || {}
31
50
  if shared[:global_launcher]
32
51
  file = "#{plugin.root}/#{shared[:global_launcher]}"
@@ -90,25 +109,30 @@ else
90
109
  Usage: origen COMMAND [ARGS]
91
110
 
92
111
  The following commands are available:
112
+ EOT
113
+ cmds = <<-EOT
93
114
  new Create a new Origen application or plugin. "origen new my_app" creates a
94
115
  new origen application workspace in "./my_app"
95
116
  interactive Start an interactive Origen console (short-cut alias: "i"), this is just
96
117
  IRB with the 'origen' lib loaded automatically
97
118
  EOT
98
-
119
+ cmds.split(/\n/).each do |line|
120
+ puts Origen.clean_help_line(line)
121
+ end
122
+ puts
99
123
  if @global_launcher && !@global_launcher.empty?
100
- puts ''
101
124
  puts 'The following global commands are provided by plugins:'
102
- @global_commands.each do |str|
103
- puts str
125
+ @global_commands.each do |cmds|
126
+ cmds.split(/\n/).each do |line|
127
+ puts Origen.clean_help_line(line)
128
+ end
104
129
  end
130
+ puts
105
131
  end
106
132
 
107
133
  puts <<-EOT
108
-
109
134
  Many commands can be run with -h (or --help) for more information.
135
+
110
136
  EOT
111
- # fetch Automatically creates the workspace for the requested plugin and
112
- # populates the latest version of the plugin (short-cut alias: "f")
113
137
  exit 0
114
138
  end