vclog 1.5.0 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
+
|