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.
This commit is contained in:
parent
b0138b9c9b
commit
e33cdb2f8b
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user