add Tap#formula_file?

Return true if given path would present a Formula file in this Tap.
Accepts both absolute path and relative path (relative to this Tap's path)

It offer an abstraction such that caller would not need to worry about
low level file system in the tap.

It will be used in `brew pull` and `brew update`.

Closes Homebrew/homebrew#49191.

Signed-off-by: Xu Cheng <xucheng@me.com>
This commit is contained in:
Xu Cheng 2016-02-15 22:31:47 +08:00
parent 578e68b2c1
commit 4e51c0b8ea
3 changed files with 14 additions and 1 deletions

View File

@ -305,7 +305,7 @@ module Homebrew
files << $1 if line =~ %r{^\+\+\+ b/(.*)}
end
files.each do |file|
if (tap.path/file).dirname == tap.formula_dir
if tap.formula_file?(file)
formula_name = File.basename(file, ".rb")
formulae << formula_name unless formulae.include?(formula_name)
else

View File

@ -247,6 +247,15 @@ class Tap
end
end
# return true if given path would present a {Formula} file in this {Tap}.
# accepts both absolute path and relative path (relative to this {Tap}'s path)
# @private
def formula_file?(file)
file = Pathname.new(file) unless file.is_a? Pathname
file = file.expand_path(path)
file.extname == ".rb" && file.parent == formula_dir
end
# an array of all {Formula} names of this {Tap}.
def formula_names
@formula_names ||= formula_files.map { |f| formula_file_to_name(f) }

View File

@ -95,6 +95,10 @@ class TapTest < Homebrew::TestCase
assert_equal @tap.formula_renames, "oldname" => "foo"
assert_equal [@cmd_file], @tap.command_files
assert_kind_of Hash, @tap.to_hash
assert_equal true, @tap.formula_file?(@formula_file)
assert_equal true, @tap.formula_file?("Formula/foo.rb")
assert_equal false, @tap.formula_file?("bar.rb")
assert_equal false, @tap.formula_file?("Formula/baz.sh")
end
def test_remote