vclog 1.2 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
data/lib/vclog/cli.rb CHANGED
@@ -59,7 +59,7 @@ module VCLog
59
59
 
60
60
  optparse = OptionParser.new do |opt|
61
61
 
62
- opt.banner = "Usage: vclog [TYPE] [FORMAT] [OPTIONS] [DIR]"
62
+ opt.banner = "Usage: vclog [--TYPE] [--FORMAT] [OPTIONS] [DIR]"
63
63
 
64
64
  opt.separator(" ")
65
65
  opt.separator("OUTPUT TYPE (choose one):")
@@ -73,11 +73,11 @@ module VCLog
73
73
  end
74
74
 
75
75
  opt.on('--bump', '-b', "display a bumped version number") do
76
- doctype = :bump
76
+ type = :bump
77
77
  end
78
78
 
79
79
  opt.on('--current', '-c', "display current version number") do
80
- doctype = :curr
80
+ type = :curr
81
81
  end
82
82
 
83
83
  opt.separator(" ")
@@ -122,7 +122,7 @@ module VCLog
122
122
  title = string
123
123
  end
124
124
 
125
- opt.on('--extra', '-e', "provide extra output, used by some formats") do
125
+ opt.on('--extra', '-e', "provide extra output (used by some formats)") do
126
126
  extra = true
127
127
  end
128
128
 
@@ -130,8 +130,8 @@ module VCLog
130
130
  version = num
131
131
  end
132
132
 
133
- opt.on('--style [FILE]', "provide a stylesheet name (css or xsl) for xml and html formats") do |val|
134
- style = val
133
+ opt.on('--style <URI>', "provide a stylesheet URI (css or xsl) for HTML or XML format") do |uri|
134
+ style = uri
135
135
  end
136
136
 
137
137
  opt.on('--id', "include revision ids (in formats that normally do not)") do
@@ -139,7 +139,7 @@ module VCLog
139
139
  end
140
140
 
141
141
  # DEPRECATE
142
- opt.on('--output', '-o [FILE]', "send output to a file instead of stdout") do |out|
142
+ opt.on('--output', '-o <FILE>', "send output to a file instead of stdout") do |out|
143
143
  output = out
144
144
  end
145
145
 
@@ -167,7 +167,11 @@ module VCLog
167
167
  puts vcs.bump(version)
168
168
  exit
169
169
  when :curr
170
- puts vcs.tags.last.name #TODO: ensure latest
170
+ if vcs.tags.empty?
171
+ puts "0.0.0"
172
+ else
173
+ puts vcs.tags.last.name #TODO: ensure latest
174
+ end
171
175
  exit
172
176
  when :log
173
177
  log = vcs.changelog
@@ -0,0 +1,15 @@
1
+ module VCLog
2
+
3
+ # TODO: Develop heuristics for determining the nature
4
+ # of changes from the commit messages. Ultimately allow
5
+ # user to customize heuristics per project.
6
+ module Heuristics
7
+
8
+ def explicit_tag(message)
9
+ md = /^(\w+)\:/.match(message)
10
+ md ? {:tag => md[1]} : {}
11
+ end
12
+
13
+ end
14
+
15
+ end
data/lib/vclog/history.rb CHANGED
@@ -4,6 +4,7 @@ module VCLog
4
4
  require 'vclog/changelog'
5
5
  require 'vclog/tag'
6
6
  require 'vclog/release'
7
+ require 'erb'
7
8
 
8
9
  # = Release History Class
9
10
  #
@@ -24,24 +25,26 @@ module VCLog
24
25
  #
25
26
  class History
26
27
 
27
- attr :vcs
28
+ # Location of this file in the file system.
29
+ DIR = File.dirname(__FILE__)
28
30
 
29
- attr_accessor :marker
31
+ attr :vcs
30
32
 
33
+ # Alternate title.
31
34
  attr_accessor :title
32
35
 
33
36
  # Current working version.
34
37
  attr_accessor :version
35
38
 
39
+ # Provide extra information.
36
40
  attr_accessor :extra
37
41
 
38
42
  #
39
43
  def initialize(vcs, opts={})
40
- @vcs = vcs
41
- @marker = opts[:marker] || "#"
42
- @title = opts[:title] || "RELEASE HISTORY"
43
- @extra = opts[:extra]
44
- @version = opts[:version]
44
+ @vcs = vcs
45
+ @title = opts[:title] || "RELEASE HISTORY"
46
+ @extra = opts[:extra]
47
+ @version = opts[:version]
45
48
  end
