git-version-bump 0.8.0 → 0.9.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/README.md +20 -0
- data/bin/git-version-bump +10 -4
- data/lib/git-version-bump.rb +48 -11
- metadata +4 -4
data/README.md
CHANGED
@@ -34,6 +34,18 @@ I recommend adding an alias to your `~/.gitconfig` file, for less typing:
|
|
34
34
|
[alias]
|
35
35
|
vb = version-bump
|
36
36
|
|
37
|
+
You can also add your own release notes to your release tags, by using the
|
38
|
+
`-n` (or `--notes`, if you like typing) option:
|
39
|
+
|
40
|
+
git version-bump -n minor
|
41
|
+
|
42
|
+
This will open an editor, containing a list of the commits since the last
|
43
|
+
release tag, in which you can type your release notes. If you follow
|
44
|
+
standard git commit style (a "heading" line, then a blank line, followed by
|
45
|
+
free-form text) you're perfectly positioned to use
|
46
|
+
[github-release](http://theshed.hezmatt.org/github-release) to make
|
47
|
+
gorgeous-looking release announcements to Github.
|
48
|
+
|
37
49
|
|
38
50
|
## In your `Rakefile`
|
39
51
|
|
@@ -113,3 +125,11 @@ to do:
|
|
113
125
|
|
114
126
|
This will work correctly inside your git tree, and also in your installed
|
115
127
|
gem. Magical!
|
128
|
+
|
129
|
+
|
130
|
+
# Contributing
|
131
|
+
|
132
|
+
Send your pull requests to the [Github
|
133
|
+
repo](https://github.com/mpalmer/git-version-bump), or send patches to
|
134
|
+
`theshed+git-version-bump@hezmatt.org`. Bug reports can be sent to the same
|
135
|
+
place, although I greatly prefer patches.
|
data/bin/git-version-bump
CHANGED
@@ -7,14 +7,20 @@ if ARGV[0].nil? or
|
|
7
7
|
ARGV[0] == '-h' or
|
8
8
|
ARGV[0] == '--help'
|
9
9
|
$stderr.puts <<-EOF.gsub(/^\t\t/, '')
|
10
|
-
Usage: git version-bump <major|minor|patch>
|
10
|
+
Usage: git version-bump [-n|--notes] <major|minor|patch|show>
|
11
11
|
|
12
12
|
'major': x.y.z -> x+1.0.0
|
13
13
|
'minor': x.y.z -> x.y+1.0
|
14
14
|
'patch': x.y.z -> x.y.z+1
|
15
|
+
|
16
|
+
'show': Display the current GVB version
|
17
|
+
|
18
|
+
--release: Prompt for "release notes" to add to the release tag
|
15
19
|
EOF
|
16
20
|
end
|
17
21
|
|
22
|
+
release_notes = ARGV.delete('-n') or ARGV.delete('--notes')
|
23
|
+
|
18
24
|
if ARGV[0].nil? or ARGV[0].empty?
|
19
25
|
exit 1
|
20
26
|
elsif ARGV[0] == '-h' or ARGV[0] == '--help'
|
@@ -23,11 +29,11 @@ end
|
|
23
29
|
|
24
30
|
case ARGV[0].downcase
|
25
31
|
when /^maj?o?r?$/
|
26
|
-
GVB.tag_version "#{GVB.major_version + 1}.0.0"
|
32
|
+
GVB.tag_version "#{GVB.major_version + 1}.0.0", release_notes
|
27
33
|
when /^min?o?r?$/
|
28
|
-
GVB.tag_version "#{GVB.major_version}.#{GVB.minor_version+1}.0"
|
34
|
+
GVB.tag_version "#{GVB.major_version}.#{GVB.minor_version+1}.0", release_notes
|
29
35
|
when /^pa?t?c?h?$/
|
30
|
-
GVB.tag_version "#{GVB.major_version}.#{GVB.minor_version}.#{GVB.patch_version+1}"
|
36
|
+
GVB.tag_version "#{GVB.major_version}.#{GVB.minor_version}.#{GVB.patch_version+1}", release_notes
|
31
37
|
when /^sh?o?w?$/
|
32
38
|
puts GVB.version
|
33
39
|
exit 0
|
data/lib/git-version-bump.rb
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
require 'tempfile'
|
2
|
+
require 'digest/sha1'
|
3
|
+
|
1
4
|
module GitVersionBump
|
2
5
|
def self.dirty_tree?
|
3
6
|
# Are we in a dirty, dirty tree?
|
@@ -42,14 +45,14 @@ module GitVersionBump
|
|
42
45
|
strip.
|
43
46
|
gsub(/^v/, '').
|
44
47
|
gsub('-', '.')
|
45
|
-
|
48
|
+
|
46
49
|
# If git returned success, then it gave us a described version.
|
47
50
|
# Success!
|
48
51
|
return git_ver if $? == 0
|
49
52
|
|
50
53
|
# git failed us; we're either not in a git repo or else we've never
|
51
54
|
# tagged anything before.
|
52
|
-
|
55
|
+
|
53
56
|
# Are we in a git repo with no tags? If so, dump out our
|
54
57
|
# super-special version and be done with it.
|
55
58
|
system("git status >/dev/null 2>&1")
|
@@ -79,12 +82,12 @@ module GitVersionBump
|
|
79
82
|
def self.major_version(gem = nil)
|
80
83
|
ver = version(gem)
|
81
84
|
v = ver.split('.')[0]
|
82
|
-
|
85
|
+
|
83
86
|
unless v =~ /^[0-9]+$/
|
84
87
|
raise ArgumentError,
|
85
88
|
"#{v} (part of #{ver.inspect}) is not a numeric version component. Abandon ship!"
|
86
89
|
end
|
87
|
-
|
90
|
+
|
88
91
|
return v.to_i
|
89
92
|
end
|
90
93
|
|
@@ -93,12 +96,12 @@ module GitVersionBump
|
|
93
96
|
def self.minor_version(gem = nil)
|
94
97
|
ver = version(gem)
|
95
98
|
v = ver.split('.')[1]
|
96
|
-
|
99
|
+
|
97
100
|
unless v =~ /^[0-9]+$/
|
98
101
|
raise ArgumentError,
|
99
102
|
"#{v} (part of #{ver.inspect}) is not a numeric version component. Abandon ship!"
|
100
103
|
end
|
101
|
-
|
104
|
+
|
102
105
|
return v.to_i
|
103
106
|
end
|
104
107
|
|
@@ -107,12 +110,12 @@ module GitVersionBump
|
|
107
110
|
def self.patch_version(gem = nil)
|
108
111
|
ver = version(gem)
|
109
112
|
v = ver.split('.')[2]
|
110
|
-
|
113
|
+
|
111
114
|
unless v =~ /^[0-9]+$/
|
112
115
|
raise ArgumentError,
|
113
116
|
"#{v} (part of #{ver.inspect}) is not a numeric version component. Abandon ship!"
|
114
117
|
end
|
115
|
-
|
118
|
+
|
116
119
|
return v.to_i
|
117
120
|
end
|
118
121
|
|
@@ -153,12 +156,46 @@ module GitVersionBump
|
|
153
156
|
|
154
157
|
DATE = date('git-version-bump')
|
155
158
|
|
156
|
-
def self.tag_version(v)
|
159
|
+
def self.tag_version(v, release_notes = false)
|
157
160
|
if dirty_tree?
|
158
161
|
puts "You have uncommitted files. Refusing to tag a dirty tree."
|
159
162
|
else
|
160
|
-
|
161
|
-
|
163
|
+
if release_notes
|
164
|
+
# We need to find the tag before this one, so we can list all the commits
|
165
|
+
# between the two. This is not a trivial operation.
|
166
|
+
prev_tag = `git describe --always`.strip.gsub(/-\d+-g[0-9a-f]+$/, '')
|
167
|
+
|
168
|
+
log_file = Tempfile.new('gvb')
|
169
|
+
|
170
|
+
log_file.puts <<-EOF.gsub(/^\t\t\t\t\t/, '')
|
171
|
+
|
172
|
+
|
173
|
+
|
174
|
+
# Write your release notes above. The first line should be the release name.
|
175
|
+
# To help you remember what's in here, the commits since your last release
|
176
|
+
# are listed below.
|
177
|
+
#
|
178
|
+
EOF
|
179
|
+
|
180
|
+
log_file.close
|
181
|
+
system("git log --format='# %h %s' #{prev_tag}..HEAD >>#{log_file.path}")
|
182
|
+
|
183
|
+
pre_hash = Digest::SHA1.hexdigest(File.read(log_file.path))
|
184
|
+
system("git config -e -f #{log_file.path}")
|
185
|
+
if Digest::SHA1.hexdigest(File.read(log_file.path)) == pre_hash
|
186
|
+
puts "Release notes not edited; aborting"
|
187
|
+
log_file.unlink
|
188
|
+
return
|
189
|
+
end
|
190
|
+
|
191
|
+
puts "Tagging version #{v}..."
|
192
|
+
system("git tag -a -F #{log_file.path} v#{v}")
|
193
|
+
log_file.unlink
|
194
|
+
else
|
195
|
+
# Crikey this is a lot simpler
|
196
|
+
system("git tag -a -m 'Version v#{v}' v#{v}")
|
197
|
+
end
|
198
|
+
|
162
199
|
system("git push >/dev/null 2>&1")
|
163
200
|
system("git push --tags >/dev/null 2>&1")
|
164
201
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: git-version-bump
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-05-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -89,7 +89,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
89
89
|
version: '0'
|
90
90
|
segments:
|
91
91
|
- 0
|
92
|
-
hash: -
|
92
|
+
hash: -2656244140223345320
|
93
93
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
@@ -98,7 +98,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
98
98
|
version: '0'
|
99
99
|
segments:
|
100
100
|
- 0
|
101
|
-
hash: -
|
101
|
+
hash: -2656244140223345320
|
102
102
|
requirements: []
|
103
103
|
rubyforge_project:
|
104
104
|
rubygems_version: 1.8.23
|