From 1f8ebf5d20f81aea87b95710a2841134dbfa4a32 Mon Sep 17 00:00:00 2001 From: Michka Popoff Date: Sat, 6 Jun 2020 12:31:13 +0200 Subject: [PATCH 1/3] resource: allow on_os blocks --- Library/Homebrew/extend/os/linux/resource.rb | 9 +++++++++ Library/Homebrew/extend/os/mac/resource.rb | 9 +++++++++ Library/Homebrew/extend/os/resource.rb | 7 +++++++ Library/Homebrew/formula.rb | 4 ++-- Library/Homebrew/resource.rb | 14 ++++++++++++++ .../Homebrew/test/os/linux/formula_spec.rb | 19 +++++++++++++++++++ Library/Homebrew/test/os/mac/formula_spec.rb | 19 +++++++++++++++++++ 7 files changed, 79 insertions(+), 2 deletions(-) create mode 100644 Library/Homebrew/extend/os/linux/resource.rb create mode 100644 Library/Homebrew/extend/os/mac/resource.rb create mode 100644 Library/Homebrew/extend/os/resource.rb diff --git a/Library/Homebrew/extend/os/linux/resource.rb b/Library/Homebrew/extend/os/linux/resource.rb new file mode 100644 index 0000000000..a5af426c05 --- /dev/null +++ b/Library/Homebrew/extend/os/linux/resource.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +class Resource + undef on_linux + + def on_linux(&_block) + yield + end +end diff --git a/Library/Homebrew/extend/os/mac/resource.rb b/Library/Homebrew/extend/os/mac/resource.rb new file mode 100644 index 0000000000..2c53218564 --- /dev/null +++ b/Library/Homebrew/extend/os/mac/resource.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +class Resource + undef on_macos + + def on_macos(&_block) + yield + end +end diff --git a/Library/Homebrew/extend/os/resource.rb b/Library/Homebrew/extend/os/resource.rb new file mode 100644 index 0000000000..9ad337890c --- /dev/null +++ b/Library/Homebrew/extend/os/resource.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +if OS.mac? + require "extend/os/mac/resource" +elsif OS.linux? + require "extend/os/linux/resource" +end diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb index 2a37b445dc..90448c1549 100644 --- a/Library/Homebrew/formula.rb +++ b/Library/Homebrew/formula.rb @@ -2474,13 +2474,13 @@ class Formula specs.each { |spec| spec.uses_from_macos(dep, bounds) } end - # Block executed only executed on macOS. No-op on Linux. + # Block only executed on macOS. No-op on Linux. #
on_macos do
     #   depends_on "mac_only_dep"
     # end
def on_macos(&_block); end - # Block executed only executed on Linux. No-op on macOS. + # Block only executed on Linux. No-op on macOS. #
on_linux do
     #   depends_on "linux_only_dep"
     # end
