tap: add methods to get git related information
These methods will be used in `brew --version`, `brew config` and `brew doctor` after core/formula separation. Closes Homebrew/homebrew#49796. Signed-off-by: Xu Cheng <xucheng@me.com>
This commit is contained in:
parent
a2d0d88bf1
commit
9f96e41b40
@ -83,7 +83,7 @@ class Tap
|
||||
# e.g. `https://github.com/user/homebrew-repo`
|
||||
def remote
|
||||
@remote ||= if installed?
|
||||
if git?
|
||||
if git? && Utils.git_available?
|
||||
path.cd do
|
||||
Utils.popen_read("git", "config", "--get", "remote.origin.url").chomp
|
||||
end
|
||||
@ -98,6 +98,34 @@ class Tap
|
||||
(path/".git").exist?
|
||||
end
|
||||
|
||||
# git HEAD for this {Tap}.
|
||||
def git_head
|
||||
raise TapUnavailableError, name unless installed?
|
||||
return unless git? && Utils.git_available?
|
||||
path.cd { Utils.popen_read("git", "rev-parse", "--verify", "-q", "HEAD").chuzzle }
|
||||
end
|
||||
|
||||
# git HEAD in short format for this {Tap}.
|
||||
def git_short_head
|
||||
raise TapUnavailableError, name unless installed?
|
||||
return unless git? && Utils.git_available?
|
||||
path.cd { Utils.popen_read("git", "rev-parse", "--short=4", "--verify", "-q", "HEAD").chuzzle }
|
||||
end
|
||||
|
||||
# time since git last commit for this {Tap}.
|
||||
def git_last_commit
|
||||
raise TapUnavailableError, name unless installed?
|
||||
return unless git? && Utils.git_available?
|
||||
path.cd { Utils.popen_read("git", "show", "-s", "--format=%cr", "HEAD").chuzzle }
|
||||
end
|
||||
|
||||
# git last commit date for this {Tap}.
|
||||
def git_last_commit_date
|
||||
raise TapUnavailableError, name unless installed?
|
||||
return unless git? && Utils.git_available?
|
||||
path.cd { Utils.popen_read("git", "show", "-s", "--format=%cd", "--date=short", "HEAD").chuzzle }
|
||||
end
|
||||
|
||||
# The issues URL of this {Tap}.
|
||||
# e.g. `https://github.com/user/homebrew-repo/issues`
|
||||
def issues_url
|
||||
|
||||
@ -1,6 +1,8 @@
|
||||
require "testing_env"
|
||||
|
||||
class TapTest < Homebrew::TestCase
|
||||
include FileUtils
|
||||
|
||||
def setup
|
||||
@path = Tap::TAP_DIRECTORY/"homebrew/homebrew-foo"
|
||||
@path.mkpath
|
||||
@ -16,7 +18,7 @@ class TapTest < Homebrew::TestCase
|
||||
EOS
|
||||
@alias_file = @path/"Aliases/bar"
|
||||
@alias_file.parent.mkpath
|
||||
FileUtils.ln_s @formula_file, @alias_file
|
||||
ln_s @formula_file, @alias_file
|
||||
(@path/"formula_renames.json").write <<-EOS.undent
|
||||
{ "oldname": "foo" }
|
||||
EOS
|
||||
@ -25,14 +27,21 @@ class TapTest < Homebrew::TestCase
|
||||
EOS
|
||||
@cmd_file = @path/"cmd/brew-tap-cmd.rb"
|
||||
@cmd_file.parent.mkpath
|
||||
FileUtils.touch @cmd_file
|
||||
FileUtils.chmod 0755, @cmd_file
|
||||
touch @cmd_file
|
||||
chmod 0755, @cmd_file
|
||||
@manpage_file = @path/"man/man1/brew-tap-cmd.1"
|
||||
@manpage_file.parent.mkpath
|
||||
FileUtils.touch @manpage_file
|
||||
touch @manpage_file
|
||||
end
|
||||
|
||||
def setup_git_repo
|
||||
env = ENV.to_hash
|
||||
%w[AUTHOR COMMITTER].each do |role|
|
||||
ENV["GIT_#{role}_NAME"] = "brew tests"
|
||||
ENV["GIT_#{role}_EMAIL"] = "brew-tests@localhost"
|
||||
ENV["GIT_#{role}_DATE"] = "Thu May 21 00:04:11 2009 +0100"
|
||||
end
|
||||
|
||||
@path.cd do
|
||||
shutup do
|
||||
system "git", "init"
|
||||
@ -41,6 +50,8 @@ class TapTest < Homebrew::TestCase
|
||||
system "git", "commit", "-m", "init"
|
||||
end
|
||||
end
|
||||
ensure
|
||||
ENV.replace(env)
|
||||
end
|
||||
|
||||
def teardown
|
||||
@ -74,7 +85,7 @@ class TapTest < Homebrew::TestCase
|
||||
t = Tap.new("someone", "foo")
|
||||
path = Tap::TAP_DIRECTORY/"someone/homebrew-foo"
|
||||
path.mkpath
|
||||
FileUtils.cd path do
|
||||
cd path do
|
||||
shutup { system "git", "init" }
|
||||
system "git", "remote", "add", "origin",
|
||||
"https://github.com/someone/homebrew-foo"
|
||||
@ -123,6 +134,26 @@ class TapTest < Homebrew::TestCase
|
||||
refute_predicate version_tap, :private?
|
||||
end
|
||||
|
||||
def test_remote_not_git_repo
|
||||
assert_nil @tap.remote
|
||||
end
|
||||
|
||||
def test_remote_git_not_available
|
||||
setup_git_repo
|
||||
Utils.stubs(:git_available?).returns(false)
|
||||
assert_nil @tap.remote
|
||||
end
|
||||
|
||||
def test_git_variant
|
||||
touch @path/"README"
|
||||
setup_git_repo
|
||||
|
||||
assert_equal "e1893a6bd191ba895c71b652ff8376a6114c7fa7", @tap.git_head
|
||||
assert_equal "e189", @tap.git_short_head
|
||||
assert_match %r{years ago}, @tap.git_last_commit
|
||||
assert_equal "2009-05-21", @tap.git_last_commit_date
|
||||
end
|
||||
|
||||
def test_private_remote
|
||||
skip "HOMEBREW_GITHUB_API_TOKEN is required" unless ENV["HOMEBREW_GITHUB_API_TOKEN"]
|
||||
assert_predicate @tap, :private?
|
||||
@ -174,6 +205,8 @@ class TapTest < Homebrew::TestCase
|
||||
end
|
||||
|
||||
class CoreFormulaRepositoryTest < Homebrew::TestCase
|
||||
include FileUtils
|
||||
|
||||
def setup
|
||||
@repo = CoreFormulaRepository.new
|
||||
end
|
||||
@ -204,7 +237,7 @@ class CoreFormulaRepositoryTest < Homebrew::TestCase
|
||||
EOS
|
||||
@alias_file = @repo.alias_dir/"bar"
|
||||
@alias_file.parent.mkpath
|
||||
FileUtils.ln_s @formula_file, @alias_file
|
||||
ln_s @formula_file, @alias_file
|
||||
|
||||
assert_equal [@formula_file], @repo.formula_files
|
||||
assert_equal ["foo"], @repo.formula_names
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user