document Tap class
Closes Homebrew/homebrew#40608. Signed-off-by: Xu Cheng <xucheng@me.com>
This commit is contained in:
parent
4101cef3c5
commit
4564ea899e
@ -1,11 +1,29 @@
|
|||||||
|
# a {Tap} is used to extend the formulae provided by Homebrew core.
|
||||||
|
# Usually, it's synced with a remote git repository. And it's likely
|
||||||
|
# a Github repository with the name of `user/homebrew-repo`. In such
|
||||||
|
# case, `user/repo` will be used as the {#name} of this {Tap}, where
|
||||||
|
# {#user} represents Github username and {#repo} represents repository
|
||||||
|
# name without leading `homebrew-`.
|
||||||
|
# @abstract
|
||||||
class Tap
|
class Tap
|
||||||
TAP_DIRECTORY = HOMEBREW_LIBRARY/"Taps"
|
TAP_DIRECTORY = HOMEBREW_LIBRARY/"Taps"
|
||||||
|
|
||||||
extend Enumerable
|
extend Enumerable
|
||||||
|
|
||||||
|
# The user name of this {Tap}. Usually, it's the Github username of
|
||||||
|
# this #{Tap}'s remote repository.
|
||||||
attr_reader :user
|
attr_reader :user
|
||||||
|
|
||||||
|
# The repository name of this {Tap} without leading `homebrew-`.
|
||||||
attr_reader :repo
|
attr_reader :repo
|
||||||
|
|
||||||
|
# The name of this {Tap}. It combines {#user} and {#repo} with a slash.
|
||||||
|
# {#name} is always in lowercase.
|
||||||
|
# e.g. `user/repo`
|
||||||
attr_reader :name
|
attr_reader :name
|
||||||
|
|
||||||
|
# The local path to this {Tap}.
|
||||||
|
# e.g. `/usr/local/Library/Taps/user/homebrew-repo`
|
||||||
attr_reader :path
|
attr_reader :path
|
||||||
|
|
||||||
def initialize(user, repo)
|
def initialize(user, repo)
|
||||||
@ -16,6 +34,8 @@ class Tap
|
|||||||
@path = TAP_DIRECTORY/"#{@user}/homebrew-#{@repo}".downcase
|
@path = TAP_DIRECTORY/"#{@user}/homebrew-#{@repo}".downcase
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# The remote path to this {Tap}.
|
||||||
|
# e.g. `https://github.com/user/homebrew-repo`
|
||||||
def remote
|
def remote
|
||||||
@remote ||= if installed?
|
@remote ||= if installed?
|
||||||
if (@path/".git").exist?
|
if (@path/".git").exist?
|
||||||
@ -34,10 +54,12 @@ class Tap
|
|||||||
name
|
name
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# True if this {Tap} is an official Homebrew tap.
|
||||||
def official?
|
def official?
|
||||||
@user == "Homebrew"
|
@user == "Homebrew"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# True if the remote of this {Tap} is a private repository.
|
||||||
def private?
|
def private?
|
||||||
return true if custom_remote?
|
return true if custom_remote?
|
||||||
GitHub.private_repo?(@user, "homebrew-#{@repo}")
|
GitHub.private_repo?(@user, "homebrew-#{@repo}")
|
||||||
@ -47,25 +69,30 @@ class Tap
|
|||||||
false
|
false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# True if this {Tap} has been installed.
|
||||||
def installed?
|
def installed?
|
||||||
@path.directory?
|
@path.directory?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# True if the {#remote} of {Tap} is customized.
|
||||||
def custom_remote?
|
def custom_remote?
|
||||||
return true unless remote
|
return true unless remote
|
||||||
remote.casecmp("https://github.com/#{@user}/homebrew-#{@repo}") != 0
|
remote.casecmp("https://github.com/#{@user}/homebrew-#{@repo}") != 0
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# an array of all {Formula} files of this {Tap}.
|
||||||
def formula_files
|
def formula_files
|
||||||
dir = [@path/"Formula", @path/"HomebrewFormula", @path].detect(&:directory?)
|
dir = [@path/"Formula", @path/"HomebrewFormula", @path].detect(&:directory?)
|
||||||
return [] unless dir
|
return [] unless dir
|
||||||
dir.children.select { |p| p.extname == ".rb" }
|
dir.children.select { |p| p.extname == ".rb" }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# an array of all {Formula} names of this {Tap}.
|
||||||
def formula_names
|
def formula_names
|
||||||
formula_files.map { |f| "#{name}/#{f.basename(".rb")}" }
|
formula_files.map { |f| "#{name}/#{f.basename(".rb")}" }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# an array of all commands files of this {Tap}.
|
||||||
def command_files
|
def command_files
|
||||||
Pathname.glob("#{path}/cmd/brew-*").select(&:executable?)
|
Pathname.glob("#{path}/cmd/brew-*").select(&:executable?)
|
||||||
end
|
end
|
||||||
@ -98,6 +125,7 @@ class Tap
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# an array of all installed {Tap} names.
|
||||||
def self.names
|
def self.names
|
||||||
map(&:name)
|
map(&:name)
|
||||||
end
|
end
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user