brew/Library/Homebrew/dev-cmd/release-notes.rb

63 lines
2.0 KiB
Ruby
Raw Normal View History

#: * `release-notes` [`--markdown`] [<previous_tag>] [<end_ref>]:
#: Output the merged pull requests on Homebrew/brew between two Git refs.
#: If no <previous_tag> is provided it defaults to the latest tag.
#: If no <end_ref> is provided it defaults to `origin/master`.
#:
#: If `--markdown` is passed, output as a Markdown list.
require "cli_parser"
module Homebrew
module_function
def release_notes_args
Homebrew::CLI::Parser.new do
2018-09-28 21:39:52 +05:30
usage_banner <<~EOS
2018-10-03 10:19:46 +05:30
`release-notes` [<options>] [<previous_tag>] [<end_ref>]:
2018-09-28 21:39:52 +05:30
Output the merged pull requests on Homebrew/brew between two Git refs.
If no <previous_tag> is provided it defaults to the latest tag.
If no <end_ref> is provided it defaults to `origin/master`.
EOS
switch "--markdown",
description: "Output as a Markdown list."
end
end
2018-09-08 22:21:04 +05:30
def release_notes
release_notes_args.parse
previous_tag = ARGV.named.first
previous_tag ||= Utils.popen_read(
"git", "-C", HOMEBREW_REPOSITORY, "tag", "--list", "--sort=-version:refname"
).lines.first.chomp
odie "Could not find any previous tags!" unless previous_tag
end_ref = ARGV.named[1] || "origin/master"
[previous_tag, end_ref].each do |ref|
next if quiet_system "git", "-C", HOMEBREW_REPOSITORY, "rev-parse", "--verify", "--quiet", ref
2018-09-17 02:45:00 +02:00
odie "Ref #{ref} does not exist!"
end
output = Utils.popen_read(
"git", "-C", HOMEBREW_REPOSITORY, "log", "--pretty=format:'%s >> - %b%n'", "#{previous_tag}..#{end_ref}"
).lines.grep(/Merge pull request/)
output.map! do |s|
2017-06-03 20:52:36 +01:00
s.gsub(%r{.*Merge pull request #(\d+) from ([^/]+)/[^>]*(>>)*},
"https://github.com/Homebrew/brew/pull/\\1 (@\\2)")
end
if args.markdown?
output.map! do |s|
/(.*\d)+ \(@(.+)\) - (.*)/ =~ s
"- [#{Regexp.last_match(3)}](#{Regexp.last_match(1)}) (@#{Regexp.last_match(2)})"
end
end
puts "Release notes between #{previous_tag} and #{end_ref}:"
puts output
end
end