diff --git a/Library/Homebrew/dev-cmd/release.rb b/Library/Homebrew/dev-cmd/release.rb index b67041c8db..2c22ff7aa3 100755 --- a/Library/Homebrew/dev-cmd/release.rb +++ b/Library/Homebrew/dev-cmd/release.rb @@ -71,7 +71,7 @@ module Homebrew latest_major_minor_version = "#{latest_version.major}.#{latest_version.minor.to_i}.0" ohai "Release notes since #{latest_major_minor_version} for #{new_version} blog post:" # release notes without username suffix or dependabot bumps - puts ReleaseNotes.generate_release_notes(latest_major_minor_version, "origin/HEAD", markdown: true) + puts ReleaseNotes.generate_release_notes(latest_major_minor_version, "origin/HEAD") .lines .reject { |l| l.include?(" (@Homebrew)") } .map { |l| l.gsub(/ \(@[\w-]+\)$/, "") } @@ -85,7 +85,7 @@ module Homebrew else "" end - release_notes += ReleaseNotes.generate_release_notes latest_version, "origin/HEAD", markdown: true + release_notes += ReleaseNotes.generate_release_notes latest_version, "origin/HEAD" begin release = GitHub.create_or_update_release "Homebrew", "brew", new_version, body: release_notes, draft: true diff --git a/Library/Homebrew/release_notes.rb b/Library/Homebrew/release_notes.rb index 9a6e729d24..840188089e 100644 --- a/Library/Homebrew/release_notes.rb +++ b/Library/Homebrew/release_notes.rb @@ -14,27 +14,17 @@ module ReleaseNotes .returns(String) } def generate_release_notes(start_ref, end_ref, markdown: false) - log_output = Utils.popen_read( + Utils.popen_read( "git", "-C", HOMEBREW_REPOSITORY, "log", "--pretty=format:'%s >> - %b%n'", "#{start_ref}..#{end_ref}" - ).lines.grep(/Merge pull request/) - - log_output.map! do |s| + ).lines.map do |s| matches = s.match(%r{.*Merge pull request #(?\d+) from (?[^/]+)/[^>]*>> - (?.*)}) - body = if matches[:body].empty? - s.gsub(/.*(Merge pull request .*) >> - .*/, "\\1").chomp - else - matches[:body] - end - "https://github.com/Homebrew/brew/pull/#{matches[:pr]} (@#{matches[:user]}) - #{body}\n" - end + next if matches.blank? + next if matches[:user] == "Homebrew" - if markdown - log_output.map! do |s| - /(.*\d)+ \(@(.+)\) - (.*)/ =~ s - "- [#{Regexp.last_match(3)}](#{Regexp.last_match(1)}) (@#{Regexp.last_match(2)})\n" - end - end + body = matches[:body].presence + body ||= s.gsub(/.*(Merge pull request .*) >> - .*/, "\\1").chomp - log_output.join + "- [#{body}](https://github.com/Homebrew/brew/pull/#{matches[:pr]}) (@#{matches[:user]})\n" + end.compact.join end end diff --git a/Library/Homebrew/test/release_notes_spec.rb b/Library/Homebrew/test/release_notes_spec.rb index d89a8e9671..f61fdf47ca 100644 --- a/Library/Homebrew/test/release_notes_spec.rb +++ b/Library/Homebrew/test/release_notes_spec.rb @@ -18,19 +18,10 @@ describe ReleaseNotes do end describe ".generate_release_notes" do - it "generates release notes" do - expect(described_class.generate_release_notes("release-notes-testing", "HEAD")).to eq <<~NOTES - https://github.com/Homebrew/brew/pull/3 (@User) - Merge pull request #3 from User/another_change - https://github.com/Homebrew/brew/pull/2 (@User) - Do something else - https://github.com/Homebrew/brew/pull/1 (@Homebrew) - Do something - NOTES - end - it "generates markdown release notes" do - expect(described_class.generate_release_notes("release-notes-testing", "HEAD", markdown: true)).to eq <<~NOTES + expect(described_class.generate_release_notes("release-notes-testing", "HEAD")).to eq <<~NOTES - [Merge pull request #3 from User/another_change](https://github.com/Homebrew/brew/pull/3) (@User) - [Do something else](https://github.com/Homebrew/brew/pull/2) (@User) - - [Do something](https://github.com/Homebrew/brew/pull/1) (@Homebrew) NOTES end end