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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 97d3f75d5a76fc8ce0a3d1c0c9d93df3d7d1f7790108b7166012c12e83eb824a
4
- data.tar.gz: 850cd7426571713d51c058b068a31c9abd72de6713bdbdd721baf596d9363d6c
3
+ metadata.gz: a77e5f8cb4c411d576d9f5fc4953649bcbfff6a5660ed80d3ee6479381009706
4
+ data.tar.gz: 1d7b27d5487b6fce85a4b5e675ef426909bf79651963e543c958f48bd1256e71
5
5
  SHA512:
6
- metadata.gz: '049e14f64bd4dd799dcabac41e0141fb682f81b6a933817f182d1b07c9365f38da42fa0c2dd4a79a1e19512420cb29fa81325030e4d149538198b9c447dcb344'
7
- data.tar.gz: 41bd81924f216a3957bdaf627ebe4cf3f878e7668b953af977b6467cc272ff5ff8203b9f60748febb4cda97ef42cc4613d47a584ead02d899bd30d36bbd59bbc
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 and 2.6
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
@@ -2,7 +2,7 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  require "optparse"
5
- require_relative "../lib/keep_up"
5
+ require "keep_up"
6
6
 
7
7
  options = {
8
8
  local: false,
@@ -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 (.*))?\)/.freeze
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(dependencies, update)
42
+ update = dependency_set.find_specification_update(update)
38
43
  return unless update
39
44
 
40
- update if update_specification_contents(update, "Gemfile", GemfileFilter)
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(dependencies, update)
51
+ update = dependency_set.find_specification_update(update)
47
52
  return unless update
48
53
 
49
- update if update_specification_contents(update, gemspec_name, GemspecFilter)
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, old_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
- module GemfileFilter
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
- module GemspecFilter
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|
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module KeepUp
4
- # Simple filter that acccepts everything.
4
+ # Simple dependency filter that acccepts everything.
5
5
  class NullFilter
6
6
  def call(_dep)
7
7
  true
@@ -1,7 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module KeepUp
4
- # Filter that skips dependencies if their name is on the list of things to be skipped.
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
@@ -28,18 +28,21 @@ module KeepUp
28
28
  def possible_updates
29
29
  bundle.dependencies
30
30
  .select { |dep| filter.call dep }
31
- .map { |dep| updated_dependency_for dep }.compact.uniq
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
- update = bundle.update_gemspec_contents(dependency)
39
- update2 = bundle.update_gemfile_contents(dependency)
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 dependency, 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 updated_dependency_for(dependency)
61
+ def updateable_dependency?(dependency)
59
62
  locked_version = dependency.locked_version
60
63
  newest_version = dependency.newest_version
61
- return unless newest_version > locked_version
64
+ newest_version > locked_version
65
+ end
62
66
 
63
- Gem::Specification.new(dependency.name, newest_version)
67
+ def updated_specification_for(dependency)
68
+ Gem::Specification.new(dependency.name, dependency.newest_version)
64
69
  end
65
70
  end
66
71
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module KeepUp
4
- VERSION = "0.10.1"
4
+ VERSION = "0.10.2"
5
5
  end
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.1
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-05-20 00:00:00.000000000 Z
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: '7.0'
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: '7.0'
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.25'
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.25'
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