From 3dde12c634b05af556d3fdc7a5aceccdb866ec8b Mon Sep 17 00:00:00 2001 From: Connor Mann Date: Wed, 4 Aug 2021 18:51:39 -0400 Subject: [PATCH 1/4] Handle only HEAD kegs in `to_latest_kegs` --- Library/Homebrew/cli/named_args.rb | 6 +++++- Library/Homebrew/test/cli/named_args_spec.rb | 8 +++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/Library/Homebrew/cli/named_args.rb b/Library/Homebrew/cli/named_args.rb index cd49751f4..2ab333f14 100644 --- a/Library/Homebrew/cli/named_args.rb +++ b/Library/Homebrew/cli/named_args.rb @@ -324,7 +324,11 @@ module Homebrew # Return keg if it is the only installed keg return kegs if kegs.length == 1 - kegs.reject { |k| k.version.head? }.max_by(&:version) + eligible_kegs = kegs.reject { |k| k.version.head? } + # Use HEAD kegs if there are no stable kegs + eligible_kegs = kegs if eligible_kegs.blank? + + eligible_kegs.max_by(&:version) end def resolve_default_keg(name) diff --git a/Library/Homebrew/test/cli/named_args_spec.rb b/Library/Homebrew/test/cli/named_args_spec.rb index 4f5130a55..b3c9c1604 100644 --- a/Library/Homebrew/test/cli/named_args_spec.rb +++ b/Library/Homebrew/test/cli/named_args_spec.rb @@ -223,12 +223,14 @@ describe Homebrew::CLI::NamedArgs do (HOMEBREW_CELLAR/"foo/1.0").mkpath (HOMEBREW_CELLAR/"foo/2.0").mkpath (HOMEBREW_CELLAR/"bar/1.0").mkpath + (HOMEBREW_CELLAR/"baz/HEAD-1").mkpath + (HOMEBREW_CELLAR/"baz/HEAD-2").mkpath end it "resolves the latest kegs with #resolve_latest_keg" do - latest_kegs = described_class.new("foo", "bar").to_latest_kegs - expect(latest_kegs.map(&:name)).to eq ["foo", "bar"] - expect(latest_kegs.map { |k| k.version.version.to_s }).to eq ["2.0", "1.0"] + latest_kegs = described_class.new("foo", "bar", "baz").to_latest_kegs + expect(latest_kegs.map(&:name)).to eq ["foo", "bar", "baz"] + expect(latest_kegs.map { |k| k.version.version.to_s }).to eq ["2.0", "1.0", "HEAD-1"] end it "when there are no matching kegs returns an empty array" do From 363bcbd72abc574334e4f2eec194752210bddfcb Mon Sep 17 00:00:00 2001 From: Connor Mann Date: Fri, 6 Aug 2021 21:27:21 -0400 Subject: [PATCH 2/4] Sort head kegs by tab modification time --- Library/Homebrew/cli/named_args.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Library/Homebrew/cli/named_args.rb b/Library/Homebrew/cli/named_args.rb index 2ab333f14..08c3af498 100644 --- a/Library/Homebrew/cli/named_args.rb +++ b/Library/Homebrew/cli/named_args.rb @@ -324,11 +324,11 @@ module Homebrew # Return keg if it is the only installed keg return kegs if kegs.length == 1 - eligible_kegs = kegs.reject { |k| k.version.head? } - # Use HEAD kegs if there are no stable kegs - eligible_kegs = kegs if eligible_kegs.blank? + stable_kegs = kegs.reject { |k| k.version.head? } - eligible_kegs.max_by(&:version) + return kegs.max_by { |keg| Tab.for_keg(keg).source_modified_time } if stable_kegs.blank? + + stable_kegs.max_by(&:version) end def resolve_default_keg(name) From 1581a29b28f3b6346a68547e59f4bce907e77845 Mon Sep 17 00:00:00 2001 From: Connor Mann Date: Fri, 6 Aug 2021 22:34:30 -0400 Subject: [PATCH 3/4] Update tests --- Library/Homebrew/test/cli/named_args_spec.rb | 8 +++++--- Library/Homebrew/test/support/fixtures/receipt.json | 1 + 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/Library/Homebrew/test/cli/named_args_spec.rb b/Library/Homebrew/test/cli/named_args_spec.rb index b3c9c1604..46505a4eb 100644 --- a/Library/Homebrew/test/cli/named_args_spec.rb +++ b/Library/Homebrew/test/cli/named_args_spec.rb @@ -223,14 +223,16 @@ describe Homebrew::CLI::NamedArgs do (HOMEBREW_CELLAR/"foo/1.0").mkpath (HOMEBREW_CELLAR/"foo/2.0").mkpath (HOMEBREW_CELLAR/"bar/1.0").mkpath - (HOMEBREW_CELLAR/"baz/HEAD-1").mkpath - (HOMEBREW_CELLAR/"baz/HEAD-2").mkpath + head1 = (HOMEBREW_CELLAR/"baz/HEAD-1").mkpath + head2 = HOMEBREW_CELLAR/"baz/HEAD-2" + head2.mkpath + (head2/"INSTALL_RECEIPT.json").write (TEST_FIXTURE_DIR/"receipt.json").read end it "resolves the latest kegs with #resolve_latest_keg" do latest_kegs = described_class.new("foo", "bar", "baz").to_latest_kegs expect(latest_kegs.map(&:name)).to eq ["foo", "bar", "baz"] - expect(latest_kegs.map { |k| k.version.version.to_s }).to eq ["2.0", "1.0", "HEAD-1"] + expect(latest_kegs.map { |k| k.version.version.to_s }).to eq ["2.0", "1.0", "HEAD-2"] end it "when there are no matching kegs returns an empty array" do diff --git a/Library/Homebrew/test/support/fixtures/receipt.json b/Library/Homebrew/test/support/fixtures/receipt.json index 7fd64acc0..6907ae040 100644 --- a/Library/Homebrew/test/support/fixtures/receipt.json +++ b/Library/Homebrew/test/support/fixtures/receipt.json @@ -15,6 +15,7 @@ "bin/foo" ], "time": 1403827774, + "source_modified_time": 1628303333, "HEAD": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeef", "alias_path": "/usr/local/Library/Taps/homebrew/homebrew-core/Aliases/test-formula", "stdlib": "libcxx", From ed7066c183443cd6b147668bb9b0ea0063a575ae Mon Sep 17 00:00:00 2001 From: Connor Mann Date: Fri, 6 Aug 2021 22:35:16 -0400 Subject: [PATCH 4/4] Style fix --- Library/Homebrew/test/cli/named_args_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Library/Homebrew/test/cli/named_args_spec.rb b/Library/Homebrew/test/cli/named_args_spec.rb index 46505a4eb..0f734816a 100644 --- a/Library/Homebrew/test/cli/named_args_spec.rb +++ b/Library/Homebrew/test/cli/named_args_spec.rb @@ -223,7 +223,7 @@ describe Homebrew::CLI::NamedArgs do (HOMEBREW_CELLAR/"foo/1.0").mkpath (HOMEBREW_CELLAR/"foo/2.0").mkpath (HOMEBREW_CELLAR/"bar/1.0").mkpath - head1 = (HOMEBREW_CELLAR/"baz/HEAD-1").mkpath + (HOMEBREW_CELLAR/"baz/HEAD-1").mkpath head2 = HOMEBREW_CELLAR/"baz/HEAD-2" head2.mkpath (head2/"INSTALL_RECEIPT.json").write (TEST_FIXTURE_DIR/"receipt.json").read