aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Library/Homebrew/dev-cmd/release-notes.rb43
-rw-r--r--docs/brew.1.html5
-rw-r--r--manpages/brew.17
3 files changed, 55 insertions, 0 deletions
diff --git a/Library/Homebrew/dev-cmd/release-notes.rb b/Library/Homebrew/dev-cmd/release-notes.rb
new file mode 100644
index 000000000..919243764
--- /dev/null
+++ b/Library/Homebrew/dev-cmd/release-notes.rb
@@ -0,0 +1,43 @@
+#: * `release-notes` [<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 newest tag.
+#: If no `end_ref` is provided it defaults to `origin/master`.
+#:
+#: If `--markdown` is passed, output as a Markdown list.
+
+module Homebrew
+ module_function
+
+ def release_notes
+ previous_tag = ARGV.named.first
+ unless previous_tag
+ previous_tag = Utils.popen_read("git tag --list --sort=-version:refname")
+ .lines.first.chomp
+ end
+ 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", "rev-parse", "--verify", "--quiet", ref
+ odie "Ref #{ref} does not exist!"
+ end
+
+ output = Utils.popen_read("git log --pretty=format:'%s >> - %b%n' '#{previous_tag}'..'#{end_ref}'")
+ .lines.grep(/Merge pull request/)
+
+ output.map! do |s|
+ s.gsub(/.*Merge pull request #(\d+)[^>]*(>>)*/,
+ "https://github.com/Homebrew/brew/pull/\\1")
+ end
+ if ARGV.include?("--markdown")
+ output.map! do |s|
+ /(.*\d)+ - (.*)/ =~ s
+ "- [#{$2}](#{$1})"
+ end
+ end
+
+ puts "Release notes between #{previous_tag} and #{end_ref}:"
+ puts output
+ end
+end
diff --git a/docs/brew.1.html b/docs/brew.1.html
index 59c29cb3a..bb8775ceb 100644
--- a/docs/brew.1.html
+++ b/docs/brew.1.html
@@ -567,6 +567,11 @@ Each &lt;patch-source> may be one of:
If <code>--no-publish</code> was passed, do not publish bottles to Bintray.</p>
<dl>
+<dt><code>release-notes</code> [<var>previous_tag</var>] [<var>end_ref</var>]</dt><dd><p>Output the merged pull requests on Homebrew/brew between two Git refs.
+If no <code>previous_tag</code> is provided it defaults to the newest tag.
+If no <code>end_ref</code> is provided it defaults to <code>origin/master</code>.</p>
+
+<p>If <code>--markdown</code> is passed, output as a Markdown list.</p></dd>
<dt><code>tap-new</code> <var>user</var><code>/</code><var>repo</var></dt><dd><p>Generate the template files for a new tap.</p></dd>
<dt><code>test</code> [<code>--devel</code>|<code>--HEAD</code>] [<code>--debug</code>] [<code>--keep-tmp</code>] <var>formula</var></dt><dd><p>Most formulae provide a test method. <code>brew test</code> <var>formula</var> runs this
test method. There is no standard output or return code, but it should
diff --git a/manpages/brew.1 b/manpages/brew.1
index ca98390a6..c74969aee 100644
--- a/manpages/brew.1
+++ b/manpages/brew.1
@@ -759,6 +759,13 @@ Each <patch\-source> may be one of:
If \fB\-\-bottle\fR was passed, handle bottles, pulling the bottle\-update commit and publishing files on Bintray\. If \fB\-\-bump\fR was passed, for one\-formula PRs, automatically reword commit message to our preferred format\. If \fB\-\-clean\fR was passed, do not rewrite or otherwise modify the commits found in the pulled PR\. If \fB\-\-ignore\-whitespace\fR was passed, silently ignore whitespace discrepancies when applying diffs\. If \fB\-\-resolve\fR was passed, when a patch fails to apply, leave in progress and allow user to resolve, instead of aborting\. If \fB\-\-branch\-okay\fR was passed, do not warn if pulling to a branch besides master (useful for testing)\. If \fB\-\-no\-pbcopy\fR was passed, do not copy anything to the system If \fB\-\-no\-publish\fR was passed, do not publish bottles to Bintray\.
.
.TP
+\fBrelease\-notes\fR [\fIprevious_tag\fR] [\fIend_ref\fR]
+Output the merged pull requests on Homebrew/brew between two Git refs\. If no \fBprevious_tag\fR is provided it defaults to the newest tag\. If no \fBend_ref\fR is provided it defaults to \fBorigin/master\fR\.
+.
+.IP
+If \fB\-\-markdown\fR is passed, output as a Markdown list\.
+.
+.TP
\fBtap\-new\fR \fIuser\fR\fB/\fR\fIrepo\fR
Generate the template files for a new tap\.
.