vclog 1.9.1 → 1.9.2
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/.ruby +6 -12
- data/{HISTORY.rdoc → History.md} +34 -13
- data/License.txt +28 -0
- data/{README.rdoc → README.md} +18 -20
- data/bin/vclog-news +6 -0
- data/lib/vclog.yml +6 -12
- data/lib/vclog/cli/news.rb +29 -0
- data/lib/vclog/config.rb +151 -0
- data/lib/vclog/heuristics.rb +33 -1
- data/lib/vclog/history_file.rb +5 -0
- data/lib/vclog/repo.rb +20 -40
- data/lib/vclog/report.rb +30 -17
- data/man/man1/index.txt +1 -0
- data/man/man1/vclog-autotag.1.html +2 -2
- data/man/man1/vclog-bump.1.html +2 -2
- data/man/man1/vclog-news.1 +25 -0
- data/man/man1/vclog-news.1.html +112 -0
- data/man/man1/vclog-news.1.ronn +25 -0
- data/man/man1/vclog-version.1.html +2 -2
- data/man/man1/vclog.1.html +2 -2
- 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 +41 -60
- data/COPYING.rdoc +0 -32
- data/features/git.feature +0 -86
- data/features/hg.feature +0 -86
- data/features/step_definitions/history_steps.rb +0 -29
- data/features/step_definitions/repo_steps.rb +0 -72
- data/features/support/ae.rb +0 -1
- data/features/support/aruba.rb +0 -5
- data/features/support/loadpath.rb +0 -2
- data/features/support/repo.rb +0 -19
- data/features/svn.feature +0 -86
- data/test/unit/case_metadata.rb +0 -11
- data/test/unit/helper.rb +0 -4
data/lib/vclog/heuristics.rb
CHANGED
@@ -8,6 +8,7 @@ module VCLog
|
|
8
8
|
#
|
9
9
|
class Heuristics
|
10
10
|
|
11
|
+
#
|
11
12
|
# Load heuristics from a designated file.
|
12
13
|
#
|
13
14
|
# @param [String] file
|
@@ -18,7 +19,19 @@ module VCLog
|
|
18
19
|
new{ instance_eval(File.read(file), file) }
|
19
20
|
end
|
20
21
|
|
21
|
-
#
|
22
|
+
#
|
23
|
+
# Load heuristics given a script.
|
24
|
+
#
|
25
|
+
# @param [String] script
|
26
|
+
# Configuration script.
|
27
|
+
#
|
28
|
+
def self.eval(script, file='(eval)', line=0)
|
29
|
+
new{ instance_eval(text, file, line) }
|
30
|
+
end
|
31
|
+
|
32
|
+
#
|
33
|
+
# Initialize new heurtistics set.
|
34
|
+
#
|
22
35
|
def initialize(&block)
|
23
36
|
@rules = []
|
24
37
|
|
@@ -34,6 +47,7 @@ module VCLog
|
|
34
47
|
end
|
35
48
|
end
|
36
49
|
|
50
|
+
#
|
37
51
|
# Apply heuristics to a commit.
|
38
52
|
#
|
39
53
|
# @param [Change] commit
|
@@ -57,13 +71,17 @@ module VCLog
|
|
57
71
|
commit.color = color
|
58
72
|
end
|
59
73
|
|
74
|
+
#
|
60
75
|
# Define a new rule.
|
76
|
+
#
|
61
77
|
def on(pattern=nil, &block)
|
62
78
|
@rules << Rule.new(pattern, &block)
|
63
79
|
end
|
64
80
|
|
81
|
+
#
|
65
82
|
# Convenience method for setting-up commit types, which can
|
66
83
|
# be easily assigned, setting both label and level in one go.
|
84
|
+
#
|
67
85
|
def type(type, level, label)
|
68
86
|
@types[type.to_sym] = Type.new(type, level, label)
|
69
87
|
end
|
@@ -71,6 +89,7 @@ module VCLog
|
|
71
89
|
# @deprecated
|
72
90
|
alias_method :set, :type
|
73
91
|
|
92
|
+
#
|
74
93
|
# Access to defined types.
|
75
94
|
#
|
76
95
|
# @example
|
@@ -78,6 +97,7 @@ module VCLog
|
|
78
97
|
#
|
79
98
|
attr :types
|
80
99
|
|
100
|
+
#
|
81
101
|
# Set color list. The center element cooresponds to `level=0`.
|
82
102
|
# Elements before the center are incrementally higher levels
|
83
103
|
# and those after are lower.
|
@@ -89,7 +109,17 @@ module VCLog
|
|
89
109
|
@colors = list
|
90
110
|
end
|
91
111
|
|
112
|
+
#
|
113
|
+
# Set default level.
|
114
|
+
#
|
115
|
+
def level(integer=nil)
|
116
|
+
@level = integer.to_i is integer
|
117
|
+
@level
|
118
|
+
end
|
119
|
+
|
120
|
+
#
|
92
121
|
# Default settings.
|
122
|
+
#
|
93
123
|
def default
|
94
124
|
type :major, 3, "Major Enhancements"
|
95
125
|
type :minor, 2, "Minor Enhancements"
|
@@ -122,7 +152,9 @@ module VCLog
|
|
122
152
|
end
|
123
153
|
end
|
124
154
|
|
155
|
+
#
|
125
156
|
# Work on next-gen default heuristics.
|
157
|
+
#
|
126
158
|
def default2
|
127
159
|
type :major, 3, "Major Enhancements"
|
128
160
|
type :minor, 2, "Minor Enhancements"
|
data/lib/vclog/history_file.rb
CHANGED
data/lib/vclog/repo.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
|
-
require 'confection'
|
2
|
-
|
3
1
|
require 'vclog/core_ext'
|
4
2
|
require 'vclog/adapters'
|
3
|
+
require 'vclog/config'
|
5
4
|
require 'vclog/heuristics'
|
6
5
|
require 'vclog/history_file'
|
7
6
|
require 'vclog/changelog'
|
@@ -11,13 +10,14 @@ require 'vclog/report'
|
|
11
10
|
|
12
11
|
module VCLog
|
13
12
|
|
13
|
+
# Encapsulate representaiton of the repository.
|
14
14
|
#
|
15
15
|
class Repo
|
16
16
|
|
17
17
|
#
|
18
18
|
# File glob used to find project root directory.
|
19
19
|
#
|
20
|
-
ROOT_GLOB = '{.git/,.hg/,_darcs/,.svn/}'
|
20
|
+
ROOT_GLOB = '{.ruby,.map/,.git/,.hg/,_darcs/,.svn/}'
|
21
21
|
|
22
22
|
#
|
23
23
|
# Project's root directory.
|
@@ -33,10 +33,12 @@ module VCLog
|
|
33
33
|
# Setup new Repo instance.
|
34
34
|
#
|
35
35
|
def initialize(root, options={})
|
36
|
-
|
36
|
+
options[:root] = root if root
|
37
|
+
|
38
|
+
@config = Config.new(options)
|
37
39
|
@options = options
|
38
40
|
|
39
|
-
vcs_type =
|
41
|
+
vcs_type = @config.vcs_type
|
40
42
|
|
41
43
|
raise ArgumentError, "Not a recognized version control system." unless vcs_type
|
42
44
|
|
@@ -51,53 +53,31 @@ module VCLog
|
|
51
53
|
end
|
52
54
|
|
53
55
|
#
|
54
|
-
#
|
56
|
+
# Configuration.
|
55
57
|
#
|
56
|
-
def
|
57
|
-
|
58
|
+
def config
|
59
|
+
@config
|
58
60
|
end
|
59
61
|
|
60
62
|
#
|
63
|
+
# Project root directory.
|
61
64
|
#
|
62
|
-
|
63
|
-
|
64
|
-
dir = nil
|
65
|
-
Dir.chdir(root) do
|
66
|
-
dir = Dir.glob("{.git,.hg,.svn,_darcs}").first
|
67
|
-
end
|
68
|
-
dir[1..-1] if dir
|
65
|
+
def root
|
66
|
+
config.root
|
69
67
|
end
|
70
68
|
|
71
69
|
#
|
72
|
-
#
|
73
|
-
# directory for a Confection configuration file or source control
|
74
|
-
# manager directory.
|
75
|
-
#
|
76
|
-
# .co
|
77
|
-
# .git/
|
78
|
-
# .hg/
|
79
|
-
# .svn/
|
80
|
-
# _darcs/
|
81
|
-
#
|
82
|
-
# If all else fails the current directory is returned.
|
70
|
+
# Load heuristics script.
|
83
71
|
#
|
84
|
-
def
|
85
|
-
|
86
|
-
Dir.ascend(Dir.pwd) do |path|
|
87
|
-
check = Dir[ROOT_GLOB].first
|
88
|
-
if check
|
89
|
-
root = path
|
90
|
-
break
|
91
|
-
end
|
92
|
-
end
|
93
|
-
root || Dir.pwd
|
72
|
+
def heuristics
|
73
|
+
config.heuristics
|
94
74
|
end
|
95
75
|
|
96
76
|
#
|
97
|
-
#
|
77
|
+
# Check force option.
|
98
78
|
#
|
99
|
-
def
|
100
|
-
|
79
|
+
def force?
|
80
|
+
config.force?
|
101
81
|
end
|
102
82
|
|
103
83
|
#
|
@@ -169,7 +149,7 @@ module VCLog
|
|
169
149
|
|
170
150
|
#ver = repo.bump(version)
|
171
151
|
|
172
|
-
name =
|
152
|
+
name = config.version || 'HEAD'
|
173
153
|
user = adapter.user
|
174
154
|
date = ::Time.now + (3600 * 24) # one day ahead
|
175
155
|
|
data/lib/vclog/report.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'ostruct'
|
2
|
-
#require 'ansi'
|
3
2
|
require 'erb'
|
3
|
+
#require 'ansi'
|
4
4
|
|
5
5
|
module VCLog
|
6
6
|
|
@@ -32,12 +32,11 @@ module VCLog
|
|
32
32
|
#
|
33
33
|
def initialize(repo, options)
|
34
34
|
@repo = repo
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
end
|
35
|
+
|
36
|
+
options[:type] ||= 'changelog'
|
37
|
+
options[:format] ||= 'ansi'
|
38
|
+
|
39
|
+
@options = OpenStruct.new(options)
|
41
40
|
|
42
41
|
@options.level ||= 0
|
43
42
|
end
|
@@ -57,6 +56,20 @@ module VCLog
|
|
57
56
|
repo.releases(changelog.changes)
|
58
57
|
end
|
59
58
|
|
59
|
+
#
|
60
|
+
# Report type.
|
61
|
+
#
|
62
|
+
def type
|
63
|
+
options.type
|
64
|
+
end
|
65
|
+
|
66
|
+
#
|
67
|
+
# Report format.
|
68
|
+
#
|
69
|
+
def format
|
70
|
+
options.format
|
71
|
+
end
|
72
|
+
|
60
73
|
#
|
61
74
|
# User as given by the command line or from the repo.
|
62
75
|
#
|
@@ -99,7 +112,7 @@ module VCLog
|
|
99
112
|
#
|
100
113
|
def title
|
101
114
|
return options.title if options.title
|
102
|
-
case
|
115
|
+
case type
|
103
116
|
when :history
|
104
117
|
"RELEASE HISTORY"
|
105
118
|
else
|
@@ -114,23 +127,23 @@ module VCLog
|
|
114
127
|
# Print report.
|
115
128
|
#
|
116
129
|
def print
|
117
|
-
|
118
|
-
options.format ||= 'ansi'
|
130
|
+
require_formatter(format)
|
119
131
|
|
120
|
-
|
132
|
+
tmpl_glob = File.join(DIR, 'templates', "#{type}.#{format}.{erb,rb}")
|
133
|
+
tmpl_file = Dir[tmpl_glob].first
|
121
134
|
|
122
|
-
|
135
|
+
raise "could not find template -- #{tmp_glob}" unless tmpl_file
|
123
136
|
|
124
|
-
|
137
|
+
tmpl = File.read(tmpl_file)
|
125
138
|
|
126
|
-
case File.extname(
|
139
|
+
case File.extname(tmpl_file)
|
127
140
|
when '.rb'
|
128
|
-
eval(
|
141
|
+
eval(tmpl, binding, tmpl_file)
|
129
142
|
when '.erb'
|
130
|
-
erb = ERB.new(
|
143
|
+
erb = ERB.new(tmpl, nil, '<>')
|
131
144
|
erb.result(binding)
|
132
145
|
else
|
133
|
-
raise "unrecognized template
|
146
|
+
raise "unrecognized template type -- #{tmpl_file}"
|
134
147
|
end
|
135
148
|
end
|
136
149
|
|
data/man/man1/index.txt
CHANGED
@@ -64,7 +64,7 @@
|
|
64
64
|
<a href="#DESCRIPTION">DESCRIPTION</a>
|
65
65
|
<a href="#OPTIONS">OPTIONS</a>
|
66
66
|
<a href="#SEE-ALSO">SEE ALSO</a>
|
67
|
-
|
67
|
+
</div>
|
68
68
|
|
69
69
|
<ol class='man-decor man-head man head'>
|
70
70
|
<li class='tl'>vclog-autotag(1)</li>
|
@@ -103,7 +103,7 @@ convention of <code>HISTORY.*</code>.</p></li>
|
|
103
103
|
|
104
104
|
<h2 id="SEE-ALSO">SEE ALSO</h2>
|
105
105
|
|
106
|
-
<p><a href="vclog.1.html"
|
106
|
+
<p><a class="man-ref" href="vclog.1.html">vclog<span class="s">(1)</span></a></p>
|
107
107
|
|
108
108
|
|
109
109
|
<ol class='man-decor man-foot man foot'>
|
data/man/man1/vclog-bump.1.html
CHANGED
@@ -64,7 +64,7 @@
|
|
64
64
|
<a href="#DESCRIPTION">DESCRIPTION</a>
|
65
65
|
<a href="#OPTIONS">OPTIONS</a>
|
66
66
|
<a href="#SEE-ALSO">SEE ALSO</a>
|
67
|
-
|
67
|
+
</div>
|
68
68
|
|
69
69
|
<ol class='man-decor man-head man head'>
|
70
70
|
<li class='tl'>vclog-bump(1)</li>
|
@@ -97,7 +97,7 @@ Assume this version number is current.</li>
|
|
97
97
|
|
98
98
|
<h2 id="SEE-ALSO">SEE ALSO</h2>
|
99
99
|
|
100
|
-
<p><a href="vclog.1.html"
|
100
|
+
<p><a class="man-ref" href="vclog.1.html">vclog<span class="s">(1)</span></a></p>
|
101
101
|
|
102
102
|
|
103
103
|
<ol class='man-decor man-foot man foot'>
|
@@ -0,0 +1,25 @@
|
|
1
|
+
.\" generated with Ronn/v0.7.3
|
2
|
+
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
|
+
.
|
4
|
+
.TH "VCLOG\-NEWS" "1" "March 2012" "RubyWorks" "VCLog"
|
5
|
+
.
|
6
|
+
.SH "NAME"
|
7
|
+
\fBvclog\-news\fR \- output latest release notice
|
8
|
+
.
|
9
|
+
.SH "SYNOPSIS"
|
10
|
+
\fBvclog news\fR
|
11
|
+
.
|
12
|
+
.SH "DESCRIPTION"
|
13
|
+
Display the most recent entry in a project\'s history file\. This command does NOT show the latest tag message, rather it is useful for making a new tag\. For instnace:
|
14
|
+
.
|
15
|
+
.P
|
16
|
+
\fBvclog news | git tag \-a \-F \- v1\.0\.0\fR
|
17
|
+
.
|
18
|
+
.P
|
19
|
+
This command will create a new git tag using the most recent message in the history file\.
|
20
|
+
.
|
21
|
+
.SH "OPTIONS"
|
22
|
+
No options yet\.
|
23
|
+
.
|
24
|
+
.SH "SEE ALSO"
|
25
|
+
vclog(1)
|
@@ -0,0 +1,112 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta http-equiv='content-type' value='text/html;charset=utf8'>
|
5
|
+
<meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>
|
6
|
+
<title>vclog-news(1) - output latest release notice</title>
|
7
|
+
<style type='text/css' media='all'>
|
8
|
+
/* style: man */
|
9
|
+
body#manpage {margin:0}
|
10
|
+
.mp {max-width:100ex;padding:0 9ex 1ex 4ex}
|
11
|
+
.mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}
|
12
|
+
.mp h2 {margin:10px 0 0 0}
|
13
|
+
.mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}
|
14
|
+
.mp h3 {margin:0 0 0 4ex}
|
15
|
+
.mp dt {margin:0;clear:left}
|
16
|
+
.mp dt.flush {float:left;width:8ex}
|
17
|
+
.mp dd {margin:0 0 0 9ex}
|
18
|
+
.mp h1,.mp h2,.mp h3,.mp h4 {clear:left}
|
19
|
+
.mp pre {margin-bottom:20px}
|
20
|
+
.mp pre+h2,.mp pre+h3 {margin-top:22px}
|
21
|
+
.mp h2+pre,.mp h3+pre {margin-top:5px}
|
22
|
+
.mp img {display:block;margin:auto}
|
23
|
+
.mp h1.man-title {display:none}
|
24
|
+
.mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}
|
25
|
+
.mp h2 {font-size:16px;line-height:1.25}
|
26
|
+
.mp h1 {font-size:20px;line-height:2}
|
27
|
+
.mp {text-align:justify;background:#fff}
|
28
|
+
.mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}
|
29
|
+
.mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}
|
30
|
+
.mp u {text-decoration:underline}
|
31
|
+
.mp code,.mp strong,.mp b {font-weight:bold;color:#131211}
|
32
|
+
.mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}
|
33
|
+
.mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}
|
34
|
+
.mp b.man-ref {font-weight:normal;color:#434241}
|
35
|
+
.mp pre {padding:0 4ex}
|
36
|
+
.mp pre code {font-weight:normal;color:#434241}
|
37
|
+
.mp h2+pre,h3+pre {padding-left:0}
|
38
|
+
ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}
|
39
|
+
ol.man-decor {width:100%}
|
40
|
+
ol.man-decor li.tl {text-align:left}
|
41
|
+
ol.man-decor li.tc {text-align:center;letter-spacing:4px}
|
42
|
+
ol.man-decor li.tr {text-align:right;float:right}
|
43
|
+
</style>
|
44
|
+
<style type='text/css' media='all'>
|
45
|
+
/* style: toc */
|
46
|
+
.man-navigation {display:block !important;position:fixed;top:0;left:113ex;height:100%;width:100%;padding:48px 0 0 0;border-left:1px solid #dbdbdb;background:#eee}
|
47
|
+
.man-navigation a,.man-navigation a:hover,.man-navigation a:link,.man-navigation a:visited {display:block;margin:0;padding:5px 2px 5px 30px;color:#999;text-decoration:none}
|
48
|
+
.man-navigation a:hover {color:#111;text-decoration:underline}
|
49
|
+
</style>
|
50
|
+
</head>
|
51
|
+
<!--
|
52
|
+
The following styles are deprecated and will be removed at some point:
|
53
|
+
div#man, div#man ol.man, div#man ol.head, div#man ol.man.
|
54
|
+
|
55
|
+
The .man-page, .man-decor, .man-head, .man-foot, .man-title, and
|
56
|
+
.man-navigation should be used instead.
|
57
|
+
-->
|
58
|
+
<body id='manpage'>
|
59
|
+
<div class='mp' id='man'>
|
60
|
+
|
61
|
+
<div class='man-navigation' style='display:none'>
|
62
|
+
<a href="#NAME">NAME</a>
|
63
|
+
<a href="#SYNOPSIS">SYNOPSIS</a>
|
64
|
+
<a href="#DESCRIPTION">DESCRIPTION</a>
|
65
|
+
<a href="#OPTIONS">OPTIONS</a>
|
66
|
+
<a href="#SEE-ALSO">SEE ALSO</a>
|
67
|
+
</div>
|
68
|
+
|
69
|
+
<ol class='man-decor man-head man head'>
|
70
|
+
<li class='tl'>vclog-news(1)</li>
|
71
|
+
<li class='tc'>VCLog</li>
|
72
|
+
<li class='tr'>vclog-news(1)</li>
|
73
|
+
</ol>
|
74
|
+
|
75
|
+
<h2 id="NAME">NAME</h2>
|
76
|
+
<p class="man-name">
|
77
|
+
<code>vclog-news</code> - <span class="man-whatis">output latest release notice</span>
|
78
|
+
</p>
|
79
|
+
|
80
|
+
<h2 id="SYNOPSIS">SYNOPSIS</h2>
|
81
|
+
|
82
|
+
<p><code>vclog news</code></p>
|
83
|
+
|
84
|
+
<h2 id="DESCRIPTION">DESCRIPTION</h2>
|
85
|
+
|
86
|
+
<p>Display the most recent entry in a project's history file. This command
|
87
|
+
does NOT show the latest tag message, rather it is useful for making
|
88
|
+
a new tag. For instnace:</p>
|
89
|
+
|
90
|
+
<p> <code>vclog news | git tag -a -F - v1.0.0</code></p>
|
91
|
+
|
92
|
+
<p>This command will create a new git tag using the most recent message in
|
93
|
+
the history file.</p>
|
94
|
+
|
95
|
+
<h2 id="OPTIONS">OPTIONS</h2>
|
96
|
+
|
97
|
+
<p>No options yet.</p>
|
98
|
+
|
99
|
+
<h2 id="SEE-ALSO">SEE ALSO</h2>
|
100
|
+
|
101
|
+
<p><a class="man-ref" href="vclog.1.html">vclog<span class="s">(1)</span></a></p>
|
102
|
+
|
103
|
+
|
104
|
+
<ol class='man-decor man-foot man foot'>
|
105
|
+
<li class='tl'>RubyWorks</li>
|
106
|
+
<li class='tc'>March 2012</li>
|
107
|
+
<li class='tr'>vclog-news(1)</li>
|
108
|
+
</ol>
|
109
|
+
|
110
|
+
</div>
|
111
|
+
</body>
|
112
|
+
</html>
|