origen 0.55.2 → 0.57.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 5cf8ef1db0f389fbc583bff6c1b08c1758b3e83e
4
- data.tar.gz: d813e05d000eafc086a6622667775f12fb21a00d
2
+ SHA256:
3
+ metadata.gz: 21b7b219ea6b020ff55496a1c3103e1abb49080162ae22c7e923cf09573b2909
4
+ data.tar.gz: 2e0fdba7223ee3fa33f272f88ff9ccdea39ba54d630eb8e28c99d5bfc73c6563
5
5
  SHA512:
6
- metadata.gz: 7b8a52639b9294d8710786e7f310b978c4fa4170d05880cbf60316914c1ecba3418da55921b54c4fbb17dd934ab4e98e6f99830a7655e1587f5ca0f08d276d57
7
- data.tar.gz: 7228e9ffd9d73d7fc5c73b767fee9201c370d71a3c72bab1237ff644876cd534338267823127eaa840a6633167f9e08d811332ef9ef8d7d0ab5bb9a79ba74314
6
+ metadata.gz: bb7fcc388d925a782a33120045527f627e5c7c31fcbfe351f0ef32c8368824c2d94c473f818e68a5e1948cd321dd8cd130d288d348ce141875678b03d11ee693
7
+ data.tar.gz: 187445f738cc7873c920f29e4c55eb480d67d8ab1be5fbc143e592d6cc855ecb8a27f2c835efbb53ce304faa123e432fedd8ba51b3205df1fe414f3f1482ad8c
@@ -1,7 +1,7 @@
1
1
  module Origen
2
2
  MAJOR = 0
3
- MINOR = 55
4
- BUGFIX = 2
3
+ MINOR = 57
4
+ BUGFIX = 0
5
5
  DEV = nil
6
6
  VERSION = [MAJOR, MINOR, BUGFIX].join(".") + (DEV ? ".pre#{DEV}" : '')
7
7
  end
@@ -610,6 +610,9 @@ unless defined? RGen::ORIGENTRANSITION
610
610
  else
611
611
  @interface.reset_globals if @interface.respond_to?(:reset_globals)
612
612
  end
613
+ if @interface.respond_to?(:on_interface_reset)
614
+ @interface.on_interface_reset
615
+ end
613
616
  @interface
614
617
  end
615
618
 
@@ -252,8 +252,9 @@ module Origen
252
252
  end
253
253
 
254
254
  # Build the log file from the completed jobs
255
- def build_log(_options = {})
256
- Origen.log.info '*' * 70
255
+ def build_log(options = {})
256
+ log_method = options[:log_file] ? options[:log_file] : :info
257
+ Origen.log.send(log_method, '*' * 70)
257
258
  completed_jobs.each do |job|
258
259
  File.open(log_file(job[:id])) do |f|
259
260
  last_line_blank = false
@@ -291,12 +292,12 @@ module Origen
291
292
  stats.failed_files += Regexp.last_match[1].to_i
292
293
  elsif line =~ /ERROR!/
293
294
  stats.errors += 1
294
- Origen.log.send :relog, line
295
+ Origen.log.send :relog, line, options
295
296
  else
296
297
  # Compress multiple blank lines
297
298
  if line =~ /^\s*$/ || line =~ /.*\|\|\s*$/
298
299
  unless last_line_blank
299
- Origen.log.info
300
+ Origen.log.send(log_method, nil)
300
301
  last_line_blank = true
301
302
  end
302
303
  else
@@ -305,8 +306,7 @@ module Origen
305
306
  line =~ /Insecure world writable dir/ ||
306
307
  line =~ /To save all of/
307
308
  line.strip!
308
- # line.sub!(/.*\|\| /, '')
309
- Origen.log.send :relog, line
309
+ Origen.log.send :relog, line, options
310
310
  last_line_blank = false
311
311
  end
312
312
  end
@@ -319,7 +319,7 @@ module Origen
319
319
  end
320
320
  end
321
321
  end
322
- Origen.log.info '*' * 70
322
+ Origen.log.send(log_method, '*' * 70)
323
323
  stats.print_summary
324
324
  end
325
325
 
@@ -409,7 +409,7 @@ module Origen
409
409
  end
410
410
 
411
411
  str = "#{action} #{cmd}".strip
412
- str.sub('origen ', '') if str =~ /^origen /
412
+ str.sub!('origen ', '') if str =~ /^origen /
413
413
 
414
414
  # Append the --exec_remote switch to all Origen commands, this allows command
415
415
  # processing to be altered based on whether it is running locally or
@@ -420,12 +420,11 @@ module Origen
420
420
  end
421
421
 
422
422
  def command_prefix(id, dependents)
423
- origen = `which origen`
424
- # http://rubular.com/r/wgKi73KjUo
425
- if origen =~ /(^\/run\/pkg\/fs-origen-\/[^\/]+)/
426
- prefix = "source #{Regexp.last_match[1]}/origen_setup; "
423
+ # define prefix as a blank string if Origen.site_config.lsf_command_prefix is not defined
424
+ if Origen.site_config.lsf_command_prefix
425
+ prefix = Origen.site_config.lsf_command_prefix
427
426
  else
428
- prefix = "cd #{Origen.top}; source source_setup; "
427
+ prefix = ''
429
428
  end
430
429
  prefix += "cd #{Origen.root}; origen l --execute --id #{id} "
431
430
  unless dependents.empty?
@@ -114,7 +114,7 @@ module Origen
114
114
  fail "Sorry but #{path} already exists!"
115
115
  end
116
116
  FileUtils.rm_rf(path.to_s) if File.exist?(path.to_s)
117
- rc = RevisionControl.new remote: options[:rc_url], local: path.to_s
117
+ rc = RevisionControl.new options.merge(remote: options[:rc_url], local: path.to_s)
118
118
  rc.build
119
119
  end
120
120
 
@@ -62,24 +62,34 @@ if ARGV.delete('--coverage') ||
62
62
  Origen.log.info 'Started code coverage'
63
63
  SimpleCov.configure do
64
64
  filters.clear # This will remove the :root_filter that comes via simplecov's defaults
65
+
65
66
  add_filter do |src|
66
- !(src.filename =~ /^#{Origen.root}\/lib/)
67
+ if File.directory?("#{Origen.root}/app/lib")
68
+ !(src.filename =~ /^#{Origen.root}\/app\/lib/)
69
+ else
70
+ !(src.filename =~ /^#{Origen.root}\/lib/)
71
+ end
67
72
  end
68
73
 
69
74
  # Results from commands run in succession will be merged by default
70
75
  use_merging(!ARGV.delete('--no_merge'))
71
-
72
76
  # Try and make a guess about which directory contains the bulk of the application's code
73
77
  # and create groups to match the main folders
74
- d1 = "#{Origen.root}/lib/#{Origen.app.name.to_s.underscore}"
75
- d2 = "#{Origen.root}/lib/#{Origen.app.namespace.to_s.underscore}"
76
- d3 = "#{Origen.root}/lib"
78
+ # Highest priority is given to the new application structure
79
+ # Applications on the old directory structure need to make sure that there isn't another "app" directory in Origen.root
80
+ # Applications on the new directory structure need to make sure that there isn't another "lib" directory in Origen.root
81
+ d1 = "#{Origen.root}/app/"
82
+ d2 = "#{Origen.root}/lib/#{Origen.app.name.to_s.underscore}"
83
+ d3 = "#{Origen.root}/lib/#{Origen.app.namespace.to_s.underscore}"
84
+ d4 = "#{Origen.root}/lib"
77
85
  if File.exist?(d1) && File.directory?(d1)
78
86
  dir = d1
79
87
  elsif File.exist?(d2) && File.directory?(d2)
80
88
  dir = d2
81
- else
89
+ elsif File.exist?(d3) && File.directory?(d3)
82
90
  dir = d3
91
+ else
92
+ dir = d4
83
93
  end
84
94
 
85
95
  Dir.glob("#{dir}/*").each do |d|
@@ -3,7 +3,7 @@ module Origen
3
3
  # A job is responsible for executing a single pattern source
4
4
  class Job # :nodoc: all
5
5
  attr_accessor :output_file_body, :pattern
6
- attr_reader :split_counter
6
+ attr_reader :split_counter, :split_names
7
7
  attr_reader :options
8
8
 
9
9
  def initialize(pattern, options)
@@ -23,9 +23,11 @@ module Origen
23
23
  @no_comments
24
24
  end
25
25
 
26
- def inc_split_counter
26
+ def inc_split_counter(name = '')
27
27
  @split_counter ||= 0
28
+ @split_names ||= ['']
28
29
  @split_counter += 1
30
+ @split_names << name
29
31
  end
30
32
 
31
33
  def requested_pattern
@@ -115,7 +117,11 @@ module Origen
115
117
 
116
118
  def split_number
117
119
  if split_counter
118
- "_part#{split_counter}"
120
+ if split_names[split_counter] != ''
121
+ "_#{split_names[split_counter]}"
122
+ else
123
+ "_part#{split_counter}"
124
+ end
119
125
  else
120
126
  ''
121
127
  end
@@ -91,9 +91,23 @@ module Origen
91
91
  # end
92
92
 
93
93
  @pattern_sequence = true
94
- pattern_wrapper([], [], options) do
94
+
95
+ # The startup callbacks need to be skipped for now until the main thread is open for business
96
+ pattern_wrapper([], [], options.merge(call_startup_callbacks: false)) do
97
+ # The startup callbacks, if required, need to be wrapped up in a closure for calling
98
+ # later by the main thread
99
+ if (options.key?(:call_startup_callbacks) && !options[:call_startup_callbacks]) || options[:skip_startup]
100
+ pre_block = nil
101
+ else
102
+ pre_block = proc do
103
+ # Call startup callbacks
104
+ Origen.app.listeners_for(:startup).each do |listener|
105
+ listener.startup(options)
106
+ end
107
+ end
108
+ end
95
109
  PatternSequencer.send(:active=, true)
96
- @pattern_sequence = PatternSequence.new(job.output_pattern_filename, block)
110
+ @pattern_sequence = PatternSequence.new(job.output_pattern_filename, block, pre_block)
97
111
  @pattern_sequence.send(:execute)
98
112
  PatternSequencer.send(:active=, false)
99
113
  end
@@ -221,8 +235,9 @@ module Origen
221
235
  # Each additional pattern section created by calling this method
222
236
  # will have '_partN' appended to the original pattern name.
223
237
  def split(options = {})
238
+ split_name = options.delete(:name) || ''
224
239
  pattern_close(options.merge(call_shutdown_callbacks: false))
225
- job.inc_split_counter
240
+ job.inc_split_counter(split_name)
226
241
  pattern_open(options.merge(call_startup_callbacks: false))
227
242
  end
228
243
 
@@ -5,15 +5,17 @@ module Origen
5
5
  # Manages a single pattern sequence, i.e. an instance of PatternSequence is
6
6
  # created for every Pattern.sequence do ... end block
7
7
  class PatternSequence
8
- def initialize(name, block)
8
+ def initialize(name, block, pre_block = nil)
9
9
  @number_of_threads = 1
10
10
  @name = name
11
11
  @running_thread_ids = { main: true }
12
12
  # The contents of the main Pattern.sequence block will be executed as a thread and treated
13
13
  # like any other parallel block
14
- thread = PatternThread.new(:main, self, block, true)
14
+ thread = PatternThread.new(:main, self, block, true, pre_block)
15
15
  threads << thread
16
16
  active_threads << thread
17
+ PatSeq.send(:current_sequence=, self)
18
+ @sync_ups = {}
17
19
  end
18
20
 
19
21
  # Execute the given pattern
@@ -45,7 +47,7 @@ module Origen
45
47
  end
46
48
  alias_method :in_parallel, :thread
47
49
 
48
- def wait_for_threads(*ids)
50
+ def wait_for_threads_to_complete(*ids)
49
51
  completed = false
50
52
  blocked = false
51
53
  ids = ids.map(&:to_sym)
@@ -71,10 +73,48 @@ module Origen
71
73
  end
72
74
  end
73
75
  end
74
- alias_method :wait_for_thread, :wait_for_threads
76
+ alias_method :wait_for_thread, :wait_for_threads_to_complete
77
+ alias_method :wait_for_threads, :wait_for_threads_to_complete
78
+ alias_method :wait_for_thread_to_complete, :wait_for_threads_to_complete
75
79
 
76
80
  private
77
81
 
82
+ def sync_up(location, *ids)
83
+ options = ids.pop if ids.last.is_a?(Hash)
84
+ options ||= {}
85
+ ids = ids.map(&:to_sym)
86
+ if ids.empty? || ids.include?(:all)
87
+ ids = @running_thread_ids.keys
88
+ ids.delete(:main) unless options[:include_main]
89
+ end
90
+ # Just continue if this thread is not in the list
91
+ return unless ids.include?(current_thread.id)
92
+ # If we have entered the same sync up point after having previously completed it,
93
+ # then clear it and start again
94
+ if @sync_ups[location] && @sync_ups[location][:completed]
95
+ @sync_ups[location] = nil
96
+ end
97
+ # Don't need to worry about race conditions here as Origen only allows 1 thread
98
+ # to be active at a time
99
+ if @sync_ups[location]
100
+ @sync_ups[location][:arrived] << current_thread.id
101
+ else
102
+ @sync_ups[location] = { required: Set.new, arrived: Set.new, completed: false }
103
+ ids.each { |id| @sync_ups[location][:required] << id }
104
+ @sync_ups[location][:arrived] << current_thread.id
105
+ end
106
+ if @sync_ups[location][:required] == @sync_ups[location][:arrived]
107
+ @sync_ups[location][:completed] = true
108
+ end
109
+ blocked = false
110
+ until @sync_ups[location][:completed]
111
+ current_thread.waiting_for_thread(blocked)
112
+ blocked = true
113
+ Origen.log.debug "Waiting for sync_up: #{@sync_ups}"
114
+ end
115
+ current_thread.record_active if blocked
116
+ end
117
+
78
118
  def thread_running?(id)
79
119
  @running_thread_ids[id]
80
120
  end
@@ -86,7 +126,11 @@ module Origen
86
126
  def log_execution_profile
87
127
  if threads.size > 1
88
128
  thread_id_size = threads.map { |t| t.id.to_s.size }.max
89
- line_size = IO.console.winsize[1] - 35 - thread_id_size
129
+ begin
130
+ line_size = IO.console.winsize[1] - 35 - thread_id_size
131
+ rescue
132
+ line_size = 150
133
+ end
90
134
  line_size -= 16 if tester.try(:sim?)
91
135
  cycles_per_tick = (@cycle_count_stop / (line_size * 1.0)).ceil
92
136
  if tester.try(:sim?)
@@ -81,8 +81,27 @@ module Origen
81
81
  str
82
82
  end
83
83
 
84
+ # Wait for the given threads to complete. If no IDs given it will wait for all currently running
85
+ # threads (except for the one who called this) to complete.
86
+ def wait_for_threads_to_complete(*ids)
87
+ @current_sequence.wait_for_threads_to_complete(*ids)
88
+ end
89
+ alias_method :wait_for_thread, :wait_for_threads_to_complete
90
+ alias_method :wait_for_threads, :wait_for_threads_to_complete
91
+ alias_method :wait_for_thread_to_complete, :wait_for_threads_to_complete
92
+
93
+ def sync_up(*ids)
94
+ if @current_sequence
95
+ @current_sequence.send(:sync_up, caller[0], *ids)
96
+ end
97
+ end
98
+
84
99
  private
85
100
 
101
+ def current_sequence=(seq)
102
+ @current_sequence = seq
103
+ end
104
+
86
105
  def active=(val)
87
106
  @active = val
88
107
  end
@@ -14,7 +14,7 @@ module Origen
14
14
  # A record of when the thread is active to construct the execution profile
15
15
  attr_reader :events
16
16
 
17
- def initialize(id, sequence, block, primary = false)
17
+ def initialize(id, sequence, block, primary = false, pre_block = nil)
18
18
  if primary
19
19
  @cycle_count_start = 0
20
20
  else
@@ -24,6 +24,7 @@ module Origen
24
24
  @id = id.to_sym
25
25
  @sequence = sequence
26
26
  @block = block
27
+ @pre_block = pre_block
27
28
  @primary = primary
28
29
  @running = Concurrent::Event.new
29
30
  @waiting = Concurrent::Event.new
@@ -46,6 +47,7 @@ module Origen
46
47
  @thread = Thread.new do
47
48
  PatSeq.send(:thread=, self)
48
49
  wait
50
+ @pre_block.call if @pre_block
49
51
  @block.call(sequence)
50
52
  sequence.send(:thread_completed, self)
51
53
  record_cycle_count_stop
@@ -274,6 +274,7 @@ module Origen
274
274
  else
275
275
  msg = format_msg(method.to_s.upcase, msg)
276
276
  end
277
+ console.info msg if options[:verbose]
277
278
  @custom_logs[method.to_sym].info(msg)
278
279
  end
279
280
 
@@ -364,8 +365,10 @@ module Origen
364
365
  end
365
366
  end
366
367
 
367
- def relog(msg)
368
- if msg =~ /^\[(\w+)\] .*/
368
+ def relog(msg, options = {})
369
+ if options[:log_file]
370
+ send options[:log_file], msg.sub(/.*\|\|\s*/, ''), options
371
+ elsif msg =~ /^\[(\w+)\] .*/
369
372
  method = Regexp.last_match(1).downcase
370
373
  if respond_to?(method)
371
374
  send method, msg.sub(/.*\|\|\s*/, '')
@@ -27,6 +27,7 @@ module Origen
27
27
  # @param [Hash] options Options to customize the run instance
28
28
  # @option options [Array] :target String Array of target names on which to run regression
29
29
  # @option options [Boolean] :build_reference (true) Build reference workspace automatically
30
+ # @option options [Symbol] :build_method (:init) whether to use a git init or git clone method to build the workspace
30
31
  # @option options [Boolean] :send_email (false) Send results email when regression complete
31
32
  # @option options [Boolean] :email_all_developers (false) If sending email, whether to email all developers or just user
32
33
  # @option options [Boolean] :report_results (false) Whether to report results inline to console
@@ -35,6 +36,7 @@ module Origen
35
36
  def run(options = {})
36
37
  options = {
37
38
  build_reference: true,
39
+ build_method: :init,
38
40
  send_email: false,
39
41
  email_all_developers: false,
40
42
  report_results: false,
@@ -46,7 +48,7 @@ module Origen
46
48
  Origen.lsf.clear_all
47
49
  yield options
48
50
  wait_for_completion(options) if options[:uses_lsf]
49
- save_and_delete_output
51
+ save_and_delete_output(options)
50
52
  else
51
53
  if options[:build_reference]
52
54
  @reference_tag = version_to_tag(options[:version] || get_version(options))
@@ -58,7 +60,8 @@ module Origen
58
60
  disable_origen_version_check do
59
61
  Dir.chdir reference_origen_root do
60
62
  Bundler.with_clean_env do
61
- system 'rm -rf lbin'
63
+ # Origen 0.40.0 started using origen-owned binstubs
64
+ system 'rm -rf lbin' if Gem::Version.new(Origen.version) < Gem::Version.new('0.40.0')
62
65
  # If regression is run using a service account, we need to setup the path/bundler manually
63
66
  # The regression manager needs to be passed a --service_account option when initiated.
64
67
  if options[:service_account]
@@ -125,7 +128,7 @@ module Origen
125
128
  end
126
129
 
127
130
  def summarize_results(options = {})
128
- Origen.lsf.build_log
131
+ Origen.lsf.build_log(options)
129
132
  stats = Origen.app.stats
130
133
  if options[:report_results]
131
134
  puts "Regression results: \n"
@@ -144,12 +147,16 @@ module Origen
144
147
 
145
148
  # Saves all generated output (to the reference dir) and then
146
149
  # deletes the output directory to save space
147
- def save_and_delete_output
148
- Origen.lsf.build_log
150
+ def save_and_delete_output(options = {})
151
+ Origen.lsf.build_log(options)
149
152
  Origen.log.flush
150
153
  Dir.chdir reference_origen_root do
151
154
  Bundler.with_clean_env do
152
- system 'bundle exec origen save all'
155
+ if options[:log_file]
156
+ system "bundle exec origen save all -f log/#{options[:log_file]}.txt"
157
+ else
158
+ system 'bundle exec origen save all'
159
+ end
153
160
  end
154
161
  end
155
162
  FileUtils.rm_rf "#{reference_origen_root}/output"
@@ -214,7 +221,7 @@ module Origen
214
221
  # Build the new reference workspace now.
215
222
  unless File.exist?(@reference_workspace)
216
223
  highlight { Origen.log.info 'Building reference workspace...' }
217
- ws.build(@reference_workspace)
224
+ ws.build(@reference_workspace, options)
218
225
  end
219
226
  ws.set_reference_workspace(@reference_workspace)
220
227
  else
@@ -229,7 +236,7 @@ module Origen
229
236
  end
230
237
  unless File.exist?(@reference_workspace)
231
238
  highlight { Origen.log.info 'Building reference workspace...' }
232
- ws.build(@reference_workspace)
239
+ ws.build(@reference_workspace, options)
233
240
  end
234
241
  ws.set_reference_workspace(@reference_workspace)
235
242
  end
@@ -345,6 +345,7 @@ module Origen
345
345
  end
346
346
 
347
347
  def initialize_local_dir(options = {})
348
+ return if options[:build_method] == :clone
348
349
  super
349
350
  unless initialized?(options)
350
351
  Origen.log.debug "Initializing Git workspace at #{local}"
@@ -232,6 +232,22 @@ module Origen
232
232
  end
233
233
  alias_method :children, :sub_blocks
234
234
 
235
+ # Returns a hash containing all sub block groups thus far added
236
+ # if no arguments given.
237
+ # If given a code block, will serve as alias to sub_block_group method.
238
+ # Does not handle arguments, no need at this time.
239
+ def sub_block_groups(*args, &block)
240
+ if block_given?
241
+ sub_block_group(*args, &block)
242
+ else
243
+ if args.empty?
244
+ @sub_block_groups ||= {}.with_indifferent_access
245
+ else
246
+ fail 'sub_block_groups not meant to take arguments!'
247
+ end
248
+ end
249
+ end
250
+
235
251
  # Delete all sub_blocks by emptying the Hash
236
252
  def delete_sub_blocks
237
253
  @sub_blocks = {}
@@ -309,7 +325,7 @@ module Origen
309
325
  Origen.log.warning "The sub_block defined at #{Pathname.new(callers[0]).relative_path_from(Pathname.pwd)}:#{callers[1]} is overriding an existing method called #{name}"
310
326
  end
311
327
  define_singleton_method name do
312
- get_sub_block(name)
328
+ sub_blocks[name]
313
329
  end
314
330
  if sub_blocks[name] && sub_blocks[name].is_a?(Placeholder)
315
331
  sub_blocks[name].add_attributes(options)
@@ -362,21 +378,24 @@ module Origen
362
378
  callers = Origen.split_caller_line caller[0]
363
379
  Origen.log.warning "The sub_block_group defined at #{Pathname.new(callers[0]).relative_path_from(Pathname.pwd)}:#{callers[1]} is overriding an existing method called #{id}"
364
380
  end
381
+ # Define a singleton method which will be called every time the sub_block_group is referenced
382
+ # This is not called here but later when referenced
365
383
  define_singleton_method "#{id}" do
366
- if options[:class_name]
367
- b = Object.const_get(options[:class_name]).new
368
- else
369
- b = []
370
- end
371
- my_group.each do |group_id|
372
- b << send(group_id)
373
- end
374
- b # return array inside new singleton method
384
+ sub_block_groups[id]
385
+ end
386
+ # Instantiate group
387
+ if options[:class_name]
388
+ b = Object.const_get(options[:class_name]).new
389
+ else
390
+ b = [] # Will use Array if no class defined
375
391
  end
392
+ # Add sub_blocks to group
393
+ my_group.each do |group_id|
394
+ b << send(group_id)
395
+ end
396
+ sub_block_groups[id] = b
376
397
  @current_group = nil # close group
377
398
  end
378
- alias_method :sub_block_groups, :sub_block_group
379
- alias_method :sub_blocks_groups, :sub_block_group
380
399
  alias_method :sub_blocks_group, :sub_block_group
381
400
 
382
401
  def namespace
@@ -385,10 +404,6 @@ module Origen
385
404
 
386
405
  private
387
406
 
388
- def get_sub_block(name)
389
- sub_blocks[name]
390
- end
391
-
392
407
  def instantiate_sub_block(name, klass, options)
393
408
  return sub_blocks[name] unless sub_blocks[name].is_a?(Placeholder)
394
409
  sub_blocks[name] = klass.new(options.merge(parent: self, name: name))
@@ -38,7 +38,11 @@ END_OF_MESSAGE
38
38
 
39
39
  begin
40
40
  Origen.log.debug('Origen::Utility::Mailer Setup:')
41
- options.each { |k, v| Origen.log.debug(" #{k}: #{v}") }
41
+ # Must not save a user's password to the Origen log file! So build a shadow copy of the
42
+ # options hash and display that content in the log file with the auth_password removed.
43
+ options_reduced = options
44
+ options_reduced.delete(:auth_password)
45
+ options_reduced.each { |k, v| Origen.log.debug(" #{k}: #{v}") }
42
46
 
43
47
  # Net::SMTP.start(options[:server], options[:port]) do |smtp|
44
48
  # smtp.send_message msg, options[:from], addr
@@ -8,16 +8,16 @@ Gem::Specification.new do |s|
8
8
  s.required_rubygems_version = Gem::Requirement.new(">= 1.8.11".freeze) if s.respond_to? :required_rubygems_version=
9
9
  s.require_paths = ["lib".freeze]
10
10
  s.authors = ["Stephen McGinty".freeze]
11
- s.date = "2020-01-29"
11
+ s.date = "2020-05-26"
12
12
  s.email = ["stephen.f.mcginty@gmail.com".freeze]
13
13
  s.files = ["bin/boot.rb".freeze, "config/application.rb".freeze, "config/boot.rb".freeze, "config/commands.rb".freeze, "config/shared_commands.rb".freeze, "config/version.rb".freeze, "lib/origen_app_generators.rb".freeze, "lib/origen_app_generators/application.rb".freeze, "lib/origen_app_generators/base.rb".freeze, "lib/origen_app_generators/empty_application.rb".freeze, "lib/origen_app_generators/empty_plugin.rb".freeze, "lib/origen_app_generators/new.rb".freeze, "lib/origen_app_generators/new_app_tests.rb".freeze, "lib/origen_app_generators/origen_infrastructure/app_generator_plugin.rb".freeze, "lib/origen_app_generators/plugin.rb".freeze, "lib/origen_app_generators/test_engineering/common.rb".freeze, "lib/origen_app_generators/test_engineering/stand_alone_application.rb".freeze, "lib/origen_app_generators/test_engineering/test_block.rb".freeze, "templates/app_generators".freeze, "templates/app_generators/application".freeze, "templates/app_generators/application/.gitignore".freeze, "templates/app_generators/application/.irbrc".freeze, "templates/app_generators/application/.rspec".freeze, "templates/app_generators/application/.travis.yml".freeze, "templates/app_generators/application/Gemfile".freeze, "templates/app_generators/application/Rakefile".freeze, "templates/app_generators/application/app".freeze, "templates/app_generators/application/app/blocks".freeze, "templates/app_generators/application/app/blocks/top_level.rb".freeze, "templates/app_generators/application/app/lib".freeze, "templates/app_generators/application/app/lib/module.rb".freeze, "templates/app_generators/application/app/templates".freeze, "templates/app_generators/application/app/templates/web".freeze, "templates/app_generators/application/app/templates/web/index.md.erb".freeze, "templates/app_generators/application/app/templates/web/layouts".freeze, "templates/app_generators/application/app/templates/web/layouts/_basic.html.erb".freeze, "templates/app_generators/application/app/templates/web/partials".freeze, "templates/app_generators/application/app/templates/web/partials/_navbar.html.erb".freeze, "templates/app_generators/application/app/templates/web/release_notes.md.erb".freeze, "templates/app_generators/application/config".freeze, "templates/app_generators/application/config/application.rb".freeze, "templates/app_generators/application/config/boot.rb".freeze, "templates/app_generators/application/config/commands.rb".freeze, "templates/app_generators/application/config/maillist_dev.txt".freeze, "templates/app_generators/application/config/maillist_prod.txt".freeze, "templates/app_generators/application/config/version.rb".freeze, "templates/app_generators/application/doc".freeze, "templates/app_generators/application/doc/history".freeze, "templates/app_generators/application/dot_keep".freeze, "templates/app_generators/application/origen_core_session".freeze, "templates/app_generators/application/spec".freeze, "templates/app_generators/application/spec/spec_helper.rb".freeze, "templates/app_generators/application/target".freeze, "templates/app_generators/application/target/debug.rb".freeze, "templates/app_generators/application/target/default.rb".freeze, "templates/app_generators/application/target/production.rb".freeze, "templates/app_generators/new".freeze, "templates/app_generators/new/generator.rb".freeze, "templates/app_generators/new/info.md.erb".freeze, "templates/app_generators/origen_infrastructure".freeze, "templates/app_generators/origen_infrastructure/app_generator_plugin".freeze, "templates/app_generators/origen_infrastructure/app_generator_plugin/app".freeze, "templates/app_generators/origen_infrastructure/app_generator_plugin/app/lib".freeze, "templates/app_generators/origen_infrastructure/app_generator_plugin/app/lib/application.rb".freeze, "templates/app_generators/origen_infrastructure/app_generator_plugin/app/lib/base.rb".freeze, "templates/app_generators/origen_infrastructure/app_generator_plugin/app/lib/module.rb".freeze, "templates/app_generators/origen_infrastructure/app_generator_plugin/app/lib/plugin.rb".freeze, "templates/app_generators/origen_infrastructure/app_generator_plugin/config".freeze, "templates/app_generators/origen_infrastructure/app_generator_plugin/config/load_generators.rb".freeze, "templates/app_generators/plugin".freeze, "templates/app_generators/plugin/Gemfile".freeze, "templates/app_generators/plugin/Rakefile".freeze, "templates/app_generators/plugin/app".freeze, "templates/app_generators/plugin/app/templates".freeze, "templates/app_generators/plugin/app/templates/web".freeze, "templates/app_generators/plugin/app/templates/web/index.md.erb".freeze, "templates/app_generators/plugin/app/templates/web/partials".freeze, "templates/app_generators/plugin/app/templates/web/partials/_navbar_external.html.erb".freeze, "templates/app_generators/plugin/app/templates/web/partials/_navbar_internal.html.erb".freeze, "templates/app_generators/plugin/config".freeze, "templates/app_generators/plugin/config/boot.rb".freeze, "templates/app_generators/plugin/gemspec.rb".freeze, "templates/app_generators/test_engineering".freeze, "templates/app_generators/test_engineering/environment".freeze, "templates/app_generators/test_engineering/environment/j750.rb".freeze, "templates/app_generators/test_engineering/environment/uflex.rb".freeze, "templates/app_generators/test_engineering/environment/v93k.rb".freeze, "templates/app_generators/test_engineering/stand_alone_application".freeze, "templates/app_generators/test_engineering/stand_alone_application/.keep".freeze, "templates/app_generators/test_engineering/test_block".freeze, "templates/app_generators/test_engineering/test_block/.keep".freeze]
14
14
  s.homepage = "http://origen-sdk.org/origen_app_generators".freeze
15
15
  s.licenses = ["MIT".freeze]
16
16
  s.required_ruby_version = Gem::Requirement.new(">= 1.9.3".freeze)
17
- s.rubygems_version = "2.6.12".freeze
17
+ s.rubygems_version = "3.0.3".freeze
18
18
  s.summary = "Origen application generators".freeze
19
19
 
20
- s.installed_by_version = "2.6.12" if s.respond_to? :installed_by_version
20
+ s.installed_by_version = "3.0.3" if s.respond_to? :installed_by_version
21
21
 
22
22
  if s.respond_to? :specification_version then
23
23
  s.specification_version = 4
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: origen
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.55.2
4
+ version: 0.57.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stephen McGinty
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-01-29 00:00:00.000000000 Z
11
+ date: 2020-05-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -749,8 +749,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
749
749
  - !ruby/object:Gem::Version
750
750
  version: 1.8.11
751
751
  requirements: []
752
- rubyforge_project:
753
- rubygems_version: 2.6.12
752
+ rubygems_version: 3.0.3
754
753
  signing_key:
755
754
  specification_version: 4
756
755
  summary: The Semiconductor Developer's Kit