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:
parent
68e7dc532d
commit
bb570ce6d8
2 changed files with 91 additions and 0 deletions
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue