drg 0.8.1 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
[![Gem Version](https://badge.fury.io/rb/drg.svg)](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
|