aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew/tap.rb
diff options
context:
space:
mode:
authorXu Cheng2015-12-06 21:36:26 +0800
committerXu Cheng2015-12-09 16:56:59 +0800
commit9f7a383017d3ed3cb4aedfbcdb58fd03eaa4599c (patch)
tree1b82de0c1e9d63ae2d051e8688601e62418f1f12 /Library/Homebrew/tap.rb
parentc2a5a8388f81d8160df61f6ccd4b9161921bd1e5 (diff)
downloadbrew-9f7a383017d3ed3cb4aedfbcdb58fd03eaa4599c.tar.bz2
add CoreFormulaRepository singleton class
Diffstat (limited to 'Library/Homebrew/tap.rb')
-rw-r--r--Library/Homebrew/tap.rb91
1 files changed, 90 insertions, 1 deletions
diff --git a/Library/Homebrew/tap.rb b/Library/Homebrew/tap.rb
index 682f82d48..58474c061 100644
--- a/Library/Homebrew/tap.rb
+++ b/Library/Homebrew/tap.rb
@@ -16,10 +16,25 @@ class Tap
CACHE.clear
end
- def self.fetch(user, repo)
+ def self.fetch(*args)
+ case args.length
+ when 1
+ user, repo = args.first.split("/", 2)
+ when 2
+ user = args[0]
+ repo = args[1]
+ end
+
+ raise "Invalid tap name" unless user && repo
+
# we special case homebrew so users don't have to shift in a terminal
user = "Homebrew" if user == "homebrew"
repo = repo.strip_prefix "homebrew-"
+
+ if user == "Homebrew" && repo == "homebrew"
+ return CoreFormulaRepository.instance
+ end
+
cache_key = "#{user}/#{repo}".downcase
CACHE.fetch(cache_key) { |key| CACHE[key] = Tap.new(user, repo) }
end
@@ -302,3 +317,77 @@ class Tap
"#{name}/#{file.basename}"
end
end
+
+# A specialized {Tap} class to mimic the core formula file system, which shares many
+# similarities with normal {Tap}.
+# TODO Separate core formulae with core codes. See discussion below for future plan:
+# https://github.com/Homebrew/homebrew/pull/46735#discussion_r46820565
+class CoreFormulaRepository < Tap
+ # @private
+ def initialize
+ @user = "Homebrew"
+ @repo = "homebrew"
+ @name = "Homebrew/homebrew"
+ @path = HOMEBREW_REPOSITORY
+ end
+
+ def self.instance
+ @instance ||= CoreFormulaRepository.new
+ end
+
+ # @private
+ def uninstall
+ raise "Tap#uninstall is not available for CoreFormulaRepository"
+ end
+
+ # @private
+ def pin
+ raise "Tap#pin is not available for CoreFormulaRepository"
+ end
+
+ # @private
+ def unpin
+ raise "Tap#unpin is not available for CoreFormulaRepository"
+ end
+
+ # @private
+ def pinned?
+ false
+ end
+
+ # @private
+ def command_files
+ []
+ end
+
+ # @private
+ def custom_remote?
+ remote != "https://github.com/#{user}/#{repo}.git"
+ end
+
+ # @private
+ def formula_dir
+ HOMEBREW_LIBRARY/"Formula"
+ end
+
+ # @private
+ def alias_dir
+ HOMEBREW_LIBRARY/"Aliases"
+ end
+
+ # @private
+ def formula_renames
+ require "formula_renames"
+ FORMULA_RENAMES
+ end
+
+ private
+
+ def formula_file_to_name(file)
+ file.basename(".rb").to_s
+ end
+
+ def alias_file_to_name(file)
+ file.basename.to_s
+ end
+end