From 72ebd2127f65d3edf0951b5b3e39b277808ce9cb Mon Sep 17 00:00:00 2001 From: William Ma Date: Fri, 19 Jun 2020 10:36:34 -0400 Subject: [PATCH 01/19] args: add method to retrieve formula and casks --- Library/Homebrew/cli/args.rb | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/Library/Homebrew/cli/args.rb b/Library/Homebrew/cli/args.rb index ac5fd1875b..af4920b1ce 100644 --- a/Library/Homebrew/cli/args.rb +++ b/Library/Homebrew/cli/args.rb @@ -38,6 +38,7 @@ module Homebrew @resolved_formulae = nil @formulae_paths = nil @casks = nil + @formulae_and_casks = nil @kegs = nil self[:named_args] = named_args @@ -107,6 +108,23 @@ module Homebrew .freeze end + def formulae_and_casks + require "cask/cask_loader" + require "cask/exceptions" + + @formulae_and_casks ||= downcased_unique_named.map do |name| + begin + Formulary.factory(name, spec) + rescue FormulaUnavailableError => e + begin + Cask::CaskLoader.load(name) + rescue Cask::CaskUnavailableError + raise e + end + end + end.uniq.freeze + end + def kegs require "keg" require "formula" From cf76f6e721354db4c0501aeb69164d785a3da13e Mon Sep 17 00:00:00 2001 From: William Ma Date: Fri, 19 Jun 2020 10:37:31 -0400 Subject: [PATCH 02/19] cache: integrate brew --cache and cask --cache --- Library/Homebrew/cask/cmd/--cache.rb | 6 +++++- Library/Homebrew/cmd/--cache.rb | 19 ++++++++++++++----- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/Library/Homebrew/cask/cmd/--cache.rb b/Library/Homebrew/cask/cmd/--cache.rb index d3aaf8e027..f54c1484fc 100644 --- a/Library/Homebrew/cask/cmd/--cache.rb +++ b/Library/Homebrew/cask/cmd/--cache.rb @@ -16,10 +16,14 @@ module Cask def run casks.each do |cask| - puts Download.new(cask).downloader.cached_location + puts cached_location(cask) end end + def self.cached_location(cask) + Download.new(cask).downloader.cached_location + end + def self.help "display the file used to cache the Cask" end diff --git a/Library/Homebrew/cmd/--cache.rb b/Library/Homebrew/cmd/--cache.rb index 225bf68747..f4285f77d1 100644 --- a/Library/Homebrew/cmd/--cache.rb +++ b/Library/Homebrew/cmd/--cache.rb @@ -2,6 +2,7 @@ require "fetch" require "cli/parser" +require "cask/cmd" module Homebrew module_function @@ -29,13 +30,21 @@ module Homebrew if args.no_named? puts HOMEBREW_CACHE else - args.formulae.each do |f| - if Fetch.fetch_bottle?(f) - puts f.bottle.cached_download - else - puts f.cached_download + args.formulae_and_casks.each do |formula_or_cask| + case formula_or_cask + when Formula + formula = formula_or_cask + if Fetch.fetch_bottle?(formula) + puts formula.bottle.cached_download + else + puts formula.cached_download + end + when Cask::Cask + cask = formula_or_cask + puts "cask: #{Cask::Cmd::Cache.cached_location(cask)}" end end end end + end From ceb56df834d558d94251414672b97d1c7833ab95 Mon Sep 17 00:00:00 2001 From: William Ma Date: Fri, 19 Jun 2020 10:37:58 -0400 Subject: [PATCH 03/19] home: integrate brew home and cask home --- Library/Homebrew/cmd/home.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Library/Homebrew/cmd/home.rb b/Library/Homebrew/cmd/home.rb index e18726441b..4cdfa68d9a 100644 --- a/Library/Homebrew/cmd/home.rb +++ b/Library/Homebrew/cmd/home.rb @@ -23,7 +23,7 @@ module Homebrew if args.no_named? exec_browser HOMEBREW_WWW else - exec_browser(*args.formulae.map(&:homepage)) + exec_browser(*args.formulae_and_casks.map(&:homepage)) end end end From 46d344c0d10d8668d1c3cd41baa19daf3f96034f Mon Sep 17 00:00:00 2001 From: William Ma Date: Fri, 19 Jun 2020 11:46:33 -0400 Subject: [PATCH 04/19] home: print message when formula is not found --- Library/Homebrew/cmd/home.rb | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/Library/Homebrew/cmd/home.rb b/Library/Homebrew/cmd/home.rb index 4cdfa68d9a..cc6f2a780d 100644 --- a/Library/Homebrew/cmd/home.rb +++ b/Library/Homebrew/cmd/home.rb @@ -1,6 +1,8 @@ # frozen_string_literal: true require "cli/parser" +require "cask/cask_loader" +require "cask/exceptions" module Homebrew module_function @@ -23,7 +25,21 @@ module Homebrew if args.no_named? exec_browser HOMEBREW_WWW else - exec_browser(*args.formulae_and_casks.map(&:homepage)) + homepages = args.named.flat_map do |name| + begin + [Formulary.factory(name).homepage] + rescue FormulaUnavailableError => e + puts e.message + begin + cask = Cask::CaskLoader.load(name) + puts "Found a cask named \"#{name}\" instead." + [cask.homepage] + rescue Cask::CaskUnavailableError + [] + end + end + end + exec_browser *homepages end end end From 9b1d58c53c660fca28a3b1e5c165f643b15060d0 Mon Sep 17 00:00:00 2001 From: William Ma Date: Fri, 19 Jun 2020 14:00:26 -0400 Subject: [PATCH 05/19] cache: alert user when no formula or cask matches the argument --- Library/Homebrew/cli/args.rb | 17 ----------------- Library/Homebrew/cmd/--cache.rb | 18 +++++++++++------- 2 files changed, 11 insertions(+), 24 deletions(-) diff --git a/Library/Homebrew/cli/args.rb b/Library/Homebrew/cli/args.rb index af4920b1ce..75959eb054 100644 --- a/Library/Homebrew/cli/args.rb +++ b/Library/Homebrew/cli/args.rb @@ -108,23 +108,6 @@ module Homebrew .freeze end - def formulae_and_casks - require "cask/cask_loader" - require "cask/exceptions" - - @formulae_and_casks ||= downcased_unique_named.map do |name| - begin - Formulary.factory(name, spec) - rescue FormulaUnavailableError => e - begin - Cask::CaskLoader.load(name) - rescue Cask::CaskUnavailableError - raise e - end - end - end.uniq.freeze - end - def kegs require "keg" require "formula" diff --git a/Library/Homebrew/cmd/--cache.rb b/Library/Homebrew/cmd/--cache.rb index f4285f77d1..dc081fc083 100644 --- a/Library/Homebrew/cmd/--cache.rb +++ b/Library/Homebrew/cmd/--cache.rb @@ -3,6 +3,7 @@ require "fetch" require "cli/parser" require "cask/cmd" +require "cask/cask_loader" module Homebrew module_function @@ -30,18 +31,21 @@ module Homebrew if args.no_named? puts HOMEBREW_CACHE else - args.formulae_and_casks.each do |formula_or_cask| - case formula_or_cask - when Formula - formula = formula_or_cask + args.named.each do |name| + begin + formula = Formulary.factory name if Fetch.fetch_bottle?(formula) puts formula.bottle.cached_download else puts formula.cached_download end - when Cask::Cask - cask = formula_or_cask - puts "cask: #{Cask::Cmd::Cache.cached_location(cask)}" + rescue FormulaUnavailableError => e + begin + cask = Cask::CaskLoader.load name + puts "cask: #{Cask::Cmd::Cache.cached_location(cask)}" + rescue Cask::CaskUnavailableError + ofail "No available formula or cask with the name \"#{name}\"" + end end end end From 049528132582a5587f353a8a015a8f918ecdab44 Mon Sep 17 00:00:00 2001 From: William Ma Date: Mon, 22 Jun 2020 10:46:59 -0400 Subject: [PATCH 06/19] home: write tests using cask as argument --- Library/Homebrew/cmd/--cache.rb | 25 ++++++++++------------- Library/Homebrew/cmd/home.rb | 21 +++++++++---------- Library/Homebrew/test/cmd/home_spec.rb | 28 +++++++++++++++++++++++++- 3 files changed, 48 insertions(+), 26 deletions(-) diff --git a/Library/Homebrew/cmd/--cache.rb b/Library/Homebrew/cmd/--cache.rb index dc081fc083..63408643da 100644 --- a/Library/Homebrew/cmd/--cache.rb +++ b/Library/Homebrew/cmd/--cache.rb @@ -32,23 +32,20 @@ module Homebrew puts HOMEBREW_CACHE else args.named.each do |name| + formula = Formulary.factory name + if Fetch.fetch_bottle?(formula) + puts formula.bottle.cached_download + else + puts formula.cached_download + end + rescue FormulaUnavailableError begin - formula = Formulary.factory name - if Fetch.fetch_bottle?(formula) - puts formula.bottle.cached_download - else - puts formula.cached_download - end - rescue FormulaUnavailableError => e - begin - cask = Cask::CaskLoader.load name - puts "cask: #{Cask::Cmd::Cache.cached_location(cask)}" - rescue Cask::CaskUnavailableError - ofail "No available formula or cask with the name \"#{name}\"" - end + cask = Cask::CaskLoader.load name + puts "cask: #{Cask::Cmd::Cache.cached_location(cask)}" + rescue Cask::CaskUnavailableError + ofail "No available formula or cask with the name \"#{name}\"" end end end end - end diff --git a/Library/Homebrew/cmd/home.rb b/Library/Homebrew/cmd/home.rb index cc6f2a780d..ed42a5a99b 100644 --- a/Library/Homebrew/cmd/home.rb +++ b/Library/Homebrew/cmd/home.rb @@ -25,21 +25,20 @@ module Homebrew if args.no_named? exec_browser HOMEBREW_WWW else - homepages = args.named.flat_map do |name| + homepages = args.named.flat_map do |ref| + [Formulary.factory(ref).homepage] + rescue FormulaUnavailableError => e + puts e.message begin - [Formulary.factory(name).homepage] - rescue FormulaUnavailableError => e + cask = Cask::CaskLoader.load(ref) + puts "Found a cask with ref \"#{ref}\" instead." + [cask.homepage] + rescue Cask::CaskUnavailableError => e puts e.message - begin - cask = Cask::CaskLoader.load(name) - puts "Found a cask named \"#{name}\" instead." - [cask.homepage] - rescue Cask::CaskUnavailableError - [] - end + [] end end - exec_browser *homepages + exec_browser(*homepages) unless homepages.empty? end end end diff --git a/Library/Homebrew/test/cmd/home_spec.rb b/Library/Homebrew/test/cmd/home_spec.rb index 15aee21eb2..c575f3601d 100644 --- a/Library/Homebrew/test/cmd/home_spec.rb +++ b/Library/Homebrew/test/cmd/home_spec.rb @@ -1,17 +1,43 @@ # frozen_string_literal: true require "cmd/shared_examples/args_parse" +require "support/lib/config" describe "Homebrew.home_args" do it_behaves_like "parseable arguments" end describe "brew home", :integration_test do + let(:testballhome_homepage) { + Formula["testballhome"].homepage + } + + let(:local_caffeine_homepage) { + Cask::CaskLoader.load(cask_path("local-caffeine")).homepage + } + it "opens the homepage for a given Formula" do setup_test_formula "testballhome" expect { brew "home", "testballhome", "HOMEBREW_BROWSER" => "echo" } - .to output("#{Formula["testballhome"].homepage}\n").to_stdout + .to output("#{testballhome_homepage}\n").to_stdout + .and not_to_output.to_stderr + .and be_a_success + end + + it "opens the homepage for a given Cask" do + expect { brew "home", cask_path("local-caffeine"), "HOMEBREW_BROWSER" => "echo" } + .to output(/Found a cask with ref ".*" instead.\n#{local_caffeine_homepage}/m).to_stdout + .and not_to_output.to_stderr + .and be_a_success + end + + it "opens the homepages for a given formula and Cask" do + setup_test_formula "testballhome" + + expect { brew "home", "testballhome", cask_path("local-caffeine"), "HOMEBREW_BROWSER" => "echo" } + .to output(/Found a cask with ref ".*" instead.\n#{testballhome_homepage} #{local_caffeine_homepage}/m) + .to_stdout .and not_to_output.to_stderr .and be_a_success end From cf6ff4d84ce30d79b2247d95daff96f01b917793 Mon Sep 17 00:00:00 2001 From: William Ma Date: Mon, 22 Jun 2020 11:24:49 -0400 Subject: [PATCH 07/19] cache: add test for casks --- Library/Homebrew/test/cmd/--cache_spec.rb | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Library/Homebrew/test/cmd/--cache_spec.rb b/Library/Homebrew/test/cmd/--cache_spec.rb index 42b452ec60..fc467f5793 100644 --- a/Library/Homebrew/test/cmd/--cache_spec.rb +++ b/Library/Homebrew/test/cmd/--cache_spec.rb @@ -13,4 +13,18 @@ describe "brew --cache", :integration_test do .and not_to_output.to_stderr .and be_a_success end + + it "prints the cache files for a given Cask" do + expect { brew "--cache", cask_path("local-caffeine") } + .to output(%r{cask: #{HOMEBREW_CACHE}/downloads/[\da-f]{64}--caffeine\.zip}).to_stdout + .and not_to_output.to_stderr + .and be_a_success + end + + it "prints the cache files for a given Formula and Cask" do + expect { brew "--cache", testball, cask_path("local-caffeine") } + .to output(%r{#{HOMEBREW_CACHE}/downloads/[\da-f]{64}--testball-.*\ncask: #{HOMEBREW_CACHE}/downloads/[\da-f]{64}--caffeine\.zip}).to_stdout + .and not_to_output.to_stderr + .and be_a_success + end end From 36520b0a9d54a19635b953613ed7a37863ae9a7e Mon Sep 17 00:00:00 2001 From: William Ma Date: Mon, 22 Jun 2020 11:29:46 -0400 Subject: [PATCH 08/19] cache: fix bug when calling class method --- Library/Homebrew/cask/cmd/--cache.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Library/Homebrew/cask/cmd/--cache.rb b/Library/Homebrew/cask/cmd/--cache.rb index f54c1484fc..7aa96ec33f 100644 --- a/Library/Homebrew/cask/cmd/--cache.rb +++ b/Library/Homebrew/cask/cmd/--cache.rb @@ -16,7 +16,7 @@ module Cask def run casks.each do |cask| - puts cached_location(cask) + puts self.class.cached_location(cask) end end From 7c24ff19d56b73051b3e7f8f6f3fd0a8b325dcb6 Mon Sep 17 00:00:00 2001 From: William Ma Date: Mon, 22 Jun 2020 11:36:04 -0400 Subject: [PATCH 09/19] args: remove unused field --- Library/Homebrew/cli/args.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/Library/Homebrew/cli/args.rb b/Library/Homebrew/cli/args.rb index 75959eb054..ac5fd1875b 100644 --- a/Library/Homebrew/cli/args.rb +++ b/Library/Homebrew/cli/args.rb @@ -38,7 +38,6 @@ module Homebrew @resolved_formulae = nil @formulae_paths = nil @casks = nil - @formulae_and_casks = nil @kegs = nil self[:named_args] = named_args From bd2f5c3b320dec0af48b51bc8bc126f25098d008 Mon Sep 17 00:00:00 2001 From: William Ma Date: Mon, 22 Jun 2020 11:42:15 -0400 Subject: [PATCH 10/19] test cache: split regex into multiple lines --- Library/Homebrew/test/cmd/--cache_spec.rb | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Library/Homebrew/test/cmd/--cache_spec.rb b/Library/Homebrew/test/cmd/--cache_spec.rb index fc467f5793..14397bbfb0 100644 --- a/Library/Homebrew/test/cmd/--cache_spec.rb +++ b/Library/Homebrew/test/cmd/--cache_spec.rb @@ -23,7 +23,12 @@ describe "brew --cache", :integration_test do it "prints the cache files for a given Formula and Cask" do expect { brew "--cache", testball, cask_path("local-caffeine") } - .to output(%r{#{HOMEBREW_CACHE}/downloads/[\da-f]{64}--testball-.*\ncask: #{HOMEBREW_CACHE}/downloads/[\da-f]{64}--caffeine\.zip}).to_stdout + .to output( + %r{ + #{HOMEBREW_CACHE}/downloads/[\da-f]{64}--testball-.*\n + cask:\s#{HOMEBREW_CACHE}/downloads/[\da-f]{64}--caffeine\.zip + }x, + ).to_stdout .and not_to_output.to_stderr .and be_a_success end From 2a11bcf50191766b6ffe088d93d21a73ff292d96 Mon Sep 17 00:00:00 2001 From: William Ma Date: Mon, 22 Jun 2020 15:39:15 -0400 Subject: [PATCH 11/19] rework error handling to show the error for both formula and cask loading --- Library/Homebrew/cmd/--cache.rb | 8 +++++--- Library/Homebrew/cmd/home.rb | 20 ++++++++++---------- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/Library/Homebrew/cmd/--cache.rb b/Library/Homebrew/cmd/--cache.rb index 63408643da..63a61485db 100644 --- a/Library/Homebrew/cmd/--cache.rb +++ b/Library/Homebrew/cmd/--cache.rb @@ -38,12 +38,14 @@ module Homebrew else puts formula.cached_download end - rescue FormulaUnavailableError + rescue FormulaUnavailableError => fe begin cask = Cask::CaskLoader.load name puts "cask: #{Cask::Cmd::Cache.cached_location(cask)}" - rescue Cask::CaskUnavailableError - ofail "No available formula or cask with the name \"#{name}\"" + rescue Cask::CaskUnavailableError => ce + odie "No available formula or cask with the name \"#{name}\"\n" \ + "#{fe.message}\n" \ + "#{ce.message}\n" end end end diff --git a/Library/Homebrew/cmd/home.rb b/Library/Homebrew/cmd/home.rb index ed42a5a99b..575c98c2b0 100644 --- a/Library/Homebrew/cmd/home.rb +++ b/Library/Homebrew/cmd/home.rb @@ -25,20 +25,20 @@ module Homebrew if args.no_named? exec_browser HOMEBREW_WWW else - homepages = args.named.flat_map do |ref| - [Formulary.factory(ref).homepage] - rescue FormulaUnavailableError => e - puts e.message + homepages = args.named.map do |ref| + Formulary.factory(ref).homepage + rescue FormulaUnavailableError => fe begin cask = Cask::CaskLoader.load(ref) - puts "Found a cask with ref \"#{ref}\" instead." - [cask.homepage] - rescue Cask::CaskUnavailableError => e - puts e.message - [] + puts "Formula \"#{ref}\" not found. Found a cask instead." + cask.homepage + rescue Cask::CaskUnavailableError => ce + odie "No available formula or cask with the name \"#{name}\"\n" \ + "#{fe.message}\n" \ + "#{ce.message}\n" end end - exec_browser(*homepages) unless homepages.empty? + exec_browser(*homepages) end end end From 0e61ca671509779c1836cf97ea28f88e6eeeabc9 Mon Sep 17 00:00:00 2001 From: William Ma Date: Mon, 22 Jun 2020 15:55:51 -0400 Subject: [PATCH 12/19] update tests to match new output format --- Library/Homebrew/test/cmd/home_spec.rb | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/Library/Homebrew/test/cmd/home_spec.rb b/Library/Homebrew/test/cmd/home_spec.rb index c575f3601d..2cf41a4b60 100644 --- a/Library/Homebrew/test/cmd/home_spec.rb +++ b/Library/Homebrew/test/cmd/home_spec.rb @@ -12,8 +12,12 @@ describe "brew home", :integration_test do Formula["testballhome"].homepage } + let(:local_caffeine_path) { + cask_path("local-caffeine") + } + let(:local_caffeine_homepage) { - Cask::CaskLoader.load(cask_path("local-caffeine")).homepage + Cask::CaskLoader.load(local_caffeine_path).homepage } it "opens the homepage for a given Formula" do @@ -27,7 +31,8 @@ describe "brew home", :integration_test do it "opens the homepage for a given Cask" do expect { brew "home", cask_path("local-caffeine"), "HOMEBREW_BROWSER" => "echo" } - .to output(/Found a cask with ref ".*" instead.\n#{local_caffeine_homepage}/m).to_stdout + .to output(/Formula "#{local_caffeine_path}" not found. Found a cask instead.\n#{local_caffeine_homepage}/m) + .to_stdout .and not_to_output.to_stderr .and be_a_success end @@ -36,7 +41,7 @@ describe "brew home", :integration_test do setup_test_formula "testballhome" expect { brew "home", "testballhome", cask_path("local-caffeine"), "HOMEBREW_BROWSER" => "echo" } - .to output(/Found a cask with ref ".*" instead.\n#{testballhome_homepage} #{local_caffeine_homepage}/m) + .to output(/Formula "#{local_caffeine_path}" not found. Found a cask instead.\n#{testballhome_homepage} #{local_caffeine_homepage}/m) .to_stdout .and not_to_output.to_stderr .and be_a_success From 78ccb0516631e1b15363df33a149e831d49df2bd Mon Sep 17 00:00:00 2001 From: William Ma Date: Mon, 22 Jun 2020 16:07:18 -0400 Subject: [PATCH 13/19] Fix style issues --- Library/Homebrew/cmd/--cache.rb | 10 ++++++---- Library/Homebrew/cmd/home.rb | 10 ++++++---- Library/Homebrew/test/cmd/home_spec.rb | 6 ++---- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/Library/Homebrew/cmd/--cache.rb b/Library/Homebrew/cmd/--cache.rb index 63a61485db..2f4a06cea5 100644 --- a/Library/Homebrew/cmd/--cache.rb +++ b/Library/Homebrew/cmd/--cache.rb @@ -38,14 +38,16 @@ module Homebrew else puts formula.cached_download end - rescue FormulaUnavailableError => fe + rescue FormulaUnavailableError => e + formula_error_message = e.message begin cask = Cask::CaskLoader.load name puts "cask: #{Cask::Cmd::Cache.cached_location(cask)}" - rescue Cask::CaskUnavailableError => ce + rescue Cask::CaskUnavailableError => e + cask_error_message = e.message odie "No available formula or cask with the name \"#{name}\"\n" \ - "#{fe.message}\n" \ - "#{ce.message}\n" + "#{formula_error_message}\n" \ + "#{cask_error_message}\n" end end end diff --git a/Library/Homebrew/cmd/home.rb b/Library/Homebrew/cmd/home.rb index 575c98c2b0..2b1171cbb4 100644 --- a/Library/Homebrew/cmd/home.rb +++ b/Library/Homebrew/cmd/home.rb @@ -27,15 +27,17 @@ module Homebrew else homepages = args.named.map do |ref| Formulary.factory(ref).homepage - rescue FormulaUnavailableError => fe + rescue FormulaUnavailableError => e + formula_error_message = e.message begin cask = Cask::CaskLoader.load(ref) puts "Formula \"#{ref}\" not found. Found a cask instead." cask.homepage - rescue Cask::CaskUnavailableError => ce + rescue Cask::CaskUnavailableError => e + cask_error_message = e.message odie "No available formula or cask with the name \"#{name}\"\n" \ - "#{fe.message}\n" \ - "#{ce.message}\n" + "#{formula_error_message}\n" \ + "#{cask_error_message}\n" end end exec_browser(*homepages) diff --git a/Library/Homebrew/test/cmd/home_spec.rb b/Library/Homebrew/test/cmd/home_spec.rb index 2cf41a4b60..17d22ffe94 100644 --- a/Library/Homebrew/test/cmd/home_spec.rb +++ b/Library/Homebrew/test/cmd/home_spec.rb @@ -31,8 +31,7 @@ describe "brew home", :integration_test do it "opens the homepage for a given Cask" do expect { brew "home", cask_path("local-caffeine"), "HOMEBREW_BROWSER" => "echo" } - .to output(/Formula "#{local_caffeine_path}" not found. Found a cask instead.\n#{local_caffeine_homepage}/m) - .to_stdout + .to output(/#{local_caffeine_homepage}/).to_stdout .and not_to_output.to_stderr .and be_a_success end @@ -41,8 +40,7 @@ describe "brew home", :integration_test do setup_test_formula "testballhome" expect { brew "home", "testballhome", cask_path("local-caffeine"), "HOMEBREW_BROWSER" => "echo" } - .to output(/Formula "#{local_caffeine_path}" not found. Found a cask instead.\n#{testballhome_homepage} #{local_caffeine_homepage}/m) - .to_stdout + .to output(/#{testballhome_homepage} #{local_caffeine_homepage}/).to_stdout .and not_to_output.to_stderr .and be_a_success end From 11fbf9d035033467009ae0252b4496b34923c425 Mon Sep 17 00:00:00 2001 From: William Ma Date: Tue, 23 Jun 2020 09:30:24 -0400 Subject: [PATCH 14/19] cache: Add flags for printing only formulae or casks --- Library/Homebrew/cmd/--cache.rb | 48 ++++++++++++++++++++++----------- 1 file changed, 33 insertions(+), 15 deletions(-) diff --git a/Library/Homebrew/cmd/--cache.rb b/Library/Homebrew/cmd/--cache.rb index 2f4a06cea5..b9416d8be2 100644 --- a/Library/Homebrew/cmd/--cache.rb +++ b/Library/Homebrew/cmd/--cache.rb @@ -11,17 +11,22 @@ module Homebrew def __cache_args Homebrew::CLI::Parser.new do usage_banner <<~EOS - `--cache` [] [] + `--cache` [] [] Display Homebrew's download cache. See also `HOMEBREW_CACHE`. - If is provided, display the file or directory used to cache . + If is provided, display the file or directory used to cache . EOS switch "-s", "--build-from-source", description: "Show the cache file used when building from source." switch "--force-bottle", description: "Show the cache file used when pouring a bottle." + switch "--formula", + description: "Show cache files for only formulae" + switch "--cask", + description: "Show cache files for only casks" conflicts "--build-from-source", "--force-bottle" + conflicts "--formula", "--cask" end end @@ -30,26 +35,39 @@ module Homebrew if args.no_named? puts HOMEBREW_CACHE + elsif args.formula? + args.named.each do |name| + print_formula_cache name + end + elsif args.cask? + args.named.each do |name| + print_cask_cache name + end else args.named.each do |name| - formula = Formulary.factory name - if Fetch.fetch_bottle?(formula) - puts formula.bottle.cached_download - else - puts formula.cached_download - end + print_formula_cache name rescue FormulaUnavailableError => e - formula_error_message = e.message begin - cask = Cask::CaskLoader.load name - puts "cask: #{Cask::Cmd::Cache.cached_location(cask)}" + print_cask_cache name rescue Cask::CaskUnavailableError => e - cask_error_message = e.message - odie "No available formula or cask with the name \"#{name}\"\n" \ - "#{formula_error_message}\n" \ - "#{cask_error_message}\n" + odie "No available formula or cask with the name \"#{name}\"" end end end end + + def print_formula_cache(name) + formula = Formulary.factory name + if Fetch.fetch_bottle?(formula) + puts formula.bottle.cached_download + else + puts formula.cached_download + end + end + + def print_cask_cache(name) + cask = Cask::CaskLoader.load name + puts Cask::Cmd::Cache.cached_location(cask) + end + end From 27abc8c50ba86c5e7c7dbd342906dda8773b5dd8 Mon Sep 17 00:00:00 2001 From: William Ma Date: Tue, 23 Jun 2020 09:44:17 -0400 Subject: [PATCH 15/19] home: Print info for each formula/cask opened --- Library/Homebrew/cmd/home.rb | 20 +++++++++----------- Library/Homebrew/test/cmd/--cache_spec.rb | 4 ++-- Library/Homebrew/test/cmd/home_spec.rb | 2 +- 3 files changed, 12 insertions(+), 14 deletions(-) diff --git a/Library/Homebrew/cmd/home.rb b/Library/Homebrew/cmd/home.rb index 2b1171cbb4..3a546c15fa 100644 --- a/Library/Homebrew/cmd/home.rb +++ b/Library/Homebrew/cmd/home.rb @@ -25,19 +25,17 @@ module Homebrew if args.no_named? exec_browser HOMEBREW_WWW else - homepages = args.named.map do |ref| - Formulary.factory(ref).homepage - rescue FormulaUnavailableError => e - formula_error_message = e.message + homepages = args.named.map do |name| + f = Formulary.factory(name) + puts "Opening homepage for formula #{name}" + f.homepage + rescue FormulaUnavailableError begin - cask = Cask::CaskLoader.load(ref) - puts "Formula \"#{ref}\" not found. Found a cask instead." - cask.homepage + c = Cask::CaskLoader.load(name) + puts "Opening homepage for cask #{name}" + c.homepage rescue Cask::CaskUnavailableError => e - cask_error_message = e.message - odie "No available formula or cask with the name \"#{name}\"\n" \ - "#{formula_error_message}\n" \ - "#{cask_error_message}\n" + odie "No available formula or cask with the name \"#{name}\"" end end exec_browser(*homepages) diff --git a/Library/Homebrew/test/cmd/--cache_spec.rb b/Library/Homebrew/test/cmd/--cache_spec.rb index 14397bbfb0..ea8c263fc7 100644 --- a/Library/Homebrew/test/cmd/--cache_spec.rb +++ b/Library/Homebrew/test/cmd/--cache_spec.rb @@ -16,7 +16,7 @@ describe "brew --cache", :integration_test do it "prints the cache files for a given Cask" do expect { brew "--cache", cask_path("local-caffeine") } - .to output(%r{cask: #{HOMEBREW_CACHE}/downloads/[\da-f]{64}--caffeine\.zip}).to_stdout + .to output(%r{#{HOMEBREW_CACHE}/downloads/[\da-f]{64}--caffeine\.zip}).to_stdout .and not_to_output.to_stderr .and be_a_success end @@ -26,7 +26,7 @@ describe "brew --cache", :integration_test do .to output( %r{ #{HOMEBREW_CACHE}/downloads/[\da-f]{64}--testball-.*\n - cask:\s#{HOMEBREW_CACHE}/downloads/[\da-f]{64}--caffeine\.zip + #{HOMEBREW_CACHE}/downloads/[\da-f]{64}--caffeine\.zip }x, ).to_stdout .and not_to_output.to_stderr diff --git a/Library/Homebrew/test/cmd/home_spec.rb b/Library/Homebrew/test/cmd/home_spec.rb index 17d22ffe94..be1084ea51 100644 --- a/Library/Homebrew/test/cmd/home_spec.rb +++ b/Library/Homebrew/test/cmd/home_spec.rb @@ -24,7 +24,7 @@ describe "brew home", :integration_test do setup_test_formula "testballhome" expect { brew "home", "testballhome", "HOMEBREW_BROWSER" => "echo" } - .to output("#{testballhome_homepage}\n").to_stdout + .to output(/#{testballhome_homepage}/).to_stdout .and not_to_output.to_stderr .and be_a_success end From efdf9ce1aa78156fe20b3c396fcdcf9ff7822715 Mon Sep 17 00:00:00 2001 From: William Ma Date: Tue, 23 Jun 2020 09:50:45 -0400 Subject: [PATCH 16/19] style: Fix style --- Library/Homebrew/cmd/--cache.rb | 9 ++++----- Library/Homebrew/cmd/home.rb | 2 +- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/Library/Homebrew/cmd/--cache.rb b/Library/Homebrew/cmd/--cache.rb index b9416d8be2..3dad5d8134 100644 --- a/Library/Homebrew/cmd/--cache.rb +++ b/Library/Homebrew/cmd/--cache.rb @@ -46,10 +46,10 @@ module Homebrew else args.named.each do |name| print_formula_cache name - rescue FormulaUnavailableError => e + rescue FormulaUnavailableError begin print_cask_cache name - rescue Cask::CaskUnavailableError => e + rescue Cask::CaskUnavailableError odie "No available formula or cask with the name \"#{name}\"" end end @@ -66,8 +66,7 @@ module Homebrew end def print_cask_cache(name) - cask = Cask::CaskLoader.load name - puts Cask::Cmd::Cache.cached_location(cask) + cask = Cask::CaskLoader.load name + puts Cask::Cmd::Cache.cached_location(cask) end - end diff --git a/Library/Homebrew/cmd/home.rb b/Library/Homebrew/cmd/home.rb index 3a546c15fa..e567febfab 100644 --- a/Library/Homebrew/cmd/home.rb +++ b/Library/Homebrew/cmd/home.rb @@ -34,7 +34,7 @@ module Homebrew c = Cask::CaskLoader.load(name) puts "Opening homepage for cask #{name}" c.homepage - rescue Cask::CaskUnavailableError => e + rescue Cask::CaskUnavailableError odie "No available formula or cask with the name \"#{name}\"" end end From cdcaa8b58cc703a2e6fc4dada0c4d7add5a80110 Mon Sep 17 00:00:00 2001 From: William Ma Date: Tue, 23 Jun 2020 09:56:56 -0400 Subject: [PATCH 17/19] man: Update manpages --- docs/Manpage.md | 9 +++++++-- manpages/brew.1 | 12 ++++++++++-- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/docs/Manpage.md b/docs/Manpage.md index 0b746685a1..4371e5e04b 100644 --- a/docs/Manpage.md +++ b/docs/Manpage.md @@ -577,16 +577,21 @@ recommended dependency for their stable builds. * `--HEAD`: Show usage of *`formula`* by HEAD builds. -### `--cache` [*`options`*] [*`formula`*] +### `--cache` [*`options`*] [] Display Homebrew's download cache. See also `HOMEBREW_CACHE`. -If *`formula`* is provided, display the file or directory used to cache *`formula`*. +If is provided, display the file or directory used to cache +. * `-s`, `--build-from-source`: Show the cache file used when building from source. * `--force-bottle`: Show the cache file used when pouring a bottle. +* `--formula`: + Show cache files for only formulae +* `--cask`: + Show cache files for only casks ### `--cellar` [*`formula`*] diff --git a/manpages/brew.1 b/manpages/brew.1 index 49bf5bd86e..5e5f84e104 100644 --- a/manpages/brew.1 +++ b/manpages/brew.1 @@ -749,11 +749,11 @@ Show usage of \fIformula\fR by development builds\. \fB\-\-HEAD\fR Show usage of \fIformula\fR by HEAD builds\. . -.SS "\fB\-\-cache\fR [\fIoptions\fR] [\fIformula\fR]" +.SS "\fB\-\-cache\fR [\fIoptions\fR] []" Display Homebrew\'s download cache\. See also \fBHOMEBREW_CACHE\fR\. . .P -If \fIformula\fR is provided, display the file or directory used to cache \fIformula\fR\. +If is provided, display the file or directory used to cache \. . .TP \fB\-s\fR, \fB\-\-build\-from\-source\fR @@ -763,6 +763,14 @@ Show the cache file used when building from source\. \fB\-\-force\-bottle\fR Show the cache file used when pouring a bottle\. . +.TP +\fB\-\-formula\fR +Show cache files for only formulae +. +.TP +\fB\-\-cask\fR +Show cache files for only casks +. .SS "\fB\-\-cellar\fR [\fIformula\fR]" Display Homebrew\'s Cellar path\. \fIDefault:\fR \fB$(brew \-\-prefix)/Cellar\fR, or if that directory doesn\'t exist, \fB$(brew \-\-repository)/Cellar\fR\. . From d0c138ad985fa70f55792288f73a31e01656e37b Mon Sep 17 00:00:00 2001 From: William Ma Date: Tue, 23 Jun 2020 11:50:50 -0400 Subject: [PATCH 18/19] cache: Remove slashes from documentation --- Library/Homebrew/cmd/--cache.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Library/Homebrew/cmd/--cache.rb b/Library/Homebrew/cmd/--cache.rb index 3dad5d8134..de6c1ac0a0 100644 --- a/Library/Homebrew/cmd/--cache.rb +++ b/Library/Homebrew/cmd/--cache.rb @@ -11,11 +11,11 @@ module Homebrew def __cache_args Homebrew::CLI::Parser.new do usage_banner <<~EOS - `--cache` [] [] + `--cache` [] [] Display Homebrew's download cache. See also `HOMEBREW_CACHE`. - If is provided, display the file or directory used to cache . + If is provided, display the file or directory used to cache . EOS switch "-s", "--build-from-source", description: "Show the cache file used when building from source." From 76a0b0e95ed161056fa15043576887f81122dcf1 Mon Sep 17 00:00:00 2001 From: William Ma Date: Tue, 23 Jun 2020 11:51:19 -0400 Subject: [PATCH 19/19] man: Update manpages --- docs/Manpage.md | 5 ++--- manpages/brew.1 | 4 ++-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/docs/Manpage.md b/docs/Manpage.md index 4371e5e04b..08f0704b82 100644 --- a/docs/Manpage.md +++ b/docs/Manpage.md @@ -577,12 +577,11 @@ recommended dependency for their stable builds. * `--HEAD`: Show usage of *`formula`* by HEAD builds. -### `--cache` [*`options`*] [] +### `--cache` [*`options`*] [*`formula`*] Display Homebrew's download cache. See also `HOMEBREW_CACHE`. -If is provided, display the file or directory used to cache -. +If *`formula`* is provided, display the file or directory used to cache *`formula`*. * `-s`, `--build-from-source`: Show the cache file used when building from source. diff --git a/manpages/brew.1 b/manpages/brew.1 index 5e5f84e104..306753f6ac 100644 --- a/manpages/brew.1 +++ b/manpages/brew.1 @@ -749,11 +749,11 @@ Show usage of \fIformula\fR by development builds\. \fB\-\-HEAD\fR Show usage of \fIformula\fR by HEAD builds\. . -.SS "\fB\-\-cache\fR [\fIoptions\fR] []" +.SS "\fB\-\-cache\fR [\fIoptions\fR] [\fIformula\fR]" Display Homebrew\'s download cache\. See also \fBHOMEBREW_CACHE\fR\. . .P -If is provided, display the file or directory used to cache \. +If \fIformula\fR is provided, display the file or directory used to cache \fIformula\fR\. . .TP \fB\-s\fR, \fB\-\-build\-from\-source\fR