vclog 1.5.0 → 1.6.0
Sign up to get free protection for your applications and to get access to all the features.
- data/HISTORY.rdoc +12 -0
- data/README.rdoc +5 -5
- data/REQUIRE +1 -0
- data/VERSION +2 -2
- data/bin/vclog +1 -1
- data/features/git.feature +8 -8
- data/features/hg.feature +8 -8
- data/features/svn.feature +8 -8
- data/lib/plugins/syckle/vclog.rb +19 -9
- data/lib/vclog/adapters/abstract.rb +78 -9
- data/lib/vclog/adapters/darcs.rb +5 -5
- data/lib/vclog/adapters.rb +3 -4
- data/lib/vclog/change.rb +14 -28
- data/lib/vclog/changelog.rb +8 -12
- data/lib/vclog/cli/abstract.rb +99 -0
- data/lib/vclog/cli/bump.rb +30 -0
- data/lib/vclog/cli/changelog.rb +33 -0
- data/lib/vclog/cli/help.rb +37 -0
- data/lib/vclog/cli/history.rb +40 -0
- data/lib/vclog/cli/list.rb +28 -0
- data/lib/vclog/cli/version.rb +30 -0
- data/lib/vclog/cli.rb +70 -51
- data/lib/vclog/config.rb +65 -0
- data/lib/vclog/formatter.rb +27 -10
- data/lib/vclog/heuristics/default.rb +20 -0
- data/lib/vclog/heuristics.rb +86 -8
- data/lib/vclog/history.rb +26 -191
- data/lib/vclog/kernel.rb +12 -0
- data/lib/vclog/metadata.rb +1 -0
- data/lib/vclog/release.rb +25 -10
- data/lib/vclog/tag.rb +14 -4
- data/lib/vclog/templates/changelog.ansi.rb +52 -0
- data/lib/vclog/templates/{changelog.atom → changelog.atom.erb} +0 -0
- data/lib/vclog/templates/changelog.gnu.rb +31 -0
- data/lib/vclog/templates/{changelog.html → changelog.html.erb} +0 -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.xml → changelog.xml.erb} +0 -0
- data/lib/vclog/templates/changelog.yaml.rb +1 -0
- data/lib/vclog/templates/history.ansi.rb +59 -0
- data/lib/vclog/templates/{history.atom → history.atom.erb} +1 -1
- data/lib/vclog/templates/history.gnu.rb +41 -0
- data/lib/vclog/templates/history.html.erb +52 -0
- data/lib/vclog/templates/history.json.rb +1 -0
- data/lib/vclog/templates/history.markdown.rb +40 -0
- data/lib/vclog/templates/history.rdoc.rb +40 -0
- data/lib/vclog/templates/{history.xml → history.xml.erb} +1 -1
- data/lib/vclog/templates/history.yaml.rb +1 -0
- data/lib/vclog.rb +6 -1
- metadata +95 -21
- data/ROADMAP.rdoc +0 -31
- data/lib/vclog/templates/changelog.gnu +0 -6
- data/lib/vclog/templates/changelog.json +0 -1
- data/lib/vclog/templates/changelog.markdown +0 -6
- data/lib/vclog/templates/changelog.rdoc +0 -6
- data/lib/vclog/templates/changelog.yaml +0 -1
- data/lib/vclog/templates/history.gnu +0 -12
- data/lib/vclog/templates/history.html +0 -47
- data/lib/vclog/templates/history.json +0 -1
- data/lib/vclog/templates/history.markdown +0 -12
- data/lib/vclog/templates/history.rdoc +0 -12
- data/lib/vclog/templates/history.yaml +0 -1
@@ -0,0 +1,99 @@
|
|
1
|
+
require 'ostruct'
|
2
|
+
require 'optparse'
|
3
|
+
|
4
|
+
module VCLog
|
5
|
+
module CLI
|
6
|
+
|
7
|
+
#
|
8
|
+
def self.register
|
9
|
+
@register ||= []
|
10
|
+
end
|
11
|
+
|
12
|
+
#
|
13
|
+
class Abstract
|
14
|
+
|
15
|
+
#
|
16
|
+
def self.inherited(subclass)
|
17
|
+
CLI.register << subclass
|
18
|
+
end
|
19
|
+
|
20
|
+
#
|
21
|
+
def self.terms
|
22
|
+
[name.split('::').last.downcase]
|
23
|
+
end
|
24
|
+
|
25
|
+
#
|
26
|
+
def initialize
|
27
|
+
@options = OpenStruct.new
|
28
|
+
end
|
29
|
+
|
30
|
+
#
|
31
|
+
def options
|
32
|
+
@options
|
33
|
+
end
|
34
|
+
|
35
|
+
#
|
36
|
+
def parser(&block)
|
37
|
+
parser = OptionParser.new(&block)
|
38
|
+
|
39
|
+
parser.separator " "
|
40
|
+
parser.separator "SYSTEM OPTIONS:"
|
41
|
+
parser.on('--debug', 'show debugging information') do
|
42
|
+
$DEBUG = true
|
43
|
+
end
|
44
|
+
parser.on('--help' , '-h', 'display this help information') do
|
45
|
+
puts parser
|
46
|
+
exit
|
47
|
+
end
|
48
|
+
parser
|
49
|
+
end
|
50
|
+
|
51
|
+
# Setup options common to templating commands.
|
52
|
+
#
|
53
|
+
# parser - instance of options parser
|
54
|
+
#
|
55
|
+
# Returns a instance of OptionParser.
|
56
|
+
def template_options(parser)
|
57
|
+
parser.separator(" ")
|
58
|
+
parser.separator("OUTPUT OPTIONS: (use varies with format)")
|
59
|
+
parser.on('--format', '-f FORMAT', "output format") do |format|
|
60
|
+
options.format = format.to_sym
|
61
|
+
end
|
62
|
+
parser.on('--style <URI>', "provide a stylesheet URI (css or xsl) for HTML or XML format") do |uri|
|
63
|
+
options.stylesheet = uri
|
64
|
+
end
|
65
|
+
parser.on('--title', '-t TITLE', "document title") do |string|
|
66
|
+
options.title = string
|
67
|
+
end
|
68
|
+
parser.on('--detail', '-d', "provide details") do
|
69
|
+
options.extra = true
|
70
|
+
end
|
71
|
+
parser.on('--id', "include revision id") do
|
72
|
+
options.revision = true
|
73
|
+
end
|
74
|
+
parser.on('--level', '-l NUMBER', "lowest level of commit to display [0]") do |num|
|
75
|
+
options.level = num.to_i
|
76
|
+
end
|
77
|
+
parser
|
78
|
+
end
|
79
|
+
|
80
|
+
# Run the command.
|
81
|
+
def run(argv=nil)
|
82
|
+
argv ||= ARGV.dup
|
83
|
+
|
84
|
+
parser.parse!(argv)
|
85
|
+
|
86
|
+
@root = Dir.pwd # TODO: find root
|
87
|
+
|
88
|
+
@conf = VCLog::Config.new(@root)
|
89
|
+
@conf.level = options.level if options.level
|
90
|
+
|
91
|
+
@vcs = VCLog::Adapters.factory(@conf)
|
92
|
+
|
93
|
+
execute
|
94
|
+
end
|
95
|
+
|
96
|
+
end
|
97
|
+
|
98
|
+
end
|
99
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'vclog/cli/abstract'
|
2
|
+
|
3
|
+
module VCLog
|
4
|
+
module CLI
|
5
|
+
|
6
|
+
class Bump < Abstract
|
7
|
+
|
8
|
+
#
|
9
|
+
def self.terms
|
10
|
+
['bump']
|
11
|
+
end
|
12
|
+
|
13
|
+
#
|
14
|
+
def parser
|
15
|
+
super do |opt|
|
16
|
+
opt.banner = "Usage: vclog bump"
|
17
|
+
opt.separator(" ")
|
18
|
+
opt.separator("Display a bumped version number.")
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
#
|
23
|
+
def execute
|
24
|
+
puts @vcs.bump #(version)
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'vclog/cli/abstract'
|
2
|
+
|
3
|
+
module VCLog
|
4
|
+
module CLI
|
5
|
+
|
6
|
+
class Changelog < Abstract
|
7
|
+
|
8
|
+
#
|
9
|
+
def self.terms
|
10
|
+
['log', 'changelog']
|
11
|
+
end
|
12
|
+
|
13
|
+
#
|
14
|
+
def parser
|
15
|
+
super do |opt|
|
16
|
+
opt.banner = "Usage: vclog [changelog | log] [options]"
|
17
|
+
opt.separator(" ")
|
18
|
+
opt.separator("Print a Change Log.")
|
19
|
+
template_options(opt)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
#
|
24
|
+
def execute
|
25
|
+
format = options.format || 'ansi'
|
26
|
+
output = @vcs.display(:changelog, format, options)
|
27
|
+
puts output
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'vclog/cli/abstract'
|
2
|
+
|
3
|
+
module VCLog
|
4
|
+
module CLI
|
5
|
+
|
6
|
+
class Help < Abstract
|
7
|
+
|
8
|
+
#
|
9
|
+
def self.terms
|
10
|
+
['help']
|
11
|
+
end
|
12
|
+
|
13
|
+
#
|
14
|
+
def parser
|
15
|
+
super do |opt|
|
16
|
+
opt.banner = "Usage: vclog help"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
#
|
21
|
+
def execute
|
22
|
+
puts "Usage: vclog [command] [options]"
|
23
|
+
puts
|
24
|
+
puts "COMMANDS:"
|
25
|
+
puts " changelog display a Change Log"
|
26
|
+
puts " history display a Release History"
|
27
|
+
puts " version display the current tag version"
|
28
|
+
puts " bump display next reasonable version"
|
29
|
+
puts " list display format options"
|
30
|
+
puts " help show help information"
|
31
|
+
puts
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'vclog/cli/abstract'
|
2
|
+
|
3
|
+
module VCLog
|
4
|
+
module CLI
|
5
|
+
|
6
|
+
class History < Abstract
|
7
|
+
|
8
|
+
#
|
9
|
+
def self.terms
|
10
|
+
['history', 'release']
|
11
|
+
end
|
12
|
+
|
13
|
+
#
|
14
|
+
def parser
|
15
|
+
super do |opt|
|
16
|
+
opt.banner = "Usage: vclog history [options]\n" +
|
17
|
+
" vclog release [options]"
|
18
|
+
opt.separator " "
|
19
|
+
opt.separator("Print a Release History.")
|
20
|
+
opt.separator(" ")
|
21
|
+
opt.separator "SPECIAL OPTIONS:"
|
22
|
+
opt.on('--version', '-v NUM', "use as if current version number") do |num|
|
23
|
+
options.version = num
|
24
|
+
end
|
25
|
+
|
26
|
+
template_options(opt)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
#
|
31
|
+
def execute
|
32
|
+
format = options.format || 'ansi'
|
33
|
+
output = @vcs.display(:history, format, options)
|
34
|
+
puts output
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'vclog/cli/abstract'
|
2
|
+
|
3
|
+
module VCLog
|
4
|
+
module CLI
|
5
|
+
|
6
|
+
class List < Abstract
|
7
|
+
|
8
|
+
#
|
9
|
+
def self.terms
|
10
|
+
['list', 'templates']
|
11
|
+
end
|
12
|
+
|
13
|
+
#
|
14
|
+
def parser
|
15
|
+
super do |opt|
|
16
|
+
opt.banner = "Usage: vclog list"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
#
|
21
|
+
def execute
|
22
|
+
puts " ansi gnu rdoc markdown xml html atom rss json yaml"
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'vclog/cli/abstract'
|
2
|
+
|
3
|
+
module VCLog
|
4
|
+
module CLI
|
5
|
+
|
6
|
+
class Version < Abstract
|
7
|
+
|
8
|
+
#
|
9
|
+
def self.terms
|
10
|
+
['version']
|
11
|
+
end
|
12
|
+
|
13
|
+
#
|
14
|
+
def parser
|
15
|
+
super do |opt|
|
16
|
+
opt.banner = "Usage: vclog version"
|
17
|
+
opt.separator(" ")
|
18
|
+
opt.separator("Display the current version number.")
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
#
|
23
|
+
def execute
|
24
|
+
puts @vcs.version
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
data/lib/vclog/cli.rb
CHANGED
@@ -1,8 +1,5 @@
|
|
1
1
|
module VCLog
|
2
2
|
|
3
|
-
require 'vclog/adapters'
|
4
|
-
require 'optparse'
|
5
|
-
|
6
3
|
# = vclog Command
|
7
4
|
#
|
8
5
|
# == SYNOPSIS
|
@@ -31,19 +28,53 @@ module VCLog
|
|
31
28
|
#
|
32
29
|
# To use the library programmatically, please see the API documentation.
|
33
30
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
31
|
+
module CLI
|
32
|
+
|
33
|
+
require 'vclog/config'
|
34
|
+
require 'vclog/adapters'
|
35
|
+
|
36
|
+
require 'vclog/cli/help'
|
37
|
+
require 'vclog/cli/changelog'
|
38
|
+
require 'vclog/cli/history'
|
39
|
+
require 'vclog/cli/list'
|
40
|
+
require 'vclog/cli/bump'
|
41
|
+
require 'vclog/cli/version'
|
42
|
+
|
43
|
+
def self.main(*argv)
|
44
|
+
argv ||= ARGV.dup
|
45
|
+
begin
|
46
|
+
#opt = global_parser.order!(argv)
|
47
|
+
cmd = argv.shift unless argv.first =~ /^-/
|
48
|
+
cmd = cmd || 'changelog'
|
49
|
+
cli = CLI.factory(cmd)
|
50
|
+
cli.run(argv)
|
51
|
+
rescue => err
|
52
|
+
if $DEBUG
|
53
|
+
raise err
|
54
|
+
else
|
55
|
+
puts err.message
|
56
|
+
exit -1
|
57
|
+
end
|
43
58
|
end
|
44
59
|
end
|
60
|
+
|
61
|
+
#
|
62
|
+
def self.factory(name)
|
63
|
+
# find the closet matching term
|
64
|
+
terms = register.map{ |cli| cli.terms }.flatten
|
65
|
+
term = terms.select{ |term| /^#{name}/ =~ term }.first
|
66
|
+
# get the class that goes with the term
|
67
|
+
cmdclass = register.find{ |cli| cli.terms.include?(term) }
|
68
|
+
raise "Unknown command -- #{name}" unless cmdclass
|
69
|
+
cmdclass.new
|
70
|
+
end
|
71
|
+
|
45
72
|
end
|
73
|
+
end
|
46
74
|
|
75
|
+
# VCLog Copyright (c) 2008 Thomas Sawyer
|
76
|
+
|
77
|
+
=begin
|
47
78
|
#
|
48
79
|
def self.vclog
|
49
80
|
type = :log
|
@@ -53,7 +84,7 @@ module VCLog
|
|
53
84
|
output = nil
|
54
85
|
title = nil
|
55
86
|
version = nil
|
56
|
-
extra = false
|
87
|
+
extra = false require 'vclog/cli/help'
|
57
88
|
rev = false
|
58
89
|
typed = false
|
59
90
|
|
@@ -61,17 +92,6 @@ module VCLog
|
|
61
92
|
|
62
93
|
opt.banner = "Usage: vclog [--TYPE] [-f FORMAT] [OPTIONS] [DIR]"
|
63
94
|
|
64
|
-
opt.separator(" ")
|
65
|
-
opt.separator("OUTPUT TYPE (choose one):")
|
66
|
-
|
67
|
-
opt.on('--log', '--changelog', '-l', "changelog (default)") do
|
68
|
-
type = :log
|
69
|
-
end
|
70
|
-
|
71
|
-
opt.on('--rel', '--history', '-r', "release history") do
|
72
|
-
type = :rel
|
73
|
-
end
|
74
|
-
|
75
95
|
opt.on('--current', '-c', "display current version number") do
|
76
96
|
type = :curr
|
77
97
|
end
|
@@ -85,63 +105,65 @@ module VCLog
|
|
85
105
|
exit
|
86
106
|
end
|
87
107
|
|
108
|
+
opt.on('--help' , '-h', 'display this help information') do
|
109
|
+
puts opt
|
110
|
+
exit
|
111
|
+
end
|
112
|
+
|
88
113
|
opt.separator(" ")
|
89
|
-
opt.separator("FORMAT
|
114
|
+
opt.separator("FORMAT OPTIONS: (use varies with format)")
|
90
115
|
|
91
|
-
opt.on('--format', '-f
|
116
|
+
opt.on('--format', '-f FORMAT', "output format") do |format|
|
92
117
|
format = format.to_sym
|
93
118
|
end
|
94
119
|
|
95
|
-
opt.
|
96
|
-
|
120
|
+
opt.on('--style <URI>', "provide a stylesheet URI (css or xsl) for HTML or XML format") do |uri|
|
121
|
+
style = uri
|
122
|
+
end
|
123
|
+
|
124
|
+
opt.on('--version', '-v NUM', "current version number") do |num|
|
125
|
+
version = num
|
126
|
+
end
|
127
|
+
|
97
128
|
|
98
129
|
#opt.on('--typed', "catagorize by commit type") do
|
99
130
|
# typed = true
|
100
131
|
#end
|
101
132
|
|
102
|
-
opt.on('--title
|
133
|
+
opt.on('--title', '-t TITLE', "document title") do |string|
|
103
134
|
title = string
|
104
135
|
end
|
105
136
|
|
106
|
-
opt.on('--
|
137
|
+
opt.on('--detail', '-d', "provide details") do
|
107
138
|
extra = true
|
108
139
|
end
|
109
140
|
|
110
|
-
opt.on('--
|
111
|
-
|
141
|
+
opt.on('--id', "include revision id") do
|
142
|
+
rev = true
|
112
143
|
end
|
113
144
|
|
114
|
-
opt.on('--style
|
145
|
+
opt.on('--style URI', "provide a stylesheet URI (css or xsl) for HTML or XML format") do |uri|
|
115
146
|
style = uri
|
116
147
|
end
|
117
148
|
|
118
|
-
opt.on('--id', "include revision ids (in formats that normally do not)") do
|
119
|
-
rev = true
|
120
|
-
end
|
121
|
-
|
122
149
|
# DEPRECATE
|
123
|
-
opt.on('--output', '-o
|
150
|
+
opt.on('--output', '-o FILE', "send output to a file instead of stdout") do |out|
|
124
151
|
output = out
|
125
152
|
end
|
126
153
|
|
127
154
|
opt.separator(" ")
|
128
|
-
opt.separator("
|
155
|
+
opt.separator("SYSTEM OPTIONS:")
|
129
156
|
|
130
|
-
opt.on('--debug', "show debugging
|
157
|
+
opt.on('--debug', "show debugging information") do
|
131
158
|
$DEBUG = true
|
132
159
|
end
|
133
|
-
|
134
|
-
opt.on_tail('--help' , '-h', 'display this help information') do
|
135
|
-
puts opt
|
136
|
-
exit
|
137
|
-
end
|
138
160
|
end
|
139
161
|
|
140
162
|
optparse.parse!(ARGV)
|
141
163
|
|
142
164
|
root = ARGV.shift || Dir.pwd
|
143
|
-
|
144
|
-
vcs
|
165
|
+
conf = VCLog::Config.new(root)
|
166
|
+
vcs = VCLog::Adapters.factory(conf)
|
145
167
|
|
146
168
|
case type
|
147
169
|
when :bump
|
@@ -210,8 +232,5 @@ module VCLog
|
|
210
232
|
# Dir.glob('{history,changes,changelog}{,.*}', File::FNM_CASEFOLD).first
|
211
233
|
# end
|
212
234
|
#end
|
213
|
-
|
214
|
-
end
|
215
|
-
|
216
|
-
# VCLog Copyright (c) 2008 Thomas Sawyer
|
235
|
+
=end
|
217
236
|
|
data/lib/vclog/config.rb
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
require 'vclog/heuristics'
|
2
|
+
|
3
|
+
module VCLog
|
4
|
+
|
5
|
+
#
|
6
|
+
class Config
|
7
|
+
|
8
|
+
# File glob used to find the vclog configuration directory.
|
9
|
+
CONFIG_GLOB = '{.vclog,.config/vclog,config/vclog}/'
|
10
|
+
|
11
|
+
# File glob used to find project root directory.
|
12
|
+
ROOT_GLOB = '{.vclog/,.config/vclog/,config/vclog/,.git/,README*}/'
|
13
|
+
|
14
|
+
#
|
15
|
+
def initialize(root=nil)
|
16
|
+
@root = root || lookup_root || Dir.pwd
|
17
|
+
@dir = Dir[File.join(root, CONFIG_GLOB)]
|
18
|
+
@level = 0
|
19
|
+
end
|
20
|
+
|
21
|
+
# Project's root directory.
|
22
|
+
attr :root
|
23
|
+
|
24
|
+
# Configuration directory.
|
25
|
+
attr :dir
|
26
|
+
|
27
|
+
# Default change level.
|
28
|
+
#
|
29
|
+
# TODO: get from config file.
|
30
|
+
attr_accessor :level
|
31
|
+
|
32
|
+
#
|
33
|
+
def heuristics
|
34
|
+
@heuristics ||= Heuristics.load(heuristics_file)
|
35
|
+
end
|
36
|
+
|
37
|
+
#
|
38
|
+
def heuristics_file
|
39
|
+
@heuristics_file ||= Dir[File.join(dir, 'rules.rb')].first
|
40
|
+
end
|
41
|
+
|
42
|
+
# Find project root. This searches up from the current working
|
43
|
+
# directory for the following paths (in order):
|
44
|
+
#
|
45
|
+
# .vclog/
|
46
|
+
# .config/vclog/
|
47
|
+
# config/vclog/
|
48
|
+
# .git/
|
49
|
+
# README*
|
50
|
+
#
|
51
|
+
def lookup_root
|
52
|
+
root = nil
|
53
|
+
Dir.ascend(Dir.pwd) do |path|
|
54
|
+
check = Dir[ROOT_GLOB].first
|
55
|
+
if check
|
56
|
+
root = path
|
57
|
+
break
|
58
|
+
end
|
59
|
+
end
|
60
|
+
root || Dir.pwd
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
data/lib/vclog/formatter.rb
CHANGED
@@ -10,17 +10,20 @@ module VCLog
|
|
10
10
|
#
|
11
11
|
attr :vcs
|
12
12
|
|
13
|
+
# New Formmater.
|
14
|
+
#
|
15
|
+
# vcs - an instance of a subclass of VCS::Abstract
|
13
16
|
#
|
14
17
|
def initialize(vcs)
|
15
18
|
@vcs = vcs
|
16
19
|
end
|
17
20
|
|
18
|
-
#
|
21
|
+
# Returns a Changelog object taken from the VCS.
|
19
22
|
def changelog
|
20
23
|
@vcs.changelog
|
21
24
|
end
|
22
25
|
|
23
|
-
#
|
26
|
+
# Returns a History object garnered form the VCS.
|
24
27
|
def history
|
25
28
|
@vcs.history
|
26
29
|
end
|
@@ -50,20 +53,24 @@ module VCLog
|
|
50
53
|
@options.homepage
|
51
54
|
end
|
52
55
|
|
53
|
-
#
|
56
|
+
# TODO: let be nil and let template make a default if wanted
|
54
57
|
def title
|
55
58
|
return @options.title if @options.title
|
56
59
|
case @doctype
|
57
60
|
when :history
|
58
|
-
"
|
61
|
+
"RELEASE HISTORY"
|
59
62
|
else
|
60
|
-
"
|
63
|
+
"CHANGELOG"
|
61
64
|
end
|
62
65
|
end
|
63
66
|
|
64
67
|
#
|
65
|
-
|
66
|
-
|
68
|
+
#--
|
69
|
+
# NOTE: ERBs trim_mode is broken --it removes an extra space.
|
70
|
+
# So we can't use it for plain text templates.
|
71
|
+
#++
|
72
|
+
def display(doctype, format, options)
|
73
|
+
options = OpenStruct.new(options) if Hash === options
|
67
74
|
|
68
75
|
@doctype = doctype
|
69
76
|
@format = format
|
@@ -71,9 +78,19 @@ module VCLog
|
|
71
78
|
|
72
79
|
require_formatter(format)
|
73
80
|
|
74
|
-
|
75
|
-
|
76
|
-
|
81
|
+
tmp_file = Dir[File.join(DIR, 'templates', "#{@doctype}.#{@format}.{erb,rb}")].first
|
82
|
+
|
83
|
+
tmp = File.read(tmp_file)
|
84
|
+
|
85
|
+
case File.extname(tmp_file)
|
86
|
+
when '.rb'
|
87
|
+
eval(tmp, binding)
|
88
|
+
when '.erb'
|
89
|
+
erb = ERB.new(tmp, nil, '<>')
|
90
|
+
erb.result(binding)
|
91
|
+
else
|
92
|
+
raise "unrecognized template - #{tmp_file}"
|
93
|
+
end
|
77
94
|
end
|
78
95
|
|
79
96
|
private
|
@@ -0,0 +1,20 @@
|
|
1
|
+
set :major, 1, "Major Enhancements"
|
2
|
+
set :minor, -1, "Minor Enhancements"
|
3
|
+
set :admin, -2, "Administrative Changes"
|
4
|
+
|
5
|
+
on /updated? (README|PROFILE|PACKAGE|VERSION|MANIFEST)/ do
|
6
|
+
:admin
|
7
|
+
end
|
8
|
+
|
9
|
+
on /bump(ed)? version/ do
|
10
|
+
:admin
|
11
|
+
end
|
12
|
+
|
13
|
+
on /^(\w+):/ do |word|
|
14
|
+
word.to_sym
|
15
|
+
end
|
16
|
+
|
17
|
+
on /\[(\w+)\]\s*$/ do |word|
|
18
|
+
word.to_sym
|
19
|
+
end
|
20
|
+
|