Class: Homebrew::ResourceAuditor

Inherits:
Object
  • Object
show all
Defined in:
brew/Library/Homebrew/dev-cmd/audit.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(resource, spec_name, options = {}) ⇒ ResourceAuditor

Returns a new instance of ResourceAuditor.



894
895
896
897
898
899
900
901
902
903
904
905
906
907
# File 'brew/Library/Homebrew/dev-cmd/audit.rb', line 894

def initialize(resource, spec_name, options = {})
  @name     = resource.name
  @version  = resource.version
  @checksum = resource.checksum
  @url      = resource.url
  @mirrors  = resource.mirrors
  @using    = resource.using
  @specs    = resource.specs
  @owner    = resource.owner
  @spec_name = spec_name
  @online    = options[:online]
  @strict    = options[:strict]
  @problems  = []
end

Instance Attribute Details

#checksumObject (readonly)

Returns the value of attribute checksum.



892
893
894
# File 'brew/Library/Homebrew/dev-cmd/audit.rb', line 892

def checksum
  @checksum
end

#mirrorsObject (readonly)

Returns the value of attribute mirrors.



892
893
894
# File 'brew/Library/Homebrew/dev-cmd/audit.rb', line 892

def mirrors
  @mirrors
end

#nameObject (readonly)

Returns the value of attribute name.



892
893
894
# File 'brew/Library/Homebrew/dev-cmd/audit.rb', line 892

def name
  @name
end

#ownerObject (readonly)

Returns the value of attribute owner.



892
893
894
# File 'brew/Library/Homebrew/dev-cmd/audit.rb', line 892

def owner
  @owner
end

#problemsObject (readonly)

Returns the value of attribute problems.



892
893
894
# File 'brew/Library/Homebrew/dev-cmd/audit.rb', line 892

def problems
  @problems
end

#spec_nameObject (readonly)

Returns the value of attribute spec_name.



892
893
894
# File 'brew/Library/Homebrew/dev-cmd/audit.rb', line 892

def spec_name
  @spec_name
end

#specsObject (readonly)

Returns the value of attribute specs.



892
893
894
# File 'brew/Library/Homebrew/dev-cmd/audit.rb', line 892

def specs
  @specs
end

#urlObject (readonly)

Returns the value of attribute url.



892
893
894
# File 'brew/Library/Homebrew/dev-cmd/audit.rb', line 892

def url
  @url
end

#usingObject (readonly)

Returns the value of attribute using.



892
893
894
# File 'brew/Library/Homebrew/dev-cmd/audit.rb', line 892

def using
  @using
end

#versionObject (readonly)

Returns the value of attribute version.



892
893
894
# File 'brew/Library/Homebrew/dev-cmd/audit.rb', line 892

def version
  @version
end

Class Method Details

.curl_openssl_and_depsObject



958
959
960
961
962
963
964
965
966
967
968
# File 'brew/Library/Homebrew/dev-cmd/audit.rb', line 958

def self.curl_openssl_and_deps
  @curl_openssl_and_deps ||= begin
    formulae_names = ["curl", "openssl"]
    formulae_names += formulae_names.flat_map do |f|
      Formula[f].recursive_dependencies.map(&:name)
    end
    formulae_names.uniq
  rescue FormulaUnavailableError
    []
  end
end

Instance Method Details

#auditObject



909
910
911
912
913
914
# File 'brew/Library/Homebrew/dev-cmd/audit.rb', line 909

def audit
  audit_version
  audit_download_strategy
  audit_urls
  self
end

#audit_download_strategyObject



928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
# File 'brew/Library/Homebrew/dev-cmd/audit.rb', line 928

def audit_download_strategy
  url_strategy = DownloadStrategyDetector.detect(url)

  if using == :git || url_strategy == GitDownloadStrategy
    problem "Git should specify :revision when a :tag is specified." if specs[:tag] && !specs[:revision]
  end

  return unless using

  if using == :cvs
    mod = specs[:module]

    problem "Redundant :module value in URL" if mod == name

    if url.match?(%r{:[^/]+$})
      mod = url.split(":").last

      if mod == name
        problem "Redundant CVS module appended to URL"
      else
        problem "Specify CVS module as `:module => \"#{mod}\"` instead of appending it to the URL"
      end
    end
  end

  return unless url_strategy == DownloadStrategyDetector.detect("", using)

  problem "Redundant :using value in URL"
end

#audit_urlsObject



970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
# File 'brew/Library/Homebrew/dev-cmd/audit.rb', line 970

def audit_urls
  return unless @online

  urls = [url] + mirrors
  urls.each do |url|
    next if !@strict && mirrors.include?(url)

    strategy = DownloadStrategyDetector.detect(url, using)
    if strategy <= CurlDownloadStrategy && !url.start_with?("file")
      # A `brew mirror`'ed URL is usually not yet reachable at the time of
      # pull request.
      next if url.match?(%r{^https://dl.bintray.com/homebrew/mirror/})

      if http_content_problem = curl_check_http_content(url)
        problem http_content_problem
      end
    elsif strategy <= GitDownloadStrategy
      problem "The URL #{url} is not a valid git URL" unless Utils.git_remote_exists? url
    elsif strategy <= SubversionDownloadStrategy
      next unless DevelopmentTools.subversion_handles_most_https_certificates?
      next unless Utils.svn_available?

      problem "The URL #{url} is not a valid svn URL" unless Utils.svn_remote_exists? url
    end
  end
end

#audit_versionObject



916
917
918
919
920
921
922
923
924
925
926
# File 'brew/Library/Homebrew/dev-cmd/audit.rb', line 916

def audit_version
  if version.nil?
    problem "missing version"
  elsif !version.detected_from_url?
    version_text = version
    version_url = Version.detect(url, specs)
    if version_url.to_s == version_text.to_s && version.instance_of?(Version)
      problem "version #{version_text} is redundant with version scanned from URL"
    end
  end
end

#problem(text) ⇒ Object



997
998
999
# File 'brew/Library/Homebrew/dev-cmd/audit.rb', line 997

def problem(text)
  @problems << text
end