From 3381142bc7ee5e978494d7b89355e6f145b927a5 Mon Sep 17 00:00:00 2001 From: Peter Aronoff Date: Tue, 12 Mar 2013 12:32:49 +0000 Subject: [PATCH] Update `brew tap` to work without 'homebrew-' Currently `brew tap` only works on repos with 'homebrew-' in their name. This version tries the repo name as is and then falls back to try 'homebrew-repo' only if that fails. I've also tweaked the regex in tap_args to allow '-' in repo names. The previous regex required a match on \w. This made it impossible for people to tap repos with names like 'username/why-not'. Closes Homebrew/homebrew#18366. Signed-off-by: Mike McQuaid --- Library/Homebrew/cmd/tap.rb | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/Library/Homebrew/cmd/tap.rb b/Library/Homebrew/cmd/tap.rb index 5bd37548f6..a091da0551 100644 --- a/Library/Homebrew/cmd/tap.rb +++ b/Library/Homebrew/cmd/tap.rb @@ -24,7 +24,21 @@ module Homebrew extend self # we downcase to avoid case-insensitive filesystem issues tapd = HOMEBREW_LIBRARY/"Taps/#{user.downcase}-#{repo.downcase}" raise "Already tapped!" if tapd.directory? - abort unless system "git clone https://github.com/#{repouser}/homebrew-#{repo} #{tapd}" + # First try tapping the repo name as is. If that fails, fall back to + # 'homebrew-repo'. + stdout = `git clone https://github.com/#{repouser}/#{repo} #{tapd} 2>/dev/null` + unless $?.success? + stdout = `git clone https://github.com/#{repouser}/homebrew-#{repo} #{tapd} 2>&1` + if $?.success? + repo = "homebrew-" + repo + else + abort <<-EOS.undent + Neither #{repouser}/#{repo} nor #{repouser}/homebrew-#{repo} tapped. + Please check the tap name and try again. + EOS + end + end + puts stdout files = [] tapd.find_formula{ |file| files << tapd.basename.join(file) } @@ -34,7 +48,7 @@ module Homebrew extend self # Figure out if this repo is private # curl will throw an exception if the repo is private (Github returns a 404) begin - curl('-Ifso', '/dev/null', "https://api.github.com/repos/#{repouser}/homebrew-#{repo}") + curl('-Ifso', '/dev/null', "https://api.github.com/repos/#{repouser}/#{repo}") rescue puts puts "It looks like you tapped a private repository" @@ -43,7 +57,7 @@ module Homebrew extend self puts "following command:" puts puts " cd #{tapd}" - puts " git remote set-url origin git@github.com:#{repouser}/homebrew-#{repo}.git" + puts " git remote set-url origin git@github.com:#{repouser}/#{repo}.git" puts end end @@ -102,7 +116,7 @@ module Homebrew extend self private def tap_args - ARGV.first =~ %r{^(\S+)/(homebrew-)?(\w+)$} + ARGV.first =~ %r{^(\S+)/(homebrew-)?([-\w]+)$} raise "Invalid usage" unless $1 and $3 [$1, $3] end