1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

[ruby/rdoc] Support ChangeLog generated by git log

https://github.com/ruby/rdoc/commit/5e0a123ca1
This commit is contained in:
Nobuyoshi Nakada 2021-01-21 01:25:56 +09:00
parent 68e7dc532d
commit bb570ce6d8
2 changed files with 91 additions and 0 deletions

View file

@ -131,6 +131,12 @@ class RDoc::Parser::ChangeLog < RDoc::Parser
def parse_entries
@time_cache ||= {}
if /\A(?:.*\n){,3}commit\s/ =~ @content
class << self; prepend Git; end
return parse_entries
end
entries = []
entry_name = nil
entry_body = []
@ -190,6 +196,7 @@ class RDoc::Parser::ChangeLog < RDoc::Parser
def scan
@time_cache = {}
entries = parse_entries
grouped_entries = group_entries entries
@ -200,5 +207,33 @@ class RDoc::Parser::ChangeLog < RDoc::Parser
@top_level
end
module Git
def parse_entries
entries = []
@content.scan(/^commit\s+(\h+)\n *Author: *(.+)\n *Date: *(.+)\n\n((?: {4}.*\n+)*)/) do
entry_name, author, date, entry_body = $1, $2, $3, $4.gsub(/^ {4}/, '')
if /(\d+)-(\d+)-(\d+) (\d+):(\d+):(\d+) *([-+]\d\d)(\d\d)/ =~ date
time = Time.new($1, $2, $3, $4, $5, $6, "#{$7}:#{$8}")
@time_cache[entry_name] = time
entries << [entry_name, [author, date, entry_body]]
end
end
entries
end
def create_entries entries
# git log entries have no strictly itemized style like the old
# style, just assume Markdown.
entries.map do |entry, (author, date, body)|
list = RDoc::Markup::List.new(:NOTE)
author = RDoc::Markup::Paragraph.new(author)
list << RDoc::Markup::ListItem.new(date, author)
RDoc::Markdown.parse(body).parts.each {|b| list << b}
list
end
end
end
end

View file

@ -270,6 +270,24 @@ Other note that will be ignored
assert_equal expected, parser.parse_entries
end
def test_parse_entries_git
parser = util_parser <<-ChangeLog
commit\ 709bed2afaee50e2ce803f87bf1ee8291bea41e3
Author: git <svn-admin@ruby-lang.org>
Date: 2021-01-21 01:03:52 +0900
* 2021-01-21 [ci skip]
ChangeLog
expected = [
[ "709bed2afaee50e2ce803f87bf1ee8291bea41e3",
[ "git <svn-admin@ruby-lang.org>",
"2021-01-21 01:03:52 +0900",
"* 2021-01-21 [ci skip]\n"]]]
assert_equal expected, parser.parse_entries
end
def test_scan
parser = util_parser <<-ChangeLog
Tue Dec 4 08:32:10 2012 Eric Hodel <drbrain@segment7.net>
@ -309,6 +327,44 @@ Mon Dec 3 20:37:22 2012 Koichi Sasada <ko1@atdot.net>
assert_equal expected, @top_level.comment
end
def test_scan_git
parser = util_parser <<-ChangeLog
commit\ 709bed2afaee50e2ce803f87bf1ee8291bea41e3
Author: git <svn-admin@ruby-lang.org>
Date: 2021-01-21 01:03:52 +0900
* 2021-01-21 [ci skip]
commit\ a8dc5156e183489c5121fb1759bda5d9406d9175
Author: git <svn-admin@ruby-lang.org>
Date: 2021-01-20 01:58:26 +0900
* 2021-01-20 [ci skip]
ChangeLog
parser.scan
expected = doc(
head(1, File.basename(@tempfile.path)),
blank_line,
head(2, '2021-01-21'),
blank_line,
list(:NOTE,
item('2021-01-21 01:03:52 +0900',
para('git <svn-admin@ruby-lang.org>')),
list(:BULLET, item(nil, para('2021-01-21 [ci skip]')))),
head(2, '2021-01-20'),
blank_line,
list(:NOTE,
item('2021-01-20 01:58:26 +0900',
para('git <svn-admin@ruby-lang.org>')),
list(:BULLET, item(nil, para('2021-01-20 [ci skip]')))))
expected.file = @top_level
assert_equal expected, @top_level.comment
end
def util_parser content = ''
RDoc::Parser::ChangeLog.new \
@top_level, @tempfile.path, content, @options, @stats