From d1f15e967b51ea9eb7538551ab39f4039b44239b Mon Sep 17 00:00:00 2001 From: Tsukasa OMOTO Date: Wed, 14 May 2014 16:43:52 +0900 Subject: [PATCH] Taps: cleanup regexps around Taps Closes Homebrew/homebrew#29139. Signed-off-by: Jack Nagel --- Library/Homebrew/cmd/tap.rb | 4 ++-- Library/Homebrew/cmd/update.rb | 14 +++++++------- Library/Homebrew/global.rb | 5 +---- Library/Homebrew/tap_constants.rb | 8 ++++++++ Library/Homebrew/test/testing_env.rb | 2 +- 5 files changed, 19 insertions(+), 14 deletions(-) create mode 100644 Library/Homebrew/tap_constants.rb diff --git a/Library/Homebrew/cmd/tap.rb b/Library/Homebrew/cmd/tap.rb index b24c70e87e..80ebcd81e1 100644 --- a/Library/Homebrew/cmd/tap.rb +++ b/Library/Homebrew/cmd/tap.rb @@ -107,7 +107,7 @@ module Homebrew extend self end def tap_args - ARGV.first =~ %r{^([\w-]+)/(homebrew-)?([\w-]+)$} + ARGV.first =~ HOMEBREW_TAP_ARGS_REGEX raise "Invalid tap name" unless $1 && $3 [$1, $3] end @@ -122,7 +122,7 @@ module Homebrew extend self def tap_ref(path) case path.to_s - when %r{^#{HOMEBREW_LIBRARY}/Taps/([\w-]+)/([\w-]+)/(.+)} + when HOMEBREW_TAP_PATH_REGEX "#$1/#$2/#{File.basename($3, '.rb')}" when %r{^#{HOMEBREW_LIBRARY}/Formula/(.+)} "Homebrew/homebrew/#{File.basename($1, '.rb')}" diff --git a/Library/Homebrew/cmd/update.rb b/Library/Homebrew/cmd/update.rb index 45f8251baf..88804c6cf0 100644 --- a/Library/Homebrew/cmd/update.rb +++ b/Library/Homebrew/cmd/update.rb @@ -218,9 +218,9 @@ class Report < Hash def tapped_formula_for key fetch(key, []).select do |path| - case path.relative_path_from(HOMEBREW_REPOSITORY).to_s - when %r{^Library/Taps/([\w-]+/[\w-]+/.*)} - valid_formula_location?($1) + case path.to_s + when HOMEBREW_TAP_PATH_REGEX + valid_formula_location?("#{$1}/#{$2}/#{$3}") else false end @@ -247,11 +247,11 @@ class Report < Hash def select_formula key fetch(key, []).map do |path| - case path.relative_path_from(HOMEBREW_REPOSITORY).to_s - when %r{^Library/Formula} + case path.to_s + when Regexp.new(HOMEBREW_LIBRARY + "/Formula") path.basename(".rb").to_s - when %r{^Library/Taps/([\w-]+)/(homebrew-)?([\w-]+)/(.*)\.rb} - "#$1/#$3/#{path.basename(".rb")}" + when HOMEBREW_TAP_PATH_REGEX + "#$1/#{$2.sub("homebrew-", "")}/#{path.basename(".rb")}" end end.compact.sort end diff --git a/Library/Homebrew/global.rb b/Library/Homebrew/global.rb index 5e44461965..5c1155f33b 100644 --- a/Library/Homebrew/global.rb +++ b/Library/Homebrew/global.rb @@ -85,10 +85,7 @@ HOMEBREW_USER_AGENT = "Homebrew #{HOMEBREW_VERSION} (Ruby #{RUBY_VERSION}-#{RUBY HOMEBREW_CURL_ARGS = '-f#LA' -HOMEBREW_TAP_FORMULA_REGEX = %r{^([\w-]+)/([\w-]+)/([\w-]+)$} -HOMEBREW_TAP_DIR_REGEX = %r{#{HOMEBREW_LIBRARY}/Taps/([\w-]+)/([\w-]+)} -HOMEBREW_TAP_PATH_REGEX = Regexp.new(HOMEBREW_TAP_DIR_REGEX.source \ - + %r{/(.*)}.source) +require 'tap_constants' module Homebrew extend self include FileUtils diff --git a/Library/Homebrew/tap_constants.rb b/Library/Homebrew/tap_constants.rb new file mode 100644 index 0000000000..1757ab80e7 --- /dev/null +++ b/Library/Homebrew/tap_constants.rb @@ -0,0 +1,8 @@ +# match expressions when taps are given as ARGS, e.g. someuser/sometap +HOMEBREW_TAP_ARGS_REGEX = %r{^([\w-]+)/(homebrew-)?([\w-]+)$} +# match taps' formula, e.g. someuser/sometap/someformula +HOMEBREW_TAP_FORMULA_REGEX = %r{^([\w-]+)/([\w-]+)/([\w-]+)$} +# match taps' directory path, e.g. HOMEBREW_LIBRARY/Taps/someuser/sometap +HOMEBREW_TAP_DIR_REGEX = %r{#{HOMEBREW_LIBRARY}/Taps/([\w-]+)/([\w-]+)} +# match taps' formula path, e.g. HOMEBREW_LIBRARY/Taps/someuser/sometap/someformula +HOMEBREW_TAP_PATH_REGEX = Regexp.new(HOMEBREW_TAP_DIR_REGEX.source + %r{/(.*)}.source) diff --git a/Library/Homebrew/test/testing_env.rb b/Library/Homebrew/test/testing_env.rb index 64f1ccfd38..2fb78b974b 100644 --- a/Library/Homebrew/test/testing_env.rb +++ b/Library/Homebrew/test/testing_env.rb @@ -27,7 +27,7 @@ HOMEBREW_WWW = 'http://example.com' HOMEBREW_CURL_ARGS = '-fsLA' HOMEBREW_VERSION = '0.9-test' -HOMEBREW_TAP_FORMULA_REGEX = %r{^([\w-]+)/([\w-]+)/([\w-]+)$} +require 'tap_constants' RUBY_BIN = Pathname.new(RbConfig::CONFIG['bindir']) RUBY_PATH = RUBY_BIN + RbConfig::CONFIG['ruby_install_name'] + RbConfig::CONFIG['EXEEXT']