bunup 0.1.0 → 0.2.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/CHANGELOG.md +12 -0
- data/README.md +2 -1
- data/bunup.gemspec +1 -1
- data/lib/bunup/cli.rb +29 -7
- data/lib/bunup/gem.rb +8 -8
- data/lib/bunup/options.rb +19 -4
- data/lib/bunup/services/validate_git_version.rb +21 -0
- data/lib/bunup/values/version.rb +37 -0
- data/lib/bunup/version.rb +1 -1
- metadata +14 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e535e339b0b9521d91a170655c46a6384f459b8f101f07444ad060ae57994dfb
|
4
|
+
data.tar.gz: 3aba273f29f740dc3ed9a4dd9473164488929a51c01ffe90a68a3b3915bc768c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: de8b290a7438ea3b8aa5d3b92c1e37cd44adb7972f67527cc583f19baa101980ab5824bffd1bc6b9cd5c8bcd83bdd0639d4935c21312b939bbe2d9aed0d84df5
|
7
|
+
data.tar.gz: 73d30288f035f24eaeb43dcedb7e9f23c8f3805fb440c425b80b4b001a08a2489b11c0aa9e0331718963a537cd28cb1971d0064a49c0aa7923592617d5a280ac
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
# Changelog
|
2
|
+
All notable changes to this project will be documented in this file.
|
3
|
+
|
4
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
5
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
6
|
+
|
7
|
+
## Unreleased
|
8
|
+
|
9
|
+
## [0.2.0](https://github.com/singlebrook/bunup/releases/tag/v0.2.0)
|
10
|
+
|
11
|
+
- Support Bundler 2
|
12
|
+
- Support gems installed from git sources
|
data/README.md
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
|
2
2
|
[](https://travis-ci.org/singlebrook/bunup)
|
3
|
+

|
3
4
|
|
4
5
|
# Bunup
|
5
6
|
|
@@ -44,7 +45,7 @@ bunup rake rubocop
|
|
44
45
|
### Options
|
45
46
|
|
46
47
|
* `--all`: Update all outdated gems. This is the default.
|
47
|
-
* `-y` `--yes` `--assume-yes`: Answer "yes" to major version update prompts and run non-interactively
|
48
|
+
* `-y` `--yes` `--assume-yes [major, git]`: Answer "yes" to major version or git version update prompts and run non-interactively. Defaults to all.
|
48
49
|
|
49
50
|
## Development
|
50
51
|
|
data/bunup.gemspec
CHANGED
@@ -24,7 +24,7 @@ Gem::Specification.new do |spec|
|
|
24
24
|
spec.require_paths = ['lib']
|
25
25
|
spec.required_ruby_version = '>= 2.1'
|
26
26
|
|
27
|
-
spec.add_development_dependency 'bundler', '
|
27
|
+
spec.add_development_dependency 'bundler', '>= 1.16', '< 2.1'
|
28
28
|
spec.add_development_dependency 'byebug', '~> 9.0'
|
29
29
|
spec.add_development_dependency 'rake', '~> 10.0'
|
30
30
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
data/lib/bunup/cli.rb
CHANGED
@@ -5,6 +5,10 @@ module Bunup
|
|
5
5
|
E_DIRTY_GEMFILE = 'Gemfile and/or Gemfile.lock has changes that would ' \
|
6
6
|
'be overwritten. Please stash or commit your changes before running ' \
|
7
7
|
'bunup.'.freeze
|
8
|
+
GIT_REF_UPDATE_WARNING = 'WARNING: %<gem_name>s is installed from a git ' \
|
9
|
+
'repo and is being updated from %<installed_version>s to ' \
|
10
|
+
'%<newest_version>s. This update could include breaking changes. ' \
|
11
|
+
'Continue? [y/N] '.freeze
|
8
12
|
MAJOR_VERSION_UPDATE_WARNING_FMT = 'WARNING: %<gem_name>s is being ' \
|
9
13
|
'updated from %<installed_version>s to %<newest_version>s. This is ' \
|
10
14
|
'a major version update with possible breaking changes. ' \
|
@@ -36,12 +40,12 @@ module Bunup
|
|
36
40
|
end
|
37
41
|
|
38
42
|
def build_gems
|
39
|
-
bundle_outdated.split("\n").map do |line|
|
43
|
+
bundle_outdated.split("\n").map.with_object([]) do |line, gems|
|
40
44
|
next unless Bundler::OUTDATED_PATTERN =~ line
|
41
45
|
|
42
46
|
match_data = Bundler::OUTDATED_PATTERN.match(line)
|
43
|
-
build_gem(match_data)
|
44
|
-
end
|
47
|
+
gems << build_gem(match_data)
|
48
|
+
end
|
45
49
|
end
|
46
50
|
|
47
51
|
def bundle_outdated
|
@@ -76,9 +80,26 @@ module Bunup
|
|
76
80
|
def major_version_update?
|
77
81
|
return false if @gem.newest_version.nil? || @gem.installed_version.nil?
|
78
82
|
|
79
|
-
|
80
|
-
|
81
|
-
|
83
|
+
@gem.newest_version.major > @gem.installed_version.major
|
84
|
+
end
|
85
|
+
|
86
|
+
# A major version update has breaking changes, according to Semantic
|
87
|
+
# Versioning (https://semver.org/spec/v2.0.0.html). Let's make sure the
|
88
|
+
# user is aware of that.
|
89
|
+
def prompt_for_git_ref_update
|
90
|
+
print format(
|
91
|
+
GIT_REF_UPDATE_WARNING,
|
92
|
+
gem_name: @gem.name,
|
93
|
+
installed_version: @gem.installed_version,
|
94
|
+
newest_version: @gem.newest_version
|
95
|
+
)
|
96
|
+
if @options[:assume_yes_for_git_update]
|
97
|
+
print "assuming yes\n"
|
98
|
+
else
|
99
|
+
unless STDIN.gets.chomp.casecmp('y').zero?
|
100
|
+
raise ::SystemExit.new(true, 'No update performed')
|
101
|
+
end
|
102
|
+
end
|
82
103
|
end
|
83
104
|
|
84
105
|
# A major version update has breaking changes, according to Semantic
|
@@ -91,7 +112,7 @@ module Bunup
|
|
91
112
|
installed_version: @gem.installed_version,
|
92
113
|
newest_version: @gem.newest_version
|
93
114
|
)
|
94
|
-
if @options
|
115
|
+
if @options[:assume_yes_for_major_version_update]
|
95
116
|
print "assuming yes\n"
|
96
117
|
else
|
97
118
|
unless STDIN.gets.chomp.casecmp('y').zero?
|
@@ -116,6 +137,7 @@ module Bunup
|
|
116
137
|
@gem = gem
|
117
138
|
begin
|
118
139
|
prompt_for_major_update if major_version_update?
|
140
|
+
prompt_for_git_ref_update if @gem.installed_from_git?
|
119
141
|
update
|
120
142
|
commit
|
121
143
|
rescue ::SystemExit => e
|
data/lib/bunup/gem.rb
CHANGED
@@ -14,19 +14,23 @@ module Bunup
|
|
14
14
|
|
15
15
|
def initialize(name: nil, installed_version: nil, newest_version: nil)
|
16
16
|
@name = name
|
17
|
-
@installed_version = installed_version
|
18
|
-
@newest_version = newest_version
|
17
|
+
@installed_version = Values::Version.new(installed_version)
|
18
|
+
@newest_version = Values::Version.new(newest_version)
|
19
19
|
validate
|
20
20
|
end
|
21
21
|
|
22
|
+
def installed_from_git?
|
23
|
+
installed_version.from_git? || newest_version.from_git?
|
24
|
+
end
|
25
|
+
|
22
26
|
private
|
23
27
|
|
24
28
|
def validate
|
25
29
|
abort "Invalid gem name: #{name}" unless valid_name?
|
26
|
-
unless
|
30
|
+
unless installed_version.valid?
|
27
31
|
abort "Invalid version for #{name}: #{installed_version}"
|
28
32
|
end
|
29
|
-
unless
|
33
|
+
unless newest_version.valid?
|
30
34
|
abort "Invalid version for #{name}: #{newest_version}"
|
31
35
|
end
|
32
36
|
end
|
@@ -34,9 +38,5 @@ module Bunup
|
|
34
38
|
def valid_name?
|
35
39
|
name =~ NAME_PATTERN
|
36
40
|
end
|
37
|
-
|
38
|
-
def valid_version?(version_string)
|
39
|
-
::Gem::Version.correct?(version_string)
|
40
|
-
end
|
41
41
|
end
|
42
42
|
end
|
data/lib/bunup/options.rb
CHANGED
@@ -16,10 +16,25 @@ module Bunup
|
|
16
16
|
options.all = true
|
17
17
|
end
|
18
18
|
|
19
|
-
assume_yes_msg = 'Answer "yes" to major version update
|
20
|
-
'and run non-interactively'
|
21
|
-
opts.on(
|
22
|
-
|
19
|
+
assume_yes_msg = 'Answer "yes" to all major or git version update ' \
|
20
|
+
'prompts, or all, and run non-interactively. Defaults to all.'
|
21
|
+
opts.on(
|
22
|
+
'-y', '--yes', '--assume-yes [major, git]',
|
23
|
+
Array,
|
24
|
+
assume_yes_msg
|
25
|
+
) do |list|
|
26
|
+
if list.nil?
|
27
|
+
options[:assume_yes_for_major_version_update] = true
|
28
|
+
options[:assume_yes_for_git_update] = true
|
29
|
+
else
|
30
|
+
list.each do |version_type|
|
31
|
+
case version_type.strip
|
32
|
+
when 'major'
|
33
|
+
then options[:assume_yes_for_major_version_update] = true
|
34
|
+
when 'git' then options[:assume_yes_for_git_update] = true
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
23
38
|
end
|
24
39
|
|
25
40
|
opts.on('-h', '--help', 'Prints this help') do
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Bunup
|
2
|
+
module Services
|
3
|
+
# Validate that version of gem installed from a git source is valid
|
4
|
+
class ValidateGitVersion
|
5
|
+
# https://stackoverflow.com/questions/468370/a-regex-to-match-a-sha1#468378
|
6
|
+
SHA_REGEX = /\b[0-9a-f]{5,40}\b/.freeze
|
7
|
+
|
8
|
+
def initialize(version_string)
|
9
|
+
@version_string = version_string
|
10
|
+
end
|
11
|
+
|
12
|
+
def perform
|
13
|
+
version, sha = @version_string.split(' ')
|
14
|
+
return false if sha.nil?
|
15
|
+
|
16
|
+
::Gem::Version.correct?(version) &&
|
17
|
+
sha.match?(SHA_REGEX)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Bunup
|
2
|
+
module Values
|
3
|
+
# Parse and handle version strings
|
4
|
+
class Version
|
5
|
+
def initialize(version_string)
|
6
|
+
@version_string = version_string
|
7
|
+
end
|
8
|
+
|
9
|
+
def to_s
|
10
|
+
@version_string
|
11
|
+
end
|
12
|
+
|
13
|
+
def major
|
14
|
+
if from_git?
|
15
|
+
# '6.0.0.rc2 b6f1d19' => 6
|
16
|
+
@version_string.split(' ')[0].split('.')[0].to_i
|
17
|
+
else
|
18
|
+
# '6.0.0.rc2' => 6
|
19
|
+
@version_string.split('.')[0].to_i
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def from_git?
|
24
|
+
Services::ValidateGitVersion.new(@version_string).perform
|
25
|
+
end
|
26
|
+
|
27
|
+
def nil?
|
28
|
+
@version_string == '' || @version_string.nil?
|
29
|
+
end
|
30
|
+
|
31
|
+
def valid?
|
32
|
+
::Gem::Version.correct?(@version_string) ||
|
33
|
+
Services::ValidateGitVersion.new(@version_string).perform
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
data/lib/bunup/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bunup
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jared Beck
|
@@ -10,22 +10,28 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: exe
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2019-09-13 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: bundler
|
17
17
|
requirement: !ruby/object:Gem::Requirement
|
18
18
|
requirements:
|
19
|
-
- - "
|
19
|
+
- - ">="
|
20
20
|
- !ruby/object:Gem::Version
|
21
21
|
version: '1.16'
|
22
|
+
- - "<"
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: '2.1'
|
22
25
|
type: :development
|
23
26
|
prerelease: false
|
24
27
|
version_requirements: !ruby/object:Gem::Requirement
|
25
28
|
requirements:
|
26
|
-
- - "
|
29
|
+
- - ">="
|
27
30
|
- !ruby/object:Gem::Version
|
28
31
|
version: '1.16'
|
32
|
+
- - "<"
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '2.1'
|
29
35
|
- !ruby/object:Gem::Dependency
|
30
36
|
name: byebug
|
31
37
|
requirement: !ruby/object:Gem::Requirement
|
@@ -109,6 +115,7 @@ files:
|
|
109
115
|
- ".gitignore"
|
110
116
|
- ".rubocop.yml"
|
111
117
|
- ".travis.yml"
|
118
|
+
- CHANGELOG.md
|
112
119
|
- CODE_OF_CONDUCT.md
|
113
120
|
- Gemfile
|
114
121
|
- LICENSE.txt
|
@@ -125,6 +132,8 @@ files:
|
|
125
132
|
- lib/bunup/options.rb
|
126
133
|
- lib/bunup/services/commiter.rb
|
127
134
|
- lib/bunup/services/updater.rb
|
135
|
+
- lib/bunup/services/validate_git_version.rb
|
136
|
+
- lib/bunup/values/version.rb
|
128
137
|
- lib/bunup/version.rb
|
129
138
|
homepage: https://github.com/singlebrook/bunup
|
130
139
|
licenses:
|
@@ -145,8 +154,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
145
154
|
- !ruby/object:Gem::Version
|
146
155
|
version: '0'
|
147
156
|
requirements: []
|
148
|
-
|
149
|
-
rubygems_version: 2.7.6
|
157
|
+
rubygems_version: 3.0.3
|
150
158
|
signing_key:
|
151
159
|
specification_version: 4
|
152
160
|
summary: Bundle update and commit to git with one command
|