From bb2693534404ba13ef347cc98198e70c91d85ff5 Mon Sep 17 00:00:00 2001 From: EricFromCanada Date: Mon, 12 Apr 2021 16:06:38 -0400 Subject: [PATCH] create: improve cask token & version generation --- Library/Homebrew/cask/utils.rb | 12 ++++++++++++ Library/Homebrew/dev-cmd/create.rb | 12 ++++++------ Library/Homebrew/test/dev-cmd/create_spec.rb | 5 +++++ 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/Library/Homebrew/cask/utils.rb b/Library/Homebrew/cask/utils.rb index c9e831aebe..59e6f4340f 100644 --- a/Library/Homebrew/cask/utils.rb +++ b/Library/Homebrew/cask/utils.rb @@ -79,6 +79,18 @@ module Cask path.exist? || path.symlink? end + sig { params(name: String).returns(String) } + def self.token_from(name) + name.downcase + .gsub("+", "-plus-") + .gsub("@", "-at-") + .gsub(/[ _·•]/, "-") + .gsub(/[^\w-]/, "") + .gsub(/--+/, "-") + .delete_prefix("-") + .delete_suffix("-") + end + sig { returns(String) } def self.error_message_with_suggestions <<~EOS diff --git a/Library/Homebrew/dev-cmd/create.rb b/Library/Homebrew/dev-cmd/create.rb index 0d4e4b6ccd..e83e0229a7 100644 --- a/Library/Homebrew/dev-cmd/create.rb +++ b/Library/Homebrew/dev-cmd/create.rb @@ -85,11 +85,11 @@ module Homebrew end def create_cask(args:) - url = args.named.first + raise UsageError, "The `--set-name` flag is required for creating casks." if args.set_name.blank? - if (token = args.set_name).nil? - raise UsageError, "The `--set-name` flag is required for creating casks." - end + url = args.named.first + name = args.set_name + token = Cask::Utils.token_from(args.set_name) cask_tap = Tap.fetch(args.tap || "homebrew/cask") raise TapUnavailableError, args.tap unless cask_tap.installed? @@ -101,7 +101,7 @@ module Homebrew version = if args.set_version Version.create(args.set_version) else - Version.detect(url.gsub(token, "")) + Version.detect(url.gsub(token, "").gsub(/x86(_64)?/, "")) end interpolated_url, sha256 = if version.null? @@ -125,7 +125,7 @@ module Homebrew sha256 "#{sha256}" url "#{interpolated_url}" - name "" + name "#{name}" desc "" homepage "" diff --git a/Library/Homebrew/test/dev-cmd/create_spec.rb b/Library/Homebrew/test/dev-cmd/create_spec.rb index 669a0b934a..f2cda56d10 100644 --- a/Library/Homebrew/test/dev-cmd/create_spec.rb +++ b/Library/Homebrew/test/dev-cmd/create_spec.rb @@ -15,4 +15,9 @@ describe "brew create" do expect(formula_file).to exist expect(formula_file.read).to match(%Q(sha256 "#{TESTBALL_SHA256}")) end + + it "generates valid cask tokens" do + t = Cask::Utils.token_from("A Foo@Bar_Baz++!") + expect(t).to eq("a-foo-at-bar-baz-plus-plus") + end end