[ruby/rdoc] Support ChangeLog generated by git log
https://github.com/ruby/rdoc/commit/5e0a123ca1
This commit is contained in:
parent
68e7dc532d
commit
bb570ce6d8
@ -131,6 +131,12 @@ class RDoc::Parser::ChangeLog < RDoc::Parser
|
|||||||
|
|
||||||
def parse_entries
|
def parse_entries
|
||||||
@time_cache ||= {}
|
@time_cache ||= {}
|
||||||
|
|
||||||
|
if /\A(?:.*\n){,3}commit\s/ =~ @content
|
||||||
|
class << self; prepend Git; end
|
||||||
|
return parse_entries
|
||||||
|
end
|
||||||
|
|
||||||
entries = []
|
entries = []
|
||||||
entry_name = nil
|
entry_name = nil
|
||||||
entry_body = []
|
entry_body = []
|
||||||
@ -190,6 +196,7 @@ class RDoc::Parser::ChangeLog < RDoc::Parser
|
|||||||
|
|
||||||
def scan
|
def scan
|
||||||
@time_cache = {}
|
@time_cache = {}
|
||||||
|
|
||||||
entries = parse_entries
|
entries = parse_entries
|
||||||
grouped_entries = group_entries entries
|
grouped_entries = group_entries entries
|
||||||
|
|
||||||
@ -200,5 +207,33 @@ class RDoc::Parser::ChangeLog < RDoc::Parser
|
|||||||
@top_level
|
@top_level
|
||||||
end
|
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
|
end
|
||||||
|
|
||||||
|
@ -270,6 +270,24 @@ Other note that will be ignored
|
|||||||
assert_equal expected, parser.parse_entries
|
assert_equal expected, parser.parse_entries
|
||||||
end
|
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
|
def test_scan
|
||||||
parser = util_parser <<-ChangeLog
|
parser = util_parser <<-ChangeLog
|
||||||
Tue Dec 4 08:32:10 2012 Eric Hodel <drbrain@segment7.net>
|
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
|
assert_equal expected, @top_level.comment
|
||||||
end
|
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 = ''
|
def util_parser content = ''
|
||||||
RDoc::Parser::ChangeLog.new \
|
RDoc::Parser::ChangeLog.new \
|
||||||
@top_level, @tempfile.path, content, @options, @stats
|
@top_level, @tempfile.path, content, @options, @stats
|
||||||
|
Loading…
x
Reference in New Issue
Block a user