Tap: make remote a separate method to reduce initial overhead

Also make remote method only response to installed tap.
This commit is contained in:
Xu Cheng 2015-06-13 01:57:00 +08:00
parent b88cb13718
commit 4101cef3c5
3 changed files with 19 additions and 11 deletions

View File

@ -48,7 +48,7 @@ module Homebrew
info += "Not installed" info += "Not installed"
end end
puts info puts info
puts "From: #{tap.remote}" puts "From: #{tap.remote.nil? ? "N/A" : tap.remote}"
end end
end end
end end

View File

@ -14,10 +14,11 @@ module Homebrew
end end
def install_tap user, repo, clone_target=nil def install_tap user, repo, clone_target=nil
tap = Tap.new user, repo, clone_target tap = Tap.new user, repo
return false if tap.installed? return false if tap.installed?
ohai "Tapping #{tap}" ohai "Tapping #{tap}"
args = %W[clone #{tap.remote} #{tap.path}] remote = clone_target || "https://github.com/#{tap.user}/homebrew-#{tap.repo}"
args = %W[clone #{remote} #{tap.path}]
args << "--depth=1" unless ARGV.include?("--full") args << "--depth=1" unless ARGV.include?("--full")
safe_system "git", *args safe_system "git", *args

View File

@ -7,20 +7,26 @@ class Tap
attr_reader :repo attr_reader :repo
attr_reader :name attr_reader :name
attr_reader :path attr_reader :path
attr_reader :remote
def initialize(user, repo, remote=nil) def initialize(user, repo)
# we special case homebrew so users don't have to shift in a terminal # we special case homebrew so users don't have to shift in a terminal
@user = user == "homebrew" ? "Homebrew" : user @user = user == "homebrew" ? "Homebrew" : user
@repo = repo @repo = repo
@name = "#{@user}/#{@repo}".downcase @name = "#{@user}/#{@repo}".downcase
@path = TAP_DIRECTORY/"#{@user}/homebrew-#{@repo}".downcase @path = TAP_DIRECTORY/"#{@user}/homebrew-#{@repo}".downcase
if installed? end
def remote
@remote ||= if installed?
if (@path/".git").exist?
@path.cd do @path.cd do
@remote = Utils.popen_read("git", "config", "--get", "remote.origin.url").chomp Utils.popen_read("git", "config", "--get", "remote.origin.url").chomp
end end
else else
@remote = remote || "https://github.com/#{@user}/homebrew-#{@repo}" nil
end
else
raise TapUnavailableError, name
end end
end end
@ -46,7 +52,8 @@ class Tap
end end
def custom_remote? def custom_remote?
@remote.casecmp("https://github.com/#{@user}/homebrew-#{@repo}") != 0 return true unless remote
remote.casecmp("https://github.com/#{@user}/homebrew-#{@repo}") != 0
end end
def formula_files def formula_files
@ -69,7 +76,7 @@ class Tap
"user" => @user, "user" => @user,
"repo" => @repo, "repo" => @repo,
"path" => @path.to_s, "path" => @path.to_s,
"remote" => @remote, "remote" => remote,
"installed" => installed?, "installed" => installed?,
"official" => official?, "official" => official?,
"custom_remote" => custom_remote?, "custom_remote" => custom_remote?,