Merge pull request #2679 from MikeMcQuaid/parallel-rubocop
Use parallel RuboCop
This commit is contained in:
		
						commit
						744e7dd190
					
				@ -2,9 +2,9 @@ language: ruby
 | 
			
		||||
cache:
 | 
			
		||||
  directories:
 | 
			
		||||
    - $HOME/.gem/ruby
 | 
			
		||||
    - $HOME/Library/Caches/Homebrew/style
 | 
			
		||||
    - $HOME/Library/Caches/Homebrew/tests
 | 
			
		||||
    - Library/Homebrew/vendor/bundle
 | 
			
		||||
    # For parallel_rspec
 | 
			
		||||
    - Library/Homebrew/tmp
 | 
			
		||||
 | 
			
		||||
matrix:
 | 
			
		||||
  include:
 | 
			
		||||
 | 
			
		||||
@ -23,23 +23,67 @@ FormulaAuditStrict/ComponentsRedundancy:
 | 
			
		||||
FormulaAudit/Homepage:
 | 
			
		||||
  Enabled: true
 | 
			
		||||
 | 
			
		||||
Metrics/AbcSize:
 | 
			
		||||
# `system` is a special case and aligns on second argument
 | 
			
		||||
Layout/AlignParameters:
 | 
			
		||||
  Enabled: false
 | 
			
		||||
 | 
			
		||||
Layout/CaseIndentation:
 | 
			
		||||
  EnforcedStyle: end
 | 
			
		||||
 | 
			
		||||
Layout/EmptyLineBetweenDefs:
 | 
			
		||||
  AllowAdjacentOneLineDefs: true
 | 
			
		||||
 | 
			
		||||
Layout/IndentArray:
 | 
			
		||||
  EnforcedStyle: special_inside_parentheses
 | 
			
		||||
 | 
			
		||||
Layout/IndentHeredoc:
 | 
			
		||||
  EnforcedStyle: unindent
 | 
			
		||||
 | 
			
		||||
# conflicts with DSL-style path concatenation with `/`
 | 
			
		||||
Layout/SpaceAroundOperators:
 | 
			
		||||
  Enabled: false
 | 
			
		||||
 | 
			
		||||
# favor parens-less DSL-style arguments
 | 
			
		||||
Lint/AmbiguousOperator:
 | 
			
		||||
  Enabled: false
 | 
			
		||||
 | 
			
		||||
# so many of these in formulae and can't be autocorrected
 | 
			
		||||
Lint/AmbiguousRegexpLiteral:
 | 
			
		||||
  Enabled: false
 | 
			
		||||
 | 
			
		||||
# favor parens-less DSL-style arguments
 | 
			
		||||
Lint/AmbiguousBlockAssociation:
 | 
			
		||||
  Enabled: false
 | 
			
		||||
 | 
			
		||||
# assignment in conditions are useful sometimes
 | 
			
		||||
Lint/AssignmentInCondition:
 | 
			
		||||
  Enabled: false
 | 
			
		||||
 | 
			
		||||
Lint/EndAlignment:
 | 
			
		||||
  EnforcedStyleAlignWith: variable
 | 
			
		||||
 | 
			
		||||
# so many of these in formulae and can't be autocorrected
 | 
			
		||||
Lint/ParenthesesAsGroupedExpression:
 | 
			
		||||
  Enabled: false
 | 
			
		||||
 | 
			
		||||
# TODO: try to bring down all metrics maximums
 | 
			
		||||
Metrics/AbcSize:
 | 
			
		||||
  Max: 250
 | 
			
		||||
 | 
			
		||||
Metrics/BlockLength:
 | 
			
		||||
  Enabled: false
 | 
			
		||||
  Max: 1250
 | 
			
		||||
 | 
			
		||||
Metrics/ClassLength:
 | 
			
		||||
  Enabled: false
 | 
			
		||||
  Max: 1500
 | 
			
		||||
 | 
			
		||||
Metrics/CyclomaticComplexity:
 | 
			
		||||
  Enabled: false
 | 
			
		||||
  Max: 75
 | 
			
		||||
 | 
			
		||||
Metrics/LineLength:
 | 
			
		||||
  Enabled: false
 | 
			
		||||
  Max: 400
 | 
			
		||||
 | 
			
		||||
Metrics/MethodLength:
 | 
			
		||||
  Enabled: false
 | 
			
		||||
  Max: 250
 | 
			
		||||
 | 
			
		||||
Metrics/ModuleLength:
 | 
			
		||||
  CountComments: false
 | 
			
		||||
@ -47,36 +91,19 @@ Metrics/ModuleLength:
 | 
			
		||||
    - '**/bin/**/*'
 | 
			
		||||
    - '**/cmd/**/*'
 | 
			
		||||
    - '**/lib/**/*'
 | 
			
		||||
    - '**/spec/**/*'
 | 
			
		||||
 | 
			
		||||
Metrics/PerceivedComplexity:
 | 
			
		||||
  Enabled: false
 | 
			
		||||
  Max: 80
 | 
			
		||||
 | 
			
		||||
# favor parens-less DSL-style arguments
 | 
			
		||||
Lint/AmbiguousOperator:
 | 
			
		||||
  Enabled: false
 | 
			
		||||
 | 
			
		||||
Lint/AmbiguousRegexpLiteral:
 | 
			
		||||
  Enabled: false
 | 
			
		||||
 | 
			
		||||
Lint/AssignmentInCondition:
 | 
			
		||||
  Enabled: false
 | 
			
		||||
 | 
			
		||||
Lint/EndAlignment:
 | 
			
		||||
  EnforcedStyleAlignWith: variable
 | 
			
		||||
 | 
			
		||||
Lint/ParenthesesAsGroupedExpression:
 | 
			
		||||
# makes code less readable for minor performance increases
 | 
			
		||||
Performance/Caller:
 | 
			
		||||
  Enabled: false
 | 
			
		||||
 | 
			
		||||
Style/Alias:
 | 
			
		||||
  EnforcedStyle: prefer_alias
 | 
			
		||||
 | 
			
		||||
Style/AlignHash:
 | 
			
		||||
  Enabled: false
 | 
			
		||||
 | 
			
		||||
# `system` is a special case and aligns on second argument
 | 
			
		||||
Style/AlignParameters:
 | 
			
		||||
  Enabled: false
 | 
			
		||||
Style/AutoResourceCleanup:
 | 
			
		||||
  Enabled: true
 | 
			
		||||
 | 
			
		||||
Style/BarePercentLiterals:
 | 
			
		||||
  EnforcedStyle: percent_q
 | 
			
		||||
@ -84,9 +111,6 @@ Style/BarePercentLiterals:
 | 
			
		||||
Style/BlockDelimiters:
 | 
			
		||||
  EnforcedStyle: line_count_based
 | 
			
		||||
 | 
			
		||||
Style/CaseIndentation:
 | 
			
		||||
  EnforcedStyle: end
 | 
			
		||||
 | 
			
		||||
Style/ClassAndModuleChildren:
 | 
			
		||||
  EnforcedStyle: nested
 | 
			
		||||
 | 
			
		||||
@ -99,16 +123,22 @@ Style/CommandLiteral:
 | 
			
		||||
Style/ConditionalAssignment:
 | 
			
		||||
  Enabled: false
 | 
			
		||||
 | 
			
		||||
# most of our APIs are internal so don't require docs
 | 
			
		||||
Style/Documentation:
 | 
			
		||||
 Enabled: false
 | 
			
		||||
 | 
			
		||||
Style/EmptyLineBetweenDefs:
 | 
			
		||||
  AllowAdjacentOneLineDefs: true
 | 
			
		||||
Style/Encoding:
 | 
			
		||||
  Enabled: true
 | 
			
		||||
 | 
			
		||||
# dashes in filenames are typical
 | 
			
		||||
Style/FileName:
 | 
			
		||||
  Regex: !ruby/regexp /^[\w\@\-\+\.]+(\.rb)?$/
 | 
			
		||||
 | 
			
		||||
# falsely flags e.g. curl formatting arguments as format strings
 | 
			
		||||
Style/FormatStringToken:
 | 
			
		||||
  Enabled: false
 | 
			
		||||
 | 
			
		||||
# so many of these in formulae and can't be autocorrected
 | 
			
		||||
Style/GuardClause:
 | 
			
		||||
  Enabled: false
 | 
			
		||||
 | 
			
		||||
@ -121,13 +151,6 @@ Style/HashSyntax:
 | 
			
		||||
    - '**/lib/**/*'
 | 
			
		||||
    - '**/spec/**/*'
 | 
			
		||||
 | 
			
		||||
# disabled until it respects line length
 | 
			
		||||
Style/IfUnlessModifier:
 | 
			
		||||
  Enabled: false
 | 
			
		||||
 | 
			
		||||
Style/IndentArray:
 | 
			
		||||
  EnforcedStyle: special_inside_parentheses
 | 
			
		||||
 | 
			
		||||
# only for numbers >= 1_000_000
 | 
			
		||||
Style/NumericLiterals:
 | 
			
		||||
  MinDigits: 7
 | 
			
		||||
@ -160,13 +183,6 @@ Style/RaiseArgs:
 | 
			
		||||
Style/RegexpLiteral:
 | 
			
		||||
  EnforcedStyle: slashes
 | 
			
		||||
 | 
			
		||||
# conflicts with DSL-style path concatenation with `/`
 | 
			
		||||
Style/SpaceAroundOperators:
 | 
			
		||||
  Enabled: false
 | 
			
		||||
 | 
			
		||||
Style/SingleLineBlockParams:
 | 
			
		||||
  Enabled: false
 | 
			
		||||
 | 
			
		||||
# not a problem for typical shell users
 | 
			
		||||
Style/SpecialGlobalVars:
 | 
			
		||||
  Enabled: false
 | 
			
		||||
@ -179,17 +195,22 @@ Style/StringLiterals:
 | 
			
		||||
Style/StringLiteralsInInterpolation:
 | 
			
		||||
  EnforcedStyle: double_quotes
 | 
			
		||||
 | 
			
		||||
Style/SymbolArray:
 | 
			
		||||
  EnforcedStyle: brackets
 | 
			
		||||
 | 
			
		||||
Style/TernaryParentheses:
 | 
			
		||||
  Enabled: false
 | 
			
		||||
  EnforcedStyle: require_parentheses_when_complex
 | 
			
		||||
 | 
			
		||||
# makes diffs nicer
 | 
			
		||||
Style/TrailingCommaInLiteral:
 | 
			
		||||
  EnforcedStyleForMultiline: comma
 | 
			
		||||
 | 
			
		||||
Style/TrailingCommaInArguments:
 | 
			
		||||
  EnforcedStyleForMultiline: comma
 | 
			
		||||
 | 
			
		||||
# we have too many variables like sha256 where this harms readability
 | 
			
		||||
Style/VariableNumber:
 | 
			
		||||
  Enabled: false
 | 
			
		||||
 | 
			
		||||
Style/WordArray:
 | 
			
		||||
  Enabled: false
 | 
			
		||||
  MinSize: 4
 | 
			
		||||
 | 
			
		||||
@ -9,9 +9,8 @@ AllCops:
 | 
			
		||||
    - '**/Casks/**/*'
 | 
			
		||||
    - '**/vendor/**/*'
 | 
			
		||||
 | 
			
		||||
Style/BlockDelimiters:
 | 
			
		||||
Layout/MultilineMethodCallIndentation:
 | 
			
		||||
  Exclude:
 | 
			
		||||
    - '**/cask/spec/**/*'
 | 
			
		||||
    - '**/*_spec.rb'
 | 
			
		||||
 | 
			
		||||
# so many of these in formulae but none in here
 | 
			
		||||
@ -27,16 +26,13 @@ Lint/NestedMethodDefinition:
 | 
			
		||||
Lint/ParenthesesAsGroupedExpression:
 | 
			
		||||
  Enabled: true
 | 
			
		||||
 | 
			
		||||
Metrics/ModuleLength:
 | 
			
		||||
  CountComments: false
 | 
			
		||||
  Exclude:
 | 
			
		||||
    - 'cask/lib/hbc/locations.rb'
 | 
			
		||||
    - 'cask/lib/hbc/macos.rb'
 | 
			
		||||
    - 'cask/lib/hbc/utils.rb'
 | 
			
		||||
 | 
			
		||||
