aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJack Nagel2013-07-22 11:41:46 -0500
committerJack Nagel2013-07-22 11:41:46 -0500
commite33cdb2f8bd8d3e8a4862a64c3a8a056a03a45da (patch)
tree48d37bf440d8fc905722cda8cd58b8231513e812
parentb0138b9c9b8ac12deaebd83b0c665c46c16815c8 (diff)
downloadbrew-e33cdb2f8bd8d3e8a4862a64c3a8a056a03a45da.tar.bz2
Fix python dependency hash equality
eql? should not depend on the hash value as hash values of uneql objects can collide, but eql values may only collide for objects that are actually eql. Further, python dependencies are uniquely identified by the combination of the name and imports attributes, so there is no reason to involved the expensive binary computation for simple equality checks. Fixes Homebrew/homebrew#20840.
-rw-r--r--Library/Homebrew/requirements/python_dependency.rb12
1 files changed, 6 insertions, 6 deletions
diff --git a/Library/Homebrew/requirements/python_dependency.rb b/Library/Homebrew/requirements/python_dependency.rb
index 1fb0730da..3e6206857 100644
--- a/Library/Homebrew/requirements/python_dependency.rb
+++ b/Library/Homebrew/requirements/python_dependency.rb
@@ -16,6 +16,7 @@ require 'requirement'
class PythonInstalled < Requirement
attr_reader :min_version
attr_reader :if3then3
+ attr_reader :imports
attr_accessor :site_packages
attr_accessor :binary # The python.rb formula needs to set the binary
@@ -342,15 +343,14 @@ class PythonInstalled < Requirement
binary.to_s
end
+ # Objects of this class are used to represent dependencies on Python and
+ # dependencies on Python modules, so the combination of name + imports is
+ # enough to identify them uniquely.
def eql?(other)
- instance_of?(other.class) && hash == other.hash
+ instance_of?(other.class) && name == other.name && imports == other.imports
end
def hash
- # Requirements are a ComparableSet. So we define our identity by the
- # selected python binary plus the @imports in order to support multiple:
- # depends_on :python => 'module1'
- # depends_on :python => 'module2'
- (binary.to_s+@imports.to_s).hash
+ [name, *imports].hash
end
end