Skip to content
This repository has been archived by the owner on Jul 4, 2023. It is now read-only.

Commit

Permalink
Update brew tap to work without 'homebrew-'
Browse files Browse the repository at this point in the history
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 #18366.

Signed-off-by: Mike McQuaid <mike@mikemcquaid.com>
  • Loading branch information
Peter Aronoff authored and MikeMcQuaid committed Mar 12, 2013
1 parent 52e0cde commit d72901f
Showing 1 changed file with 18 additions and 4 deletions.
22 changes: 18 additions & 4 deletions Library/Homebrew/cmd/tap.rb
Expand Up @@ -24,7 +24,21 @@ def install_tap user, repo
# 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?

This comment has been minimized.

Copy link
@Sharpie

Sharpie Mar 12, 2013

Contributor

This may be what is causing #18432. If you try to clone a non-existant GitHub repo, then git will hang and ask for credentials instead of silently failing.

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) }
Expand All @@ -34,7 +48,7 @@ def install_tap user, repo
# 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"
Expand All @@ -43,7 +57,7 @@ def install_tap user, repo
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
Expand Down Expand Up @@ -102,7 +116,7 @@ def repair_taps
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
Expand Down

0 comments on commit d72901f

Please sign in to comment.