origen 0.60.7 → 0.60.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/config/rubocop/easy.yml +4875 -308
- data/config/rubocop/strict.yml +4875 -308
- data/config/version.rb +1 -1
- data/lib/origen/application/configuration.rb +6 -3
- data/lib/origen/application/deployer.rb +4 -4
- data/lib/origen/application/environment.rb +4 -2
- data/lib/origen/application/lsf.rb +23 -4
- data/lib/origen/application/lsf_manager.rb +48 -52
- data/lib/origen/application/plugins.rb +7 -7
- data/lib/origen/application/release.rb +5 -3
- data/lib/origen/application/runner.rb +5 -6
- data/lib/origen/application/statistics.rb +1 -0
- data/lib/origen/application/target.rb +9 -6
- data/lib/origen/application/version_tracker.rb +4 -5
- data/lib/origen/application/workspace_manager.rb +5 -2
- data/lib/origen/application.rb +9 -9
- data/lib/origen/boot/api.rb +3 -0
- data/lib/origen/boot/app.rb +28 -30
- data/lib/origen/boot.rb +1 -0
- data/lib/origen/bugs.rb +2 -2
- data/lib/origen/chip_mode.rb +7 -4
- data/lib/origen/chip_package.rb +50 -53
- data/lib/origen/chips/chip.rb +8 -4
- data/lib/origen/chips.rb +16 -12
- data/lib/origen/client.rb +1 -0
- data/lib/origen/clocks/clock.rb +8 -7
- data/lib/origen/clocks/clocks_collection.rb +2 -1
- data/lib/origen/code_generators/actions.rb +1 -1
- data/lib/origen/code_generators/base.rb +1 -1
- data/lib/origen/code_generators.rb +3 -0
- data/lib/origen/commands/archive.rb +1 -1
- data/lib/origen/commands/compile.rb +2 -2
- data/lib/origen/commands/fetch.rb +1 -1
- data/lib/origen/commands/generate.rb +3 -3
- data/lib/origen/commands/interactive.rb +6 -7
- data/lib/origen/commands/lint.rb +1 -1
- data/lib/origen/commands/lsf.rb +2 -2
- data/lib/origen/commands/new.rb +1 -1
- data/lib/origen/commands/plugin.rb +2 -2
- data/lib/origen/commands/program.rb +3 -3
- data/lib/origen/commands/rc.rb +4 -4
- data/lib/origen/commands/save.rb +1 -1
- data/lib/origen/commands/time.rb +4 -6
- data/lib/origen/commands/web.rb +5 -2
- data/lib/origen/commands.rb +1 -1
- data/lib/origen/componentable.rb +1 -0
- data/lib/origen/controller.rb +11 -13
- data/lib/origen/core_ext/array.rb +2 -1
- data/lib/origen/core_ext/enumerable.rb +4 -2
- data/lib/origen/core_ext/hash.rb +5 -6
- data/lib/origen/core_ext/integer.rb +2 -4
- data/lib/origen/core_ext/object.rb +2 -2
- data/lib/origen/core_ext/option_parser/optparse.rb +1 -1
- data/lib/origen/core_ext/string.rb +8 -8
- data/lib/origen/database/key_value_store.rb +12 -14
- data/lib/origen/database/key_value_stores.rb +1 -0
- data/lib/origen/errata/hw_erratum.rb +1 -1
- data/lib/origen/errata.rb +7 -8
- data/lib/origen/features/feature.rb +1 -0
- data/lib/origen/features.rb +4 -6
- data/lib/origen/file_handler.rb +8 -7
- data/lib/origen/fuses/fuse_field.rb +2 -2
- data/lib/origen/generator/compiler.rb +2 -4
- data/lib/origen/generator/job.rb +3 -2
- data/lib/origen/generator/pattern.rb +3 -3
- data/lib/origen/generator/pattern_finder.rb +6 -5
- data/lib/origen/generator/pattern_sequence.rb +3 -0
- data/lib/origen/generator/renderer.rb +3 -4
- data/lib/origen/generator/resources.rb +1 -1
- data/lib/origen/generator/stage.rb +3 -0
- data/lib/origen/limits/limit.rb +14 -11
- data/lib/origen/limits/limit_set.rb +2 -1
- data/lib/origen/loader.rb +4 -2
- data/lib/origen/log.rb +3 -2
- data/lib/origen/memory.rb +1 -0
- data/lib/origen/model.rb +10 -4
- data/lib/origen/models.rb +2 -2
- data/lib/origen/netlist/list.rb +1 -0
- data/lib/origen/netlist.rb +5 -7
- data/lib/origen/org_file/interceptor.rb +1 -1
- data/lib/origen/org_file.rb +4 -1
- data/lib/origen/parameters/set.rb +1 -0
- data/lib/origen/parameters.rb +3 -1
- data/lib/origen/pins/pin.rb +18 -12
- data/lib/origen/pins/pin_bank.rb +3 -0
- data/lib/origen/pins/pin_clock.rb +3 -2
- data/lib/origen/pins/pin_collection.rb +3 -0
- data/lib/origen/pins/timing/wave.rb +5 -0
- data/lib/origen/pins.rb +7 -1
- data/lib/origen/ports.rb +1 -1
- data/lib/origen/power_domains/power_domain.rb +5 -2
- data/lib/origen/power_domains/power_domains_collection.rb +2 -1
- data/lib/origen/registers/bit.rb +21 -17
- data/lib/origen/registers/bit_collection.rb +15 -6
- data/lib/origen/registers/reg.rb +34 -28
- data/lib/origen/registers.rb +25 -24
- data/lib/origen/remote_manager.rb +3 -2
- data/lib/origen/revision_control/base.rb +1 -4
- data/lib/origen/revision_control/design_sync.rb +10 -10
- data/lib/origen/revision_control/git.rb +4 -2
- data/lib/origen/site_config/config.rb +3 -1
- data/lib/origen/site_config.rb +3 -0
- data/lib/origen/specs/checkers.rb +12 -8
- data/lib/origen/specs/doc_resource.rb +3 -4
- data/lib/origen/specs/spec.rb +5 -1
- data/lib/origen/specs/version_history.rb +1 -1
- data/lib/origen/specs.rb +52 -37
- data/lib/origen/sub_blocks.rb +20 -14
- data/lib/origen/top_level.rb +2 -1
- data/lib/origen/users/user.rb +4 -5
- data/lib/origen/utility/csv_data.rb +6 -4
- data/lib/origen/utility/diff.rb +9 -9
- data/lib/origen/utility/file_diff.rb +4 -0
- data/lib/origen/utility/input_capture.rb +6 -6
- data/lib/origen/utility/mailer.rb +8 -11
- data/lib/origen/utility/time_and_date.rb +1 -2
- data/lib/origen/utility.rb +2 -2
- data/lib/origen/value.rb +2 -1
- data/lib/origen/version_string.rb +33 -41
- data/lib/origen.rb +62 -64
- data/origen_app_generators/origen_app_generators.gemspec +1 -1
- metadata +9 -27
- data/config/rubocop/easy_disabled.yml +0 -275
- data/config/rubocop/easy_enabled.yml +0 -727
- data/config/rubocop/strict_disabled.yml +0 -251
- data/config/rubocop/strict_enabled.yml +0 -751
data/config/version.rb
CHANGED
@@ -10,9 +10,9 @@ module Origen
|
|
10
10
|
:history_file, :release_directory, :release_email_subject,
|
11
11
|
:production_targets,
|
12
12
|
:vault, :output_directory, :reference_directory,
|
13
|
-
:semantically_version, :log_directory,
|
13
|
+
:semantically_version, :log_directory,
|
14
14
|
:pattern_directory, :pattern_output_directory, :pattern_prefix, :pattern_postfix,
|
15
|
-
:pattern_header, :default_lsf_action, :release_instructions,
|
15
|
+
:pattern_header, :default_lsf_action, :release_instructions,
|
16
16
|
:test_program_output_directory, :erb_trim_mode, :test_program_source_directory,
|
17
17
|
:test_program_template_directory, :referenced_pattern_list, :program_prefix,
|
18
18
|
:copy_command, :diff_command, :compile_only_dot_erb_files, :web_directory,
|
@@ -22,6 +22,8 @@ module Origen
|
|
22
22
|
:user_aliases, :release_externally, :gem_name, :disqus_shortname,
|
23
23
|
:default_plugin, :rc_tag_prepend_v
|
24
24
|
|
25
|
+
attr_writer :pattern_name_translator, :proceed_with_pattern
|
26
|
+
|
25
27
|
# Mark any attributes that are likely to depend on properties of the target here,
|
26
28
|
# this will raise an error if they are ever accessed before the target has been
|
27
29
|
# instantiated (a concern for Origen core developers only).
|
@@ -54,7 +56,7 @@ module Origen
|
|
54
56
|
]
|
55
57
|
|
56
58
|
ATTRS_THAT_ARE_SET_TO_A_BLOCK = [
|
57
|
-
:current_plugin_pattern_header, :application_pattern_header, :shared_pattern_header
|
59
|
+
:current_plugin_pattern_header, :application_pattern_header, :shared_pattern_header # :pattern_footer
|
58
60
|
]
|
59
61
|
|
60
62
|
def log_deprecations
|
@@ -134,6 +136,7 @@ module Origen
|
|
134
136
|
depend_on_target: true
|
135
137
|
}.merge(options)
|
136
138
|
attr_writer name
|
139
|
+
|
137
140
|
define_method name do |override = true, &block|
|
138
141
|
if block # _given?
|
139
142
|
instance_variable_set("@#{name}".to_sym, block)
|
@@ -134,7 +134,7 @@ module Origen
|
|
134
134
|
# Delete everything so that we don't preserve old files
|
135
135
|
git_repo.delete_all(git_sub_dir)
|
136
136
|
FileUtils.mkdir_p(dir) unless File.exist?(dir)
|
137
|
-
`chmod a+w -R #{Origen.root}/web/output`
|
137
|
+
`chmod a+w -R #{Origen.root}/web/output` # Ensure world writable, required?
|
138
138
|
FileUtils.cp_r "#{Origen.root}/web/output/.", dir
|
139
139
|
git_repo.checkin git_sub_dir, unmanaged: true, comment: @commit_message
|
140
140
|
else
|
@@ -144,9 +144,9 @@ module Origen
|
|
144
144
|
require_remote_directories
|
145
145
|
end
|
146
146
|
# Copy the new contents across
|
147
|
-
`chmod g+w -R #{Origen.root}/web/output`
|
147
|
+
`chmod g+w -R #{Origen.root}/web/output` # Ensure group writable
|
148
148
|
FileUtils.cp_r "#{Origen.root}/web/output/.", offline_remote_directory
|
149
|
-
`chmod g+w -R #{offline_remote_directory}`
|
149
|
+
`chmod g+w -R #{offline_remote_directory}` # Double ensure group writable
|
150
150
|
# Make live
|
151
151
|
create_symlink offline_remote_directory, latest_symlink
|
152
152
|
index = "#{Origen.config.web_directory}/index.html"
|
@@ -162,7 +162,7 @@ module Origen
|
|
162
162
|
remote_dir = deploy_to_git? ? "#{git_repo.local}/#{git_sub_dir}" : live_remote_directory
|
163
163
|
if remote_dir
|
164
164
|
file = Origen.file_handler.clean_path_to(file)
|
165
|
-
sub_dir = Origen.file_handler.sub_dir_of(file, "#{Origen.root}/templates/web")
|
165
|
+
sub_dir = Origen.file_handler.sub_dir_of(file, "#{Origen.root}/templates/web").to_s
|
166
166
|
page = file.basename.to_s.sub(/\..*/, '')
|
167
167
|
# Special case for the main index page
|
168
168
|
if page == 'index' && sub_dir == '.'
|
@@ -14,7 +14,7 @@ module Origen
|
|
14
14
|
# An instance of this class is automatically
|
15
15
|
# instantiated and available globally as Origen.environment.
|
16
16
|
class Environment
|
17
|
-
DIR = "#{Origen.root}/environment"
|
17
|
+
DIR = "#{Origen.root}/environment" # :nodoc:
|
18
18
|
SAVE_FILE = "#{DIR}/.default" # :nodoc:
|
19
19
|
DEFAULT_FILE = "#{DIR}/default.rb" # :nodoc:
|
20
20
|
|
@@ -89,7 +89,7 @@ module Origen
|
|
89
89
|
|
90
90
|
# Prints out the current environment details to the command line
|
91
91
|
def describe
|
92
|
-
f =
|
92
|
+
f = file!
|
93
93
|
puts "Current environment: #{f.basename}"
|
94
94
|
puts '*' * 70
|
95
95
|
File.open(f).each do |line|
|
@@ -133,6 +133,7 @@ module Origen
|
|
133
133
|
# otherwise returns nil
|
134
134
|
def default_file
|
135
135
|
return @default_file if @default_file
|
136
|
+
|
136
137
|
if File.exist?(SAVE_FILE)
|
137
138
|
File.open(SAVE_FILE) do |f|
|
138
139
|
@default_file = Marshal.load(f)
|
@@ -146,6 +147,7 @@ module Origen
|
|
146
147
|
# Returns the environment file (a Pathname object) if it has been defined, otherwise nil
|
147
148
|
def file # :nodoc:
|
148
149
|
return @file if @file
|
150
|
+
|
149
151
|
if default_file && File.exist?(default_file)
|
150
152
|
@file = default_file
|
151
153
|
end
|
@@ -34,6 +34,14 @@ module Origen
|
|
34
34
|
# - wam WAM cron processing
|
35
35
|
# - grid Low-priority batch jobs (random sim, regressions, etc). Access to all spare CPU cycles.
|
36
36
|
attr_accessor :cores
|
37
|
+
# default 400. Set number of max jobs (- 100) to be able to run by this user before lsf submission pauses.
|
38
|
+
# eg if max jobs you want ran is 500, set to 400, which will block until local submissions
|
39
|
+
# is less than 400 at which point it can batch submit up to 100 more jobs
|
40
|
+
attr_accessor :max_jobs
|
41
|
+
# default false. used when calculating remote job count for comparison with the max jobs parameter
|
42
|
+
# If set to true, then only jobs of the specified queue will be counted, effectively making
|
43
|
+
# the max_jobs value a max_jobs per queue
|
44
|
+
attr_accessor :queue_count_only
|
37
45
|
|
38
46
|
def initialize
|
39
47
|
@group = Origen.site_config.lsf_group
|
@@ -42,6 +50,8 @@ module Origen
|
|
42
50
|
@queue = Origen.site_config.lsf_queue
|
43
51
|
@debug = Origen.site_config.lsf_debug
|
44
52
|
@cores = Origen.site_config.lsf_cores
|
53
|
+
@max_jobs = Origen.site_config.lsf_max_jobs || 400
|
54
|
+
@queue_count_only = Origen.site_config.lsf_queue_count_only || false
|
45
55
|
end
|
46
56
|
end
|
47
57
|
|
@@ -80,7 +90,7 @@ module Origen
|
|
80
90
|
def submit(command, options = {})
|
81
91
|
options = {
|
82
92
|
dependents: [],
|
83
|
-
rerunnable: true
|
93
|
+
rerunnable: true # Will rerun automatically if the execution host fails
|
84
94
|
}.merge(options)
|
85
95
|
limit_job_submissions do
|
86
96
|
group = options[:group] || config.group
|
@@ -103,7 +113,7 @@ module Origen
|
|
103
113
|
cmd = "bsub -oo /dev/null #{dependents} #{rerunnable} #{group} #{project} #{resource} #{queue} #{cores} '#{command}'"
|
104
114
|
if config.debug
|
105
115
|
puts cmd
|
106
|
-
'496212'
|
116
|
+
'496212' # Return a dummy ID to keep the caller happy
|
107
117
|
else
|
108
118
|
output = `#{cmd}`
|
109
119
|
Origen.log.info output.strip
|
@@ -140,7 +150,16 @@ module Origen
|
|
140
150
|
i = 0
|
141
151
|
`bjobs 2>&1`.split("\n").each do |line|
|
142
152
|
if line =~ /^(\d+).*(RUN|PEND)/
|
143
|
-
|
153
|
+
if @queue_count_only && @queue
|
154
|
+
# only count jobs for current queue, helpful for when
|
155
|
+
# you have a service account user that runs lsf for a
|
156
|
+
# lot of jobs in addition to origen jobs
|
157
|
+
if line =~ /#{@queue}/
|
158
|
+
i += 1
|
159
|
+
end
|
160
|
+
else
|
161
|
+
i += 1
|
162
|
+
end
|
144
163
|
end
|
145
164
|
end
|
146
165
|
i
|
@@ -152,7 +171,7 @@ module Origen
|
|
152
171
|
def limit_job_submissions
|
153
172
|
@local_job_count ||= 0
|
154
173
|
if @local_job_count == 100
|
155
|
-
while remote_jobs_count >
|
174
|
+
while remote_jobs_count > @max_jobs
|
156
175
|
puts 'Waiting for submitted jobs count to fall below limit...'
|
157
176
|
sleep 5
|
158
177
|
end
|
@@ -209,7 +209,7 @@ module Origen
|
|
209
209
|
if options[:type] == :all
|
210
210
|
File.delete(remote_jobs_file) if File.exist?(remote_jobs_file)
|
211
211
|
@remote_jobs = {}
|
212
|
-
|
212
|
+
nil
|
213
213
|
else
|
214
214
|
send("#{options[:type]}_jobs").each do |job|
|
215
215
|
remote_jobs.delete(job[:id])
|
@@ -278,54 +278,53 @@ module Origen
|
|
278
278
|
# New files: 0
|
279
279
|
# Changed files: 0
|
280
280
|
# FAILED files: 1
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
281
|
+
|
282
|
+
line.gsub!(/\e\[\d+m/, '') # Remove any coloring
|
283
|
+
if line =~ /Total patterns:\s+(\d+)/
|
284
|
+
@completed_patterns = Regexp.last_match[1].to_i
|
285
|
+
elsif line =~ /Total vectors:\s+(\d+)/
|
286
|
+
@total_vectors = Regexp.last_match[1].to_i
|
287
|
+
elsif line =~ /Total duration:\s+(\d+\.\d+)/
|
288
|
+
@total_duration = Regexp.last_match[1].to_f
|
289
|
+
elsif line =~ /Total files:\s+(\d+)/
|
290
|
+
@completed_files = Regexp.last_match[1].to_i
|
291
|
+
elsif line =~ /Changed patterns:\s+(\d+)/
|
292
|
+
@changed_patterns = Regexp.last_match[1].to_i
|
293
|
+
elsif line =~ /Changed files:\s+(\d+)/
|
294
|
+
@changed_files = Regexp.last_match[1].to_i
|
295
|
+
elsif line =~ /New patterns:\s+(\d+)/
|
296
|
+
@new_patterns = Regexp.last_match[1].to_i
|
297
|
+
elsif line =~ /New files:\s+(\d+)/
|
298
|
+
@new_files = Regexp.last_match[1].to_i
|
299
|
+
elsif line =~ /FAILED patterns:\s+(\d+)/
|
300
|
+
@failed_patterns = Regexp.last_match[1].to_i
|
301
|
+
elsif line =~ /FAILED files:\s+(\d+)/
|
302
|
+
@failed_files = Regexp.last_match[1].to_i
|
303
|
+
elsif line =~ /ERROR!/
|
304
|
+
stats.errors += 1
|
305
|
+
Origen.log.send :relog, line, options
|
306
|
+
else
|
307
|
+
# Compress multiple blank lines
|
308
|
+
if line =~ /^\s*$/ || line =~ /.*\|\|\s*$/
|
309
|
+
unless last_line_blank
|
310
|
+
Origen.log.send(log_method, nil)
|
311
|
+
last_line_blank = true
|
312
|
+
end
|
306
313
|
else
|
307
|
-
#
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
# Screen std origen output
|
315
|
-
unless line =~ / origen save/ ||
|
316
|
-
line =~ /Insecure world writable dir/ ||
|
317
|
-
line =~ /To save all of/
|
318
|
-
line.strip!
|
319
|
-
Origen.log.send :relog, line, options
|
320
|
-
last_line_blank = false
|
321
|
-
end
|
314
|
+
# Screen std origen output
|
315
|
+
unless line =~ / origen save/ ||
|
316
|
+
line =~ /Insecure world writable dir/ ||
|
317
|
+
line =~ /To save all of/
|
318
|
+
line.strip!
|
319
|
+
Origen.log.send :relog, line, options
|
320
|
+
last_line_blank = false
|
322
321
|
end
|
323
322
|
end
|
324
|
-
rescue
|
325
|
-
# Sometimes illegal UTF-8 characters can get into crash dumps, if this
|
326
|
-
# happens just print the line out rather than die
|
327
|
-
Origen.log.error line
|
328
323
|
end
|
324
|
+
rescue
|
325
|
+
# Sometimes illegal UTF-8 characters can get into crash dumps, if this
|
326
|
+
# happens just print the line out rather than die
|
327
|
+
Origen.log.error line
|
329
328
|
end
|
330
329
|
end
|
331
330
|
stats.completed_patterns += @completed_patterns
|
@@ -628,11 +627,9 @@ module Origen
|
|
628
627
|
def restore_remote_jobs
|
629
628
|
if File.exist?(remote_jobs_file)
|
630
629
|
File.open(remote_jobs_file) do |f|
|
631
|
-
|
632
|
-
|
633
|
-
|
634
|
-
nil
|
635
|
-
end
|
630
|
+
Marshal.load(f)
|
631
|
+
rescue
|
632
|
+
nil
|
636
633
|
end
|
637
634
|
end
|
638
635
|
end
|
@@ -655,8 +652,7 @@ module Origen
|
|
655
652
|
poll_duration_in_seconds: 1,
|
656
653
|
# Don't wait long by the time this runs the LSF
|
657
654
|
# should have guaranteed the job has run
|
658
|
-
timeout_in_seconds: 120
|
659
|
-
)
|
655
|
+
timeout_in_seconds: 120)
|
660
656
|
unless options[:dependents].all? { |id| job_passed?(id) }
|
661
657
|
File.open(log_file(options[:id]), 'w') do |f|
|
662
658
|
f.puts "*** ERROR! *** #{options[:cmd].join(' ')} ***"
|
@@ -38,13 +38,13 @@ module Origen
|
|
38
38
|
def current
|
39
39
|
return nil if @temporary == :none
|
40
40
|
return nil if @disabled
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
41
|
+
|
42
|
+
name = @temporary || @current ||= if Origen.app.session.origen_core[:default_plugin]
|
43
|
+
Origen.app.session.origen_core[:default_plugin]
|
44
|
+
elsif Origen.app.config.default_plugin && !Origen.app.session.origen_core[:default_plugin_cleared_by_user]
|
45
|
+
Origen.app.config.default_plugin
|
46
|
+
end
|
47
|
+
|
48
48
|
find { |p| p.name.to_sym == name } if name
|
49
49
|
end
|
50
50
|
|
@@ -32,6 +32,7 @@ module Origen
|
|
32
32
|
if authorized?
|
33
33
|
Origen.app.plugins.validate_production_status(true)
|
34
34
|
fail 'No revision control configured for this application, cannot release a new version' if Origen.app.rc.nil?
|
35
|
+
|
35
36
|
unless Origen.app.rc.local_modifications.empty?
|
36
37
|
puts <<-EOT
|
37
38
|
Your workspace has local modifications that are preventing the requested action
|
@@ -50,15 +51,16 @@ Your workspace has local modifications that are preventing the requested action
|
|
50
51
|
Origen.app.listeners_for(:validate_release).each(&:validate_release)
|
51
52
|
lint_test
|
52
53
|
get_latest_version_files
|
53
|
-
base_version = Origen.app.version(refresh: true)
|
54
|
+
base_version = Origen.app.version(refresh: true) # Read in the latest version
|
54
55
|
get_release_note unless note
|
55
|
-
new_version = get_or_confirm_version(type)
|
56
|
+
new_version = get_or_confirm_version(type) # Don't mask this like the above!
|
56
57
|
write_version(new_version)
|
57
58
|
# Refresh the version in the current thread
|
58
59
|
Origen.app.version(refresh: true)
|
59
60
|
if Origen.app.version != new_version
|
60
61
|
fail "Sorry something has gone wrong trying to update the version counter to #{new_version}!"
|
61
62
|
end
|
63
|
+
|
62
64
|
Origen.app.version_tracker.add_version(Origen.app.version) if Origen.app.version.production?
|
63
65
|
write_history
|
64
66
|
Origen.app.listeners_for(:before_release_tag).each do |listener|
|
@@ -103,7 +105,7 @@ Your workspace has local modifications that are preventing the requested action
|
|
103
105
|
end
|
104
106
|
|
105
107
|
def release_gem
|
106
|
-
if File.exist?(File.join
|
108
|
+
if File.exist?(File.join(Origen.root, "#{Origen.app.gem_name}.gemspec"))
|
107
109
|
Origen.app.listeners_for(:before_release_gem).each(&:before_release_gem)
|
108
110
|
unless system 'rake gem:release'
|
109
111
|
puts '***************************************'.red
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'fileutils'
|
2
2
|
module Origen
|
3
3
|
class Application
|
4
|
-
autoload :Statistics,
|
4
|
+
autoload :Statistics, 'origen/application/statistics'
|
5
5
|
|
6
6
|
# The Runner is responsible for co-ordinating all compile and generate
|
7
7
|
# requests from the command line
|
@@ -140,15 +140,13 @@ module Origen
|
|
140
140
|
# Only record user invocations at this time, also bypass windows since it seems
|
141
141
|
# that threads can't be trusted not to block
|
142
142
|
unless Origen.running_remotely? # || Origen.running_on_windows?
|
143
|
-
# rubocop:disable Style/RescueModifier
|
144
143
|
record_invocation = Thread.new do
|
145
144
|
Origen.client.record_invocation(options[:action]) if options[:action]
|
146
|
-
|
145
|
+
rescue
|
147
146
|
# Dont allow server being down to flood the screen with the stacktrace
|
148
147
|
end
|
149
|
-
# rubocop:enable Style/RescueModifier
|
150
148
|
end
|
151
|
-
|
149
|
+
rescue
|
152
150
|
# Don't allow this to kill an origen command
|
153
151
|
end
|
154
152
|
end
|
@@ -164,7 +162,7 @@ module Origen
|
|
164
162
|
record_invocation.value
|
165
163
|
end
|
166
164
|
end
|
167
|
-
|
165
|
+
rescue
|
168
166
|
# Don't allow this to kill an origen command
|
169
167
|
end
|
170
168
|
end
|
@@ -174,6 +172,7 @@ module Origen
|
|
174
172
|
# things like :compile => true, the extract_action method handles the old code
|
175
173
|
def extract_action(options)
|
176
174
|
return options[:action] if options[:action]
|
175
|
+
|
177
176
|
if options[:compile]
|
178
177
|
:compile
|
179
178
|
elsif options[:program]
|
@@ -12,7 +12,7 @@ module Origen
|
|
12
12
|
# An instance of this class is automatically instantiated and available globally
|
13
13
|
# as Origen.app.target
|
14
14
|
class Target
|
15
|
-
DIR = "#{Origen.root}/target"
|
15
|
+
DIR = "#{Origen.root}/target" # :nodoc:
|
16
16
|
SAVE_FILE = "#{DIR}/.default" # :nodoc:
|
17
17
|
DEFAULT_FILE = "#{DIR}/default.rb" # :nodoc:
|
18
18
|
|
@@ -34,7 +34,7 @@ module Origen
|
|
34
34
|
def loop(options = {})
|
35
35
|
options = {
|
36
36
|
set_target: true,
|
37
|
-
force_debug: false
|
37
|
+
force_debug: false # Set true to force debug mode for all targets
|
38
38
|
}.merge(options)
|
39
39
|
targets = [options.delete(:target), options.delete(:targets)].flatten.compact.uniq
|
40
40
|
targets = [file!.basename.to_s] if targets.empty?
|
@@ -57,7 +57,7 @@ module Origen
|
|
57
57
|
# end
|
58
58
|
def each_production(options = {})
|
59
59
|
options = {
|
60
|
-
force_debug: false
|
60
|
+
force_debug: false # Set true to force debug mode for all targets
|
61
61
|
}.merge(options)
|
62
62
|
prod_targets.each do |moo, targets|
|
63
63
|
[targets].flatten.each do |target|
|
@@ -79,7 +79,7 @@ module Origen
|
|
79
79
|
# end
|
80
80
|
def each_unique_production(options = {})
|
81
81
|
options = {
|
82
|
-
force_debug: false
|
82
|
+
force_debug: false # Set true to force debug mode for all targets
|
83
83
|
}.merge(options)
|
84
84
|
targets = {}
|
85
85
|
prod_targets.each do |moo, moos_targets|
|
@@ -118,7 +118,7 @@ module Origen
|
|
118
118
|
# defined there.
|
119
119
|
def load!(options = {})
|
120
120
|
options = {
|
121
|
-
force_debug: false
|
121
|
+
force_debug: false # Set true to force debug mode for all targets
|
122
122
|
}.merge(options)
|
123
123
|
Origen.app.load_target!(options)
|
124
124
|
end
|
@@ -235,7 +235,7 @@ module Origen
|
|
235
235
|
|
236
236
|
# Prints out the current target details to the command line
|
237
237
|
def describe
|
238
|
-
f =
|
238
|
+
f = file!
|
239
239
|
puts "Current target: #{f.basename}"
|
240
240
|
puts '*' * 70
|
241
241
|
File.open(f).each do |line|
|
@@ -279,6 +279,7 @@ module Origen
|
|
279
279
|
# otherwise returns nil
|
280
280
|
def default_file
|
281
281
|
return @default_file if @default_file
|
282
|
+
|
282
283
|
if File.exist?(SAVE_FILE)
|
283
284
|
File.open(SAVE_FILE) do |f|
|
284
285
|
@default_file = Marshal.load(f)
|
@@ -292,6 +293,7 @@ module Origen
|
|
292
293
|
# Returns the target file (a Pathname object) if it has been defined, otherwise nil
|
293
294
|
def file # :nodoc:
|
294
295
|
return @file if @file
|
296
|
+
|
295
297
|
if default_file && File.exist?(default_file)
|
296
298
|
@file = default_file
|
297
299
|
end
|
@@ -374,6 +376,7 @@ module Origen
|
|
374
376
|
def prod_targets # :nodoc:
|
375
377
|
return {} unless Origen.config.production_targets
|
376
378
|
return @prod_targets if @prod_targets
|
379
|
+
|
377
380
|
@prod_targets = {}
|
378
381
|
Origen.config.production_targets.each do |key, value|
|
379
382
|
@prod_targets[key.upcase] = value
|
@@ -21,13 +21,12 @@ module Origen
|
|
21
21
|
# Returns the persisted storage container (a Hash)
|
22
22
|
def storage
|
23
23
|
return @storage if @storage
|
24
|
+
|
24
25
|
if File.exist?(STORAGE_FILE)
|
25
26
|
File.open(STORAGE_FILE) do |f|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
@storage = {}
|
30
|
-
end
|
27
|
+
@storage = Marshal.load(f)
|
28
|
+
rescue
|
29
|
+
@storage = {}
|
31
30
|
end
|
32
31
|
else
|
33
32
|
@storage = {}
|
@@ -50,6 +50,7 @@ module Origen
|
|
50
50
|
# all imported application workspaces
|
51
51
|
def imports_directory
|
52
52
|
return @imports_directory if @imports_directory
|
53
|
+
|
53
54
|
old = "#{container_directory}/#{revision_control_root.basename}_imports_DO_NOT_HAND_MODIFY"
|
54
55
|
@imports_directory = "#{container_directory}/.#{revision_control_root.basename}_imports_DO_NOT_HAND_MODIFY"
|
55
56
|
FileUtils.rm_rf(old) if File.exist?(old)
|
@@ -60,6 +61,7 @@ module Origen
|
|
60
61
|
# all remotes workspaces
|
61
62
|
def remotes_directory
|
62
63
|
return @remotes_directory if @remotes_directory
|
64
|
+
|
63
65
|
old = "#{container_directory}/#{revision_control_root.basename}_remotes_DO_NOT_HAND_MODIFY"
|
64
66
|
@remotes_directory = "#{container_directory}/.#{revision_control_root.basename}_remotes_DO_NOT_HAND_MODIFY"
|
65
67
|
FileUtils.rm_rf(old) if File.exist?(old)
|
@@ -86,7 +88,7 @@ module Origen
|
|
86
88
|
remote_ref = "#{origen_root(workspace)}/.ref"
|
87
89
|
unless File.exist?(remote_ref)
|
88
90
|
FileUtils.mkdir_p(remote_ref)
|
89
|
-
`touch #{remote_ref}/dont_delete`
|
91
|
+
`touch #{remote_ref}/dont_delete` # Make sure the pop does not blow this away
|
90
92
|
end
|
91
93
|
if Origen.running_on_windows?
|
92
94
|
system("call mklink /h #{reference_dir} #{remote_ref}")
|
@@ -113,6 +115,7 @@ module Origen
|
|
113
115
|
if File.exist?(path.to_s) && !options[:allow_rebuild]
|
114
116
|
fail "Sorry but #{path} already exists!"
|
115
117
|
end
|
118
|
+
|
116
119
|
FileUtils.rm_rf(path.to_s) if File.exist?(path.to_s)
|
117
120
|
rc = RevisionControl.new options.merge(remote: options[:rc_url], local: path.to_s)
|
118
121
|
rc.build
|
@@ -121,7 +124,7 @@ module Origen
|
|
121
124
|
# Switches the given workspace path to the given version tag
|
122
125
|
def switch_version(workspace, tag, options = {})
|
123
126
|
options = {
|
124
|
-
origen_root_only: false
|
127
|
+
origen_root_only: false # When true pop the Origen.root dir only instead
|
125
128
|
# of the whole application workspace - these may or may
|
126
129
|
# not be the same thing depending on the application.
|
127
130
|
}.merge(options)
|
data/lib/origen/application.rb
CHANGED
@@ -23,8 +23,8 @@ module Origen
|
|
23
23
|
require 'origen/users'
|
24
24
|
include Origen::Users
|
25
25
|
|
26
|
-
|
27
|
-
|
26
|
+
attr_writer :name # attr_accessor leads to a duplicate method
|
27
|
+
attr_writer :namespace # attr_accessor leads to a duplicate method
|
28
28
|
|
29
29
|
class << self
|
30
30
|
def inherited(base)
|
@@ -84,6 +84,7 @@ module Origen
|
|
84
84
|
@apps_by_namespace ||= {}
|
85
85
|
@apps_by_namespace[namespace] ||= begin
|
86
86
|
return Origen.app if Origen.app.namespace == namespace
|
87
|
+
|
87
88
|
Origen.app.plugins.each do |plugin|
|
88
89
|
return plugin if plugin.namespace == namespace
|
89
90
|
end
|
@@ -105,7 +106,7 @@ module Origen
|
|
105
106
|
include Rake::DSL
|
106
107
|
|
107
108
|
def load_tasks
|
108
|
-
$VERBOSE = nil
|
109
|
+
$VERBOSE = nil # Don't care about world writable dir warnings and the like
|
109
110
|
require 'colored'
|
110
111
|
|
111
112
|
# Load all Origen tasks first
|
@@ -463,12 +464,14 @@ END
|
|
463
464
|
if max && listeners.size > max
|
464
465
|
fail "You can only define a #{callback} callback #{max > 1 ? (max.to_s + 'times') : 'once'}, however you have declared it #{listeners.size} times for instances of: #{listeners.map(&:class)}"
|
465
466
|
end
|
467
|
+
|
466
468
|
listeners
|
467
469
|
end
|
468
470
|
|
469
471
|
def version(options = {})
|
470
472
|
@version = nil if options[:refresh]
|
471
473
|
return @version if @version
|
474
|
+
|
472
475
|
if Origen.running_globally?
|
473
476
|
@version = Origen.version
|
474
477
|
else
|
@@ -567,6 +570,7 @@ END
|
|
567
570
|
if capture && line =~ /^#+ by (.*) on (.*(AM|PM))/
|
568
571
|
user = Origen.fsl.find_by_name(Regexp.last_match(1))
|
569
572
|
return user if user
|
573
|
+
|
570
574
|
return Regexp.last_match(1)
|
571
575
|
end
|
572
576
|
else
|
@@ -871,7 +875,7 @@ END
|
|
871
875
|
# declares here, the objects registered with origen should be refreshed accordingly
|
872
876
|
clear_dynamic_resources
|
873
877
|
load_event(:transient) do
|
874
|
-
Origen.mode = Origen.app.session.origen_core[:mode] || :production
|
878
|
+
Origen.mode = Origen.app.session.origen_core[:mode] || :production # Important since a production target may rely on the default
|
875
879
|
begin
|
876
880
|
$_target_options = @target_load_options
|
877
881
|
Origen.target.set_signature(@target_load_options)
|
@@ -1028,14 +1032,10 @@ END
|
|
1028
1032
|
# When debug is enabled, exception_class will be raised, defaulting to <code>RuntimeError</code>.
|
1029
1033
|
def fail!(message: nil, exception_class: RuntimeError, exit_status: 1)
|
1030
1034
|
if Origen.debug?
|
1031
|
-
# rubocop:disable Style/RedundantSelf
|
1032
1035
|
self.fail(message: message, exception_class: exception_class)
|
1033
|
-
# rubocop:enable Style/RedundantSelf
|
1034
1036
|
else
|
1035
1037
|
begin
|
1036
|
-
# rubocop:disable Style/RedundantSelf
|
1037
1038
|
self.fail(message: message, exception_class: exception_class)
|
1038
|
-
# rubocop:enable Style/RedundantSelf
|
1039
1039
|
rescue exception_class => e
|
1040
1040
|
Origen.log.error(e.message)
|
1041
1041
|
exit exit_status
|
@@ -1051,7 +1051,7 @@ END
|
|
1051
1051
|
# require "my_backend" # in lib/my_backend
|
1052
1052
|
# config.i18n.backend = MyBackend
|
1053
1053
|
# end
|
1054
|
-
def add_lib_to_load_path!
|
1054
|
+
def add_lib_to_load_path! # :nodoc:
|
1055
1055
|
[root.join('lib'), root.join('vendor', 'lib'), root.join('app', 'lib')].each do |path|
|
1056
1056
|
$LOAD_PATH.unshift(path.to_s) if File.exist?(path) && !$LOAD_PATH.include?(path.to_s)
|
1057
1057
|
end
|
data/lib/origen/boot/api.rb
CHANGED
@@ -8,6 +8,9 @@ module Origen
|
|
8
8
|
|
9
9
|
# Platform independent means of retrieving the hostname
|
10
10
|
def self.hostname
|
11
|
+
# gethostbyname is deprecated in favor of Addrinfo#getaddrinfo
|
12
|
+
# rubocop:disable Lint/DeprecatedClassMethods
|
11
13
|
Socket.gethostbyname(Socket.gethostname).first.downcase
|
14
|
+
# rubocop:enable Lint/DeprecatedClassMethods
|
12
15
|
end
|
13
16
|
end
|