drg 0.8.1 → 0.9.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 +2 -13
- data/lib/drg/tasks/progressive_pinner.rb +16 -27
- data/lib/drg/tasks/updater.rb +4 -48
- data/lib/drg/version.rb +1 -1
- data/lib/tasks/drg.rake +5 -5
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5ece4e76fe57c0056130e3a1809bd13b200ad294
|
4
|
+
data.tar.gz: 943bbc7a72cf482778304b1eeeedaf5f0efad396
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1ad6230949e7d2e883c6203732a92d0a74cd19143bb5a89bac327afc591b1673ede60db4a24e5b9cbb27fbd47385c5f3fcdb79a107cd42318113babf7c10d7ba
|
7
|
+
data.tar.gz: 669c61428c0ef3b0f8206b29520b45523e023010e4d32ae0e525a96724794eaa10ea06e2bbc0a67a97e6a2e8724967801eec114b805a1924e39b992ce1f9dba7
|
data/README.md
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
[](http://badge.fury.io/rb/drg)
|
4
4
|
|
5
5
|
A Ruby utility to help automate dependency management using Bundler. You can pin Gem versions to the current or the next
|
6
|
-
available level.
|
6
|
+
available level.
|
7
7
|
|
8
8
|
## Requirements
|
9
9
|
|
@@ -20,27 +20,16 @@ gem 'drg'
|
|
20
20
|
## Tasks
|
21
21
|
|
22
22
|
```bash
|
23
|
-
rake drg:update
|
24
23
|
rake drg:pin
|
25
24
|
rake drg:pin:major
|
26
25
|
rake drg:pin:minor
|
27
26
|
rake drg:pin:patch
|
27
|
+
rake drg:pin:latest
|
28
28
|
rake drg:pin:patch_latest
|
29
29
|
rake drg:pin:minor_latest
|
30
30
|
rake drg:unpin
|
31
31
|
```
|
32
32
|
|
33
|
-
### drg:update
|
34
|
-
|
35
|
-
DRG loves updating gems! Run this command to check for outdated gems and try to update them to the latest available version.
|
36
|
-
Each outdated gem will be updated, then DRG will run your tests (with `rake`) and if your tests pass, the new version will be written to your Gemfile!
|
37
|
-
|
38
|
-
```bash
|
39
|
-
rake drg:update
|
40
|
-
```
|
41
|
-
|
42
|
-
Easy!
|
43
|
-
|
44
33
|
### drg:pin
|
45
34
|
|
46
35
|
DRG really wants to help you manage your project's gems. But DRG doesn't want to replace Bundler. Instead, we want to build on
|
@@ -6,7 +6,7 @@ module DRG
|
|
6
6
|
attr_reader :gemfile, :type, :updated_gems
|
7
7
|
attr_writer :versions
|
8
8
|
|
9
|
-
# @param [Symbol] type of pin to perform. Available options are [:
|
9
|
+
# @param [Symbol] type of pin to perform. Available options are [:available, :minor, :patch]
|
10
10
|
def initialize(type = :patch)
|
11
11
|
@type = type
|
12
12
|
@gemfile = Gemfile.new
|
@@ -18,24 +18,17 @@ module DRG
|
|
18
18
|
if gem_name
|
19
19
|
update ::Bundler.locked_gems.specs.find { |spec| spec.name == gem_name }
|
20
20
|
else
|
21
|
-
|
21
|
+
Updater.new.perform do |gems|
|
22
|
+
load_versions gems.map &:name
|
23
|
+
gems.each do |gem|
|
24
|
+
update ::Bundler.locked_gems.specs.find { |spec| spec.name == gem.name }
|
25
|
+
end
|
26
|
+
end
|
22
27
|
end
|
23
28
|
gemfile.write if gemfile.saved_lines.any?
|
24
29
|
log %Q(Done.#{' You may want run `bundle update`' if updated_gems.any?})
|
25
30
|
end
|
26
31
|
|
27
|
-
def update_all
|
28
|
-
log %Q(No gem specified)
|
29
|
-
Updater.new.perform method(:update_handler)
|
30
|
-
end
|
31
|
-
|
32
|
-
def update_handler(gems)
|
33
|
-
load_versions gems.map &:name
|
34
|
-
gems.each do |gem|
|
35
|
-
update ::Bundler.locked_gems.specs.find { |spec| spec.name == gem.name }
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
32
|
# @note calls #latest_minor_version and #latest_patch_version
|
40
33
|
def update(spec)
|
41
34
|
gem = gemfile.find_by_name spec.name
|
@@ -51,6 +44,14 @@ module DRG
|
|
51
44
|
end
|
52
45
|
end
|
53
46
|
|
47
|
+
#
|
48
|
+
# Private
|
49
|
+
#
|
50
|
+
|
51
|
+
def latest_available_version(name, current_version)
|
52
|
+
new_versions(name, current_version).first
|
53
|
+
end
|
54
|
+
|
54
55
|
# @param [String] name of the gem
|
55
56
|
# @param [String] current_version of the gem
|
56
57
|
def latest_minor_version(name, current_version)
|
@@ -95,6 +96,7 @@ module DRG
|
|
95
96
|
end
|
96
97
|
|
97
98
|
def load_gem_versions(gems)
|
99
|
+
gems.reject! { |gem_name| gemfile.find_by_name(gem_name).nil? }
|
98
100
|
log %Q(Searching for latest #{type} versions of #{gems.join(' ')} ...)
|
99
101
|
`gem query -ra #{gems.join(' ')}`
|
100
102
|
end
|
@@ -104,19 +106,6 @@ module DRG
|
|
104
106
|
def higher?(list, other_list)
|
105
107
|
list[0].to_i > other_list[0].to_i || list[1].to_i > other_list[1].to_i || list[2].to_i > other_list[2].to_i
|
106
108
|
end
|
107
|
-
|
108
|
-
# @todo delete if not used
|
109
|
-
#
|
110
|
-
# @param [String] name of the gem
|
111
|
-
# @param [String] current_version of the gem
|
112
|
-
# def next_patch_version(name, current_version)
|
113
|
-
# new_versions(name, current_version).select { |version|
|
114
|
-
# puts segments = version.scan(/\d+/)
|
115
|
-
# patch_version = segments.last.to_i
|
116
|
-
# minor_version = segments[-2].to_i
|
117
|
-
# patch_version > current_version.segments[-1] && minor_version <= current_version.segments[-2]
|
118
|
-
# }.last
|
119
|
-
# end
|
120
109
|
end
|
121
110
|
end
|
122
111
|
end
|
data/lib/drg/tasks/updater.rb
CHANGED
@@ -3,64 +3,20 @@ module DRG
|
|
3
3
|
class Updater
|
4
4
|
include Log
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
def initialize
|
9
|
-
@gemfile = Gemfile.new
|
10
|
-
@bundler = Bundler::CLI.new [], debug: true, current_command: OpenStruct.new
|
11
|
-
@versions = {}
|
12
|
-
end
|
13
|
-
|
14
|
-
# Updates the projects outdated gems listed in the Gemfile
|
6
|
+
# Loads the current version of outdated gems
|
15
7
|
#
|
16
|
-
# @todo Cleanup old gems when finished
|
17
8
|
# @note `bundle outdated` returns lines that look like 'slop (newest 4.2.0, installed 3.6.0) in group "default"'
|
18
9
|
# @param [#call] handler needs to be a callable object that takes an array of gems [OpenStruct] (default :update_all)
|
19
|
-
def perform
|
10
|
+
def perform
|
20
11
|
log 'Searching for outdated gems ....'
|
21
12
|
outdated = `bundle outdated`.scan(/\s\*\s(.+)\s/).flatten
|
22
|
-
gems = outdated.map
|
23
|
-
gem = OpenStruct.new
|
24
|
-
gem.name = item[/([\-\w0-9]+)\s/, 1]
|
25
|
-
gem.entry = gemfile.find_by_name(gem.name)
|
26
|
-
next unless gem.entry
|
27
|
-
gem.latest_version = item[/newest\s([\d.\w]+)/, 1]
|
28
|
-
gem.current_version = item[/installed\s([\d.\w]+)/, 1]
|
29
|
-
gem
|
30
|
-
end.compact
|
13
|
+
gems = outdated.map { |item| OpenStruct.new(name: item[/([\-\w0-9]+)\s/, 1]) }
|
31
14
|
if gems.any?
|
32
|
-
|
15
|
+
yield gems
|
33
16
|
else
|
34
17
|
log 'All gems up to date!'
|
35
18
|
end
|
36
19
|
end
|
37
|
-
|
38
|
-
def update_all(gems)
|
39
|
-
gems.each &method(:update)
|
40
|
-
end
|
41
|
-
|
42
|
-
# @param [#name, #current_version, #latest_version, #entry] gem is the gem to update, where #entry is a GemfileLine
|
43
|
-
def update(gem)
|
44
|
-
log(%Q[Updating "#{gem.name}" from #{gem.current_version} to #{gem.latest_version}])
|
45
|
-
gemfile.remove_version gem.entry
|
46
|
-
bundler.update(gem.name)
|
47
|
-
if $0.to_i.zero?
|
48
|
-
log(%Q[Succeeded in installing "#{gem.name}" (#{gem.latest_version})])
|
49
|
-
if system('rake')
|
50
|
-
log(%Q[Tests passed! Updating Gemfile entry for "#{gem.name}" to #{gem.latest_version}])
|
51
|
-
gemfile.update(gem.entry, gem.latest_version)
|
52
|
-
gemfile.write
|
53
|
-
end
|
54
|
-
else
|
55
|
-
fail StandardError, %Q[Failed to update "#{gem.name}"]
|
56
|
-
end
|
57
|
-
rescue Bundler::GemNotFound, Bundler::InstallError, Bundler::VersionConflict => e
|
58
|
-
log %Q[Failed to find a compatible of "#{gem.name}" (#{gem.latest_version}): #{e.class} #{e.message}]
|
59
|
-
gemfile.rollback
|
60
|
-
rescue => e
|
61
|
-
gemfile.rollback
|
62
|
-
log "#{e.class}: #{e.message}\n#{e.backtrace}"
|
63
|
-
end
|
64
20
|
end
|
65
21
|
end
|
66
22
|
end
|
data/lib/drg/version.rb
CHANGED
data/lib/tasks/drg.rake
CHANGED
@@ -27,6 +27,11 @@ namespace :drg do
|
|
27
27
|
DRG::Tasks::Pinner.new(:patch).perform
|
28
28
|
end
|
29
29
|
|
30
|
+
desc 'Pins all gems [or the requested gem] to the latest version'
|
31
|
+
task :latest, [:gem_name] do |_, options|
|
32
|
+
DRG::Tasks::ProgessivePinner.new(:available).perform(options[:gem_name])
|
33
|
+
end
|
34
|
+
|
30
35
|
desc 'Pins all gems [or the requested gem] to the latest available patch version'
|
31
36
|
task :minor_latest, [:gem_name] do |_, options|
|
32
37
|
DRG::Tasks::ProgessivePinner.new(:minor).perform(options[:gem_name])
|
@@ -37,9 +42,4 @@ namespace :drg do
|
|
37
42
|
DRG::Tasks::ProgessivePinner.new(:patch).perform(options[:gem_name])
|
38
43
|
end
|
39
44
|
end
|
40
|
-
|
41
|
-
desc 'Updates your gems in the Gemfile to the latest compatible version'
|
42
|
-
task :update do
|
43
|
-
DRG::Tasks::Updater.new.perform
|
44
|
-
end
|
45
45
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: drg
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Buckley
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-08-
|
11
|
+
date: 2015-08-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|