Skip to content
Snippets Groups Projects
Commit e33cdb2f authored by Jack Nagel's avatar Jack Nagel
Browse files

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.
parent b0138b9c
No related branches found
No related tags found
No related merge requests found
......@@ -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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment