mirror of
https://github.com/Homebrew/brew.git
synced 2025-07-14 16:09:03 +08:00

This should avoid weird test ordering failures with specs on Linux (but there's no real reason this can't occur on macOS too).
74 lines
1.8 KiB
Ruby
74 lines
1.8 KiB
Ruby
require "open3"
|
|
|
|
module Git
|
|
module_function
|
|
|
|
def last_revision_commit_of_file(repo, file, before_commit: nil)
|
|
args = [before_commit.nil? ? "--skip=1" : before_commit.split("..").first]
|
|
|
|
out, = Open3.capture3(
|
|
HOMEBREW_SHIMS_PATH/"scm/git", "-C", repo,
|
|
"log", "--oneline", "--max-count=1", *args, "--", file
|
|
)
|
|
out.split(" ").first
|
|
end
|
|
|
|
def last_revision_of_file(repo, file, before_commit: nil)
|
|
relative_file = Pathname(file).relative_path_from(repo)
|
|
|
|
commit_hash = last_revision_commit_of_file(repo, relative_file, before_commit: before_commit)
|
|
out, = Open3.capture3(
|
|
HOMEBREW_SHIMS_PATH/"scm/git", "-C", repo,
|
|
"show", "#{commit_hash}:#{relative_file}"
|
|
)
|
|
out
|
|
end
|
|
end
|
|
|
|
module Utils
|
|
def self.git_available?
|
|
@git ||= quiet_system HOMEBREW_SHIMS_PATH/"scm/git", "--version"
|
|
end
|
|
|
|
def self.git_path
|
|
return unless git_available?
|
|
@git_path ||= Utils.popen_read(
|
|
HOMEBREW_SHIMS_PATH/"scm/git", "--homebrew=print-path"
|
|
).chuzzle
|
|
end
|
|
|
|
def self.git_version
|
|
return unless git_available?
|
|
@git_version ||= Utils.popen_read(
|
|
HOMEBREW_SHIMS_PATH/"scm/git", "--version"
|
|
).chomp[/git version (\d+(?:\.\d+)*)/, 1]
|
|
end
|
|
|
|
def self.ensure_git_installed!
|
|
return if git_available?
|
|
|
|
# we cannot install brewed git if homebrew/core is unavailable.
|
|
if CoreTap.instance.installed?
|
|
begin
|
|
oh1 "Installing git"
|
|
safe_system HOMEBREW_BREW_FILE, "install", "git"
|
|
rescue
|
|
raise "Git is unavailable"
|
|
end
|
|
end
|
|
|
|
raise "Git is unavailable" unless git_available?
|
|
end
|
|
|
|
def self.clear_git_available_cache
|
|
@git = nil
|
|
@git_path = nil
|
|
@git_version = nil
|
|
end
|
|
|
|
def self.git_remote_exists(url)
|
|
return true unless git_available?
|
|
quiet_system "git", "ls-remote", url
|
|
end
|
|
end
|