From f2c46d4608fc36003365e9d534e227667feb9871 Mon Sep 17 00:00:00 2001 From: Steve Peters Date: Wed, 28 Apr 2021 21:23:52 -0700 Subject: [PATCH] release_notes: fix for missing body message Some merge commits don't include the title of the pull request on subsequent lines, leaving the markdown link text blank in the release notes. This appends the subject line of the commit message instead if the body is missing and adds a test case. --- Library/Homebrew/release_notes.rb | 9 +++++++-- Library/Homebrew/test/release_notes_spec.rb | 4 ++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/Library/Homebrew/release_notes.rb b/Library/Homebrew/release_notes.rb index 19cdba9a17..9a6e729d24 100644 --- a/Library/Homebrew/release_notes.rb +++ b/Library/Homebrew/release_notes.rb @@ -19,8 +19,13 @@ module ReleaseNotes ).lines.grep(/Merge pull request/) log_output.map! do |s| - s.gsub(%r{.*Merge pull request #(\d+) from ([^/]+)/[^>]*(>>)*}, - "https://github.com/Homebrew/brew/pull/\\1 (@\\2)") + 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 if markdown diff --git a/Library/Homebrew/test/release_notes_spec.rb b/Library/Homebrew/test/release_notes_spec.rb index a65e347b0a..d89a8e9671 100644 --- a/Library/Homebrew/test/release_notes_spec.rb +++ b/Library/Homebrew/test/release_notes_spec.rb @@ -12,12 +12,15 @@ describe ReleaseNotes do system "git", "commit", "--allow-empty", "-m", "Merge pull request #1 from Homebrew/fix", "-m", "Do something" system "git", "commit", "--allow-empty", "-m", "make a change" system "git", "commit", "--allow-empty", "-m", "Merge pull request #2 from User/fix", "-m", "Do something else" + system "git", "commit", "--allow-empty", "-m", "another change" + system "git", "commit", "--allow-empty", "-m", "Merge pull request #3 from User/another_change" end 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 @@ -25,6 +28,7 @@ describe ReleaseNotes do it "generates markdown release notes" do expect(described_class.generate_release_notes("release-notes-testing", "HEAD", markdown: true)).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