From 4101cef3c5e167daee6a6189e34546619c510dd3 Mon Sep 17 00:00:00 2001 From: Xu Cheng Date: Sat, 13 Jun 2015 01:57:00 +0800 Subject: Tap: make remote a separate method to reduce initial overhead Also make remote method only response to installed tap. --- Library/Homebrew/cmd/tap-info.rb | 2 +- Library/Homebrew/cmd/tap.rb | 5 +++-- Library/Homebrew/tap.rb | 23 +++++++++++++++-------- 3 files changed, 19 insertions(+), 11 deletions(-) (limited to 'Library') diff --git a/Library/Homebrew/cmd/tap-info.rb b/Library/Homebrew/cmd/tap-info.rb index e05b9eb08..cd3f82109 100644 --- a/Library/Homebrew/cmd/tap-info.rb +++ b/Library/Homebrew/cmd/tap-info.rb @@ -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 diff --git a/Library/Homebrew/cmd/tap.rb b/Library/Homebrew/cmd/tap.rb index 3a0a1156b..43e47711e 100644 --- a/Library/Homebrew/cmd/tap.rb +++ b/Library/Homebrew/cmd/tap.rb @@ -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 diff --git a/Library/Homebrew/tap.rb b/Library/Homebrew/tap.rb index 92f02fc06..f8200dac2 100644 --- a/Library/Homebrew/tap.rb +++ b/Library/Homebrew/tap.rb @@ -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?, -- cgit v1.2.3