From b0b8021b774816d9dfbd5a77f692754a0d2e49f9 Mon Sep 17 00:00:00 2001 From: les Date: Thu, 10 Sep 2026 17:52:08 -0700 Subject: [PATCH] fix(cask): replace postflight with postflight_steps MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Companion to #73. The legacy `postflight` block on the install side is deprecated and prints the matching warning on every install: Warning: Calling `postflight` is deprecated! Use `postflight_steps` instead. `postflight_steps` requires structured step calls with literal arguments — no arbitrary Ruby. This commit maps each existing operation: | Original (deprecated) | Replacement (steps DSL) | | --- | --- | | `FileUtils.mkdir_p(confdir)` | `mkdir_p "{{HOMEBREW_PREFIX}}/etc"` | | `FileUtils.cp(src, conffile) unless File.exist?(conffile)` | `unless_path_exists ... do copy ... end` | | `binaries.each` + `File.symlink ... unless File.exist?(dest)` | one `symlink ... remove_on_uninstall: true` per binary | | `Dir[".../*.so"].each` + `File.basename` + `File.symlink` | `symlink ... source_glob: true, remove_on_uninstall: true` | | Ruby interpolation `#{HOMEBREW_PREFIX}` | template substitution `{{HOMEBREW_PREFIX}}` (required inside steps blocks) | | Ruby interpolation `#{caskroom_path}/#{version}` | template substitution `{{caskroom_path}}/{{version}}` | Each `symlink` carries `remove_on_uninstall: true` so Homebrew tracks and removes the symlinks it created on uninstall — preserving the original safety property of never touching user-installed files at the same paths. The matching `uninstall_postflight` block is left for #73; once both land the install/uninstall sides use the same tracked symlink lifecycle. --- Casks/redis-stack-server.rb | 51 ++++++++++++++++++++++--------------- 1 file changed, 31 insertions(+), 20 deletions(-) diff --git a/Casks/redis-stack-server.rb b/Casks/redis-stack-server.rb index 16b5f20..989907c 100644 --- a/Casks/redis-stack-server.rb +++ b/Casks/redis-stack-server.rb @@ -15,29 +15,40 @@ binaries = %w[redis-cli redis-benchmark redis-check-aof redis-check-rdb redis-sentinel redis-server redis-stack-server] - postflight do - basepath = HOMEBREW_PREFIX.to_s - - confdir = "#{basepath}/etc" - - FileUtils.mkdir_p(confdir) + postflight_steps do + mkdir_p "{{HOMEBREW_PREFIX}}/etc" - conffile = "#{confdir}/redis-stack.conf" - src = "#{caskroom_path}/#{version}/etc/redis-stack.conf" - FileUtils.cp(src, conffile) unless File.exist?(conffile) - - caskbase = "#{caskroom_path}/#{version}" - # link binaries - binaries.each do |item| - dest = "#{basepath}/bin/#{item}" - File.symlink("#{caskbase}/bin/#{item}", dest) unless File.exist?(dest) + # Seed the user-editable config on first install only — never overwrite + # an existing file (mirrors the original `unless File.exist?(conffile)`). + unless_path_exists "{{HOMEBREW_PREFIX}}/etc/redis-stack.conf" do + copy "{{caskroom_path}}/{{version}}/etc/redis-stack.conf", + "{{HOMEBREW_PREFIX}}/etc/redis-stack.conf" end - # link libraries - Dir["#{caskbase}/lib/*.so"].each do |item| - lib = File.basename(item) - File.symlink(item, "#{basepath}/lib/#{lib}") - end + # Link each binary from the caskroom into HOMEBREW_PREFIX/bin. + # `remove_on_uninstall: true` tells Homebrew to remove these symlinks + # automatically during uninstall, matching the original behavior. + symlink "{{caskroom_path}}/{{version}}/bin/redis-cli", + "{{HOMEBREW_PREFIX}}/bin/redis-cli", remove_on_uninstall: true + symlink "{{caskroom_path}}/{{version}}/bin/redis-benchmark", + "{{HOMEBREW_PREFIX}}/bin/redis-benchmark", remove_on_uninstall: true + symlink "{{caskroom_path}}/{{version}}/bin/redis-check-aof", + "{{HOMEBREW_PREFIX}}/bin/redis-check-aof", remove_on_uninstall: true + symlink "{{caskroom_path}}/{{version}}/bin/redis-check-rdb", + "{{HOMEBREW_PREFIX}}/bin/redis-check-rdb", remove_on_uninstall: true + symlink "{{caskroom_path}}/{{version}}/bin/redis-sentinel", + "{{HOMEBREW_PREFIX}}/bin/redis-sentinel", remove_on_uninstall: true + symlink "{{caskroom_path}}/{{version}}/bin/redis-server", + "{{HOMEBREW_PREFIX}}/bin/redis-server", remove_on_uninstall: true + symlink "{{caskroom_path}}/{{version}}/bin/redis-stack-server", + "{{HOMEBREW_PREFIX}}/bin/redis-stack-server", remove_on_uninstall: true + + # Symlink every .so from the caskroom into HOMEBREW_PREFIX/lib. + # `source_glob: true` expands the glob and creates one symlink per match, + # replacing the original `Dir[".../*.so"].each` loop. + symlink "{{caskroom_path}}/{{version}}/lib/*.so", + "{{HOMEBREW_PREFIX}}/lib", + source_glob: true, remove_on_uninstall: true end uninstall_postflight do