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"
end
puts info
puts "From: #{tap.remote}"
puts "From: #{tap.remote.nil? ? "N/A" : tap.remote}"
end
end
end

View File

@ -14,10 +14,11 @@ module Homebrew
end
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?
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")
safe_system "git", *args

View File

@ -7,20 +7,26 @@ class Tap
attr_reader :repo
attr_reader :name
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
@user = user == "homebrew" ? "Homebrew" : user
@repo = repo
@name = "#{@user}/#{@repo}".downcase
@path = TAP_DIRECTORY/"#{@user}/homebrew-#{@repo}".downcase
if installed?
@path.cd do
@remote = Utils.popen_read("git", "config", "--get", "remote.origin.url").chomp
end
def remote
@remote ||= if installed?
if (@path/".git").exist?
@path.cd do
Utils.popen_read("git", "config", "--get", "remote.origin.url").chomp
end
else
nil
end
else
@remote = remote || "https://github.com/#{@user}/homebrew-#{@repo}"
raise TapUnavailableError, name
end
end
@ -46,7 +52,8 @@ class Tap
end
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
def formula_files
@ -69,7 +76,7 @@ class Tap
"user" => @user,
"repo" => @repo,
"path" => @path.to_s,
"remote" => @remote,
"remote" => remote,
"installed" => installed?,
"official" => official?,
"custom_remote" => custom_remote?,