46
49
 
47
50
  # Tag list from version control system.
@@ -50,27 +53,30 @@ module VCLog
50
53
  end
51
54
 
52
55
  # Change list from version control system.
56
+
53
57
  def changes
54
58
  @changes ||= vcs.changes
55
59
  end
56
60
 
57
61
  # Changelog object
62
+
58
63
  def changelog
59
64
  @changlog ||= vcs.changelog #ChangeLog.new(changes)
60
65
  end
61
66
 
62
67
  #
68
+
63
69
  def releases
64
70
  @releases ||= (
65
71
  rel = []
66
72
 
67
- tags = tags()
73
+ tags = self.tags
68
74
 
69
75
  ver = vcs.bump(version)
70
76
  time = ::Time.now
71
77
  user = ENV['USER'] # TODO: get user name from vcs
72
78
 
73
- tags << Tag.new(ver, time, user, "FIXME")
79
+ tags << Tag.new(ver, time, user, "Current Development")
74
80
 
75
81
  # TODO: Do we need to add a Time.now tag?
76
82
  # add current verion to release list (if given)
@@ -82,7 +88,8 @@ module VCLog
82
88
  #rels = rels.uniq # only uniq releases
83
89
 
84
90
  # sort by release date
85
- tags = tags.sort{ |a,b| a.date <=> b.date }
91
+ #tags = tags.sort{ |a,b| b.name <=> a.name }
92
+ tags = tags.sort{ |a,b| b.date <=> a.date }
86
93
 
87
94
  # organize into deltas
88
95
  deltas, last = [], nil
@@ -111,129 +118,71 @@ module VCLog
111
118
  )
112
119
  end
113
120
 
114
- #
121
+ # Group +changes+ by tag type.
122
+
123
+ def groups(changes)
124
+ @groups ||= changes.group_by{ |e| e.type_number }
125
+ end
126
+
127
+ # Same as to_gnu.
128
+
115
129
  def to_s(rev=false)
116
130
  to_gnu(rev)
117
131
  end
118
132
 
119
- # TODO: What would GNU history be?
133
+ # TODO: What would GNU history look like?
134
+
120
135
  def to_gnu(rev=false)
121
136
  to_markdown(rev)
122
137
  end
123
138
 
