git-version-bump 0.16.0 → 0.17.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.
- checksums.yaml +4 -4
- data/README.md +16 -2
- data/bin/git-version-bump +3 -1
- data/lib/git-version-bump.rb +49 -31
- metadata +3 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ed72f5f43e0499fd3173d49cba195cc578b5caed0469ecae7d6767c5e138ed25
|
4
|
+
data.tar.gz: 738c6792fccd8af5808ed0c682fe4bac074bb0b0cdc26a54d2468f20077ed2b6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '06647807704eb29d67b960a806159f01353f0f220cce1340fccf4c0413a71ec80f7f0898a59929996a18a147f8c7938c1ce61c146946edb442889a872c97b407'
|
7
|
+
data.tar.gz: 4d540d47ddb7ef19f99b7402a2d4e695672aabfea51f2f94a5617b5576dde50225d7e6254902eef672608b69d95e1b0dbb1a8f64175407ea7d2a9ba10caaf15d
|
data/README.md
CHANGED
@@ -99,7 +99,7 @@ gemspec, like this:
|
|
99
99
|
Gem::Specification.new do |s|
|
100
100
|
s.version = GVB.version
|
101
101
|
s.date = GVB.date
|
102
|
-
|
102
|
+
|
103
103
|
...
|
104
104
|
end
|
105
105
|
|
@@ -118,7 +118,7 @@ what version of a library you're running, then you probably like to define a
|
|
118
118
|
to do:
|
119
119
|
|
120
120
|
require 'git-version-bump'
|
121
|
-
|
121
|
+
|
122
122
|
class Foobar
|
123
123
|
VERSION = GVB.version
|
124
124
|
end
|
@@ -126,6 +126,20 @@ to do:
|
|
126
126
|
This will work correctly inside your git tree, and also in your installed
|
127
127
|
gem. Magical!
|
128
128
|
|
129
|
+
#### For projects using lite tags
|
130
|
+
|
131
|
+
If you are using GitHub releases for your project or some other method that
|
132
|
+
involves light tags (tags with no annotations), you might notice that these
|
133
|
+
tags are not detected by git-version-bump by default. If you want these
|
134
|
+
commits to be detected then use the following configuration:
|
135
|
+
|
136
|
+
require 'git-version-bump'
|
137
|
+
|
138
|
+
class Foobar
|
139
|
+
# First parameter is use_local_git, second is include_lite_tags
|
140
|
+
VERSION = GVB.version(false, true)
|
141
|
+
end
|
142
|
+
|
129
143
|
|
130
144
|
# Contributing
|
131
145
|
|
data/bin/git-version-bump
CHANGED
@@ -18,11 +18,13 @@ if ARGV[0].nil? or
|
|
18
18
|
|
19
19
|
-d, --dry-run: Calculate and return the bump value, but don't update git workspace or remote
|
20
20
|
-n, --notes: Prompt for "release notes" to add to the release tag
|
21
|
+
-l, --lite-tags: Include non-annotated git tags
|
21
22
|
EOF
|
22
23
|
end
|
23
24
|
|
24
25
|
release_notes = ARGV.delete('-n') || ARGV.delete('--notes')
|
25
26
|
dry_run = ARGV.delete('-d') || ARGV.delete('--dry-run')
|
27
|
+
lite_tags = ARGV.delete('-l') || ARGV.delete('--lite-tags')
|
26
28
|
|
27
29
|
if ARGV[0].nil? or ARGV[0].empty?
|
28
30
|
exit 1
|
@@ -48,6 +50,6 @@ end
|
|
48
50
|
if dry_run
|
49
51
|
puts result
|
50
52
|
else
|
51
|
-
GVB.tag_version result, release_notes
|
53
|
+
GVB.tag_version result, release_notes, lite_tags
|
52
54
|
puts "Version is now #{GVB.version(true)}."
|
53
55
|
end
|
data/lib/git-version-bump.rb
CHANGED
@@ -5,9 +5,11 @@ require 'pathname'
|
|
5
5
|
module GitVersionBump
|
6
6
|
class VersionUnobtainable < StandardError; end
|
7
7
|
|
8
|
+
VERSION_TAG_GLOB = 'v[0-9]*.[0-9]*.*[0-9]'
|
9
|
+
|
8
10
|
DEVNULL = Gem.win_platform? ? "NUL" : "/dev/null"
|
9
11
|
|
10
|
-
def self.version(use_local_git=false)
|
12
|
+
def self.version(use_local_git=false, include_lite_tags=false)
|
11
13
|
if use_local_git
|
12
14
|
unless git_available?
|
13
15
|
raise RuntimeError,
|
@@ -19,7 +21,10 @@ module GitVersionBump
|
|
19
21
|
sq_git_dir = shell_quoted_string((File.dirname(caller_file) rescue nil || Dir.pwd))
|
20
22
|
end
|
21
23
|
|
22
|
-
|
24
|
+
git_cmd = "git -C #{sq_git_dir} describe --dirty='.1.dirty.#{Time.now.strftime("%Y%m%d.%H%M%S")}' --match='#{VERSION_TAG_GLOB}'"
|
25
|
+
git_cmd << " --tags" if include_lite_tags
|
26
|
+
|
27
|
+
git_ver = `#{git_cmd} 2> #{DEVNULL}`.
|
23
28
|
strip.
|
24
29
|
gsub(/^v/, '').
|
25
30
|
gsub('-', '.')
|
@@ -31,15 +36,17 @@ module GitVersionBump
|
|
31
36
|
# git failed us; we're either not in a git repo or else we've never
|
32
37
|
# tagged anything before.
|
33
38
|
|
34
|
-
# Are we in a git repo with no tags? If so,
|
35
|
-
#
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
+
# Are we in a git repo with no tags? If so, try to use the gemspec
|
40
|
+
# and if that fails then abort
|
41
|
+
begin
|
42
|
+
return gem_version(use_local_git)
|
43
|
+
rescue VersionUnobtainable
|
44
|
+
return "0.0.0.1.ENOTAG"
|
45
|
+
end
|
39
46
|
end
|
40
47
|
|
41
|
-
def self.major_version(use_local_git=false)
|
42
|
-
ver = version(use_local_git)
|
48
|
+
def self.major_version(use_local_git=false, include_lite_tags=false)
|
49
|
+
ver = version(use_local_git, include_lite_tags)
|
43
50
|
v = ver.split('.')[0]
|
44
51
|
|
45
52
|
unless v =~ /^[0-9]+$/
|
@@ -50,8 +57,8 @@ module GitVersionBump
|
|
50
57
|
return v.to_i
|
51
58
|
end
|
52
59
|
|
53
|
-
def self.minor_version(use_local_git=false)
|
54
|
-
ver = version(use_local_git)
|
60
|
+
def self.minor_version(use_local_git=false, include_lite_tags=false)
|
61
|
+
ver = version(use_local_git, include_lite_tags)
|
55
62
|
v = ver.split('.')[1]
|
56
63
|
|
57
64
|
unless v =~ /^[0-9]+$/
|
@@ -62,8 +69,8 @@ module GitVersionBump
|
|
62
69
|
return v.to_i
|
63
70
|
end
|
64
71
|
|
65
|
-
def self.patch_version(use_local_git=false)
|
66
|
-
ver = version(use_local_git)
|
72
|
+
def self.patch_version(use_local_git=false, include_lite_tags=false)
|
73
|
+
ver = version(use_local_git, include_lite_tags)
|
67
74
|
v = ver.split('.')[2]
|
68
75
|
|
69
76
|
unless v =~ /^[0-9]+$/
|
@@ -74,8 +81,8 @@ module GitVersionBump
|
|
74
81
|
return v.to_i
|
75
82
|
end
|
76
83
|
|
77
|
-
def self.internal_revision(use_local_git=false)
|
78
|
-
version(use_local_git).split('.', 4)[3].to_s
|
84
|
+
def self.internal_revision(use_local_git=false, include_lite_tags=false)
|
85
|
+
version(use_local_git, include_lite_tags).split('.', 4)[3].to_s
|
79
86
|
end
|
80
87
|
|
81
88
|
def self.date(use_local_git=false)
|
@@ -95,11 +102,11 @@ module GitVersionBump
|
|
95
102
|
if $? == 0
|
96
103
|
# Yes, we're in git.
|
97
104
|
|
98
|
-
if dirty_tree?
|
105
|
+
if dirty_tree?(sq_git_dir)
|
99
106
|
return Time.now.strftime("%F")
|
100
107
|
else
|
101
108
|
# Clean tree. Date of last commit is needed.
|
102
|
-
return `git -C #{sq_git_dir} show --no-show-signature --format=format:%cd --date=short`.lines.first
|
109
|
+
return `git -C #{sq_git_dir} show --no-show-signature --format=format:%cd --date=short`.lines.first&.strip
|
103
110
|
end
|
104
111
|
else
|
105
112
|
if use_local_git
|
@@ -117,14 +124,16 @@ module GitVersionBump
|
|
117
124
|
end
|
118
125
|
end
|
119
126
|
|
120
|
-
def self.tag_version(v, release_notes = false)
|
127
|
+
def self.tag_version(v, release_notes = false, include_lite_tags=false)
|
121
128
|
if dirty_tree?
|
122
129
|
puts "You have uncommitted files. Refusing to tag a dirty tree."
|
123
130
|
else
|
124
131
|
if release_notes
|
125
132
|
# We need to find the tag before this one, so we can list all the commits
|
126
133
|
# between the two. This is not a trivial operation.
|
127
|
-
|
134
|
+
git_cmd = "git describe --match='#{VERSION_TAG_GLOB}' --always"
|
135
|
+
git_cmd << ' --tags' if include_lite_tags
|
136
|
+
prev_tag = `#{git_cmd}`.strip.gsub(/-\d+-g[0-9a-f]+$/, '')
|
128
137
|
|
129
138
|
log_file = Tempfile.new('gvb')
|
130
139
|
|
@@ -221,10 +230,13 @@ module GitVersionBump
|
|
221
230
|
# git failed us; either we're not in a git repo or else it's a git
|
222
231
|
# repo that's not got any commits.
|
223
232
|
|
224
|
-
# Are we in a git repo with no
|
225
|
-
#
|
226
|
-
|
227
|
-
|
233
|
+
# Are we in a git repo with no commits? If so, try to use the gemspec
|
234
|
+
# and if that fails then abort
|
235
|
+
begin
|
236
|
+
return gem_version(use_local_git)
|
237
|
+
rescue VersionUnobtainable
|
238
|
+
return "0.0.0.1.ENOCOMMITS"
|
239
|
+
end
|
228
240
|
end
|
229
241
|
|
230
242
|
private
|
@@ -235,11 +247,9 @@ module GitVersionBump
|
|
235
247
|
$? == 0
|
236
248
|
end
|
237
249
|
|
238
|
-
def self.dirty_tree?
|
250
|
+
def self.dirty_tree?(sq_git_dir='.')
|
239
251
|
# Are we in a dirty, dirty tree?
|
240
|
-
system("
|
241
|
-
|
242
|
-
$? == 0
|
252
|
+
!system("git -C #{sq_git_dir} diff --no-ext-diff --quiet --exit-code 2> #{DEVNULL}") || !("git -C #{sq_git_dir} diff-index --cached --quiet HEAD 2> #{DEVNULL}")
|
243
253
|
end
|
244
254
|
|
245
255
|
def self.caller_file
|
@@ -248,8 +258,8 @@ module GitVersionBump
|
|
248
258
|
# instead we need to parse the caller stack ourselves to find which
|
249
259
|
# gem we're trying to version all over.
|
250
260
|
Pathname(
|
251
|
-
|
252
|
-
map
|
261
|
+
caller_locations.
|
262
|
+
map(&:path).
|
253
263
|
find { |l| l != __FILE__ }
|
254
264
|
).realpath.to_s rescue nil
|
255
265
|
end
|
@@ -260,8 +270,16 @@ module GitVersionBump
|
|
260
270
|
# Grovel through all the loaded gems to try and find the gem
|
261
271
|
# that contains the caller's file.
|
262
272
|
Gem.loaded_specs.values.each do |spec|
|
263
|
-
|
264
|
-
|
273
|
+
# On Windows I have encountered gems that already have an absolute
|
274
|
+
# path, verify that the path is relative before appending to it
|
275
|
+
search_dirs = spec.require_paths.map do |path|
|
276
|
+
if Pathname(path).absolute?
|
277
|
+
path
|
278
|
+
else
|
279
|
+
File.join(spec.full_gem_path, path)
|
280
|
+
end
|
281
|
+
end
|
282
|
+
search_dirs << File.join(spec.full_gem_path, spec.bindir)
|
265
283
|
search_dirs.map! do |d|
|
266
284
|
begin
|
267
285
|
Pathname(d).realpath.to_s
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
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.17.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Palmer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-05-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: github-release
|
@@ -102,8 +102,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
102
102
|
- !ruby/object:Gem::Version
|
103
103
|
version: '0'
|
104
104
|
requirements: []
|
105
|
-
|
106
|
-
rubygems_version: 2.7.7
|
105
|
+
rubygems_version: 3.0.3
|
107
106
|
signing_key:
|
108
107
|
specification_version: 4
|
109
108
|
summary: Manage your app version entirely via git tags
|