diff --git a/Library/Homebrew/resource.rb b/Library/Homebrew/resource.rb index 9053ac8b4d..4b00e4ea3a 100644 --- a/Library/Homebrew/resource.rb +++ b/Library/Homebrew/resource.rb @@ -178,6 +178,18 @@ class Resource patches << p end + # Block only executed on macOS. No-op on Linux. + #
on_macos do
+  #   url "mac_only_url"
+  # end
+ def on_macos(&_block); end + + # Block only executed on Linux. No-op on macOS. + #
on_linux do
+  #   url "linux_only_url"
+  # end
+ def on_linux(&_block); end + protected def mktemp(prefix) @@ -252,3 +264,5 @@ class ResourceStageContext "<#{self.class}: resource=#{resource} staging=#{staging}>" end end + +require "extend/os/resource" diff --git a/Library/Homebrew/test/os/linux/formula_spec.rb b/Library/Homebrew/test/os/linux/formula_spec.rb index cd79ce48ba..1bb963731b 100644 --- a/Library/Homebrew/test/os/linux/formula_spec.rb +++ b/Library/Homebrew/test/os/linux/formula_spec.rb @@ -110,4 +110,23 @@ describe Formula do expect(f.patchlist.second.url).to eq("patch_linux") end end + + describe "#on_linux" do + it "uses on_linux within a resource block" do + f = formula do + homepage "https://brew.sh" + + url "https://brew.sh/test-0.1.tbz" + sha256 TEST_SHA256 + + resource "test_resource" do + on_linux do + url "on_linux" + end + end + end + expect(f.resources.length).to eq(1) + expect(f.resources.first.url).to eq("on_linux") + end + end end diff --git a/Library/Homebrew/test/os/mac/formula_spec.rb b/Library/Homebrew/test/os/mac/formula_spec.rb index c966aef3d0..c885e916a7 100644 --- a/Library/Homebrew/test/os/mac/formula_spec.rb +++ b/Library/Homebrew/test/os/mac/formula_spec.rb @@ -117,4 +117,23 @@ describe Formula do expect(f.patchlist.second.url).to eq("patch_macos") end end + + describe "#on_macos" do + it "uses on_macos within a resource block" do + f = formula do + homepage "https://brew.sh" + + url "https://brew.sh/test-0.1.tbz" + sha256 TEST_SHA256 + + resource "test_resource" do + on_macos do + url "resource_macos" + end + end + end + expect(f.resources.length).to eq(1) + expect(f.resources.first.url).to eq("resource_macos") + end + end end From 2a50ef045fdb6a56a018853f70ef0a0d36a153a7 Mon Sep 17 00:00:00 2001 From: Michka Popoff Date: Mon, 8 Jun 2020 17:04:54 +0200 Subject: [PATCH 2/3] on_os blocks: remove url tests This is not allowed by the style audit, and we do not want to allow different source url's depending on the os. --- .../Homebrew/test/os/linux/formula_spec.rb | 20 ------------------- Library/Homebrew/test/os/mac/formula_spec.rb | 20 ------------------- 2 files changed, 40 deletions(-) diff --git a/Library/Homebrew/test/os/linux/formula_spec.rb b/Library/Homebrew/test/os/linux/formula_spec.rb index 1bb963731b..b8469e4efb 100644 --- a/Library/Homebrew/test/os/linux/formula_spec.rb +++ b/Library/Homebrew/test/os/linux/formula_spec.rb @@ -33,26 +33,6 @@ describe Formula do end end - describe "#on_linux" do - it "defines an url on Linux only" do - f = formula do - homepage "https://brew.sh" - - on_macos do - url "https://brew.sh/test-macos-0.1.tbz" - sha256 TEST_SHA256 - end - - on_linux do - url "https://brew.sh/test-linux-0.1.tbz" - sha256 TEST_SHA256 - end - end - - expect(f.stable.url).to eq("https://brew.sh/test-linux-0.1.tbz") - end - end - describe "#on_linux" do it "adds a dependency on Linux only" do f = formula do diff --git a/Library/Homebrew/test/os/mac/formula_spec.rb b/Library/Homebrew/test/os/mac/formula_spec.rb index c885e916a7..39510761fe 100644 --- a/Library/Homebrew/test/os/mac/formula_spec.rb +++ b/Library/Homebrew/test/os/mac/formula_spec.rb @@ -40,26 +40,6 @@ describe Formula do end end - describe "#on_macos" do - it "defines an url on macos only" do - f = formula do - homepage "https://brew.sh" - - on_macos do - url "https://brew.sh/test-macos-0.1.tbz" - sha256 TEST_SHA256 - end - - on_linux do - url "https://brew.sh/test-linux-0.1.tbz" - sha256 TEST_SHA256 - end - end - - expect(f.stable.url).to eq("https://brew.sh/test-macos-0.1.tbz") - end - end - describe "#on_macos" do it "adds a dependency on macos only" do f = formula do From 3ad900993768c078d5722d4e438f29c09de2355c Mon Sep 17 00:00:00 2001 From: Michka Popoff Date: Mon, 8 Jun 2020 23:23:42 +0200 Subject: [PATCH 3/3] on_os block: test support for patches --- Library/Homebrew/test/os/linux/formula_spec.rb | 16 ++++------------ Library/Homebrew/test/os/mac/formula_spec.rb | 18 +++++------------- 2 files changed, 9 insertions(+), 25 deletions(-) diff --git a/Library/Homebrew/test/os/linux/formula_spec.rb b/Library/Homebrew/test/os/linux/formula_spec.rb index b8469e4efb..159a0838ba 100644 --- a/Library/Homebrew/test/os/linux/formula_spec.rb +++ b/Library/Homebrew/test/os/linux/formula_spec.rb @@ -67,27 +67,19 @@ describe Formula do sha256 TEST_SHA256 patch do - url "patch_both" - end - - on_macos do - patch do + on_macos do url "patch_macos" end - end - on_linux do - patch do + on_linux do url "patch_linux" end end end - expect(f.patchlist.length).to eq(2) + expect(f.patchlist.length).to eq(1) expect(f.patchlist.first.strip).to eq(:p1) - expect(f.patchlist.first.url).to eq("patch_both") - expect(f.patchlist.second.strip).to eq(:p1) - expect(f.patchlist.second.url).to eq("patch_linux") + expect(f.patchlist.first.url).to eq("patch_linux") end end diff --git a/Library/Homebrew/test/os/mac/formula_spec.rb b/Library/Homebrew/test/os/mac/formula_spec.rb index 39510761fe..4fb4400c7f 100644 --- a/Library/Homebrew/test/os/mac/formula_spec.rb +++ b/Library/Homebrew/test/os/mac/formula_spec.rb @@ -66,7 +66,7 @@ describe Formula do end describe "#on_macos" do - it "adds a patch on macos only" do + it "adds a patch on Mac only" do f = formula do homepage "https://brew.sh" @@ -74,27 +74,19 @@ describe Formula do sha256 TEST_SHA256 patch do - url "patch_both" - end - - on_macos do - patch do + on_macos do url "patch_macos" end - end - on_linux do - patch do + on_linux do url "patch_linux" end end end - expect(f.patchlist.length).to eq(2) + expect(f.patchlist.length).to eq(1) expect(f.patchlist.first.strip).to eq(:p1) - expect(f.patchlist.first.url).to eq("patch_both") - expect(f.patchlist.second.strip).to eq(:p1) - expect(f.patchlist.second.url).to eq("patch_macos") + expect(f.patchlist.first.url).to eq("patch_macos") end end