Metrics/ParameterLists:
 | 
			
		||||
  CountKeywordArgs: false
 | 
			
		||||
 | 
			
		||||
Style/BlockDelimiters:
 | 
			
		||||
  Exclude:
 | 
			
		||||
    - '**/*_spec.rb'
 | 
			
		||||
 | 
			
		||||
# so many of these in formulae but none in here
 | 
			
		||||
Style/GuardClause:
 | 
			
		||||
  Enabled: true
 | 
			
		||||
 | 
			
		||||
@ -116,7 +116,6 @@ begin
 | 
			
		||||
      odie "Unknown command: #{cmd}"
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
rescue UsageError => e
 | 
			
		||||
  require "cmd/help"
 | 
			
		||||
  Homebrew.help cmd, usage_error: e.message
 | 
			
		||||
 | 
			
		||||
@ -10,7 +10,7 @@ module Hbc
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      def self.artifact_english_article
 | 
			
		||||
        @artifact_english_article ||= artifact_english_name =~ /^[aeiou]/i ? "an" : "a"
 | 
			
		||||
        @artifact_english_article ||= (artifact_english_name =~ /^[aeiou]/i) ? "an" : "a"
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      def self.artifact_dsl_key
 | 
			
		||||
@ -43,7 +43,7 @@ module Hbc
 | 
			
		||||
        unless unknown_keys.empty?
 | 
			
		||||
          opoo %Q{Unknown arguments to #{description} -- #{unknown_keys.inspect} (ignored). Running "brew update; brew cleanup; brew cask cleanup" will likely fix it.}
 | 
			
		||||
        end
 | 
			
		||||
        arguments.reject! { |k| !permitted_keys.include?(k) }
 | 
			
		||||
        arguments.select! { |k| permitted_keys.include?(k) }
 | 
			
		||||
 | 
			
		||||
        # key warnings
 | 
			
		||||
        override_keys = override_arguments.keys
 | 
			
		||||
 | 
			
		||||
@ -197,9 +197,7 @@ module Hbc
 | 
			
		||||
        paths.each do |path|
 | 
			
		||||
          resolved_path = Pathname.new(path)
 | 
			
		||||
 | 
			
		||||
          if path.start_with?("~")
 | 
			
		||||
            resolved_path = resolved_path.expand_path
 | 
			
		||||
          end
 | 
			
		||||
          resolved_path = resolved_path.expand_path if path.start_with?("~")
 | 
			
		||||
 | 
			
		||||
          if resolved_path.relative? || resolved_path.split.any? { |part| part.to_s == ".." }
 | 
			
		||||
            opoo "Skipping #{Formatter.identifier(action)} for relative path '#{path}'."
 | 
			
		||||
 | 
			
		||||
@ -66,7 +66,7 @@ module Hbc
 | 
			
		||||
      return [] if current == version
 | 
			
		||||
 | 
			
		||||
      # collect all installed versions that are different than tap version and return them
 | 
			
		||||
      installed.select { |v| v != version }
 | 
			
		||||
      installed.reject { |v| v == version }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def to_s
 | 
			
		||||
 | 
			
		||||
@ -54,7 +54,7 @@ module Hbc
 | 
			
		||||
 | 
			
		||||
    class FromURILoader < FromPathLoader
 | 
			
		||||
      def self.can_load?(ref)
 | 
			
		||||
        !(ref.to_s !~ ::URI.regexp)
 | 
			
		||||
        ref.to_s =~ ::URI.regexp
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      def initialize(url)
 | 
			
		||||
@ -80,7 +80,7 @@ module Hbc
 | 
			
		||||
 | 
			
		||||
    class FromTapLoader < FromPathLoader
 | 
			
		||||
      def self.can_load?(ref)
 | 
			
		||||
        !(ref.to_s !~ HOMEBREW_TAP_CASK_REGEX)
 | 
			
		||||
        ref.to_s =~ HOMEBREW_TAP_CASK_REGEX
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      def initialize(tapped_name)
 | 
			
		||||
 | 
			
		||||
@ -140,9 +140,7 @@ module Hbc
 | 
			
		||||
      command_name, *args = *@args
 | 
			
		||||
      command = help? ? "help" : self.class.lookup_command(command_name)
 | 
			
		||||
 | 
			
		||||
      unless ENV["MACOS_VERSION"].nil?
 | 
			
		||||
        MacOS.full_version = ENV["MACOS_VERSION"]
 | 
			
		||||
      end
 | 
			
		||||
      MacOS.full_version = ENV["MACOS_VERSION"] unless ENV["MACOS_VERSION"].nil?
 | 
			
		||||
 | 
			
		||||
      Hbc.default_tap.install unless Hbc.default_tap.installed?
 | 
			
		||||
      Hbc.init if self.class.should_init?(command)
 | 
			
		||||
 | 
			
		||||
@ -15,7 +15,7 @@ module Hbc
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      def self.abstract?
 | 
			
		||||
        !(name.split("::").last !~ /^Abstract[^a-z]/)
 | 
			
		||||
        name.split("::").last =~ /^Abstract[^a-z]/
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      def self.visible
 | 
			
		||||
 | 
			
		||||
@ -17,17 +17,17 @@ module Hbc
 | 
			
		||||
        ohai "Contents of $LOAD_PATH", self.class.render_load_path($LOAD_PATH)
 | 
			
		||||
        ohai "Environment Variables"
 | 
			
		||||
 | 
			
		||||
        environment_variables = [
 | 
			
		||||
          "RUBYLIB",
 | 
			
		||||
          "RUBYOPT",
 | 
			
		||||
          "RUBYPATH",
 | 
			
		||||
          "RBENV_VERSION",
 | 
			
		||||
          "CHRUBY_VERSION",
 | 
			
		||||
          "GEM_HOME",
 | 
			
		||||
          "GEM_PATH",
 | 
			
		||||
          "BUNDLE_PATH",
 | 
			
		||||
          "PATH",
 | 
			
		||||
          "SHELL",
 | 
			
		||||
        environment_variables = %w[
 | 
			
		||||
          RUBYLIB
 | 
			
		||||
          RUBYOPT
 | 
			
		||||
          RUBYPATH
 | 
			
		||||
          RBENV_VERSION
 | 
			
		||||
          CHRUBY_VERSION
 | 
			
		||||
          GEM_HOME
 | 
			
		||||
          GEM_PATH
 | 
			
		||||
          BUNDLE_PATH
 | 
			
		||||
          PATH
 | 
			
		||||
          SHELL
 | 
			
		||||
        ]
 | 
			
		||||
 | 
			
		||||
        (self.class.locale_variables + environment_variables).sort.each(&self.class.method(:render_env_var))
 | 
			
		||||
 | 
			
		||||
@ -49,7 +49,7 @@ module Hbc
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      def self.name_info(cask)
 | 
			
		||||
        ohai cask.name.size > 1 ? "Names" : "Name"
 | 
			
		||||
        ohai((cask.name.size > 1) ? "Names" : "Name")
 | 
			
		||||
        puts cask.name.empty? ? Formatter.error("None") : cask.name
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
@ -69,7 +69,7 @@ module Hbc
 | 
			
		||||
        DSL::ORDINARY_ARTIFACT_TYPES.each do |type|
 | 
			
		||||
          next if cask.artifacts[type].empty?
 | 
			
		||||
          cask.artifacts[type].each do |artifact|
 | 
			
		||||
            activatable_item = type == :stage_only ? "<none>" : artifact.first
 | 
			
		||||
            activatable_item = (type == :stage_only) ? "<none>" : artifact.first
 | 
			
		||||
            puts "#{activatable_item} (#{type})"
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
@ -43,7 +43,7 @@ module Hbc
 | 
			
		||||
            if checkpoint.nil?
 | 
			
		||||
              onoe "Could not retrieve `appcast` checkpoint for cask '#{cask}': #{result[:command_result].stderr}"
 | 
			
		||||
            else
 | 
			
		||||
              puts cask_tokens.count > 1 ? "#{checkpoint}  #{cask}": checkpoint
 | 
			
		||||
              puts((cask_tokens.count > 1) ? "#{checkpoint}  #{cask}": checkpoint)
 | 
			
		||||
              count += 1
 | 
			
		||||
            end
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
@ -12,7 +12,7 @@ module Hbc
 | 
			
		||||
      def run
 | 
			
		||||
        retval = args.any? ? list : list_installed
 | 
			
		||||
        # retval is ternary: true/false/nil
 | 
			
		||||
        if retval.nil? && !args.any?
 | 
			
		||||
        if retval.nil? && args.none?
 | 
			
		||||
          opoo "nothing to list" # special case: avoid exit code
 | 
			
		||||
        elsif retval.nil?
 | 
			
		||||
          raise CaskError, "nothing to list"
 | 
			
		||||
 | 
			
		||||
@ -11,7 +11,8 @@ module Hbc
 | 
			
		||||
 | 
			
		||||
      def run
 | 
			
		||||
        install_rubocop
 | 
			
		||||
        system({ "XDG_CACHE_HOME" => HOMEBREW_CACHE }, "rubocop", *rubocop_args, "--", *cask_paths)
 | 
			
		||||
        cache_env = { "XDG_CACHE_HOME" => "#{HOMEBREW_CACHE}/style" }
 | 
			
		||||
        system(cache_env, "rubocop", *rubocop_args, "--", *cask_paths)
 | 
			
		||||
        raise CaskError, "style check failed" unless $CHILD_STATUS.success?
 | 
			
		||||
        true
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
@ -86,7 +86,7 @@ module Hbc
 | 
			
		||||
        Dir.chdir(mount) do
 | 
			
		||||
          Dir.glob("**/*", File::FNM_DOTMATCH).map do |path|
 | 
			
		||||
            next if skip_path?(Pathname(path))
 | 
			
		||||
            path == "." ? path : path.prepend("./")
 | 
			
		||||
            (path == ".") ? path : path.prepend("./")
 | 
			
		||||
          end.compact.join("\n").concat("\n")
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
@ -212,7 +212,7 @@ module Hbc
 | 
			
		||||
  class SubversionDownloadStrategy < HbVCSDownloadStrategy
 | 
			
		||||
    def cache_tag
 | 
			
		||||
      # TODO: pass versions as symbols, support :head here
 | 
			
		||||
      version == "head" ? "svn-HEAD" : "svn"
 | 
			
		||||
      (version == "head") ? "svn-HEAD" : "svn"
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def repo_valid?
 | 
			
		||||
 | 
			
		||||
@ -119,9 +119,7 @@ module Hbc
 | 
			
		||||
    def language_eval
 | 
			
		||||
      return @language if instance_variable_defined?(:@language)
 | 
			
		||||
 | 
			
		||||
      if @language_blocks.nil? || @language_blocks.empty?
 | 
			
		||||
        return @language = nil
 | 
			
		||||
      end
 | 
			
		||||
      return @language = nil if @language_blocks.nil? || @language_blocks.empty?
 | 
			
		||||
 | 
			
		||||
      MacOS.languages.map(&Locale.method(:parse)).each do |locale|
 | 
			
		||||
        key = @language_blocks.keys.detect do |strings|
 | 
			
		||||
 | 
			
		||||
@ -113,7 +113,7 @@ module Hbc
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def to_s
 | 
			
		||||
      "Cask '#{token}' definition is invalid" + (!submsg.empty? ? ": #{submsg}" : "")
 | 
			
		||||
      "Cask '#{token}' definition is invalid#{": #{submsg}" unless submsg.empty?}"
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -94,7 +94,7 @@ module Hbc
 | 
			
		||||
      loop do
 | 
			
		||||
        readable_sources = IO.select(sources)[0]
 | 
			
		||||
        readable_sources.delete_if(&:eof?).first(1).each do |source|
 | 
			
		||||
          type = (source == sources[0] ? :stdout : :stderr)
 | 
			
		||||
          type = ((source == sources[0]) ? :stdout : :stderr)
 | 
			
		||||
          begin
 | 
			
		||||
            yield(type, source.readline_nonblock || "")
 | 
			
		||||
          rescue IO::WaitReadable, EOFError
 | 
			
		||||
 | 
			
		||||
@ -38,6 +38,7 @@
 | 
			
		||||
#:    `--include-optional`, and `--skip-recommended` as documented above.
 | 
			
		||||
 | 
			
		||||
# encoding: UTF-8
 | 
			
		||||
 | 
			
		||||
require "formula"
 | 
			
		||||
require "ostruct"
 | 
			
		||||
 | 
			
		||||
@ -112,10 +113,10 @@ module Homebrew
 | 
			
		||||
      end
 | 
			
		||||
    else
 | 
			
		||||
      deps = f.deps.reject do |dep|
 | 
			
		||||
        ignores.any? { |ignore| dep.send(ignore) } && !includes.any? { |include| dep.send(include) }
 | 
			
		||||
        ignores.any? { |ignore| dep.send(ignore) } && includes.none? { |include| dep.send(include) }
 | 
			
		||||
      end
 | 
			
		||||
      reqs = f.requirements.reject do |req|
 | 
			
		||||
        ignores.any? { |ignore| req.send(ignore) } && !includes.any? { |include| req.send(include) }
 | 
			
		||||
        ignores.any? { |ignore| req.send(ignore) } && includes.none? { |include| req.send(include) }
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
@ -160,7 +161,7 @@ module Homebrew
 | 
			
		||||
      else
 | 
			
		||||
        "├──"
 | 
			
		||||
      end
 | 
			
		||||
      prefix_ext = i == max ? "    " : "│   "
 | 
			
		||||
      prefix_ext = (i == max) ? "    " : "│   "
 | 
			
		||||
      puts prefix + "#{chr} #{dep_display_name(dep)}"
 | 
			
		||||
      recursive_deps_tree(Formulary.factory(dep.name), prefix + prefix_ext)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
@ -1,4 +1,4 @@
 | 
			
		||||
HOMEBREW_HELP = <<-EOS.freeze
 | 
			
		||||
HOMEBREW_HELP = <<-EOS.unindent.freeze
 | 
			
		||||
  Example usage:
 | 
			
		||||
    brew search [TEXT|/REGEX/]
 | 
			
		||||
    brew (info|home|options) [FORMULA...]
 | 
			
		||||
 | 
			
		||||
@ -72,9 +72,7 @@ module Homebrew
 | 
			
		||||
          puts "#{n} symlinks created"
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        if keg_only && !ARGV.homebrew_developer?
 | 
			
		||||
          puts_keg_only_path_message(keg)
 | 
			
		||||
        end
 | 
			
		||||
        puts_keg_only_path_message(keg) if keg_only && !ARGV.homebrew_developer?
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
@ -73,7 +73,11 @@ module Homebrew
 | 
			
		||||
    args = %w[
 | 
			
		||||
      --force-exclusion
 | 
			
		||||
    ]
 | 
			
		||||
    args << "--auto-correct" if fix
 | 
			
		||||
    if fix
 | 
			
		||||
      args << "--auto-correct"
 | 
			
		||||
    else
 | 
			
		||||
      args << "--parallel"
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    if options[:except_cops]
 | 
			
		||||
      options[:except_cops].map! { |cop| RuboCop::Cop::Cop.registry.qualified_cop_name(cop.to_s, "") }
 | 
			
		||||
@ -101,14 +105,16 @@ module Homebrew
 | 
			
		||||
      args += files
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    cache_env = { "XDG_CACHE_HOME" => "#{HOMEBREW_CACHE}/style" }
 | 
			
		||||
 | 
			
		||||
    case output_type
 | 
			
		||||
    when :print
 | 
			
		||||
      args << "--display-cop-names" if ARGV.include? "--display-cop-names"
 | 
			
		||||
      args << "--format" << "simple" if files
 | 
			
		||||
      system({ "XDG_CACHE_HOME" => HOMEBREW_CACHE }, "rubocop", *args)
 | 
			
		||||
      system(cache_env, "rubocop", *args)
 | 
			
		||||
      !$?.success?
 | 
			
		||||
    when :json
 | 
			
		||||
      json, _, status = Open3.capture3({ "XDG_CACHE_HOME" => HOMEBREW_CACHE }, "rubocop", "--format", "json", *args)
 | 
			
		||||
      json, _, status = Open3.capture3(cache_env, "rubocop", "--format", "json", *args)
 | 
			
		||||
      # exit status of 1 just means violations were found; other numbers mean
 | 
			
		||||
      # execution errors.
 | 
			
		||||
      # exitstatus can also be nil if RuboCop process crashes, e.g. due to
 | 
			
		||||
 | 
			
		||||
@ -98,10 +98,10 @@ module Homebrew
 | 
			
		||||
            reqs = reqs_by_formula.map(&:last)
 | 
			
		||||
          else
 | 
			
		||||
            deps = f.deps.reject do |dep|
 | 
			
		||||
              ignores.any? { |ignore| dep.send(ignore) } && !includes.any? { |include| dep.send(include) }
 | 
			
		||||
              ignores.any? { |ignore| dep.send(ignore) } && includes.none? { |include| dep.send(include) }
 | 
			
		||||
            end
 | 
			
		||||
            reqs = f.requirements.reject do |req|
 | 
			
		||||
              ignores.any? { |ignore| req.send(ignore) } && !includes.any? { |include| req.send(include) }
 | 
			
		||||
              ignores.any? { |ignore| req.send(ignore) } && includes.none? { |include| req.send(include) }
 | 
			
		||||
            end
 | 
			
		||||
          end
 | 
			
		||||
          next true if deps.any? do |dep|
 | 
			
		||||
 | 
			
		||||
@ -19,5 +19,5 @@ end
 | 
			
		||||
 | 
			
		||||
def plural(n, s = "s")
 | 
			
		||||
  odeprecated "#plural", "Formatter.pluralize"
 | 
			
		||||
  n == 1 ? "" : s
 | 
			
		||||
  (n == 1) ? "" : s
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
@ -1,3 +1,3 @@
 | 
			
		||||
# RuboCop version used for `brew style` and `brew cask style`
 | 
			
		||||
HOMEBREW_RUBOCOP_VERSION = "0.47.1".freeze
 | 
			
		||||
HOMEBREW_RUBOCOP_CASK_VERSION = "~> 0.12.0".freeze # has to be updated when RuboCop version changes
 | 
			
		||||
HOMEBREW_RUBOCOP_VERSION = "0.49.1".freeze
 | 
			
		||||
HOMEBREW_RUBOCOP_CASK_VERSION = "~> 0.13.0".freeze # has to be updated when RuboCop version changes
 | 
			
		||||
 | 
			
		||||
@ -16,7 +16,7 @@ class CxxStdlib
 | 
			
		||||
    if type && ![:libstdcxx, :libcxx].include?(type)
 | 
			
		||||
      raise ArgumentError, "Invalid C++ stdlib type: #{type}"
 | 
			
		||||
    end
 | 
			
		||||
    klass = compiler.to_s =~ GNU_GCC_REGEXP ? GnuStdlib : AppleStdlib
 | 
			
		||||
    klass = (compiler.to_s =~ GNU_GCC_REGEXP) ? GnuStdlib : AppleStdlib
 | 
			
		||||
    klass.new(type, compiler)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -121,7 +121,7 @@ class Descriptions
 | 
			
		||||
    blank = Formatter.warning("[no description]")
 | 
			
		||||
    @descriptions.keys.sort.each do |full_name|
 | 
			
		||||
      short_name = short_names[full_name]
 | 
			
		||||
      printed_name = short_name_counts[short_name] == 1 ? short_name : full_name
 | 
			
		||||
      printed_name = (short_name_counts[short_name] == 1) ? short_name : full_name
 | 
			
		||||
      description = @descriptions[full_name] || blank
 | 
			
		||||
      puts "#{Tty.bold}#{printed_name}:#{Tty.reset} #{description}"
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
@ -591,9 +591,7 @@ class FormulaAuditor
 | 
			
		||||
  def audit_homepage
 | 
			
		||||
    homepage = formula.homepage
 | 
			
		||||
 | 
			
		||||
    if homepage.nil? || homepage.empty?
 | 
			
		||||
      return
 | 
			
		||||
    end
 | 
			
		||||
    return if homepage.nil? || homepage.empty?
 | 
			
		||||
 | 
			
		||||
    return unless @online
 | 
			
		||||
 | 
			
		||||
@ -988,9 +986,7 @@ class FormulaAuditor
 | 
			
		||||
      problem ":apr is deprecated. Usage should be \"apr-util\""
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    if line =~ /depends_on :tex/
 | 
			
		||||
      problem ":tex is deprecated"
 | 
			
		||||
    end
 | 
			
		||||
    problem ":tex is deprecated" if line =~ /depends_on :tex/
 | 
			
		||||
 | 
			
		||||
    if line =~ /depends_on\s+['"](.+)['"]\s+=>\s+:(lua|perl|python|ruby)(\d*)/
 | 
			
		||||
      problem "#{$2} modules should be vendored rather than use deprecated `depends_on \"#{$1}\" => :#{$2}#{$3}`"
 | 
			
		||||
 | 
			
		||||
@ -314,8 +314,8 @@ module Homebrew
 | 
			
		||||
 | 
			
		||||
    old_spec = f.bottle_specification
 | 
			
		||||
    if ARGV.include?("--keep-old") && !old_spec.checksums.empty?
 | 
			
		||||
      mismatches = [:root_url, :prefix, :cellar, :rebuild].select do |key|
 | 
			
		||||
        old_spec.send(key) != bottle.send(key)
 | 
			
		||||
      mismatches = [:root_url, :prefix, :cellar, :rebuild].reject do |key|
 | 
			
		||||
        old_spec.send(key) == bottle.send(key)
 | 
			
		||||
      end
 | 
			
		||||
      mismatches.delete(:cellar) if old_spec.cellar == :any && bottle.cellar == :any_skip_relocation
 | 
			
		||||
      unless mismatches.empty?
 | 
			
		||||
@ -382,9 +382,7 @@ module Homebrew
 | 
			
		||||
      bottle = BottleSpecification.new
 | 
			
		||||
      bottle.root_url bottle_hash["bottle"]["root_url"]
 | 
			
		||||
      cellar = bottle_hash["bottle"]["cellar"]
 | 
			
		||||
      if cellar == "any" || cellar == "any_skip_relocation"
 | 
			
		||||
        cellar = cellar.to_sym
 | 
			
		||||
      end
 | 
			
		||||
      cellar = cellar.to_sym if ["any", "any_skip_relocation"].include?(cellar)
 | 
			
		||||
      bottle.cellar cellar
 | 
			
		||||
      bottle.prefix bottle_hash["bottle"]["prefix"]
 | 
			
		||||
      bottle.rebuild bottle_hash["bottle"]["rebuild"]
 | 
			
		||||
 | 
			
		||||
@ -21,7 +21,7 @@ module Homebrew
 | 
			
		||||
    # If no brews are listed, open the project root in an editor.
 | 
			
		||||
    if ARGV.named.empty?
 | 
			
		||||
      editor = File.basename which_editor
 | 
			
		||||
      if editor == "mate" || editor == "subl"
 | 
			
		||||
      if ["mate", "subl"].include?(editor)
 | 
			
		||||
        # If the user is using TextMate or Sublime Text,
 | 
			
		||||
        # give a nice project view instead.
 | 
			
		||||
        exec_editor HOMEBREW_REPOSITORY+"bin/brew",
 | 
			
		||||
 | 
			
		||||
@ -60,9 +60,7 @@ module Homebrew
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      Homebrew.install_gem_setup_path! "bundler"
 | 
			
		||||
      unless quiet_system("bundle", "check")
 | 
			
		||||
        system "bundle", "install"
 | 
			
		||||
      end
 | 
			
		||||
      system "bundle", "install" unless quiet_system("bundle", "check")
 | 
			
		||||
 | 
			
		||||
      parallel = true
 | 
			
		||||
 | 
			
		||||
@ -91,12 +89,12 @@ module Homebrew
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      args = ["-I", HOMEBREW_LIBRARY_PATH/"test"]
 | 
			
		||||
      args += %w[
 | 
			
		||||
      args += %W[
 | 
			
		||||
        --color
 | 
			
		||||
        --require spec_helper
 | 
			
		||||
        --format progress
 | 
			
		||||
        --format ParallelTests::RSpec::RuntimeLogger
 | 
			
		||||
        --out tmp/parallel_runtime_rspec.log
 | 
			
		||||
        --out #{HOMEBREW_CACHE}/tests/parallel_runtime_rspec.log
 | 
			
		||||
      ]
 | 
			
		||||
 | 
			
		||||
      args << "--seed" << ARGV.next if ARGV.include? "--seed"
 | 
			
		||||
 | 
			
		||||
@ -2,6 +2,7 @@ class String
 | 
			
		||||
  def undent
 | 
			
		||||
    gsub(/^[ \t]{#{(slice(/^[ \t]+/) || '').length}}/, "")
 | 
			
		||||
  end
 | 
			
		||||
  alias unindent undent
 | 
			
		||||
 | 
			
		||||
  # eg:
 | 
			
		||||
  #   if foo then <<-EOS.undent_________________________________________________________72
 | 
			
		||||
 | 
			
		||||
@ -61,9 +61,9 @@ module FormulaCellarChecks
 | 
			
		||||
 | 
			
		||||
    valid_extensions = %w[.a .dylib .framework .jnilib .la .o .so
 | 
			
		||||
                          .jar .prl .pm .sh]
 | 
			
		||||
    non_libraries = formula.lib.children.select do |g|
 | 
			
		||||
    non_libraries = formula.lib.children.reject do |g|
 | 
			
		||||
      next if g.directory?
 | 
			
		||||
      !valid_extensions.include? g.extname
 | 
			
		||||
      valid_extensions.include? g.extname
 | 
			
		||||
    end
 | 
			
		||||
    return if non_libraries.empty?
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -472,7 +472,7 @@ class FormulaInstaller
 | 
			
		||||
 | 
			
		||||
  def effective_build_options_for(dependent, inherited_options = [])
 | 
			
		||||
    args  = dependent.build.used_options
 | 
			
		||||
    args |= dependent == formula ? options : inherited_options
 | 
			
		||||
    args |= (dependent == formula) ? options : inherited_options
 | 
			
		||||
    args |= Tab.for_formula(dependent).used_options
 | 
			
		||||
    args &= dependent.options
 | 
			
		||||
    BuildOptions.new(args, dependent.options)
 | 
			
		||||
@ -680,7 +680,6 @@ class FormulaInstaller
 | 
			
		||||
    if !formula.prefix.directory? || Keg.new(formula.prefix).empty_installation?
 | 
			
		||||
      raise "Empty installation"
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
  rescue Exception
 | 
			
		||||
    ignore_interrupts do
 | 
			
		||||
      # any exceptions must leave us with nothing installed
 | 
			
		||||
 | 
			
		||||
@ -367,7 +367,7 @@ class Keg
 | 
			
		||||
          dep_formula = Formulary.factory(dep["full_name"])
 | 
			
		||||
          dep_formula == to_formula
 | 
			
		||||
        rescue FormulaUnavailableError
 | 
			
		||||
          next "#{tap}/#{name}" == dep["full_name"]
 | 
			
		||||
          next dep["full_name"] == "#{tap}/#{name}"
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
@ -47,7 +47,7 @@ module Language
 | 
			
		||||
      def cabal_install(*args)
 | 
			
		||||
        # cabal hardcodes 64 as the maximum number of parallel jobs
 | 
			
		||||
        # https://github.com/Homebrew/legacy-homebrew/issues/49509
 | 
			
		||||
        make_jobs = ENV.make_jobs > 64 ? 64 : ENV.make_jobs
 | 
			
		||||
        make_jobs = (ENV.make_jobs > 64) ? 64 : ENV.make_jobs
 | 
			
		||||
 | 
			
		||||
        # cabal-install's dependency-resolution backtracking strategy can easily
 | 
			
		||||
        # need more than the default 2,000 maximum number of "backjumps," since
 | 
			
		||||
 | 
			
		||||
@ -90,7 +90,7 @@ module OS
 | 
			
		||||
      @locator ||= SDKLocator.new
 | 
			
		||||
      begin
 | 
			
		||||
        sdk = if v.nil?
 | 
			
		||||
          Xcode.version.to_i >= 7 ? @locator.latest_sdk : @locator.sdk_for(version)
 | 
			
		||||
          (Xcode.version.to_i >= 7) ? @locator.latest_sdk : @locator.sdk_for(version)
 | 
			
		||||
        else
 | 
			
		||||
          @locator.sdk_for v
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
@ -62,10 +62,10 @@ class LinkageChecker
 | 
			
		||||
    declared_deps = formula.deps.reject { |dep| filter_out.call(dep) }.map(&:name)
 | 
			
		||||
    declared_requirement_deps = formula.requirements.reject { |req| filter_out.call(req) }.map(&:default_formula).compact
 | 
			
		||||
    declared_dep_names = (declared_deps + declared_requirement_deps).map { |dep| dep.split("/").last }
 | 
			
		||||
    undeclared_deps = @brewed_dylibs.keys.select do |full_name|
 | 
			
		||||
    undeclared_deps = @brewed_dylibs.keys.reject do |full_name|
 | 
			
		||||
      name = full_name.split("/").last
 | 
			
		||||
      next false if name == formula.name
 | 
			
		||||
      !declared_dep_names.include?(name)
 | 
			
		||||
      next true if name == formula.name
 | 
			
		||||
      declared_dep_names.include?(name)
 | 
			
		||||
    end
 | 
			
		||||
    undeclared_deps.sort do |a, b|
 | 
			
		||||
      if a.include?("/") && !b.include?("/")
 | 
			
		||||
 | 
			
		||||
@ -96,7 +96,7 @@ module RuboCop
 | 
			
		||||
          else
 | 
			
		||||
            indentation = " " * (start_column(node2) - line_start_column(node2))
 | 
			
		||||
            # No line breaks upto version_scheme, order_idx == 8
 | 
			
		||||
            line_breaks = order_idx>8 ? "\n\n" : "\n"
 | 
			
		||||
            line_breaks = (order_idx>8) ? "\n\n" : "\n"
 | 
			
		||||
            corrector.insert_before(node2.source_range, node1.source+line_breaks+indentation)
 | 
			
		||||
          end
 | 
			
		||||
          corrector.remove(range_with_surrounding_space(node1.source_range, :left))
 | 
			
		||||
 | 
			
		||||
@ -176,7 +176,7 @@ class Sandbox
 | 
			
		||||
 | 
			
		||||
    def add_rule(rule)
 | 
			
		||||
      s = "("
 | 
			
		||||
      s << (rule[:allow] ? "allow": "deny")
 | 
			
		||||
      s << ((rule[:allow]) ? "allow": "deny")
 | 
			
		||||
      s << " #{rule[:operation]}"
 | 
			
		||||
      s << " (#{rule[:filter]})" if rule[:filter]
 | 
			
		||||
      s << " (with #{rule[:modifier]})" if rule[:modifier]
 | 
			
		||||
 | 
			
		||||
@ -235,7 +235,7 @@ class Bottle
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def suffix
 | 
			
		||||
      s = rebuild > 0 ? ".#{rebuild}" : ""
 | 
			
		||||
      s = (rebuild > 0) ? ".#{rebuild}" : ""
 | 
			
		||||
      ".bottle#{s}.tar.gz"
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
@ -2,11 +2,11 @@ source "https://rubygems.org"
 | 
			
		||||
 | 
			
		||||
gem "parallel_tests"
 | 
			
		||||
gem "rspec"
 | 
			
		||||
gem "rubocop"
 | 
			
		||||
gem "rspec-its", require: false
 | 
			
		||||
gem "rspec-wait", require: false
 | 
			
		||||
gem "rubocop"
 | 
			
		||||
 | 
			
		||||
group :coverage do
 | 
			
		||||
  gem "simplecov", require: false
 | 
			
		||||
  gem "codecov", require: false
 | 
			
		||||
  gem "simplecov", require: false
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
@ -36,7 +36,8 @@ GEM
 | 
			
		||||
    rspec-support (3.6.0)
 | 
			
		||||
    rspec-wait (0.0.9)
 | 
			
		||||
      rspec (>= 3, < 4)
 | 
			
		||||
    rubocop (0.48.1)
 | 
			
		||||
    rubocop (0.49.1)
 | 
			
		||||
      parallel (~> 1.10)
 | 
			
		||||
      parser (>= 2.3.3.1, < 3.0)
 | 
			
		||||
      powerpack (~> 0.1)
 | 
			
		||||
      rainbow (>= 1.99.1, < 3.0)
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,6 @@
 | 
			
		||||
describe "download strategies", :cask do
 | 
			
		||||
  let(:url) { "http://example.com/cask.dmg" }
 | 
			
		||||
  let(:url_options) { Hash.new }
 | 
			
		||||
  let(:url_options) { {} }
 | 
			
		||||
  let(:cask) {
 | 
			
		||||
    instance_double(Hbc::Cask, token:   "some-cask",
 | 
			
		||||
                               url:     Hbc::URL.new(url, url_options),
 | 
			
		||||
 | 
			
		||||
@ -4,11 +4,11 @@ require "utils/tty"
 | 
			
		||||
describe Formatter do
 | 
			
		||||
  describe "::columns" do
 | 
			
		||||
    let(:input) {
 | 
			
		||||
      [
 | 
			
		||||
        "aa",
 | 
			
		||||
        "bbb",
 | 
			
		||||
        "ccc",
 | 
			
		||||
        "dd",
 | 
			
		||||
      %w[
 | 
			
		||||
        aa
 | 
			
		||||
        bbb
 | 
			
		||||
        ccc
 | 
			
		||||
        dd
 | 
			
		||||
      ]
 | 
			
		||||
    }
 | 
			
		||||
    subject { described_class.columns(input) }
 | 
			
		||||
 | 
			
		||||
@ -683,7 +683,7 @@ describe Formula do
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    expect(f5.deps.map(&:name)).to eq(["f3", "f4"])
 | 
			
		||||
    expect(f5.recursive_dependencies.map(&:name)).to eq(["f1", "f2", "f3", "f4"])
 | 
			
		||||
    expect(f5.recursive_dependencies.map(&:name)).to eq(%w[f1 f2 f3 f4])
 | 
			
		||||
    expect(f5.runtime_dependencies.map(&:name)).to eq(["f1", "f4"])
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -44,9 +44,7 @@ describe Migrator do
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  after(:each) do
 | 
			
		||||
    if !old_keg_record.parent.symlink? && old_keg_record.directory?
 | 
			
		||||
      keg.unlink
 | 
			
		||||
    end
 | 
			
		||||
    keg.unlink if !old_keg_record.parent.symlink? && old_keg_record.directory?
 | 
			
		||||
 | 
			
		||||
    if new_keg_record.directory?
 | 
			
		||||
      new_keg = Keg.new(new_keg_record)
 | 
			
		||||
 | 
			
		||||
@ -104,7 +104,7 @@ describe Pathname do
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    it "preserves permissions" do
 | 
			
		||||
      File.open(file, "w", 0100777).close
 | 
			
		||||
      File.open(file, "w", 0100777) {}
 | 
			
		||||
      file.atomic_write("CONTENT")
 | 
			
		||||
      expect(file.stat.mode).to eq(0100777 & ~File.umask)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
@ -3,7 +3,7 @@ require "extend/string"
 | 
			
		||||
describe String do
 | 
			
		||||
  describe "#undent" do
 | 
			
		||||
    it "removes leading whitespace, taking the first line as reference" do
 | 
			
		||||
      string = <<-EOS.undent
 | 
			
		||||
      string = <<-EOS.unindent
 | 
			
		||||
                hi
 | 
			
		||||
                ........my friend over
 | 
			
		||||
                  there
 | 
			
		||||
@ -13,7 +13,7 @@ describe String do
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    it "removes nothing if the text is not indented" do
 | 
			
		||||
      string = <<-EOS.undent
 | 
			
		||||
      string = <<-EOS.unindent
 | 
			
		||||
        hi
 | 
			
		||||
        I'm not indented
 | 
			
		||||
      EOS
 | 
			
		||||
 | 
			
		||||
@ -280,7 +280,7 @@ class Version
 | 
			
		||||
  private
 | 
			
		||||
 | 
			
		||||
  def max(a, b)
 | 
			
		||||
    a > b ? a : b
 | 
			
		||||
    (a > b) ? a : b
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def tokenize
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user