diff --git a/Library/Homebrew/bundle_version.rb b/Library/Homebrew/bundle_version.rb index 69abe5cfbd..16854fc40d 100644 --- a/Library/Homebrew/bundle_version.rb +++ b/Library/Homebrew/bundle_version.rb @@ -10,6 +10,8 @@ module Homebrew class BundleVersion extend T::Sig + include Comparable + extend SystemCommand::Mixin sig { params(info_plist_path: Pathname).returns(T.nilable(T.attached_class)) } @@ -55,10 +57,15 @@ module Homebrew end def <=>(other) - [version, short_version].map { |v| v&.yield_self(&Version.public_method(:new)) } <=> - [other.version, other.short_version].map { |v| v&.yield_self(&Version.public_method(:new)) } + [version, short_version].map { |v| v&.yield_self(&Version.public_method(:new)) || Version::NULL } <=> + [other.version, other.short_version].map { |v| v&.yield_self(&Version.public_method(:new)) || Version::NULL } end + def ==(other) + instance_of?(other.class) && short_version == other.short_version && version == other.version + end + alias eql? == + # Create a nicely formatted version (on a best effort basis). sig { returns(String) } def nice_version diff --git a/Library/Homebrew/test/bundle_version_spec.rb b/Library/Homebrew/test/bundle_version_spec.rb index 987ec54162..3836fa1fa3 100644 --- a/Library/Homebrew/test/bundle_version_spec.rb +++ b/Library/Homebrew/test/bundle_version_spec.rb @@ -26,4 +26,10 @@ describe Homebrew::BundleVersion do end end end + + describe "#<=>" do + it "does not fail when a `version` is nil" do + expect(described_class.new("1.06", nil)).to be < described_class.new("1.12", "1.12") + end + end end