[前][次][番号順一覧][スレッド一覧]

ruby-changes:46061

From: usa <ko1@a...>
Date: Sun, 26 Mar 2017 05:35:59 +0900 (JST)
Subject: [ruby-changes:46061] usa:r58132 (trunk): Add a tool for backporters.

usa	2017-03-26 05:35:51 +0900 (Sun, 26 Mar 2017)

  New Revision: 58132

  https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=58132

  Log:
    Add a tool for backporters.
    
    * tool/generate-backport-changelog.rb: Generate ChangeLog entries from svn log.

  Added files:
    trunk/tool/generate-backport-changelog.rb
Index: tool/generate-backport-changelog.rb
===================================================================
--- tool/generate-backport-changelog.rb	(revision 0)
+++ tool/generate-backport-changelog.rb	(revision 58132)
@@ -0,0 +1,99 @@ https://github.com/ruby/ruby/blob/trunk/tool/generate-backport-changelog.rb#L1
+#!ruby
+require "time"
+
+def usage!
+  STDERR.puts <<-EOS
+Usage: $0 [--trunk=<dir>] [--target=<dir>] <revision(s)>
+
+Generate ChangeLog entries for backporting.
+The entries are output to STDOUT, and the messages of this tool are output to
+STDERR. So you can simply redirect STDOUT to get the entries.
+
+You should specify the path of trunk by `--trunk`. If not, assumed cwd.
+You also should specify the path of the target branch by `--target`. If not,
+assumed cwd.
+This means that you have to specify at least one of `--trunk` or `--target`.
+
+revision(s) can be below or their combinations:
+  12345        # means r12345
+  12345,54321  # means r12345 and r54321
+  12345-12347  # means r12345, r12346 and r12347 (of course, if available)
+
+Note that the revisions is backported branch's ones, not trunk's.
+
+The target of this tool is *not* to generate ChangeLog automatically, but to
+generate the draft of ChangeLog.
+You have to check and modify the output.
+  EOS
+  exit
+end
+
+Majors = {
+  "eregon" => "Benoit Daloze  <eregontp@g...>",
+  "kazu" => "Kazuhiro NISHIYAMA  <zn@m...>",
+  "ko1" => "Koichi Sasada  <ko1@a...>",
+  "marcandre" => "Marc-Andre Lafortune  <ruby-core@m...>",
+  "naruse" => "NARUSE, Yui  <naruse@r...>",
+  "nobu" => "Nobuyoshi Nakada  <nobu@r...>",
+  "normal" => "Eric Wong  <normalperson@y...>",
+  "rhe" => "Kazuki Yamaguchi  <k@r...>",
+  "shugo" => "Shugo Maeda  <shugo@r...>",
+  "stomar" => "Marcus Stollsteimer <sto.mar@w...>",
+  "usa" => "NAKAMURA Usaku  <usa@r...>",
+  "zzak" => "Zachary Scott  <e@z...>",
+}
+
+trunk = "."
+target = "."
+ARGV.delete_if{|e| /^--trunk=(.*)/ =~ e && trunk = $1}
+ARGV.delete_if{|e| /^--target=/ =~ e && target = $1}
+usage! if ARGV.size == 0 || trunk == target
+
+revisions = []
+ARGV.each do |a|
+  a.split(/,/).each do |b|
+    if /-/ =~ b
+      revisions += Range.new(*b.split(/-/, 2).map{|e| Integer(e)}).to_a
+    else
+      revisions << Integer(b)
+    end
+  end
+end
+revisions.sort!
+revisions.reverse!
+
+revisions.each do |rev|
+  if /^Index: ChangeLog$/ =~ `svn diff -c #{rev} #{target}`
+    STDERR.puts "#{rev} already has ChangeLog. Skip."
+  else
+    lines = `svn log -r #{rev} #{target}`.lines[1..-2]
+    if lines.empty?
+      STDERR.puts "#{rev} does not exist. Skip."
+      next
+    end
+    unless /^merge revision\(s\) (\d+)/ =~ lines[2]
+      STDERR.puts "#{rev} is not seems to be a merge commit. Skip."
+      next
+    end
+    original = $1
+    committer = `svn log -r #{original} #{trunk}`.lines[1].split(/\|/)[1].strip
+    if Majors[committer]
+      committer = Majors[committer]
+    else
+      committer = "#{committer}  <#{committer}@ruby-lang.org>"
+    end
+    time = Time.parse(lines.shift.split(/\|/)[2]).getlocal("+09:00")
+    puts "#{time.asctime}  #{committer}"
+    puts
+    lines.shift(2) # skip "merge" line
+    lines.shift while lines.first == "\n"
+    lines.pop while lines.last == "\n"
+    lines.each do |line|
+      line.chomp!
+      line = "\t#{line}" if line[0] != "\t" && line != ""
+      puts line
+    end
+    puts
+    STDERR.puts "#{rev} is processed."
+  end
+end

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]