move logic from leaves to formula
This commit is contained in:
parent
cbb0b87e75
commit
f95e1729a2
@ -2,7 +2,6 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "formula"
|
||||
require "tab"
|
||||
require "cli/parser"
|
||||
|
||||
module Homebrew
|
||||
@ -23,9 +22,7 @@ module Homebrew
|
||||
def leaves
|
||||
leaves_args.parse
|
||||
|
||||
installed = Formula.installed.sort
|
||||
deps_of_installed = installed.flat_map(&:runtime_formula_dependencies)
|
||||
leaves = installed.map(&:full_name) - deps_of_installed.map(&:full_name)
|
||||
leaves = Formula.installed_non_deps.map(&:full_name).sort
|
||||
leaves.each(&method(:puts))
|
||||
end
|
||||
end
|
||||
|
@ -1515,6 +1515,18 @@ class Formula
|
||||
end.uniq(&:name)
|
||||
end
|
||||
|
||||
# An array of installed {Formula} that are dependencies of other installed {Formula}
|
||||
# @private
|
||||
def self.installed_deps(formulae=installed)
|
||||
formulae.flat_map(&:runtime_formula_dependencies).uniq(&:name)
|
||||
end
|
||||
|
||||
# An array of all installed {Formula} that are not dependencies of other installed {Formula}
|
||||
# @private
|
||||
def self.installed_non_deps(formulae=installed)
|
||||
formulae - installed_deps(formulae)
|
||||
end
|
||||
|
||||
def self.installed_with_alias_path(alias_path)
|
||||
return [] if alias_path.nil?
|
||||
|
||||
|
@ -8,14 +8,42 @@ describe "Homebrew.leaves_args" do
|
||||
end
|
||||
|
||||
describe "brew leaves", :integration_test do
|
||||
it "prints all Formulae that are not dependencies of other Formulae" do
|
||||
setup_test_formula "foo"
|
||||
setup_test_formula "bar"
|
||||
(HOMEBREW_CELLAR/"foo/0.1/somedir").mkpath
|
||||
context "when there are no installed Formulae" do
|
||||
it "prints nothing" do
|
||||
setup_test_formula "foo"
|
||||
setup_test_formula "bar"
|
||||
|
||||
expect { brew "leaves" }
|
||||
.to output("foo\n").to_stdout
|
||||
.and not_to_output.to_stderr
|
||||
.and be_a_success
|
||||
expect { brew "leaves" }
|
||||
.to not_to_output.to_stdout
|
||||
.and not_to_output.to_stderr
|
||||
.and be_a_success
|
||||
end
|
||||
end
|
||||
|
||||
context "when there are only installed Formulae without dependencies" do
|
||||
it "prints all installed Formulae" do
|
||||
setup_test_formula "foo"
|
||||
setup_test_formula "bar"
|
||||
(HOMEBREW_CELLAR/"foo/0.1/somedir").mkpath
|
||||
|
||||
expect { brew "leaves" }
|
||||
.to output("foo\n").to_stdout
|
||||
.and not_to_output.to_stderr
|
||||
.and be_a_success
|
||||
end
|
||||
end
|
||||
|
||||
context "when there are installed Formulae" do
|
||||
it "prints all installed Formulae that are not dependencies of another installed Formula" do
|
||||
setup_test_formula "foo"
|
||||
setup_test_formula "bar"
|
||||
(HOMEBREW_CELLAR/"foo/0.1/somedir").mkpath
|
||||
(HOMEBREW_CELLAR/"bar/0.1/somedir").mkpath
|
||||
|
||||
expect { brew "leaves" }
|
||||
.to output("bar\n").to_stdout
|
||||
.and not_to_output.to_stderr
|
||||
.and be_a_success
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -440,6 +440,80 @@ describe Formula do
|
||||
end
|
||||
end
|
||||
|
||||
describe "::installed_deps" do
|
||||
let(:formula_is_dep) do
|
||||
formula "foo" do
|
||||
url "foo-1.1"
|
||||
end
|
||||
end
|
||||
|
||||
let(:formula_with_deps) do
|
||||
formula "bar" do
|
||||
url "bar-1.0"
|
||||
end
|
||||
end
|
||||
|
||||
let(:formulae) do
|
||||
[
|
||||
formula_with_deps,
|
||||
formula_is_dep
|
||||
]
|
||||
end
|
||||
|
||||
before do
|
||||
allow(formula_with_deps).to receive(:runtime_formula_dependencies).and_return([ formula_is_dep ])
|
||||
end
|
||||
|
||||
specify "without formulae parameter" do
|
||||
allow(described_class).to receive(:installed).and_return(formulae)
|
||||
|
||||
expect(described_class.installed_deps)
|
||||
.to eq([formula_is_dep])
|
||||
end
|
||||
|
||||
specify "with formulae parameter" do
|
||||
expect(described_class.installed_deps(formulae))
|
||||
.to eq([formula_is_dep])
|
||||
end
|
||||
end
|
||||
|
||||
describe "::installed_non_deps" do
|
||||
let(:formula_is_dep) do
|
||||
formula "foo" do
|
||||
url "foo-1.1"
|
||||
end
|
||||
end
|
||||
|
||||
let(:formula_with_deps) do
|
||||
formula "bar" do
|
||||
url "bar-1.0"
|
||||
end
|
||||
end
|
||||
|
||||
let(:formulae) do
|
||||
[
|
||||
formula_with_deps,
|
||||
formula_is_dep
|
||||
]
|
||||
end
|
||||
|
||||
before do
|
||||
allow(formula_with_deps).to receive(:runtime_formula_dependencies).and_return([ formula_is_dep ])
|
||||
end
|
||||
|
||||
specify "without formulae parameter" do
|
||||
allow(described_class).to receive(:installed).and_return(formulae)
|
||||
|
||||
expect(described_class.installed_non_deps)
|
||||
.to eq([formula_with_deps])
|
||||
end
|
||||
|
||||
specify "with formulae parameter" do
|
||||
expect(described_class.installed_non_deps(formulae))
|
||||
.to eq([formula_with_deps])
|
||||
end
|
||||
end
|
||||
|
||||
describe "::installed_with_alias_path" do
|
||||
specify "with alias path with nil" do
|
||||
expect(described_class.installed_with_alias_path(nil)).to be_empty
|
||||
|
Loading…
x
Reference in New Issue
Block a user