From ed07203f9ed75e115f501e2a90730b141454c919 Mon Sep 17 00:00:00 2001 From: Markus Reiter Date: Thu, 22 Feb 2024 21:51:38 +0100 Subject: [PATCH] Fix tap constants. --- Library/Homebrew/tap_constants.rb | 15 ++++++++++----- Library/Homebrew/test/tap_spec.rb | 12 ++++++++++++ 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/Library/Homebrew/tap_constants.rb b/Library/Homebrew/tap_constants.rb index e3af9328ae..221c696e25 100644 --- a/Library/Homebrew/tap_constants.rb +++ b/Library/Homebrew/tap_constants.rb @@ -5,7 +5,7 @@ HOMEBREW_TAP_FORMULA_NAME_REGEX = T.let(/(?[\w+\-.@]+)/, Regexp) # Match taps' formulae, e.g. `someuser/sometap/someformula`. HOMEBREW_TAP_FORMULA_REGEX = T.let( - %r{\A(?[\w-]+)/(?[\w-]+)/#{HOMEBREW_TAP_FORMULA_NAME_REGEX.source}\Z}, + %r{\A(?[^/]+)/(?[^/]+)/#{HOMEBREW_TAP_FORMULA_NAME_REGEX.source}\Z}, Regexp, ) # Match default formula taps' formulae, e.g. `homebrew/core/someformula` or `someformula`. @@ -18,7 +18,7 @@ HOMEBREW_DEFAULT_TAP_FORMULA_REGEX = T.let( HOMEBREW_TAP_CASK_TOKEN_REGEX = T.let(/(?[a-z0-9\-_]+(?:@[a-z0-9\-_.]+)?)/, Regexp) # Match taps' casks, e.g. `someuser/sometap/somecask`. HOMEBREW_TAP_CASK_REGEX = T.let( - %r{\A(?[\w-]+)/(?[\w-]+)/#{HOMEBREW_TAP_CASK_TOKEN_REGEX.source}\Z}, + %r{\A(?[^/]+)/(?[^/]+)/#{HOMEBREW_TAP_CASK_TOKEN_REGEX.source}\Z}, Regexp, ) # Match default cask taps' casks, e.g. `homebrew/cask/somecask` or `somecask`. @@ -29,14 +29,19 @@ HOMEBREW_DEFAULT_TAP_CASK_REGEX = T.let( # Match taps' directory paths, e.g. `HOMEBREW_LIBRARY/Taps/someuser/sometap`. HOMEBREW_TAP_DIR_REGEX = T.let( - %r{#{Regexp.escape(HOMEBREW_LIBRARY.to_s)}/Taps/(?[\w-]+)/(?[\w-]+)}, + %r{#{Regexp.escape(HOMEBREW_LIBRARY.to_s)}/Taps/(?[^/]+)/(?[^/]+)}, Regexp, ) # Match taps' formula paths, e.g. `HOMEBREW_LIBRARY/Taps/someuser/sometap/someformula`. HOMEBREW_TAP_PATH_REGEX = T.let(Regexp.new(HOMEBREW_TAP_DIR_REGEX.source + %r{(?:/.*)?\Z}.source).freeze, Regexp) -# Match official taps' casks, e.g. `homebrew/cask/somecask or homebrew/cask-versions/somecask`. +# Match official cask taps, e.g `homebrew/cask`. +HOMEBREW_CASK_TAP_REGEX = T.let( + %r{(?:([Cc]askroom)/(cask|versions)|([Hh]omebrew)/(?:homebrew-)?(cask|cask-[\w-]+))}, + Regexp, +) +# Match official taps' casks, e.g. `homebrew/cask/somecask` or `homebrew/cask-versions/somecask`. HOMEBREW_CASK_TAP_CASK_REGEX = T.let( - %r{\A(?:([Cc]askroom)/(cask|versions)|([Hh]omebrew)/(?:homebrew-)?(cask|cask-[\w-]+))/([\w+-.]+)\Z}, + %r{\A#{HOMEBREW_CASK_TAP_REGEX.source}/#{HOMEBREW_TAP_CASK_TOKEN_REGEX.source}\Z}, Regexp, ) HOMEBREW_OFFICIAL_REPO_PREFIXES_REGEX = T.let(/\A(home|linux)brew-/, Regexp) diff --git a/Library/Homebrew/test/tap_spec.rb b/Library/Homebrew/test/tap_spec.rb index f016d7a28e..c4d9ea8bc4 100644 --- a/Library/Homebrew/test/tap_spec.rb +++ b/Library/Homebrew/test/tap_spec.rb @@ -126,6 +126,18 @@ RSpec.describe Tap do it "returns the Tap when given its exact path" do expect(described_class.from_path(path)).to eq tap end + + context "when path contains a dot" do + let(:tap) { described_class.fetch("str4d.xyz", "rage") } + + after do + tap.uninstall + end + + it "returns the Tap when given its exact path" do + expect(described_class.from_path(path)).to eq tap + end + end end specify "::names" do