rubycut-vclog 1.9.4
Sign up to get free protection for your applications and to get access to all the features.
- data/.yardopts +7 -0
- data/History.md +249 -0
- data/License.txt +23 -0
- data/README.md +133 -0
- data/bin/vclog +6 -0
- data/bin/vclog-autotag +6 -0
- data/bin/vclog-bump +6 -0
- data/bin/vclog-formats +6 -0
- data/bin/vclog-news +6 -0
- data/bin/vclog-version +6 -0
- data/lib/vclog.rb +6 -0
- data/lib/vclog.yml +68 -0
- data/lib/vclog/adapters.rb +12 -0
- data/lib/vclog/adapters/abstract.rb +131 -0
- data/lib/vclog/adapters/darcs.rb +93 -0
- data/lib/vclog/adapters/git.rb +190 -0
- data/lib/vclog/adapters/hg.rb +129 -0
- data/lib/vclog/adapters/svn.rb +155 -0
- data/lib/vclog/change.rb +207 -0
- data/lib/vclog/change_point.rb +77 -0
- data/lib/vclog/changelog.rb +233 -0
- data/lib/vclog/cli.rb +8 -0
- data/lib/vclog/cli/abstract.rb +92 -0
- data/lib/vclog/cli/autotag.rb +36 -0
- data/lib/vclog/cli/bump.rb +29 -0
- data/lib/vclog/cli/formats.rb +28 -0
- data/lib/vclog/cli/log.rb +86 -0
- data/lib/vclog/cli/news.rb +29 -0
- data/lib/vclog/cli/version.rb +30 -0
- data/lib/vclog/config.rb +143 -0
- data/lib/vclog/core_ext.rb +11 -0
- data/lib/vclog/heuristics.rb +192 -0
- data/lib/vclog/heuristics/rule.rb +73 -0
- data/lib/vclog/heuristics/type.rb +29 -0
- data/lib/vclog/history_file.rb +69 -0
- data/lib/vclog/metadata.rb +16 -0
- data/lib/vclog/rc.rb +9 -0
- data/lib/vclog/release.rb +67 -0
- data/lib/vclog/repo.rb +298 -0
- data/lib/vclog/report.rb +200 -0
- data/lib/vclog/tag.rb +151 -0
- data/lib/vclog/templates/changelog.ansi.rb +35 -0
- data/lib/vclog/templates/changelog.atom.erb +52 -0
- data/lib/vclog/templates/changelog.gnu.rb +24 -0
- data/lib/vclog/templates/changelog.html.erb +49 -0
- data/lib/vclog/templates/changelog.json.rb +1 -0
- data/lib/vclog/templates/changelog.markdown.rb +30 -0
- data/lib/vclog/templates/changelog.rdoc.rb +30 -0
- data/lib/vclog/templates/changelog.rss.erb +54 -0
- data/lib/vclog/templates/changelog.xml.erb +28 -0
- data/lib/vclog/templates/changelog.xsl +34 -0
- data/lib/vclog/templates/changelog.yaml.rb +1 -0
- data/lib/vclog/templates/history.ansi.rb +57 -0
- data/lib/vclog/templates/history.atom.erb +84 -0
- data/lib/vclog/templates/history.gnu.rb +39 -0
- data/lib/vclog/templates/history.html.erb +60 -0
- data/lib/vclog/templates/history.json.rb +1 -0
- data/lib/vclog/templates/history.markdown.rb +38 -0
- data/lib/vclog/templates/history.rdoc.rb +36 -0
- data/lib/vclog/templates/history.rss.erb +84 -0
- data/lib/vclog/templates/history.xml.erb +43 -0
- data/lib/vclog/templates/history.yaml.rb +1 -0
- data/man/man1/index.txt +9 -0
- data/man/man1/vclog-autotag.1.ronn +29 -0
- data/man/man1/vclog-bump.1.ronn +21 -0
- data/man/man1/vclog-news.1.ronn +25 -0
- data/man/man1/vclog-version.1.ronn +14 -0
- data/man/man1/vclog.1.ronn +49 -0
- data/spec/feature_git_changes.rb +58 -0
- data/spec/feature_git_history.rb +58 -0
- data/spec/feature_hg_changes.rb +58 -0
- data/spec/feature_hg_history.rb +58 -0
- data/spec/featurettes/repo_creation.rb +64 -0
- data/spec/featurettes/shellout.rb +16 -0
- data/test/case_metadata.rb +10 -0
- metadata +265 -0
@@ -0,0 +1,49 @@
|
|
1
|
+
<html>
|
2
|
+
<head>
|
3
|
+
<title><%= title %></title>
|
4
|
+
<style>
|
5
|
+
body{font-family: sans-serif;}
|
6
|
+
h1{ font-weight: normal; font-size: 4em; margin: 0 0; }
|
7
|
+
h2{ color: #555; }
|
8
|
+
li{padding: 10px;}
|
9
|
+
.main{width:800px; margin:0 auto;}
|
10
|
+
.commit{ padding: 10px 0px; }
|
11
|
+
.date{font-weight: normal; color: green; float: left; padding-right: 15px; font-size: 0.9em;}
|
12
|
+
.author{font-weight: normal; color: blue;}
|
13
|
+
.message{ padding: 5px 0; font-weight: normal; font-size: 1.1em; }
|
14
|
+
.revision{font-size: 0.7em; color: #aaa; }
|
15
|
+
</style>
|
16
|
+
<% if options.stylesheet %>
|
17
|
+
<link rel="stylesheet" href="#{options.stylesheet}" type="text/css">
|
18
|
+
<% end %>
|
19
|
+
</head>
|
20
|
+
<body>
|
21
|
+
<div class="main">
|
22
|
+
<h1><%= title %></h1>
|
23
|
+
<h2> Timeline</h2>
|
24
|
+
<div class="changelog">
|
25
|
+
<ul>
|
26
|
+
<% changelog.changes.sort{|a,b| b.date <=> a.date}.each do |entry| %>
|
27
|
+
<li class="commit">
|
28
|
+
<div class="id"><%= h entry.id %></div>
|
29
|
+
<div class="date"><%= entry.date %></div>
|
30
|
+
<div class="author"><%= h entry.author %></div>
|
31
|
+
<div class="type"><%= h entry.type %></div>
|
32
|
+
<div class="message">
|
33
|
+
<div class="summary"><%= h entry.summary %></div>
|
34
|
+
<% if entry.details.empty? %>
|
35
|
+
<div class="details"></div>
|
36
|
+
<% else %>
|
37
|
+
<div class="details">
|
38
|
+
<%= r entry.details %>
|
39
|
+
</div>
|
40
|
+
<% end %>
|
41
|
+
</div>
|
42
|
+
</li>
|
43
|
+
<% end %>
|
44
|
+
</ul>
|
45
|
+
</div>
|
46
|
+
</div>
|
47
|
+
</body>
|
48
|
+
</html>
|
49
|
+
|
@@ -0,0 +1 @@
|
|
1
|
+
changelog.to_h.to_json
|
@@ -0,0 +1,30 @@
|
|
1
|
+
out = []
|
2
|
+
|
3
|
+
out << "# #{title}"
|
4
|
+
|
5
|
+
changelog.by_date.each do |date, date_changes|
|
6
|
+
|
7
|
+
date_changes.by_author.each do |author, author_changes|
|
8
|
+
|
9
|
+
out << "\n## #{date} #{author}\n"
|
10
|
+
|
11
|
+
author_changes.each do |entry|
|
12
|
+
msg = entry.to_s(:summary=>!options.detail)
|
13
|
+
|
14
|
+
out << msg.tabto(2).sub(' ','* ')
|
15
|
+
|
16
|
+
if entry.type
|
17
|
+
out.last << " [#{entry.type}]"
|
18
|
+
end
|
19
|
+
|
20
|
+
if options.reference
|
21
|
+
out.last << " (##{entry.id})"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
out.join("\n") + "\n\n"
|
30
|
+
|
@@ -0,0 +1,30 @@
|
|
1
|
+
out = []
|
2
|
+
|
3
|
+
out << "= #{title}"
|
4
|
+
|
5
|
+
changelog.by_date.each do |date, date_changes|
|
6
|
+
|
7
|
+
date_changes.by_author.each do |author, author_changes|
|
8
|
+
|
9
|
+
out << "\n== #{date} #{author}\n"
|
10
|
+
|
11
|
+
author_changes.each do |entry|
|
12
|
+
msg = entry.to_s(:summary=>!options.detail)
|
13
|
+
|
14
|
+
out << msg.tabto(2).sub(' ','* ')
|
15
|
+
|
16
|
+
if entry.type
|
17
|
+
out.last << " [#{entry.type}]"
|
18
|
+
end
|
19
|
+
|
20
|
+
if options.reference
|
21
|
+
out.last << " (##{entry.id})"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
out.join("\n") + "\n\n"
|
30
|
+
|
@@ -0,0 +1,54 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
|
3
|
+
<rss version="2.0">
|
4
|
+
|
5
|
+
<channel>
|
6
|
+
|
7
|
+
<title><%= h title %></title>
|
8
|
+
|
9
|
+
<% if url %><link><%= url %></link><% end %>
|
10
|
+
|
11
|
+
<% if homepage %><link><%= homepage %></link><% end %>
|
12
|
+
|
13
|
+
<description>Release History</description>
|
14
|
+
|
15
|
+
<language>en-us</language>
|
16
|
+
|
17
|
+
<pubDate><%= Time.now.rfc822 %></pubDate>
|
18
|
+
|
19
|
+
<lastBuildDate><%= Time.now.rfc822 %></lastBuildDate>
|
20
|
+
|
21
|
+
<docs>http://blogs.law.harvard.edu/tech/rss</docs>
|
22
|
+
|
23
|
+
<generator>VCLog</generator>
|
24
|
+
|
25
|
+
<managingEditor><%= email %> (<%= user %>)</managingEditor>
|
26
|
+
|
27
|
+
<webMaster><%= email %> (<%= user %></webMaster>
|
28
|
+
|
29
|
+
<% changelog.changes.sort{|a,b| b.date <=> a.date}.each do |entry| %>
|
30
|
+
|
31
|
+
<item>
|
32
|
+
<title><%= h entry.summary %></title>
|
33
|
+
|
34
|
+
<author><%= entry.author %></author>
|
35
|
+
|
36
|
+
<link></link>
|
37
|
+
|
38
|
+
<pubDate><%= entry.date.rfc822 %></pubDate>
|
39
|
+
|
40
|
+
<guid><%= url %>#<%= entry.id %></guid>
|
41
|
+
|
42
|
+
<description><![CDATA[
|
43
|
+
<%= entry.message %><br/>
|
44
|
+
<%= entry.author %> <%= entry.date.strftime('%Y-%m-%d %H:%M:%S') %>
|
45
|
+
]]></description>
|
46
|
+
|
47
|
+
</item>
|
48
|
+
|
49
|
+
<% end %>
|
50
|
+
|
51
|
+
</channel>
|
52
|
+
|
53
|
+
</rss>
|
54
|
+
|
@@ -0,0 +1,28 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
<% if options.stylesheet %>
|
3
|
+
<?xml-stylesheet href="#{options.stylesheet}" type="text/xsl" ?>
|
4
|
+
<% end %>
|
5
|
+
<changelog title="<%= title %>">
|
6
|
+
<% changelog.changes.sort{|a,b| b.date <=> a.date}.each do |entry| %>
|
7
|
+
<commit>
|
8
|
+
<id><%= h entry.id %></id>
|
9
|
+
<date><%= entry.date %></date>
|
10
|
+
<author><%= h entry.author %></author>
|
11
|
+
<type><%= h entry.type %></type>
|
12
|
+
<message>
|
13
|
+
<summary><%= h entry.summary %></summary>
|
14
|
+
<% if entry.details.empty? %>
|
15
|
+
<details></details>
|
16
|
+
<% else %>
|
17
|
+
<details>
|
18
|
+
<![CDATA[
|
19
|
+
<%= h entry.details %>
|
20
|
+
|
21
|
+
]]>
|
22
|
+
</details>
|
23
|
+
<% end %>
|
24
|
+
</message>
|
25
|
+
</commit>
|
26
|
+
<% end %>
|
27
|
+
</changelog>
|
28
|
+
|
@@ -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 @@
|
|
1
|
+
changelog.to_h.to_yaml
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'ansi'
|
2
|
+
|
3
|
+
out = []
|
4
|
+
|
5
|
+
out << "#{title.ansi(:bold)}"
|
6
|
+
|
7
|
+
releases.sort.each do |release|
|
8
|
+
tag = release.tag
|
9
|
+
|
10
|
+
# TODO: support verbose option
|
11
|
+
#if verbose?
|
12
|
+
# out << "\n#{tag.name} / #{tag.date.strftime('%Y-%m-%d %H:%M')}".ansi(:bold)
|
13
|
+
#else
|
14
|
+
out << "\n#{tag.name} / #{tag.date.strftime('%Y-%m-%d')}".ansi(:bold)
|
15
|
+
#end
|
16
|
+
|
17
|
+
out << "\n#{tag.message.strip} (#{tag.author})"
|
18
|
+
|
19
|
+
if !(options.summary or release.changes.empty?)
|
20
|
+
|
21
|
+
#out << "\nChanges:".ansi(:green)
|
22
|
+
|
23
|
+
release.groups.each do |number, changes|
|
24
|
+
|
25
|
+
out << "\n* " + "#{changes.size} #{changes[0].label}\n"
|
26
|
+
|
27
|
+
changes.sort{|a,b| b.date <=> a.date}.each do |entry|
|
28
|
+
msg = entry.to_s(:summary=>!options.detail)
|
29
|
+
|
30
|
+
case entry.level
|
31
|
+
when 1
|
32
|
+
msg = msg.ansi(:yellow)
|
33
|
+
when 0
|
34
|
+
msg = msg.ansi(:green)
|
35
|
+
when -1
|
36
|
+
msg = msg.ansi(:cyan)
|
37
|
+
else
|
38
|
+
if entry.level > 1
|
39
|
+
msg = msg.ansi(:red)
|
40
|
+
else
|
41
|
+
msg = msg.ansi(:blue)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
msg << "\n(##{entry.id})" if options.reference
|
46
|
+
|
47
|
+
out << msg.tabto(6).sub(' ',' * ')
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
out << ""
|
55
|
+
end
|
56
|
+
|
57
|
+
out.join("\n") + "\n"
|
@@ -0,0 +1,84 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
|
3
|
+
<feed xmlns="http://www.w3.org/2005/Atom">
|
4
|
+
|
5
|
+
<title><%= title %> Feed</title>
|
6
|
+
|
7
|
+
<subtitle>Release History</subtitle>
|
8
|
+
|
9
|
+
<% if url %><link href="<%= url %>" /><% end %>
|
10
|
+
|
11
|
+
<% if homepage %><link href="<%= homepage %>" /><% end %>
|
12
|
+
|
13
|
+
<id><% if repo.uuid %>urn:uuid:<%= repo.uuid %><% else %><%= repo.repository %><% end %></id>
|
14
|
+
|
15
|
+
<updated><%= Time.now.xmlschema %></updated>
|
16
|
+
|
17
|
+
<author>
|
18
|
+
|
19
|
+
<name><%= user %></name>
|
20
|
+
|
21
|
+
<email><%= email %></email>
|
22
|
+
|
23
|
+
</author>
|
24
|
+
|
25
|
+
<% releases.sort.each do |release| %>
|
26
|
+
|
27
|
+
<% tag = release.tag %>
|
28
|
+
|
29
|
+
<entry>
|
30
|
+
|
31
|
+
<title><%= h tag.name %></title>
|
32
|
+
|
33
|
+
<id><%= url %>#<%= tag.id %></id>
|
34
|
+
|
35
|
+
<author><name><%= h tag.author %><name></author>
|
36
|
+
|
37
|
+
<updated><%= tag.date.xmlschema %></updated>
|
38
|
+
|
39
|
+
<summary><%= h tag.message %></summary>
|
40
|
+
|
41
|
+
<content type="xhtml">
|
42
|
+
|
43
|
+
<div xmlns="http://www.w3.org/1999/xhtml">
|
44
|
+
|
45
|
+
<p><%= tag.message %></p>
|
46
|
+
|
47
|
+
<% if !options.summary %>
|
48
|
+
|
49
|
+
<% release.groups.each do |number, changes| %>
|
50
|
+
|
51
|
+
<h2><%= changes.size %> <%= changes[0].label %></h2>
|
52
|
+
|
53
|
+
<ul class="log">
|
54
|
+
|
55
|
+
<% changes.sort{|a,b| b.date <=> a.date}.each do |entry| %>
|
56
|
+
|
57
|
+
<li class="entry">
|
58
|
+
|
59
|
+
<%= entry.message.rstrip %><br/>
|
60
|
+
|
61
|
+
<%= entry.author %> <%= entry.date.strftime('%Y-%m-%d %H:%M:%S') %>
|
62
|
+
|
63
|
+
<% if options.reference %>(#<%= entry.id %>)<% end %>
|
64
|
+
|
65
|
+
</li>
|
66
|
+
|
67
|
+
<% end %>
|
68
|
+
|
69
|
+
</ul>
|
70
|
+
|
71
|
+
<% end %>
|
72
|
+
|
73
|
+
<% end %>
|
74
|
+
|
75
|
+
</div>
|
76
|
+
|
77
|
+
</content>
|
78
|
+
|
79
|
+
</entry>
|
80
|
+
|
81
|
+
<% end %>
|
82
|
+
|
83
|
+
</feed>
|
84
|
+
|
@@ -0,0 +1,39 @@
|
|
1
|
+
|
2
|
+
out = []
|
3
|
+
|
4
|
+
out << "#{title}"
|
5
|
+
|
6
|
+
releases.sort.each do |release|
|
7
|
+
|
8
|
+
tag = release.tag
|
9
|
+
|
10
|
+
out << "\n#{tag.name} / #{tag.date.strftime('%Y-%m-%d')}"
|
11
|
+
|
12
|
+
out << "\n#{tag.message.strip} (#{tag.author})"
|
13
|
+
|
14
|
+
if !(options.summary or release.changes.empty?)
|
15
|
+
|
16
|
+
out << "\nChanges:"
|
17
|
+
|
18
|
+
release.groups.each do |number, changes|
|
19
|
+
|
20
|
+
out << "\n* #{changes.size} #{changes[0].label }\n"
|
21
|
+
|
22
|
+
changes.sort{|a,b| b.date <=> a.date}.each do |entry|
|
23
|
+
msg = entry.to_s(:summary=>!options.detail)
|
24
|
+
|
25
|
+
msg << "\n(##{entry.id})" if options.reference
|
26
|
+
|
27
|
+
out << msg.tabto(6).sub(' ',' * ')
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
out << ""
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
out.join("\n") + "\n"
|
39
|
+
|
@@ -0,0 +1,60 @@
|
|
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
|
+
.main{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 options.stylesheet %>
|
17
|
+
<link rel="stylesheet" href="#{options.stylesheet}" type="text/css">
|
18
|
+
<% end %>
|
19
|
+
</head>
|
20
|
+
<body>
|
21
|
+
<div class="main">
|
22
|
+
<div class="title"><%= title %></div>
|
23
|
+
<div class="history">
|
24
|
+
<% releases.sort.each do |release| %>
|
25
|
+
<% tag = release.tag %>
|
26
|
+
|
27
|
+
<h1><%= tag.name %> / <%= tag.date.strftime('%Y-%m-%d') %></h1>
|
28
|
+
<p><%= tag.message %></p>
|
29
|
+
<% if !options.summary %>
|
30
|
+
<% release.groups.each do |number, changes| %>
|
31
|
+
|
32
|
+
<h2><%= changes.size %> <%= changes[0].label %></h2>
|
33
|
+
<ul class="log">
|
34
|
+
<% changes.sort{|a,b| b.date <=> a.date}.each do |entry| %>
|
35
|
+
<li class="entry">
|
36
|
+
<div class="message">
|
37
|
+
<div class="summary"><%= h entry.summary %></summary>
|
38
|
+
<% if entry.details.empty? %>
|
39
|
+
<div class="details"></div>
|
40
|
+
<% else %>
|
41
|
+
<div class="details">
|
42
|
+
<%= r entry.details %>
|
43
|
+
</div>
|
44
|
+
<% end %>
|
45
|
+
</div>
|
46
|
+
<!-- <div class="type"><%= h entry.type %></div> -->
|
47
|
+
<div class="id">#<%= h entry.id %></div>
|
48
|
+
<div class="date"><%= entry.date %></div>
|
49
|
+
<div class="author"><%= h entry.author %></div>
|
50
|
+
</li>
|
51
|
+
<% end %>
|
52
|
+
</ul>
|
53
|
+
<% end %>
|
54
|
+
<% end %>
|
55
|
+
<% end %>
|
56
|
+
</div>
|
57
|
+
</div>
|
58
|
+
</body>
|
59
|
+
</html>
|
60
|
+
|