29 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Ruby
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			29 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Ruby
		
	
	
		
			Executable File
		
	
	
| #!/usr/bin/env ruby
 | |
| # frozen_string_literal: true
 | |
| 
 | |
| require_relative '../config/bundler_setup'
 | |
| require 'rubocop'
 | |
| 
 | |
| MINIMUM_MAX_FILES_IN_CACHE_MARGIN = 1.05
 | |
| RECOMMENDED_MAX_FILES_IN_CACHE_MARGIN = 1.25
 | |
| RUBOCOP_LIST_TARGET_FILES_COMMAND = 'bundle exec rubocop --list-target-files | wc -l'
 | |
| 
 | |
| RuboCopMaxFilesInCacheIsTooSmall = Class.new(StandardError)
 | |
| 
 | |
| rubocop_target_files_count = `#{RUBOCOP_LIST_TARGET_FILES_COMMAND}`.strip.to_i
 | |
| 
 | |
| raise Error, "#{RUBOCOP_LIST_TARGET_FILES_COMMAND} failed with status #{$?}!" if rubocop_target_files_count == 0
 | |
| 
 | |
| rubocop_target_files_count = rubocop_target_files_count.to_i
 | |
| rubocop_current_max_files_in_cache = RuboCop::ConfigLoader.load_yaml_configuration(File.expand_path('../.rubocop.yml', __dir__)).dig('AllCops', 'MaxFilesInCache').to_i
 | |
| minimum_max_files_in_cache = (rubocop_target_files_count * MINIMUM_MAX_FILES_IN_CACHE_MARGIN).round(-3)
 | |
| 
 | |
| # We want AllCops.MaxFilesInCache to be at least 5% above the actual files count at any time to give us enough time to increase it accordingly
 | |
| if rubocop_current_max_files_in_cache <= minimum_max_files_in_cache
 | |
|   recommended_max_files_in_cache = (rubocop_target_files_count * RECOMMENDED_MAX_FILES_IN_CACHE_MARGIN).round(-3)
 | |
|   raise RuboCopMaxFilesInCacheIsTooSmall, "Current count of RuboCop target file is #{rubocop_target_files_count} but AllCops.MaxFilesInCache is set to #{rubocop_current_max_files_in_cache}. We recommend to increase it to #{recommended_max_files_in_cache}."
 | |
| else
 | |
|   puts "Current count of RuboCop target file is #{rubocop_target_files_count} and AllCops.MaxFilesInCache is set to #{rubocop_current_max_files_in_cache}. All good."
 | |
|   exit(0)
 | |
| end
 |