keep_up 0.10.1 → 0.10.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -1
- data/bin/keep_up +1 -1
- data/lib/keep_up/bundle.rb +12 -25
- data/lib/keep_up/dependency_set.rb +19 -0
- data/lib/keep_up/file_filter.rb +17 -0
- data/lib/keep_up/gemfile_filter.rb +3 -1
- data/lib/keep_up/gemspec_filter.rb +3 -1
- data/lib/keep_up/null_filter.rb +1 -1
- data/lib/keep_up/skip_filter.rb +2 -1
- data/lib/keep_up/updater.rb +13 -8
- data/lib/keep_up/version.rb +1 -1
- metadata +22 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a77e5f8cb4c411d576d9f5fc4953649bcbfff6a5660ed80d3ee6479381009706
|
4
|
+
data.tar.gz: 1d7b27d5487b6fce85a4b5e675ef426909bf79651963e543c958f48bd1256e71
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ca2d2e5f203e28dc17dfb55eea2f4a528415facf18b347e6cf6eeed5555ff926644927b30d05fed1fccc2e79c5392bb2a1cb8111d745d1b830be94bf3f4504cb
|
7
|
+
data.tar.gz: 380256f06a826011bff4f36ed62341687b5e36082a5b652c1f0e955d3c01bc2354c6e64c554a3bc5c495201f4f7e9545980ae6f1266a8a1e477b2b79b50ea42f
|
data/CHANGELOG.md
CHANGED
@@ -1,12 +1,16 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 0.10.2 / 2022-09-23
|
4
|
+
|
5
|
+
* Detect version update even if `bundle update` does not print old version
|
6
|
+
|
3
7
|
## 0.10.1 / 2022-05-20
|
4
8
|
|
5
9
|
* Adjust commit message to match update specificity
|
6
10
|
|
7
11
|
## 0.10.0 / 2022-01-23
|
8
12
|
|
9
|
-
* Drop support for Ruby 2.5
|
13
|
+
* Drop support for Ruby 2.5
|
10
14
|
* Add support for Ruby 3.0 and 3.1
|
11
15
|
* Avoid interrupting half-printed lines when bundle update fails
|
12
16
|
|
data/bin/keep_up
CHANGED
data/lib/keep_up/bundle.rb
CHANGED
@@ -3,6 +3,7 @@
|
|
3
3
|
require_relative "gemfile_filter"
|
4
4
|
require_relative "gemspec_filter"
|
5
5
|
require_relative "dependency"
|
6
|
+
require_relative "dependency_set"
|
6
7
|
|
7
8
|
module KeepUp
|
8
9
|
# A Gemfile with its current set of locked dependencies.
|
@@ -10,7 +11,7 @@ module KeepUp
|
|
10
11
|
OUTDATED_MATCHER =
|
11
12
|
/([^ ]*) \(newest ([^,]*), installed ([^,]*)(?:, requested (.*))?\)/.freeze
|
12
13
|
UPDATE_MATCHER =
|
13
|
-
/(?:Using|Installing|Fetching) ([^ ]*) ([^ ]*)(?: \(was (.*))
|
14
|
+
/(?:Using|Installing|Fetching) ([^ ]*) ([^ ]*)(?: \(was (.*)\))?/.freeze
|
14
15
|
|
15
16
|
def initialize(runner:, local:)
|
16
17
|
@runner = runner
|
@@ -28,33 +29,37 @@ module KeepUp
|
|
28
29
|
end
|
29
30
|
end
|
30
31
|
|
32
|
+
def dependency_set
|
33
|
+
@dependency_set ||= DependencySet.new(dependencies)
|
34
|
+
end
|
35
|
+
|
31
36
|
def check?
|
32
37
|
_, status = @runner.run2 "bundle check"
|
33
38
|
status == 0
|
34
39
|
end
|
35
40
|
|
36
41
|
def update_gemfile_contents(update)
|
37
|
-
update = find_specification_update(
|
42
|
+
update = dependency_set.find_specification_update(update)
|
38
43
|
return unless update
|
39
44
|
|
40
|
-
update if
|
45
|
+
update if GemfileFilter.apply_to_file("Gemfile", update)
|
41
46
|
end
|
42
47
|
|
43
48
|
def update_gemspec_contents(update)
|
44
49
|
return unless gemspec_name
|
45
50
|
|
46
|
-
update = find_specification_update(
|
51
|
+
update = dependency_set.find_specification_update(update)
|
47
52
|
return unless update
|
48
53
|
|
49
|
-
update if
|
54
|
+
update if GemspecFilter.apply_to_file(gemspec_name, update)
|
50
55
|
end
|
51
56
|
|
52
57
|
# Update lockfile and return resulting spec, or false in case of failure
|
53
|
-
def update_lockfile(update)
|
58
|
+
def update_lockfile(update, old_version)
|
54
59
|
update_name = update.name
|
55
60
|
command = "bundle update#{" --local" if @local} --conservative #{update_name}"
|
56
61
|
lines = run_filtered command, UPDATE_MATCHER
|
57
|
-
lines.each do |name, version,
|
62
|
+
lines.each do |name, version, _old_version|
|
58
63
|
next unless name == update_name && old_version
|
59
64
|
|
60
65
|
current = Gem::Specification.new(name, old_version)
|
@@ -103,24 +108,6 @@ module KeepUp
|
|
103
108
|
dep.requirements_list
|
104
109
|
end
|
105
110
|
|
106
|
-
def find_specification_update(current_dependencies, update)
|
107
|
-
current_dependency = current_dependencies.find { |it| it.name == update.name }
|
108
|
-
return if !current_dependency || current_dependency.matches_spec?(update)
|
109
|
-
|
110
|
-
current_dependency.generalize_specification(update)
|
111
|
-
end
|
112
|
-
|
113
|
-
def update_specification_contents(update, file, filter)
|
114
|
-
contents = File.read(file)
|
115
|
-
updated_contents = filter.apply(contents, update)
|
116
|
-
if contents == updated_contents
|
117
|
-
false
|
118
|
-
else
|
119
|
-
File.write file, updated_contents
|
120
|
-
true
|
121
|
-
end
|
122
|
-
end
|
123
|
-
|
124
111
|
def gemspec_name
|
125
112
|
@gemspec_name ||= Dir.glob("*.gemspec").first
|
126
113
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module KeepUp
|
4
|
+
# Set of dependencies with their current locked versions.
|
5
|
+
class DependencySet
|
6
|
+
attr_reader :dependencies
|
7
|
+
|
8
|
+
def initialize(dependencies)
|
9
|
+
@dependencies = dependencies
|
10
|
+
end
|
11
|
+
|
12
|
+
def find_specification_update(update)
|
13
|
+
current_dependency = dependencies.find { |it| it.name == update.name }
|
14
|
+
return if !current_dependency || current_dependency.matches_spec?(update)
|
15
|
+
|
16
|
+
current_dependency.generalize_specification(update)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module KeepUp
|
4
|
+
# Base class for file filters
|
5
|
+
class FileFilter
|
6
|
+
def self.apply_to_file(file, dependency)
|
7
|
+
contents = File.read(file)
|
8
|
+
updated_contents = apply(contents, dependency)
|
9
|
+
if contents == updated_contents
|
10
|
+
false
|
11
|
+
else
|
12
|
+
File.write file, updated_contents
|
13
|
+
true
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -1,8 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require_relative "file_filter"
|
4
|
+
|
3
5
|
module KeepUp
|
4
6
|
# Filter to update dependency information in a Gemfile.
|
5
|
-
|
7
|
+
class GemfileFilter < FileFilter
|
6
8
|
def self.apply(contents, dependency)
|
7
9
|
matcher = dependency_matcher(dependency)
|
8
10
|
contents.each_line.map do |line|
|
@@ -1,8 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require_relative "file_filter"
|
4
|
+
|
3
5
|
module KeepUp
|
4
6
|
# Filter to update dependency information in a Gemspec.
|
5
|
-
|
7
|
+
class GemspecFilter < FileFilter
|
6
8
|
def self.apply(contents, dependency)
|
7
9
|
matcher = dependency_matcher(dependency)
|
8
10
|
contents.each_line.map do |line|
|
data/lib/keep_up/null_filter.rb
CHANGED
data/lib/keep_up/skip_filter.rb
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module KeepUp
|
4
|
-
#
|
4
|
+
# Dependency filter that skips dependencies if their name is on the list of
|
5
|
+
# things to be skipped.
|
5
6
|
class SkipFilter
|
6
7
|
def initialize(skip_list)
|
7
8
|
@skip_list = skip_list
|
data/lib/keep_up/updater.rb
CHANGED
@@ -28,18 +28,21 @@ module KeepUp
|
|
28
28
|
def possible_updates
|
29
29
|
bundle.dependencies
|
30
30
|
.select { |dep| filter.call dep }
|
31
|
-
.
|
31
|
+
.select { |dep| updateable_dependency? dep }.uniq
|
32
32
|
end
|
33
33
|
|
34
34
|
private
|
35
35
|
|
36
36
|
def apply_updated_dependency(dependency)
|
37
37
|
report_intent dependency
|
38
|
-
|
39
|
-
|
38
|
+
|
39
|
+
specification = updated_specification_for(dependency)
|
40
|
+
|
41
|
+
update = bundle.update_gemspec_contents(specification)
|
42
|
+
update2 = bundle.update_gemfile_contents(specification)
|
40
43
|
update ||= update2
|
41
|
-
result = bundle.update_lockfile(dependency)
|
42
|
-
report_result
|
44
|
+
result = bundle.update_lockfile(specification, dependency.locked_version)
|
45
|
+
report_result specification, result
|
43
46
|
update || result if result
|
44
47
|
end
|
45
48
|
|
@@ -55,12 +58,14 @@ module KeepUp
|
|
55
58
|
end
|
56
59
|
end
|
57
60
|
|
58
|
-
def
|
61
|
+
def updateable_dependency?(dependency)
|
59
62
|
locked_version = dependency.locked_version
|
60
63
|
newest_version = dependency.newest_version
|
61
|
-
|
64
|
+
newest_version > locked_version
|
65
|
+
end
|
62
66
|
|
63
|
-
|
67
|
+
def updated_specification_for(dependency)
|
68
|
+
Gem::Specification.new(dependency.name, dependency.newest_version)
|
64
69
|
end
|
65
70
|
end
|
66
71
|
end
|
data/lib/keep_up/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: keep_up
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.10.
|
4
|
+
version: 0.10.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matijs van Zuijlen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-09-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -50,14 +50,14 @@ dependencies:
|
|
50
50
|
requirements:
|
51
51
|
- - "~>"
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version: '
|
53
|
+
version: '8.0'
|
54
54
|
type: :development
|
55
55
|
prerelease: false
|
56
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
57
|
requirements:
|
58
58
|
- - "~>"
|
59
59
|
- !ruby/object:Gem::Version
|
60
|
-
version: '
|
60
|
+
version: '8.0'
|
61
61
|
- !ruby/object:Gem::Dependency
|
62
62
|
name: rake
|
63
63
|
requirement: !ruby/object:Gem::Requirement
|
@@ -106,14 +106,28 @@ dependencies:
|
|
106
106
|
requirements:
|
107
107
|
- - "~>"
|
108
108
|
- !ruby/object:Gem::Version
|
109
|
-
version: '1.
|
109
|
+
version: '1.32'
|
110
110
|
type: :development
|
111
111
|
prerelease: false
|
112
112
|
version_requirements: !ruby/object:Gem::Requirement
|
113
113
|
requirements:
|
114
114
|
- - "~>"
|
115
115
|
- !ruby/object:Gem::Version
|
116
|
-
version: '1.
|
116
|
+
version: '1.32'
|
117
|
+
- !ruby/object:Gem::Dependency
|
118
|
+
name: rubocop-packaging
|
119
|
+
requirement: !ruby/object:Gem::Requirement
|
120
|
+
requirements:
|
121
|
+
- - "~>"
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: 0.5.1
|
124
|
+
type: :development
|
125
|
+
prerelease: false
|
126
|
+
version_requirements: !ruby/object:Gem::Requirement
|
127
|
+
requirements:
|
128
|
+
- - "~>"
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
version: 0.5.1
|
117
131
|
- !ruby/object:Gem::Dependency
|
118
132
|
name: rubocop-performance
|
119
133
|
requirement: !ruby/object:Gem::Requirement
|
@@ -174,6 +188,8 @@ files:
|
|
174
188
|
- lib/keep_up/application.rb
|
175
189
|
- lib/keep_up/bundle.rb
|
176
190
|
- lib/keep_up/dependency.rb
|
191
|
+
- lib/keep_up/dependency_set.rb
|
192
|
+
- lib/keep_up/file_filter.rb
|
177
193
|
- lib/keep_up/gemfile_filter.rb
|
178
194
|
- lib/keep_up/gemspec_filter.rb
|
179
195
|
- lib/keep_up/null_filter.rb
|