git-version-bump 0.14.0 → 0.17.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 837dc82b6ee0a0b96af85d279801fc5a5e59e459
4
- data.tar.gz: 5d93a51479c3701e104fb02a006305cebeac8f17
2
+ SHA256:
3
+ metadata.gz: '084e552015ea8de36e92598ea4ec4de57916b0cdf0ba9ee8c8ff7974da9df8ff'
4
+ data.tar.gz: e361b6214097aa2e9cf4a30e993cb4ad9dc9c5f3283ae6d39d219e28f684f8fb
5
5
  SHA512:
6
- metadata.gz: dc025408b232aa2c39b8b9dea02a1c51e1155fe2a2543bd5a18e0b0b957c4cfc428134725de8c27f096e41b34365d7d6c2189ae4dd76810d53ce5a73a025bd15
7
- data.tar.gz: 61b58d5d4134bf8d1e57f3c8396ff2d1a8b0e049210c4eff2599195eacce6c56b2cf7aaef6d4d6e3225ac4faa86487867338140fb7dce3af95a27110436e52e7
6
+ metadata.gz: 4e168a05d6349ecc3b69bf09eff3d1ddd28253dde4c69b4ee007257de73af6a7b195dc9e1186d7fca9106dfa40c88680f02139fcc808fb5a2906e8da3b09c534
7
+ data.tar.gz: 4e295c50077e23342b48c4a9dbfad2a356be4c0d33a5489f365812309c1fa90cd45b3c50197f8ab94b5a8b9fc70aa0771363ed933ffb44e4bee3cbd85b2a7457
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
 
@@ -4,10 +4,11 @@ require 'git-version-bump'
4
4
 
5
5
  if ARGV[0].nil? or
6
6
  ARGV[0].empty? or
7
+ (ARGV.length == 1 && (ARGV[0] == "-d" || ARGV[0] == "--dry-run")) or
7
8
  ARGV[0] == '-h' or
8
9
  ARGV[0] == '--help'
9
10
  $stderr.puts <<-EOF.gsub(/^\t\t/, '')
10
- Usage: git version-bump [-n|--notes] <major|minor|patch|show>
11
+ Usage: git version-bump [-n|--notes] [-d|--dry-run] <major|minor|patch|show>
11
12
 
12
13
  'major': x.y.z -> x+1.0.0
13
14
  'minor': x.y.z -> x.y+1.0
@@ -15,11 +16,15 @@ if ARGV[0].nil? or
15
16
 
16
17
  'show': Display the current GVB version
17
18
 
18
- --release: Prompt for "release notes" to add to the release tag
19
+ -d, --dry-run: Calculate and return the bump value, but don't update git workspace or remote
20
+ -n, --notes: Prompt for "release notes" to add to the release tag
21
+ -l, --lite-tags: Include non-annotated git tags
19
22
  EOF
20
23
  end
21
24
 
22
25
  release_notes = ARGV.delete('-n') || ARGV.delete('--notes')
26
+ dry_run = ARGV.delete('-d') || ARGV.delete('--dry-run')
27
+ lite_tags = ARGV.delete('-l') || ARGV.delete('--lite-tags')
23
28
 
24
29
  if ARGV[0].nil? or ARGV[0].empty?
25
30
  exit 1
@@ -27,13 +32,13 @@ elsif ARGV[0] == '-h' or ARGV[0] == '--help'
27
32
  exit 0
28
33
  end
29
34
 
30
- case ARGV[0].downcase
35
+ result = case ARGV[0].downcase
31
36
  when /^maj?o?r?$/
32
- GVB.tag_version "#{GVB.major_version(true) + 1}.0.0", release_notes
37
+ "#{GVB.major_version(true) + 1}.0.0"
33
38
  when /^min?o?r?$/
34
- GVB.tag_version "#{GVB.major_version(true)}.#{GVB.minor_version(true)+1}.0", release_notes
39
+ "#{GVB.major_version(true)}.#{GVB.minor_version(true)+1}.0"
35
40
  when /^pa?t?c?h?$/
36
- GVB.tag_version "#{GVB.major_version(true)}.#{GVB.minor_version(true)}.#{GVB.patch_version(true)+1}", release_notes
41
+ "#{GVB.major_version(true)}.#{GVB.minor_version(true)}.#{GVB.patch_version(true)+1}"
37
42
  when /^sh?o?w?$/
38
43
  puts GVB.version(true)
39
44
  exit 0
@@ -42,4 +47,9 @@ case ARGV[0].downcase
42
47
  exit 1
43
48
  end
44
49
 
45
- puts "Version is now #{GVB.version(true)}."
50
+ if dry_run
51
+ puts result
52
+ else
53
+ GVB.tag_version result, release_notes, lite_tags
54
+ puts "Version is now #{GVB.version(true)}."
55
+ end
@@ -1,4 +1,6 @@
1
- require File.expand_path('../lib/git-version-bump', __FILE__)
1
+ lib = File.expand_path('../lib', __FILE__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+ require 'git-version-bump'
2
4
 
3
5
  Gem::Specification.new do |s|
4
6
  s.name = "git-version-bump"
@@ -6,7 +8,8 @@ Gem::Specification.new do |s|
6
8
  s.version = GVB.version
7
9
  s.date = GVB.date
8
10
 
9
- s.platform = Gem::Platform::RUBY
11
+ s.platform = Gem::Platform::RUBY
12
+ s.required_ruby_version = ">= 2.1.0"
10
13
 
11
14
  s.homepage = "http://theshed.hezmatt.org/git-version-bump"
12
15
  s.summary = "Manage your app version entirely via git tags"
@@ -5,20 +5,26 @@ require 'pathname'
5
5
  module GitVersionBump
6
6
  class VersionUnobtainable < StandardError; end
7
7
 
8
- def self.version(use_local_git=false)
8
+ VERSION_TAG_GLOB = 'v[0-9]*.[0-9]*.*[0-9]'
9
+
10
+ DEVNULL = Gem.win_platform? ? "NUL" : "/dev/null"
11
+
12
+ def self.version(use_local_git=false, include_lite_tags=false)
9
13
  if use_local_git
10
14
  unless git_available?
11
15
  raise RuntimeError,
12
16
  "GVB.version(use_local_git=true) called, but git isn't installed"
13
17
  end
14
18
 
15
- sq_git_dir = "'#{Dir.pwd.gsub("'", "'\\''")}'"
19
+ sq_git_dir = shell_quoted_string(Dir.pwd)
16
20
  else
17
- # Shell Quoted, for your convenience
18
- sq_git_dir = "'" + (File.dirname(caller_file) rescue nil || Dir.pwd).gsub("'", "'\\''") + "'"
21
+ sq_git_dir = shell_quoted_string((File.dirname(caller_file) rescue nil || Dir.pwd))
19
22
  end
20
23
 
21
- git_ver = `git -C #{sq_git_dir} describe --dirty='.1.dirty.#{Time.now.strftime("%Y%m%d.%H%M%S")}' --match='v[0-9]*.[0-9]*.*[0-9]' 2>/dev/null`.
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}`.
22
28
  strip.
23
29
  gsub(/^v/, '').
24
30
  gsub('-', '.')
@@ -30,15 +36,17 @@ module GitVersionBump
30
36
  # git failed us; we're either not in a git repo or else we've never
31
37
  # tagged anything before.
32
38
 
33
- # Are we in a git repo with no tags? If so, dump out our
34
- # super-special version and be done with it, otherwise try to use the
35
- # gem version.
36
- system("git -C #{sq_git_dir} status >/dev/null 2>&1")
37
- "0.0.0.1.ENOTAG" if $? == 0 ? "0.0.0.1.ENOTAG" : gem_version(use_local_git)
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
38
46
  end
39
47
 
40
- def self.major_version(use_local_git=false)
41
- 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)
42
50
  v = ver.split('.')[0]
43
51
 
44
52
  unless v =~ /^[0-9]+$/
@@ -49,8 +57,8 @@ module GitVersionBump
49
57
  return v.to_i
50
58
  end
51
59
 
52
- def self.minor_version(use_local_git=false)
53
- 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)
54
62
  v = ver.split('.')[1]
55
63
 
56
64
  unless v =~ /^[0-9]+$/
@@ -61,8 +69,8 @@ module GitVersionBump
61
69
  return v.to_i
62
70
  end
63
71
 
64
- def self.patch_version(use_local_git=false)
65
- 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)
66
74
  v = ver.split('.')[2]
67
75
 
68
76
  unless v =~ /^[0-9]+$/
@@ -73,8 +81,8 @@ module GitVersionBump
73
81
  return v.to_i
74
82
  end
75
83
 
76
- def self.internal_revision(use_local_git=false)
77
- 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
78
86
  end
79
87
 
80
88
  def self.date(use_local_git=false)
@@ -84,22 +92,21 @@ module GitVersionBump
84
92
  "GVB.date(use_local_git=true), but git is not installed"
85
93
  end
86
94
 
87
- sq_git_dir = "'#{Dir.pwd.gsub("'", "'\\''")}'"
95
+ sq_git_dir = shell_quoted_string(Dir.pwd)
88
96
  else
89
- # Shell Quoted, for your convenience
90
- sq_git_dir = "'" + (File.dirname(caller_file) rescue nil || Dir.pwd).gsub("'", "'\\''") + "'"
97
+ sq_git_dir = shell_quoted_string((File.dirname(caller_file) rescue nil || Dir.pwd))
91
98
  end
92
99
 
93
100
  # Are we in a git tree?
94
- system("git -C #{sq_git_dir} status >/dev/null 2>&1")
101
+ system("git -C #{sq_git_dir} status > #{DEVNULL} 2>&1")
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 --format=format:%ad --date=short | head -n 1`.strip
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
- prev_tag = `git describe --always`.strip.gsub(/-\d+-g[0-9a-f]+$/, '')
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
 
@@ -139,7 +148,7 @@ module GitVersionBump
139
148
  EOF
140
149
 
141
150
  log_file.close
