origen 0.55.2 → 0.57.0

Sign up to get free protection for your applications and to get access to all the features.
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