Permalink
Cannot retrieve contributors at this time
196 lines (166 sloc)
6.82 KB
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Git < Formula | |
desc "Distributed revision control system" | |
homepage "https://git-scm.com" | |
url "https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.37.2.tar.xz" | |
sha256 "1c3d9c821c4538e7a6dac30a4af8bd8dcfe4f651f95474c526b52f83406db003" | |
license "GPL-2.0-only" | |
head "https://github.com/git/git.git", branch: "master" | |
livecheck do | |
url "https://www.kernel.org/pub/software/scm/git/" | |
regex(/href=.*?git[._-]v?(\d+(?:\.\d+)+)\.t/i) | |
end | |
bottle do | |
sha256 arm64_monterey: "626f952d77c17bec5ce3e8de405e9ff23dd79695b65fcabce0b8843a9e493a29" | |
sha256 arm64_big_sur: "701fcd4d036735dda4d5bf1963adb809fddadb9e59cf833aee09bb0a4d15bd56" | |
sha256 monterey: "ce3061dcf134a71ba7dea703eab44a2481bb820daa297d48f9e3660f58168347" | |
sha256 big_sur: "35f1fa27307ecd221d2646f1652660a5fbc1446c9854d7e0550a930e767fb8bf" | |
sha256 catalina: "b298a21602fe2b188fa2c9d929e61165568ab37de995088ebaa30abacaf05082" | |
sha256 x86_64_linux: "a1ea06b515e5f47d0efa5f97b3e54e9ea8672adba61f8f2125d57e246d7276d9" | |
end | |
depends_on "gettext" | |
depends_on "pcre2" | |
uses_from_macos "curl", since: :catalina # macOS < 10.15.6 has broken cert path logic | |
uses_from_macos "expat" | |
uses_from_macos "zlib", since: :high_sierra | |
on_linux do | |
depends_on "linux-headers@4.4" | |
depends_on "openssl@1.1" # Uses CommonCrypto on macOS | |
end | |
resource "html" do | |
url "https://mirrors.edge.kernel.org/pub/software/scm/git/git-htmldocs-2.37.2.tar.xz" | |
sha256 "156afd46528593ba0347e041dc25db67ae55952b72407b084aaf1c8d3df5d99b" | |
end | |
resource "man" do | |
url "https://mirrors.edge.kernel.org/pub/software/scm/git/git-manpages-2.37.2.tar.xz" | |
sha256 "df0613fe38702dee9e981aba800362c843bb81de0b54581448e87bff5d4816fe" | |
end | |
resource "Net::SMTP::SSL" do | |
url "https://cpan.metacpan.org/authors/id/R/RJ/RJBS/Net-SMTP-SSL-1.04.tar.gz" | |
sha256 "7b29c45add19d3d5084b751f7ba89a8e40479a446ce21cfd9cc741e558332a00" | |
end | |
def install | |
# If these things are installed, tell Git build system not to use them | |
ENV["NO_FINK"] = "1" | |
ENV["NO_DARWIN_PORTS"] = "1" | |
ENV["PYTHON_PATH"] = which("python") | |
ENV["PERL_PATH"] = which("perl") | |
ENV["USE_LIBPCRE2"] = "1" | |
ENV["INSTALL_SYMLINKS"] = "1" | |
ENV["LIBPCREDIR"] = Formula["pcre2"].opt_prefix | |
ENV["V"] = "1" # build verbosely | |
perl_version = Utils.safe_popen_read("perl", "--version")[/v(\d+\.\d+)(?:\.\d+)?/, 1] | |
if OS.mac? | |
ENV["PERLLIB_EXTRA"] = %W[ | |
#{MacOS.active_developer_dir} | |
/Library/Developer/CommandLineTools | |
/Applications/Xcode.app/Contents/Developer | |
].uniq.map do |p| | |
"#{p}/Library/Perl/#{perl_version}/darwin-thread-multi-2level" | |
end.join(":") | |
end | |
# The git-gui and gitk tools are installed by a separate formula (git-gui) | |
# to avoid a dependency on tcl-tk and to avoid using the broken system | |
# tcl-tk (see https://github.com/Homebrew/homebrew-core/issues/36390) | |
# This is done by setting the NO_TCLTK make variable. | |
args = %W[ | |
prefix=#{prefix} | |
sysconfdir=#{etc} | |
CC=#{ENV.cc} | |
CFLAGS=#{ENV.cflags} | |
LDFLAGS=#{ENV.ldflags} | |
NO_TCLTK=1 | |
] | |
args += if OS.mac? | |
%w[NO_OPENSSL=1 APPLE_COMMON_CRYPTO=1] | |
else | |
openssl_prefix = Formula["openssl@1.1"].opt_prefix | |
%W[NO_APPLE_COMMON_CRYPTO=1 OPENSSLDIR=#{openssl_prefix}] | |
end | |
system "make", "install", *args | |
git_core = libexec/"git-core" | |
rm git_core/"git-svn" | |
# Install the macOS keychain credential helper | |
if OS.mac? | |
cd "contrib/credential/osxkeychain" do | |
system "make", "CC=#{ENV.cc}", | |
"CFLAGS=#{ENV.cflags}", | |
"LDFLAGS=#{ENV.ldflags}" | |
git_core.install "git-credential-osxkeychain" | |
system "make", "clean" | |
end | |
end | |
# Generate diff-highlight perl script executable | |
cd "contrib/diff-highlight" do | |
system "make" | |
end | |
# Install the netrc credential helper | |
cd "contrib/credential/netrc" do | |
system "make", "test" | |
git_core.install "git-credential-netrc" | |
end | |
# Install git-subtree | |
cd "contrib/subtree" do | |
system "make", "CC=#{ENV.cc}", | |
"CFLAGS=#{ENV.cflags}", | |
"LDFLAGS=#{ENV.ldflags}" | |
git_core.install "git-subtree" | |
end | |
# install the completion script first because it is inside "contrib" | |
bash_completion.install "contrib/completion/git-completion.bash" | |
bash_completion.install "contrib/completion/git-prompt.sh" | |
zsh_completion.install "contrib/completion/git-completion.zsh" => "_git" | |
cp "#{bash_completion}/git-completion.bash", zsh_completion | |
(share/"git-core").install "contrib" | |
# We could build the manpages ourselves, but the build process depends | |
# on many other packages, and is somewhat crazy, this way is easier. | |
man.install resource("man") | |
(share/"doc/git-doc").install resource("html") | |
# Make html docs world-readable | |
chmod 0644, Dir["#{share}/doc/git-doc/**/*.{html,txt}"] | |
chmod 0755, Dir["#{share}/doc/git-doc/{RelNotes,howto,technical}"] | |
# git-send-email needs Net::SMTP::SSL or Net::SMTP >= 2.34 | |
resource("Net::SMTP::SSL").stage do | |
(share/"perl5").install "lib/Net" | |
end | |
# This is only created when building against system Perl, but it isn't | |
# purged by Homebrew's post-install cleaner because that doesn't check | |
# "Library" directories. It is however pointless to keep around as it | |
# only contains the perllocal.pod installation file. | |
rm_rf prefix/"Library/Perl" | |
# Set the macOS keychain credential helper by default | |
# (as Apple's CLT's git also does this). | |
if OS.mac? | |
(buildpath/"gitconfig").write <<~EOS | |
[credential] | |
\thelper = osxkeychain | |
EOS | |
etc.install "gitconfig" | |
end | |
end | |
def caveats | |
<<~EOS | |
The Tcl/Tk GUIs (e.g. gitk, git-gui) are now in the `git-gui` formula. | |
Subversion interoperability (git-svn) is now in the `git-svn` formula. | |
EOS | |
end | |
test do | |
system bin/"git", "init" | |
%w[haunted house].each { |f| touch testpath/f } | |
system bin/"git", "add", "haunted", "house" | |
system bin/"git", "config", "user.name", "'A U Thor'" | |
system bin/"git", "config", "user.email", "author@example.com" | |
system bin/"git", "commit", "-a", "-m", "Initial Commit" | |
assert_equal "haunted\nhouse", shell_output("#{bin}/git ls-files").strip | |
# Check Net::SMTP or Net::SMTP::SSL works for git-send-email | |
if OS.mac? | |
%w[foo bar].each { |f| touch testpath/f } | |
system bin/"git", "add", "foo", "bar" | |
system bin/"git", "commit", "-a", "-m", "Second Commit" | |
assert_match "Authentication Required", pipe_output( | |
"#{bin}/git send-email --from=test@example.com --to=dev@null.com " \ | |
"--smtp-server=smtp.gmail.com --smtp-server-port=587 " \ | |
"--smtp-encryption=tls --confirm=never HEAD^ 2>&1", | |
) | |
end | |
end | |
end |