124
- # Translate history into an XML document.
125
- def to_xml(xsl=nil)
126
- require 'rexml/document'
127
- xml = REXML::Document.new('<history></history>')
128
- #xml << REXML::XMLDecl.default
129
- root = xml.root
130
- releases.each do |release|
131
- rel = root.add_element('release')
132
- tel = rel.add_element('tag')
133
- tel.add_element('name').add_text(release.tag.name)
134
- tel.add_element('date').add_text(release.tag.date.to_s)
135
- tel.add_element('author').add_text(release.tag.author)
136
- tel.add_element('message').add_text(release.tag.message)
137
- cel = rel.add_element('changes')
138
- release.changes.sort{|a,b| b.date <=> a.date}.each do |entry|
139
- el = cel.add_element('entry')
140
- el.add_element('date').add_text(entry.date.to_s)
141
- el.add_element('author').add_text(entry.author)
142
- el.add_element('type').add_text(entry.type)
143
- el.add_element('revision').add_text(entry.revision)
144
- el.add_element('message').add_text(entry.message)
145
- end
146
- end
147
- out = String.new
148
- fmt = REXML::Formatters::Pretty.new
149
- fmt.compact = true
150
- fmt.write(xml, out)
151
- #
152
- txt = %[<?xml version="1.0"?>\n]
153
- txt += %[<?xml-stylesheet href="#{xsl}" type="text/xsl" ?>\n] if xsl
154
- txt += out
155
- txt
156
- end
157
-
158
- # Translate history into a HTML document.
159
- #
160
- # TODO: Need to add some headers.
161
- #
162
- def to_html(css=nil)
163
- require 'rexml/document'
164
- xml = REXML::Document.new('<div class="history"></div>')
165
- #xml << REXML::XMLDecl.default
166
- root = xml.root
167
- releases.each do |release|
168
- rel = root.add_element('div')
169
- rel.add_attribute('class', 'release')
170
- tel = rel.add_element('div')
171
- tel.add_attribute('class', 'tag')
172
- tel.add_element('div').add_text(release.tag.name).add_attribute('class', 'name')
173
- tel.add_element('div').add_text(release.tag.date.to_s).add_attribute('class', 'date')
174
- tel.add_element('div').add_text(release.tag.author).add_attribute('class', 'author')
175
- tel.add_element('div').add_text(release.tag.message).add_attribute('class', 'message')
176
- cel = rel.add_element('ul')
177
- cel.add_attribute('class', 'changes')
178
- release.changes.sort{|a,b| b.date <=> a.date}.each do |entry|
179
- el = cel.add_element('li')
180
- el.add_attribute('class', 'entry')
181
- el.add_element('div').add_text(entry.date.to_s).add_attribute('class', 'date')
182
- el.add_element('div').add_text(entry.author).add_attribute('class', 'author')
183
- el.add_element('div').add_text(entry.type).add_attribute('class', 'type')
184
- el.add_element('div').add_text(entry.revision).add_attribute('class', 'revision')
185
- el.add_element('div').add_text(entry.message).add_attribute('class', 'message')
186
- end
187
- end
188
- out = String.new
189
- fmt = REXML::Formatters::Pretty.new
190
- fmt.compact = true
191
- fmt.write(xml, out)
192
- #
193
- x = []
194
- x << %[<html>]
195
- x << %[<head>]
196
- x << %[ <title>ChangeLog</title>]
197
- x << %[ <style>]
198
- x << %[ body{font-family: sans-serif;}]
199
- x << %[ #changelog{width:800px;margin:0 auto;}]
200
- x << %[ li{padding: 10px;}]
201
- x << %[ .date{font-weight: bold; color: gray; float: left; padding: 0 5px;}]
202
- x << %[ .author{color: red;}]
203
- x << %[ .message{padding: 5 0; font-weight: bold;}]
204
- x << %[ .revision{font-size: 0.8em;}]
205
- x << %[ </style>]
206
- x << %[ <link rel="stylesheet" href="#{css}" type="text/css">] if css
207
- x << %[</head>]
208
- x << %[<body>]
209
- x << out
210
- x << %[</body>]
211
- x << %[</html>]
212
- x.join("\n")
213
- end
214
-
215
139
  # Translate history into a YAML document.
140
+
216
141
  def to_yaml(*args)
217
142
  require 'yaml'
218
143
  releases.to_yaml(*args)
219
144
  end
220
145
 
221
146
  # Translate history into a JSON document.
147
+
222
148
  def to_json
223
149
  require 'json'
224
150
  releases.to_json
225
151
  end
226
152
 
227
- # Translate history into a Markdown formatted document.
228
- def to_markdown(rev=false)
229
- to_markup('#', rev)
153
+ # Translate history into a XML document.
154
+
155
+ def to_xml(xsl=nil)
156
+ tmp = File.read(File.join(DIR, 'templates', 'history.xml'))
157
+ erb = ERB.new(tmp)
158
+ erb.result(binding)
230
159
  end
231
160
 
232
- # Translate history into a RDoc formatted document.
161
+ # Translate history into a HTML document.
162
+
163
+ def to_html(css=nil)
164
+ tmp = File.read(File.join(DIR, 'templates', 'history.html'))
165
+ erb = ERB.new(tmp)
166
+ erb.result(binding)
167
+ end
168
+
169
+ # Translate history into a RDoc document.
170
+
233
171
  def to_rdoc(rev=false)
234
- to_markup('=', rev)
172
+ tmp = File.read(File.join(DIR, 'templates', 'history.rdoc'))
173
+ erb = ERB.new(tmp)
174
+ erb.result(binding)
175
+ end
176
+
177
+ # Translate history into a Markdown formatted document.
178
+
179
+ def to_markdown(rev=false)
180
+ tmp = File.read(File.join(DIR, 'templates', 'history.markdown'))
181
+ erb = ERB.new(tmp)
182
+ erb.result(binding)
235
183
  end
236
184
 
185
+ =begin
237
186
  #
238
187
  def to_markup(marker, rev=false)
239
188
  entries = []
@@ -252,14 +201,16 @@ module VCLog
252
201
  # reverse entries order and make into document
253
202
  marker + " #{title}\n\n" + entries.reverse.join("\n")
254
203
  end
204
+ =end
255
205
 
256
206
  private
257
207
 
208
+ =begin
258
209
  #
259
210
  def to_markup_changes(changes, rev=false)
260
211
  groups = changes.group_by{ |e| e.type_number }
261
212
  string = ""
262
- 5.times do |n|
213
+ groups.keys.sort.each do |n|
263
214
  entries = groups[n]
264
215
  next if !entries
265
216
  next if entries.empty?
@@ -283,6 +234,8 @@ module VCLog
283
234
  end
284
235
  string
285
236
  end
237
+ =end
238
+
286
239
 
287
240
  =begin
288
241
  # Extract release tags from a release file.
@@ -308,6 +261,20 @@ module VCLog
308
261
  end
309
262
  =end
310
263
 
264
+ private
265
+
266
+ #
267
+ def h(input)
268
+ result = input.to_s.dup
269
+ result.gsub!("&", "&amp;")
270
+ result.gsub!("<", "&lt;")
271
+ result.gsub!(">", "&gt;")
272
+ result.gsub!("'", "&apos;")
273
+ #result.gsub!("@", "&at;")
274
+ result.gsub!("\"", "&quot;")
275
+ return result
276
+ end
277
+
311
278
  end
312
279
 
313
280
  end
data/lib/vclog/release.rb CHANGED
@@ -17,6 +17,10 @@ module VCLog
17
17
  def to_json
18
18
  to_h.to_json
19
19
  end
20
+
21
+ def <=>(other)
22
+ @tag <=> other.tag
23
+ end
20
24
  end
21
25
 
22
26
  end
data/lib/vclog/tag.rb CHANGED
@@ -49,6 +49,11 @@ module VCLog
49
49
  :message => message
50
50
  }
