From 3da305fa806806966863cf8f9e025720cad08212 Mon Sep 17 00:00:00 2001 From: Markus Reiter Date: Sun, 26 Mar 2023 08:10:40 +0200 Subject: [PATCH 1/3] Add `keyboard_layout` stanza. --- Library/Homebrew/cask/artifact.rb | 1 + .../Homebrew/cask/artifact/keyboard_layout.rb | 36 +++++++++++++++++++ Library/Homebrew/cask/config.rb | 2 ++ Library/Homebrew/cask/dsl.rb | 1 + Library/Homebrew/cli/parser.rb | 4 +++ .../rubocops/cask/constants/stanza.rb | 1 + .../spec/shared_context/homebrew_cask.rb | 1 + 7 files changed, 46 insertions(+) create mode 100644 Library/Homebrew/cask/artifact/keyboard_layout.rb diff --git a/Library/Homebrew/cask/artifact.rb b/Library/Homebrew/cask/artifact.rb index bee610cfb5..06095d0b79 100644 --- a/Library/Homebrew/cask/artifact.rb +++ b/Library/Homebrew/cask/artifact.rb @@ -11,6 +11,7 @@ require "cask/artifact/font" require "cask/artifact/input_method" require "cask/artifact/installer" require "cask/artifact/internet_plugin" +require "cask/artifact/keyboard_layout" require "cask/artifact/manpage" require "cask/artifact/vst_plugin" require "cask/artifact/vst3_plugin" diff --git a/Library/Homebrew/cask/artifact/keyboard_layout.rb b/Library/Homebrew/cask/artifact/keyboard_layout.rb new file mode 100644 index 0000000000..743cbdedb9 --- /dev/null +++ b/Library/Homebrew/cask/artifact/keyboard_layout.rb @@ -0,0 +1,36 @@ +# typed: true +# frozen_string_literal: true + +require "cask/artifact/moved" + +module Cask + module Artifact + # Artifact corresponding to the `keyboard_layout` stanza. + # + # @api private + class KeyboardLayout < Moved + extend T::Sig + + sig { returns(String) } + def self.english_name + "Keyboard Layout" + end + + def install_phase(**options) + super(**options) + delete_keyboard_layout_cache(**options) + end + + def uninstall_phase(**options) + super(**options) + delete_keyboard_layout_cache(**options) + end + + private + + def delete_keyboard_layout_cache(command: nil, **_) + command.run!("/bin/rm", args: ["-f", "--", "/System/Library/Caches/com.apple.IntlDataCache.le*"], sudo: true) + end + end + end +end diff --git a/Library/Homebrew/cask/config.rb b/Library/Homebrew/cask/config.rb index ae083bf292..164f98c5d4 100644 --- a/Library/Homebrew/cask/config.rb +++ b/Library/Homebrew/cask/config.rb @@ -15,6 +15,7 @@ module Cask DEFAULT_DIRS = { appdir: "/Applications", + keyboard_layoutdir: "/Library/Keyboard Layouts", colorpickerdir: "~/Library/ColorPickers", prefpanedir: "~/Library/PreferencePanes", qlplugindir: "~/Library/QuickLook", @@ -40,6 +41,7 @@ module Cask def self.from_args(args) new(explicit: { appdir: args.appdir, + keyboard_layoutdir: args.keyboard_layoutdir, colorpickerdir: args.colorpickerdir, prefpanedir: args.prefpanedir, qlplugindir: args.qlplugindir, diff --git a/Library/Homebrew/cask/dsl.rb b/Library/Homebrew/cask/dsl.rb index ab5a87f6b3..0c11db3447 100644 --- a/Library/Homebrew/cask/dsl.rb +++ b/Library/Homebrew/cask/dsl.rb @@ -44,6 +44,7 @@ module Cask Artifact::Font, Artifact::InputMethod, Artifact::InternetPlugin, + Artifact::KeyboardLayout, Artifact::Manpage, Artifact::Pkg, Artifact::Prefpane, diff --git a/Library/Homebrew/cli/parser.rb b/Library/Homebrew/cli/parser.rb index 536a100a28..39cf3604a8 100644 --- a/Library/Homebrew/cli/parser.rb +++ b/Library/Homebrew/cli/parser.rb @@ -37,6 +37,10 @@ module Homebrew description: "Target location for Applications " \ "(default: `#{Cask::Config::DEFAULT_DIRS[:appdir]}`).", }], + [:flag, "--keyboard-layoutdir=", { + description: "Target location for Keyboard Layouts " \ + "(default: `#{Cask::Config::DEFAULT_DIRS[:keyboard_layoutdir]}`).", + }], [:flag, "--colorpickerdir=", { description: "Target location for Color Pickers " \ "(default: `#{Cask::Config::DEFAULT_DIRS[:colorpickerdir]}`).", diff --git a/Library/Homebrew/rubocops/cask/constants/stanza.rb b/Library/Homebrew/rubocops/cask/constants/stanza.rb index d8129cc51b..4c51b1bf23 100644 --- a/Library/Homebrew/rubocops/cask/constants/stanza.rb +++ b/Library/Homebrew/rubocops/cask/constants/stanza.rb @@ -29,6 +29,7 @@ module RuboCop :font, :input_method, :internet_plugin, + :keyboard_layout, :prefpane, :qlplugin, :mdimporter, diff --git a/Library/Homebrew/test/support/helper/spec/shared_context/homebrew_cask.rb b/Library/Homebrew/test/support/helper/spec/shared_context/homebrew_cask.rb index f2d75d1be1..bd9cc4d5c2 100644 --- a/Library/Homebrew/test/support/helper/spec/shared_context/homebrew_cask.rb +++ b/Library/Homebrew/test/support/helper/spec/shared_context/homebrew_cask.rb @@ -11,6 +11,7 @@ module Cask class Config DEFAULT_DIRS_PATHNAMES = { appdir: Pathname(TEST_TMPDIR)/"cask-appdir", + keyboard_layoutdir: Pathname(TEST_TMPDIR)/"cask-keyboard-layoutdir", prefpanedir: Pathname(TEST_TMPDIR)/"cask-prefpanedir", qlplugindir: Pathname(TEST_TMPDIR)/"cask-qlplugindir", mdimporterdir: Pathname(TEST_TMPDIR)/"cask-mdimporter", From 471ce0b880c27e5e23df01e5a7500fb509fcda91 Mon Sep 17 00:00:00 2001 From: Markus Reiter Date: Sun, 26 Mar 2023 08:10:54 +0200 Subject: [PATCH 2/3] Use `keyboard_layout` stanza in `livecheck`. --- Library/Homebrew/unversioned_cask_checker.rb | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Library/Homebrew/unversioned_cask_checker.rb b/Library/Homebrew/unversioned_cask_checker.rb index 234ad5108a..dd9e06bdda 100644 --- a/Library/Homebrew/unversioned_cask_checker.rb +++ b/Library/Homebrew/unversioned_cask_checker.rb @@ -31,6 +31,11 @@ module Homebrew @apps ||= @cask.artifacts.select { |a| a.is_a?(Cask::Artifact::App) } end + sig { returns(T::Array[Cask::Artifact::Qlplugin]) } + def keyboard_layouts + @keyboard_layouts ||= @cask.artifacts.select { |a| a.is_a?(Cask::Artifact::KeyboardLayout) } + end + sig { returns(T::Array[Cask::Artifact::Qlplugin]) } def qlplugins @qlplugins ||= @cask.artifacts.select { |a| a.is_a?(Cask::Artifact::Qlplugin) } @@ -93,7 +98,7 @@ module Homebrew installer.extract_primary_container(to: dir) - info_plist_paths = apps.concat(qlplugins, installers).flat_map do |artifact| + info_plist_paths = apps.concat(keyboard_layouts, qlplugins, installers).flat_map do |artifact| source = artifact.is_a?(Cask::Artifact::Installer) ? artifact.path : artifact.source.basename top_level_info_plists(Pathname.glob(dir/"**"/source/"Contents"/"Info.plist")).sort end From c38f0c3aae98dc204584aaae56188b91d05f3fba Mon Sep 17 00:00:00 2001 From: Markus Reiter Date: Sun, 26 Mar 2023 09:14:36 +0200 Subject: [PATCH 3/3] Fix typecheck. --- Library/Homebrew/cli/args.rbi | 3 +++ Library/Homebrew/sorbet/rbi/hidden-definitions/hidden.rbi | 6 ++++++ 2 files changed, 9 insertions(+) diff --git a/Library/Homebrew/cli/args.rbi b/Library/Homebrew/cli/args.rbi index 34f0ce8687..37d4ac897a 100644 --- a/Library/Homebrew/cli/args.rbi +++ b/Library/Homebrew/cli/args.rbi @@ -273,6 +273,9 @@ module Homebrew sig { returns(T.nilable(String)) } def appdir; end + sig { returns(T.nilable(String)) } + def keyboard_layoutdir; end + sig { returns(T.nilable(String)) } def fontdir; end diff --git a/Library/Homebrew/sorbet/rbi/hidden-definitions/hidden.rbi b/Library/Homebrew/sorbet/rbi/hidden-definitions/hidden.rbi index 68d5af9b0b..106f373f1a 100644 --- a/Library/Homebrew/sorbet/rbi/hidden-definitions/hidden.rbi +++ b/Library/Homebrew/sorbet/rbi/hidden-definitions/hidden.rbi @@ -3007,6 +3007,10 @@ class Cask::Config def internet_plugindir=(path); end + def keyboard_layoutdir(); end + + def keyboard_layoutdir=(path); end + def mdimporterdir(); end def mdimporterdir=(path); end @@ -6554,6 +6558,8 @@ class RuboCop::Cask::AST::Stanza def internet_plugin?(); end + def keyboard_layout?(); end + def language?(); end def livecheck?(); end