Skip to content
Snippets Groups Projects
Commit 0f84b976 authored by Xu Cheng's avatar Xu Cheng
Browse files

move CoreFormulaRepository into separate file

For users whose local brew is at around 2015-06-11 to 2015-08-06,
running `brew update` will emit following error:

  Error: uninitialized constant Formulary::CoreFormulaRepository

This is caused by the same bug described in Homebrew/homebrew#42553.

This commit workarounds this issue and restores `brew update` compatibility
for users mentioned above.

Also cleanup legacy `require "cmd/tap"`.
parent f72d4f17
No related branches found
No related tags found
No related merge requests found
require "blacklist"
require "cmd/doctor"
require "cmd/search"
require "cmd/tap"
require "formula_installer"
require "tap"
require "core_formula_repository"
require "hardware"
module Homebrew
......
......@@ -3,7 +3,8 @@
require "utils"
require "formula"
require "cmd/tap"
require "tap"
require "core_formula_repository"
module Homebrew
def pull_url(url)
......
......@@ -4,7 +4,8 @@
# or to determine if any current formulae have Ruby issues
require "formula"
require "cmd/tap"
require "tap"
require "core_formula_repository"
require "thread"
module Homebrew
......
require "tap"
require "core_formula_repository"
module Homebrew
def tap
......
......@@ -29,7 +29,8 @@ require "date"
require "rexml/document"
require "rexml/xmldecl"
require "rexml/cdata"
require "cmd/tap"
require "tap"
require "core_formula_repository"
module Homebrew
BYTES_IN_1_MEGABYTE = 1024*1024
......
require "tap"
# 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 core_formula_repository?
true
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
......@@ -10,6 +10,7 @@ require "software_spec"
require "install_renamed"
require "pkg_version"
require "tap"
require "core_formula_repository"
require "formula_renames"
require "keg"
require "migrator"
......
require "digest/md5"
require "formula_renames"
require "tap"
require "core_formula_repository"
# The Formulary is responsible for creating instances of Formula.
# It is not meant to be used directy from formulae.
......
require "utils/json"
require "descriptions"
# a {Tap} is used to extend the formulae provided by Homebrew core.
# Usually, it's synced with a remote git repository. And it's likely
# a Github repository with the name of `user/homebrew-repo`. In such
......@@ -32,6 +29,7 @@ class Tap
repo = repo.strip_prefix "homebrew-"
if user == "Homebrew" && repo == "homebrew"
require "core_formula_repository"
return CoreFormulaRepository.instance
end
......@@ -119,6 +117,7 @@ class Tap
# @option options [String] :clone_targe If passed, it will be used as the clone remote.
# @option options [Boolean] :full_clone If set as true, full clone will be used.
def install(options = {})
require "descriptions"
raise TapAlreadyTappedError, name if installed?
# ensure git is installed
......@@ -180,6 +179,7 @@ class Tap
# uninstall this {Tap}.
def uninstall
require "descriptions"
raise TapUnavailableError, name unless installed?
puts "Untapping #{name}... (#{path.abv})"
......@@ -326,6 +326,8 @@ class Tap
# Hash with tap formula renames
def formula_renames
require "utils/json"
@formula_renames ||= if (rename_file = path/"formula_renames.json").file?
Utils::JSON.load(rename_file.read)
else
......@@ -363,82 +365,3 @@ 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 core_formula_repository?
true
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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment