dev-cmd/contributions: Switch --email to be a named arg

- This way we can do the more intuitive:

```
$ brew contributions --repos=brew,core rslpolster@gmail.com
Person rslpolster@gmail.com directly authored 1580 commits and co-authored 125 commits to brew, core in all time.
```
This commit is contained in:
Issy Long 2022-07-24 23:32:48 +01:00
parent c330ea4e3b
commit 441df3d866
No known key found for this signature in database
GPG Key ID: 8247C390DADC67D4

View File

@ -14,14 +14,11 @@ module Homebrew
def contributions_args def contributions_args
Homebrew::CLI::Parser.new do Homebrew::CLI::Parser.new do
usage_banner <<~EOS usage_banner <<~EOS
`contributions` `contributions [email]`
Contributions to Homebrew repos for a user. Contributions to Homebrew repos for a user.
EOS EOS
flag "--email=",
description: "A user's email address that they commit with."
flag "--from=", flag "--from=",
description: "Date (ISO-8601 format) to start searching contributions." description: "Date (ISO-8601 format) to start searching contributions."
@ -32,7 +29,7 @@ module Homebrew
description: "The Homebrew repositories to search for contributions in. " \ description: "The Homebrew repositories to search for contributions in. " \
"Comma separated. Supported repos: #{SUPPORTED_REPOS.join(", ")}." "Comma separated. Supported repos: #{SUPPORTED_REPOS.join(", ")}."
named_args :none named_args :email
end end
end end
@ -40,7 +37,7 @@ module Homebrew
def contributions def contributions
args = contributions_args.parse args = contributions_args.parse
return ofail "`--repos` and `--email` are required." if !args[:repos] || !args[:email] return ofail "`--repos` is required." if args.repos.empty?
commits = 0 commits = 0
coauthorships = 0 coauthorships = 0
@ -57,7 +54,7 @@ module Homebrew
coauthorships += git_log_coauthor_cmd(repo_path, args) coauthorships += git_log_coauthor_cmd(repo_path, args)
end end
sentence = "Person #{args[:email]} directly authored #{commits} commits" sentence = "Person #{args.named.first} directly authored #{commits} commits"
sentence += " and co-authored #{coauthorships} commits" sentence += " and co-authored #{coauthorships} commits"
sentence += " to #{args[:repos].join(", ")}" sentence += " to #{args[:repos].join(", ")}"
sentence += if args[:from] && args[:to] sentence += if args[:from] && args[:to]
@ -83,7 +80,7 @@ module Homebrew
sig { params(repo_path: String, args: Homebrew::CLI::Args).returns(Integer) } sig { params(repo_path: String, args: Homebrew::CLI::Args).returns(Integer) }
def git_log_author_cmd(repo_path, args) def git_log_author_cmd(repo_path, args)
cmd = "git -C #{repo_path} log --oneline --author=#{args[:email]}" cmd = "git -C #{repo_path} log --oneline --author=#{args.named.first}"
cmd += " --before=#{args[:to]}" if args[:to] cmd += " --before=#{args[:to]}" if args[:to]
cmd += " --after=#{args[:from]}" if args[:from] cmd += " --after=#{args[:from]}" if args[:from]
@ -96,7 +93,7 @@ module Homebrew
cmd += " --format='%(trailers:key=Co-authored-by:)'" cmd += " --format='%(trailers:key=Co-authored-by:)'"
cmd += " --before=#{args[:to]}" if args[:to] cmd += " --before=#{args[:to]}" if args[:to]
cmd += " --after=#{args[:from]}" if args[:from] cmd += " --after=#{args[:from]}" if args[:from]
cmd += " | grep #{args[:email]}" cmd += " | grep #{args.named.first}"
`#{cmd} | wc -l`.strip.to_i `#{cmd} | wc -l`.strip.to_i
end end