module SyncSpecFiles
Public Class Methods
get_ignored_specs(content)
click to toggle source
# File lib/spec_tiller/sync_spec_file_list.rb, line 45 def self.get_ignored_specs(content) ignore_specs = [] content['env']['global'].each do |row| if row.is_a?(String) # Input: IGNORE_SPECS="spec/a.rb spec/b.rb" # Output: ['spec/a.rb spec/b.rb'] matches = row.match(/IGNORE_SPECS="\s*([^"]+)"/) ignore_specs << matches[1].split(' ') unless matches.nil? end end ignore_specs.flatten end
rewrite_travis_content(content, current_file_list, &block)
click to toggle source
# File lib/spec_tiller/sync_spec_file_list.rb, line 6 def rewrite_travis_content(content, current_file_list, &block) num_buckets = content['num_builds'] ignore_specs = get_ignored_specs(content) current_file_list = current_file_list.reject { |file_path| ignore_specs.include?(file_path) } env_matrix = BuildMatrixParser.parse_env_matrix(content) original = extract_spec_files(env_matrix) after_removed = delete_removed_files(original, current_file_list) after_added = add_new_files(original, after_removed, current_file_list, num_buckets) env_matrix.each do |var_hash| if var_hash.has_key?('TEST_SUITE') test_bucket = after_added.shift var_hash['TEST_SUITE'] = "#{test_bucket.join(' ')}" end end content['env']['matrix'] = BuildMatrixParser.format_matrix(env_matrix) block.call(content, original, current_file_list) if block end
sync()
click to toggle source
# File lib/spec_tiller/sync_spec_file_list.rb, line 31 def self.sync content = YAML::load(File.open('.travis.yml')) current_file_list = Dir.glob('spec/**/*_spec.rb').map { |file_path| file_path.slice(/(spec\/\S+$)/) } puts "\nSyncing list of spec files..." SyncSpecFiles.rewrite_travis_content(content, current_file_list) do |content, original, current_file_list| File.open('.travis.yml', 'w') { |file| file.write(content.to_yaml(:line_width => -1)) } puts SyncSpecFiles.file_diff(original, current_file_list) end `git add .travis.yml` end
Private Class Methods
add_new_files(original, buckets, current_file_list, num_buckets)
click to toggle source
# File lib/spec_tiller/sync_spec_file_list.rb, line 75 def self.add_new_files(original, buckets, current_file_list, num_buckets) buckets_clone = buckets.map(&:dup) test_suite_worker_count = buckets_clone.length # This check is to determine if the stated bucket count is > available workers num_buckets = test_suite_worker_count < num_buckets ? test_suite_worker_count : num_buckets added_files(original, current_file_list).each do |spec_file| bucket_index = rand(num_buckets) buckets_clone[bucket_index] << spec_file end buckets_clone end
added_files(original, current_file_list)
click to toggle source
# File lib/spec_tiller/sync_spec_file_list.rb, line 94 def self.added_files(original, current_file_list) current_file_list - original.flatten end
delete_removed_files(original, current_file_list)
click to toggle source
# File lib/spec_tiller/sync_spec_file_list.rb, line 67 def self.delete_removed_files(original, current_file_list) deleted_files = deleted_files(original, current_file_list) original.map do |bucket| bucket.reject { |spec_file| deleted_files.include?(spec_file) } end end
deleted_files(original, current_file_list)
click to toggle source
# File lib/spec_tiller/sync_spec_file_list.rb, line 90 def self.deleted_files(original, current_file_list) original.flatten - current_file_list end
extract_spec_files(env_matrix)
click to toggle source
# File lib/spec_tiller/sync_spec_file_list.rb, line 60 def self.extract_spec_files(env_matrix) test_suites = env_matrix.map do |var_hash| var_hash.has_key?('TEST_SUITE') ? var_hash['TEST_SUITE'].gsub('"', '').split(' ') : nil end test_suites.compact end
file_diff(original, current_file_list)
click to toggle source
# File lib/spec_tiller/sync_spec_file_list.rb, line 98 def self.file_diff(original, current_file_list) removed_files = deleted_files(original, current_file_list).sort removed = removed_files.empty? ? 'No spec files removed' : removed_files added_files = added_files(original, current_file_list).sort added = added_files.empty? ? 'No spec files added' : added_files " Removed: #{removed}\n Added: #{added}\n\n" end
Private Instance Methods
rewrite_travis_content(content, current_file_list, &block)
click to toggle source
# File lib/spec_tiller/sync_spec_file_list.rb, line 6 def rewrite_travis_content(content, current_file_list, &block) num_buckets = content['num_builds'] ignore_specs = get_ignored_specs(content) current_file_list = current_file_list.reject { |file_path| ignore_specs.include?(file_path) } env_matrix = BuildMatrixParser.parse_env_matrix(content) original = extract_spec_files(env_matrix) after_removed = delete_removed_files(original, current_file_list) after_added = add_new_files(original, after_removed, current_file_list, num_buckets) env_matrix.each do |var_hash| if var_hash.has_key?('TEST_SUITE') test_bucket = after_added.shift var_hash['TEST_SUITE'] = "#{test_bucket.join(' ')}" end end content['env']['matrix'] = BuildMatrixParser.format_matrix(env_matrix) block.call(content, original, current_file_list) if block end