-
-
Notifications
You must be signed in to change notification settings - Fork 9.3k
/
log.rb
64 lines (56 loc) 路 1.63 KB
/
log.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# frozen_string_literal: true
require "formula"
require "cli/parser"
module Homebrew
module_function
def log_args
Homebrew::CLI::Parser.new do
usage_banner <<~EOS
`log` [<options>] [<formula>]
Show the `git log` for <formula>, or show the log for the Homebrew repository
if no formula is provided.
EOS
switch "-p", "-u", "--patch",
description: "Also print patch from commit."
switch "--stat",
description: "Also print diffstat from commit."
switch "--oneline",
description: "Print only one line per commit."
flag "-1", "--max-count",
description: "Print only one or a specified number of commits."
end
end
def log
log_args.parse
if ARGV.named.empty?
git_log HOMEBREW_REPOSITORY
else
path = Formulary.path(ARGV.named.first)
tap = Tap.from_path(path)
git_log path.dirname, path, tap
end
end
def git_log(cd_dir, path = nil, tap = nil)
cd cd_dir
repo = Utils.popen_read("git rev-parse --show-toplevel").chomp
if tap
name = tap.to_s
git_cd = "$(brew --repo #{tap})"
elsif cd_dir == HOMEBREW_REPOSITORY
name = "Homebrew/brew"
git_cd = "$(brew --repo)"
else
name, git_cd = cd_dir
end
if File.exist? "#{repo}/.git/shallow"
opoo <<~EOS
#{name} is a shallow clone so only partial output will be shown.
To get a full clone run:
git -C "#{git_cd}" fetch --unshallow
EOS
end
args = ARGV.options_only
args += ["--follow", "--", path] unless path.nil?
system "git", "log", *args
end
end