51
51
  end
52
+
53
+ # Normal tag order is the reverse typical sorts.
54
+ def <=>(other)
55
+ other.name <=> name
56
+ end
52
57
  end
53
58
 
54
59
  end
@@ -0,0 +1,6 @@
1
+ <% by_date.each do |date, date_changes| %><% date_changes.by_author.each do |author, author_changes| %>
2
+ <%= date %> <%= author %>
3
+ <% author_changes.each do |entry| %>
4
+ * <%= entry.message %> <% if entry.type %><<%= entry.type %>><% end %><% if rev %>(#<%= entry.revision %>)<% end %><% end %>
5
+ <% end %>
6
+ <% end %>
@@ -0,0 +1,34 @@
1
+ <html>
2
+ <head>
3
+ <title><%= title %></title>
4
+ <style>
5
+ body{font-family: sans-serif;}
6
+ h1{ }
7
+ h2{ color: #555; }
8
+ li{padding: 10px;}
9
+ .changelog{width:800px; margin:0 auto;}
10
+ .title{font-size: 64px;}
11
+ .date{font-weight: bold; color: green; float: left; padding-right: 15px;}
12
+ .author{font-weight: bold; color: blue;}
13
+ .message{padding: 5 0; font-weight: bold;}
14
+ .revision{font-size: 0.8em;}
15
+ </style>
16
+ <% if css %>
17
+ <link rel="stylesheet" href="#{css}" type="text/css">
18
+ <% end %>
19
+ </head>
20
+ <body>
21
+ <div class="changelog">
22
+ <% changes.sort{|a,b| b.date <=> a.date}.each do |entry| %>
23
+ <div class="commit">
24
+ <div class="revision">#<%= h entry.revision %></div>
25
+ <div class="date"><%= entry.date %></div>
26
+ <div class="author"><%= h entry.author %></div>
27
+ <div class="type"><%= h entry.type %></div>
28
+ <div class="message"><%= h entry.message %></div>
29
+ </commit>
30
+ <% end %>
31
+ </div>
32
+ </body>
33
+ </html>
34
+
@@ -0,0 +1,6 @@
1
+ # <%= title %>
2
+ <% by_date.each do |date, date_changes| %><% date_changes.by_author.each do |author, author_changes| %>
3
+ ## <%= date %> <%= author %>
4
+ <% author_changes.each do |entry| %>
5
+ * <%= entry.message %> <% if entry.type %><<%= entry.type %>><% end %><% if rev %>(#<%= entry.revision %>)<% end %><% end %>
6
+ <% end %><% end %>
@@ -0,0 +1,6 @@
1
+ = <%= title %>
2
+ <% by_date.each do |date, date_changes| %><% date_changes.by_author.each do |author, author_changes| %>
3
+ == <%= date %> <%= author %>
4
+ <% author_changes.each do |entry| %>
5
+ * <%= entry.message %> <% if entry.type %><<%= entry.type %>><% end %><% if rev %>(#<%= entry.revision %>)<% end %><% end %>
6
+ <% end %><% end %>
@@ -0,0 +1,16 @@
1
+ <?xml version="1.0"?>
2
+ <% if xsl %>
3
+ <?xml-stylesheet href="#{xsl}" type="text/xsl" ?>
4
+ <% end %>
5
+ <changelog title="<%= title %>">
6
+ <% changes.sort{|a,b| b.date <=> a.date}.each do |entry| %>
7
+ <commit>
8
+ <revision>#<%= h entry.revision %></revision>
9
+ <date><%= entry.date %></date>
10
+ <author><%= h entry.author %></author>
11
+ <type><%= h entry.type %></type>
12
+ <message><%= h entry.message %></message>
13
+ </commit>
14
+ <% end %>
15
+ </changelog>
16
+
@@ -0,0 +1,34 @@
1
+ <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
2
+
3
+ <xsl:output cdata-section-elements="script"/>
4
+
5
+ <xsl:template match="/">
6
+ <html>
7
+ <head>
8
+ <title>Changelog</title>
9
+ <link REL='SHORTCUT ICON' HREF="../img/ruby-sm.png" />
10
+ <style>
11
+ td { font-family: sans-serif; padding: 0px 10px; }
12
+ </style>
13
+ </head>
14
+ <body>
15
+ <div class="container">
16
+ <h1>Changelog</h1>
17
+ <table style="width: 100%;">
18
+ <xsl:apply-templates />
19
+ </table>
20
+ </div>
21
+ </body>
22
+ </html>
23
+ </xsl:template>
24
+
25
+ <xsl:template match="entry">
26
+ <tr>
27
+ <td><b><pre><xsl:value-of select="message"/></pre></b></td>
28
+ <td><xsl:value-of select="author"/></td>
29
+ <td><xsl:value-of select="date"/></td>
30
+ </tr>
31
+ </xsl:template>
32
+
33
+ </xsl:stylesheet>
34
+
@@ -0,0 +1,47 @@
1
+ <html>
2
+ <head>
3
+ <title><%= title %> History</title>
4
+ <style>
5
+ body{font-family: sans-serif;}
6
+ h1{ }
7
+ h2{ color: #555; }
8
+ li{padding: 10px;}
9
+ .changelog{width:800px; margin:0 auto;}
10
+ .title{font-size: 64px;}
11
+ .date{font-weight: bold; color: green; float: left; padding-right: 15px;}
12
+ .author{font-weight: bold; color: blue;}
13
+ .message{padding: 5 0; font-weight: bold;}
14
+ .revision{font-size: 0.8em;}
15
+ </style>
16
+ <% if css %>
17
+ <link rel="stylesheet" href="#{css}" type="text/css">
18
+ <% end %>
19
+ </head>
20
+ <body>
21
+ <div class="history">
22
+ <div class="title"><%= title %></div>
23
+ <% releases.each do |release| %>
24
+ <% tag = release.tag %>
25
+ <h1><%= tag.name %> / <%= tag.date.strftime('%Y-%m-%d') %></h1>
26
+ <p><%= tag.message %></p>
27
+ <% if extra %>
28
+ <% groups(release.changes).each do |number, changes| %>
29
+ <h2><%= changes.size %> <%= changes[0].type_phrase %></h2>
30
+ <ul class="log">
31
+ <% changes.sort{|a,b| b.date <=> a.date}.each do |entry| %>
32
+ <li class="entry">
33
+ <div class="message"><%= h entry.message %></div>
34
+ <!-- <div class="type"><%= h entry.type %></div> -->
35
+ <div class="revision">#<%= h entry.revision %></div>
36
+ <div class="date"><%= entry.date %></div>
37
+ <div class="author"><%= h entry.author %></div>
38
+ </li>
39
+ <% end %>
40
+ </ul>
41
+ <% end %>
42
+ <% end %>
43
+ <% end %>
44
+ </div>
45
+ </body>
46
+ </html>
47
+
@@ -0,0 +1,12 @@
1
+ # <%= title %>
2
+ <% releases.each do |release| %><% tag = release.tag %>
3
+ ## <%= tag.name %> / <%= tag.date.strftime('%Y-%m-%d') %>
4
+
5
+ <%= h tag.message.strip %> (<%= tag.author %>)
6
+
7
+ <% if extra %>Changes:
8
+ <% groups(release.changes).each do |number, changes| %>
9
+ * <%= changes.size %> <%= changes[0].type_phrase %>
10
+ <% changes.sort{|a,b| b.date <=> a.date}.each do |entry| %>
11
+ * <%= entry.message %> <% if rev %>(#<%= entry.revision %>)<% end %><% end %>
12
+ <% end %><% end %><% end %>
@@ -0,0 +1,12 @@
1
+ = <%= title %>
2
+ <% releases.each do |release| %><% tag = release.tag %>
3
+ == <%= tag.name %> / <%= tag.date.strftime('%Y-%m-%d') %>
4
+
5
+ <%= h tag.message.strip %> (<%= tag.author %>)
6
+
7
+ <% if extra %>Changes:
8
+ <% groups(release.changes).each do |number, changes| %>
9
+ * <%= changes.size %> <%= changes[0].type_phrase %>
10
+ <% changes.sort{|a,b| b.date <=> a.date}.each do |entry| %>
11
+ * <%= entry.message %> <% if rev %>(#<%= entry.revision %>)<% end %><% end %>
12
+ <% end %><% end %><% end %>
@@ -0,0 +1,30 @@
1
+ <?xml version="1.0"?>
2
+ <% if xsl %>
3
+ <?xml-stylesheet href="#{xsl}" type="text/xsl" ?>
4
+ <% end %>
5
+ <history>
6
+ <title><%= title %></title>
7
+ <% releases.each do |release| %>
8
+ <tag>
9
+ <% tag = release.tag %>
10
+ <name><%= h tag.name %></name>
11
+ <date><%= tag.date.strftime('%Y-%m-%d') %></date>
12
+ <author><%= h tag.author %></author>
13
+ <message><%= h tag.message %></message>
14
+ <% groups(release.changes).each do |number, changes| %>
15
+ <commit-group type="<%= changes[0].type %>" label="<%= changes[0].type_phrase %>">
16
+ <% changes.sort{|a,b| b.date <=> a.date}.each do |entry| %>
17
+ <commit>
18
+ <revision>#<%= h entry.revision %></revision>
19
+ <date><%= entry.date %></date>
20
+ <author><%= h entry.author %></author>
21
+ <type><%= h entry.type %></type>
22
+ <message><%= h entry.message %></message>
23
+ </commit>
24
+ <% end %>
25
+ </commit-group>
26
+ <% end %>
27
+ </tag>
28
+ <% end %>
29
+ </history>
30
+
data/lib/vclog/vcs/git.rb CHANGED
@@ -25,25 +25,13 @@ module VCLog
25
25
  #
26
26
  def extract_changes
27
27
  list = []
28
- changelog = `git-log`.strip
29
- changes = changelog.split(/^commit/m)
28
+ changelog = `git log --pretty=format:"---%ci|~|%aN|~|%H|~|%s"`.strip
29
+ changes = changelog.split("---")
30
+ #changes = changelog.split(/^commit/m)
30
31
  changes.shift # throw the first (empty) entry away
31
- changes.each do |text|
32
- date, who, rev, msg = nil, nil, nil, []
33
- text.each_line do |line|
34
- unless rev
35
- rev = line.strip
36
- next
37
- end
38
- if md = /^Author:(.*?)$/.match(line)
39
- who = md[1]
40
- elsif md = /^Date:(.*?)$/m.match(line)
41
- date = Time.parse(md[1])
42
- else
43
- msg << line.strip
44
- end
45
- end
46
- msg = msg.join("\n")
32
+ changes.each do |entry|
33
+ date, who, rev, msg = entry.split('|~|')
34
+ date = Time.parse(date)
47
35
  msg, type = *split_type(msg)
48
36
  list << [rev, date, who, msg, type]
49
37
  end
@@ -72,6 +60,16 @@ module VCLog
72
60
  who = who.split(':')[1].strip
73
61
  date = date[date.index(':')+1..-1].strip
74
62
  msg = msg.join("\n")
63
+
64
+ info = `git show #{tag}^ --pretty=format:"%ci|-|"`
65
+ date, *_ = *info.split('|-|')
66
+
67
+ #md = /\Atag(.*?)\n(.*?)^commit/m.match(info)
68
+ #_who, _date, *_msg = *md[2].split(/\n/)
69
+ #_who = _who.split(':')[1].strip
70
+ #_date = _date[_date.index(':')+1..-1].strip
71
+ #_msg = _msg.join("\n")
72
+
75
73
  list << [tag, date, who, msg]
76
74
  end
77
75
  list