2019-04-19 15:38:03 +09:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2019-04-17 18:25:08 +09:00
|
|
|
require "cli/parser"
|
2018-03-24 19:21:10 +05:30
|
|
|
|
2016-10-22 12:10:48 +01:00
|
|
|
module Homebrew
|
|
|
|
module_function
|
|
|
|
|
2018-07-30 18:25:38 +05:30
|
|
|
def release_notes_args
|
|
|
|
Homebrew::CLI::Parser.new do
|
2018-09-28 21:39:52 +05:30
|
|
|
usage_banner <<~EOS
|
2018-10-15 15:06:33 -04:00
|
|
|
`release-notes` [<options>] [<previous_tag>] [<end_ref>]
|
2018-09-28 21:39:52 +05:30
|
|
|
|
2018-10-08 22:49:03 -04:00
|
|
|
Print the merged pull requests on Homebrew/brew between two Git refs.
|
2018-09-28 21:39:52 +05:30
|
|
|
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",
|
2019-04-30 08:44:35 +01:00
|
|
|
description: "Print as a Markdown list."
|
2018-03-25 17:48:22 +05:30
|
|
|
end
|
2018-07-30 18:25:38 +05:30
|
|
|
end
|
2018-09-08 22:21:04 +05:30
|
|
|
|
2018-07-30 18:25:38 +05:30
|
|
|
def release_notes
|
|
|
|
release_notes_args.parse
|
2018-03-24 19:21:10 +05:30
|
|
|
|
2016-10-22 12:10:48 +01:00
|
|
|
previous_tag = ARGV.named.first
|
2018-04-10 10:23:40 -05:00
|
|
|
previous_tag ||= Utils.popen_read(
|
|
|
|
"git", "-C", HOMEBREW_REPOSITORY, "tag", "--list", "--sort=-version:refname"
|
|
|
|
).lines.first.chomp
|
2016-10-22 12:10:48 +01:00
|
|
|
odie "Could not find any previous tags!" unless previous_tag
|
|
|
|
|
2018-09-17 19:44:12 +02:00
|
|
|
end_ref = ARGV.named.second || "origin/master"
|
2016-10-22 12:10:48 +01:00
|
|
|
|
|
|
|
[previous_tag, end_ref].each do |ref|
|
2018-04-10 10:23:40 -05:00
|
|
|
next if quiet_system "git", "-C", HOMEBREW_REPOSITORY, "rev-parse", "--verify", "--quiet", ref
|
2018-09-17 02:45:00 +02:00
|
|
|
|
2016-10-22 12:10:48 +01:00
|
|
|
odie "Ref #{ref} does not exist!"
|
|
|
|
end
|
|
|
|
|
2018-04-10 10:23:40 -05:00
|
|
|
output = Utils.popen_read(
|
|
|
|
"git", "-C", HOMEBREW_REPOSITORY, "log", "--pretty=format:'%s >> - %b%n'", "#{previous_tag}..#{end_ref}"
|
|
|
|
).lines.grep(/Merge pull request/)
|
2016-10-22 12:10:48 +01:00
|
|
|
|
|
|
|
output.map! do |s|
|
2017-06-03 20:52:36 +01:00
|
|
|
s.gsub(%r{.*Merge pull request #(\d+) from ([^/]+)/[^>]*(>>)*},
|
2017-06-03 19:06:19 +01:00
|
|
|
"https://github.com/Homebrew/brew/pull/\\1 (@\\2)")
|
2016-10-22 12:10:48 +01:00
|
|
|
end
|
2018-03-24 19:21:10 +05:30
|
|
|
if args.markdown?
|
2016-10-22 12:10:48 +01:00
|
|
|
output.map! do |s|
|
2017-06-03 19:06:19 +01:00
|
|
|
/(.*\d)+ \(@(.+)\) - (.*)/ =~ s
|
2017-06-10 20:23:20 +03:00
|
|
|
"- [#{Regexp.last_match(3)}](#{Regexp.last_match(1)}) (@#{Regexp.last_match(2)})"
|
2016-10-22 12:10:48 +01:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2019-04-17 17:00:24 +09:00
|
|
|
$stderr.puts "Release notes between #{previous_tag} and #{end_ref}:"
|
2016-10-22 12:10:48 +01:00
|
|
|
puts output
|
|
|
|
end
|
|
|
|
end
|