mirror of
https://github.com/Homebrew/brew.git
synced 2025-07-14 16:09:03 +08:00
Merge pull request #18613 from pkryger/allow_homebrew_prefix_in_external_patches
Allow HOMEBREW_PREFIX replacement in external patches
This commit is contained in:
commit
e4fb33928f
@ -94,7 +94,7 @@ class StringPatch < EmbeddedPatch
|
||||
end
|
||||
end
|
||||
|
||||
# A string containing a patch.
|
||||
# A file containing a patch.
|
||||
class ExternalPatch
|
||||
extend Forwardable
|
||||
|
||||
@ -140,7 +140,12 @@ class ExternalPatch
|
||||
patch_files.each do |patch_file|
|
||||
ohai "Applying #{patch_file}"
|
||||
patch_file = patch_dir/patch_file
|
||||
safe_system "patch", "-g", "0", "-f", "-#{strip}", "-i", patch_file
|
||||
Utils.safe_popen_write("patch", "-g", "0", "-f", "-#{strip}") do |p|
|
||||
File.foreach(patch_file) do |line|
|
||||
data = line.gsub("@@HOMEBREW_PREFIX@@", HOMEBREW_PREFIX)
|
||||
p.write(data)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -11,11 +11,13 @@ RSpec.describe "patching", type: :system do
|
||||
TESTBALL_PATCHES_URL = "file://#{TEST_FIXTURE_DIR}/tarballs/testball-0.1-patches.tgz".freeze
|
||||
PATCH_URL_A = "file://#{TEST_FIXTURE_DIR}/patches/noop-a.diff".freeze
|
||||
PATCH_URL_B = "file://#{TEST_FIXTURE_DIR}/patches/noop-b.diff".freeze
|
||||
PATCH_URL_D = "file://#{TEST_FIXTURE_DIR}/patches/noop-d.diff".freeze
|
||||
PATCH_A_CONTENTS = File.read("#{TEST_FIXTURE_DIR}/patches/noop-a.diff").freeze
|
||||
PATCH_B_CONTENTS = File.read("#{TEST_FIXTURE_DIR}/patches/noop-b.diff").freeze
|
||||
APPLY_A = "noop-a.diff"
|
||||
APPLY_B = "noop-b.diff"
|
||||
APPLY_C = "noop-c.diff"
|
||||
APPLY_D = "noop-d.diff"
|
||||
# rubocop:enable RSpec/LeakyConstantDeclaration,Lint/ConstantDefinitionInBlock
|
||||
|
||||
url TESTBALL_URL
|
||||
@ -39,6 +41,18 @@ RSpec.describe "patching", type: :system do
|
||||
end
|
||||
end
|
||||
|
||||
matcher :be_patched_with_homebrew_prefix do
|
||||
match do |formula|
|
||||
formula.brew do
|
||||
formula.patch
|
||||
s = File.read("libexec/NOOP")
|
||||
expect(s).not_to include("NOOP"), "libexec/NOOP was not patched as expected"
|
||||
expect(s).not_to include("@@HOMEBREW_PREFIX@@"), "libexec/NOOP was not patched as expected"
|
||||
expect(s).to include(HOMEBREW_PREFIX.to_s), "libexec/NOOP was not patched as expected"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
matcher :have_its_resource_patched do
|
||||
match do |formula|
|
||||
formula.brew do
|
||||
@ -226,6 +240,17 @@ RSpec.describe "patching", type: :system do
|
||||
end
|
||||
|
||||
f.brew { |formula, _staging| formula.patch }
|
||||
end.to raise_error(BuildError)
|
||||
end.to raise_error(Errno::ENOENT)
|
||||
end
|
||||
|
||||
specify "patch_dsl_with_homebrew_prefix" do
|
||||
expect(
|
||||
formula do
|
||||
patch do
|
||||
url PATCH_URL_D
|
||||
sha256 PATCH_D_SHA256
|
||||
end
|
||||
end,
|
||||
).to be_patched_with_homebrew_prefix
|
||||
end
|
||||
end
|
||||
|
10
Library/Homebrew/test/support/fixtures/patches/noop-d.diff
Normal file
10
Library/Homebrew/test/support/fixtures/patches/noop-d.diff
Normal file
@ -0,0 +1,10 @@
|
||||
diff --git a/libexec/NOOP b/libexec/NOOP
|
||||
index bfdda4c..e08d8f4 100755
|
||||
--- a/libexec/NOOP
|
||||
+++ b/libexec/NOOP
|
||||
@@ -1,2 +1,2 @@
|
||||
#!/bin/bash
|
||||
-echo NOOP
|
||||
\ No newline at end of file
|
||||
+echo @@HOMEBREW_PREFIX@@
|
||||
\ No newline at end of file
|
@ -47,5 +47,6 @@ TESTBALL_SHA256 = "91e3f7930c98d7ccfb288e115ed52d06b0e5bc16fec7dce8bdda865300270
|
||||
TESTBALL_PATCHES_SHA256 = "799c2d551ac5c3a5759bea7796631a7906a6a24435b52261a317133a0bfb34d9"
|
||||
PATCH_A_SHA256 = "83404f4936d3257e65f176c4ffb5a5b8d6edd644a21c8d8dcc73e22a6d28fcfa"
|
||||
PATCH_B_SHA256 = "57958271bb802a59452d0816e0670d16c8b70bdf6530bcf6f78726489ad89b90"
|
||||
PATCH_D_SHA256 = "07c72c4463339e6e2ce235f3b26e316d4940017bf4b5236e27e757a44d67636c"
|
||||
|
||||
TEST_SHA256 = "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef"
|
||||
|
@ -641,6 +641,8 @@ patch :p0, "..."
|
||||
|
||||
In embedded patches, the string "HOMEBREW\_PREFIX" is replaced with the value of the constant `HOMEBREW_PREFIX` before the patch is applied.
|
||||
|
||||
In external patches, the string "@@HOMEBREW\_PREFIX@@" is replaced with the value of the constant `HOMEBREW_PREFIX` before the patch is applied.
|
||||
|
||||
### Creating the diff
|
||||
|
||||
```sh
|
||||
|
Loading…
x
Reference in New Issue
Block a user