From 4e51c0b8ea371d15d2ae996700e1c988e79cab17 Mon Sep 17 00:00:00 2001 From: Xu Cheng Date: Mon, 15 Feb 2016 22:31:47 +0800 Subject: [PATCH] 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 --- Library/Homebrew/cmd/pull.rb | 2 +- Library/Homebrew/tap.rb | 9 +++++++++ Library/Homebrew/test/test_tap.rb | 4 ++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/Library/Homebrew/cmd/pull.rb b/Library/Homebrew/cmd/pull.rb index ad70f01f40..45c3bf76bd 100644 --- a/Library/Homebrew/cmd/pull.rb +++ b/Library/Homebrew/cmd/pull.rb @@ -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 diff --git a/Library/Homebrew/tap.rb b/Library/Homebrew/tap.rb index 712348d603..08e85688db 100644 --- a/Library/Homebrew/tap.rb +++ b/Library/Homebrew/tap.rb @@ -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) } diff --git a/Library/Homebrew/test/test_tap.rb b/Library/Homebrew/test/test_tap.rb index 6e497a0705..1159eb9921 100644 --- a/Library/Homebrew/test/test_tap.rb +++ b/Library/Homebrew/test/test_tap.rb @@ -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