142
- system("git log --format='# %h %s' #{prev_tag}..HEAD >>#{log_file.path}")
151
+ system("git log --no-show-signature --format='# %h %s' #{prev_tag}..HEAD >>#{log_file.path}")
143
152
 
144
153
  pre_hash = Digest::SHA1.hexdigest(File.read(log_file.path))
145
154
  system("git config -e -f #{log_file.path}")
@@ -157,8 +166,8 @@ module GitVersionBump
157
166
  system("git tag -a -m 'Version v#{v}' v#{v}")
158
167
  end
159
168
 
160
- system("git push >/dev/null 2>&1")
161
- system("git push --tags >/dev/null 2>&1")
169
+ system("git push > #{DEVNULL} 2>&1")
170
+ system("git push --tags > #{DEVNULL} 2>&1")
162
171
  end
163
172
  end
164
173
 
@@ -196,10 +205,9 @@ module GitVersionBump
196
205
  "GVB.commit_date_version(use_local_git=true) called, but git isn't installed"
197
206
  end
198
207
 
199
- sq_git_dir = "'#{Dir.pwd.gsub("'", "'\\''")}'"
208
+ sq_git_dir = shell_quoted_string(Dir.pwd)
200
209
  else
201
- # Shell Quoted, for your convenience
202
- sq_git_dir = "'" + (File.dirname(caller_file) rescue nil || Dir.pwd).gsub("'", "'\\''") + "'"
210
+ sq_git_dir = shell_quoted_string((File.dirname(caller_file) rescue nil || Dir.pwd))
203
211
  end
204
212
 
205
213
  commit_dates = `git -C #{sq_git_dir} log --format=%at`.
@@ -222,25 +230,26 @@ module GitVersionBump
222
230
  # git failed us; either we're not in a git repo or else it's a git
223
231
  # repo that's not got any commits.
224
232
 
225
- # Are we in a git repo with no tags? If so, dump out our
226
- # super-special version and be done with it.
227
- system("git -C #{sq_git_dir} status >/dev/null 2>&1")
228
- $? == 0 ? "0.0.0.1.ENOCOMMITS" : gem_version(use_local_git)
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
229
240
  end
230
241
 
231
242
  private
232
243
 
233
244
  def self.git_available?
234
- system("git --version >/dev/null 2>&1")
245
+ system("git --version > #{DEVNULL} 2>&1")
235
246
 
236
247
  $? == 0
237
248
  end
238
249
 
239
- def self.dirty_tree?
250
+ def self.dirty_tree?(sq_git_dir='.')
240
251
  # Are we in a dirty, dirty tree?
241
- system("! git diff --no-ext-diff --quiet --exit-code 2>/dev/null || ! git diff-index --cached --quiet HEAD 2>/dev/null")
242
-
243
- $? == 0
252
+ ! `git -C #{sq_git_dir} status --porcelain 2> #{DEVNULL}`.empty?
244
253
  end
245
254
 
246
255
  def self.caller_file
@@ -249,8 +258,8 @@ module GitVersionBump
249
258
  # instead we need to parse the caller stack ourselves to find which
250
259
  # gem we're trying to version all over.
251
260
  Pathname(
252
- caller.
253
- map { |l| l.split(':')[0] }.
261
+ caller_locations.
262
+ map(&:path).
254
263
  find { |l| l != __FILE__ }
255
264
  ).realpath.to_s rescue nil
256
265
  end
@@ -261,8 +270,16 @@ module GitVersionBump
261
270
  # Grovel through all the loaded gems to try and find the gem
262
271
  # that contains the caller's file.
263
272
  Gem.loaded_specs.values.each do |spec|
264
- search_dirs = spec.require_paths.map { |d| "#{spec.full_gem_path}/#{d}" } +
265
- [spec.bin_dir]
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)
266
283
  search_dirs.map! do |d|
267
284
  begin
268
285
  Pathname(d).realpath.to_s
@@ -301,6 +318,18 @@ module GitVersionBump
301
318
  end
302
319
  end
303
320
  end
321
+
322
+ def self.shell_quoted_string(dir_string)
323
+ if Gem.win_platform?
324
+ return "\"#{dir_string}\""
325
+ else
326
+ # Shell Quoted, for your convenience
327
+ return "'#{dir_string.gsub("'", "'\\''")}'"
328
+ end
329
+ end
330
+
331
+ private_class_method :shell_quoted_string
332
+
304
333
  end
305
334
 
306
335
  GVB = GitVersionBump unless defined? GVB
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.14.0
4
+ version: 0.17.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Palmer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-13 00:00:00.000000000 Z
11
+ date: 2020-07-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: github-release
@@ -95,17 +95,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
95
95
  requirements:
96
96
  - - ">="
97
97
  - !ruby/object:Gem::Version
98
- version: '0'
98
+ version: 2.1.0
99
99
  required_rubygems_version: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - ">="
102
102
  - !ruby/object:Gem::Version
103
103
  version: '0'
104
104
  requirements: []
105
- rubyforge_project:
106
- rubygems_version: 2.2.2
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
110
109
  test_files: []
111
- has_rdoc: