drg 0.5.0 → 0.5.1
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 +34 -16
- data/drg.gemspec +1 -1
- data/lib/drg/tasks/gemfile.rb +11 -0
- data/lib/drg/tasks/updater.rb +29 -22
- data/lib/drg/version.rb +1 -1
- data/lib/drg.rb +2 -1
- metadata +15 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 64ab93e66f0e85ab52aad6415ff9742dc974eff3
|
4
|
+
data.tar.gz: cd44e409518042394da5dd01f18833cb51b37c2b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 34adbd98f8df9b92863b0b4349895e9241853070c24f99c333f309cbea81a3fd130b49712f73c513073aa521ac59c9f1cca02e4ae60a14bf37cafe215498bf27
|
7
|
+
data.tar.gz: bd191ee0cba818a2be8e1074bac1e512bed7a42b266542953f66d83e9b5f88aeab9b1d7b5681a9e649fe5574d7ef35cb761c59b8b58ef48f51bb0729339aa526
|
data/README.md
CHANGED
@@ -10,12 +10,30 @@ Add this line to your application's Gemfile:
|
|
10
10
|
gem 'drg'
|
11
11
|
```
|
12
12
|
|
13
|
-
##
|
13
|
+
## Tasks
|
14
14
|
|
15
|
-
|
15
|
+
```bash
|
16
|
+
rake drg:update
|
17
|
+
rake drg:pin
|
18
|
+
rake drg:pin:minor
|
19
|
+
rake drg:pin:major
|
20
|
+
rake drg:unpin
|
21
|
+
```
|
22
|
+
|
23
|
+
### drg:update
|
24
|
+
|
25
|
+
DRG can update your outdated gems, one-by-one, to the latest version. It'll update the gem and then run your tests.
|
26
|
+
If your tests pass, then the new version will be written to your Gemfile (similar to Gemnasium).
|
27
|
+
|
28
|
+
```bash
|
29
|
+
rake drg:update
|
30
|
+
```
|
31
|
+
|
32
|
+
### pin
|
16
33
|
|
17
34
|
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
|
18
|
-
it.
|
35
|
+
it. Pinning ignores gems that are fetched from somewhere other than rubygems. For example, gems listed with `:git`, `:github`,
|
36
|
+
or `:path` will be ignored. You can "pin" all your versions to the current version listed in the Gemfile.lock:
|
19
37
|
|
20
38
|
```bash
|
21
39
|
rake drg:pin
|
@@ -27,8 +45,6 @@ Which will change gems list in your Gemfile to their full version. So if you hav
|
|
27
45
|
gem 'rails'
|
28
46
|
gem 'byebug', require: false
|
29
47
|
gem 'therubyracer', '~> 0.12', platforms: :ruby
|
30
|
-
|
31
|
-
# gotta include ourselves
|
32
48
|
gem 'drg'
|
33
49
|
```
|
34
50
|
|
@@ -38,18 +54,18 @@ it'll get changed to
|
|
38
54
|
gem 'rails', '4.2.3'
|
39
55
|
gem 'byebug', '5.0.0', require: false
|
40
56
|
gem 'therubyracer', '0.12.2', platforms: :ruby
|
41
|
-
|
42
|
-
# gotta include ourselves
|
43
57
|
gem 'drg', '0.4.1'
|
44
58
|
```
|
45
59
|
|
60
|
+
### pin:minor
|
61
|
+
|
46
62
|
Although, you may want to pin gems with their _minor_ version (which allows updating patches). Run:
|
47
63
|
|
48
64
|
```bash
|
49
65
|
rake drg:pin:minor
|
50
66
|
```
|
51
67
|
|
52
|
-
|
68
|
+
Which will update your Gemfile from
|
53
69
|
|
54
70
|
```ruby
|
55
71
|
gem 'rails', '4.2.3'
|
@@ -61,20 +77,22 @@ to
|
|
61
77
|
gem 'rails', '~> 4.2'
|
62
78
|
```
|
63
79
|
|
64
|
-
|
65
|
-
or `:path` will be ignored.
|
80
|
+
This can be combined with `bundle update` to quickly update all gems to the latest patch or minor level.
|
66
81
|
|
67
|
-
|
82
|
+
### pin:major
|
68
83
|
|
69
|
-
|
84
|
+
There is also a
|
70
85
|
|
71
|
-
|
86
|
+
```bash
|
87
|
+
rake drg:pin:major
|
88
|
+
```
|
72
89
|
|
73
|
-
|
74
|
-
|
90
|
+
### drg:unpin
|
91
|
+
|
92
|
+
Remove the versions from your Gemfile. Start fresh!
|
75
93
|
|
76
94
|
```bash
|
77
|
-
rake drg:
|
95
|
+
rake drg:unpin
|
78
96
|
```
|
79
97
|
|
80
98
|
## Development
|
data/drg.gemspec
CHANGED
@@ -19,7 +19,7 @@ Gem::Specification.new do |spec|
|
|
19
19
|
# spec.add_dependency 'ruby_parser', '>= 3.7.0', '< 4.0.0'
|
20
20
|
# spec.add_dependency 'ruby2ruby', '>= 2.2.0', '< 3.0.0'
|
21
21
|
spec.add_dependency 'bundler', '~> 1.10'
|
22
|
-
|
22
|
+
spec.add_dependency 'duck_puncher', '1.0.0'
|
23
23
|
|
24
24
|
spec.add_development_dependency 'rake', '~> 10.0'
|
25
25
|
spec.add_development_dependency 'rspec', '>= 3.2', '< 4'
|
data/lib/drg/tasks/gemfile.rb
CHANGED
@@ -17,6 +17,7 @@ module DRG
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def remove_version(gem)
|
20
|
+
saved_lines << lines.clone!
|
20
21
|
lines[gem] = gem.remove_version
|
21
22
|
write
|
22
23
|
end
|
@@ -38,6 +39,16 @@ module DRG
|
|
38
39
|
end
|
39
40
|
end
|
40
41
|
|
42
|
+
def rollback
|
43
|
+
return if saved_lines.empty?
|
44
|
+
lines.replace saved_lines.pop
|
45
|
+
write
|
46
|
+
end
|
47
|
+
|
48
|
+
def saved_lines
|
49
|
+
@saved_lines ||= []
|
50
|
+
end
|
51
|
+
|
41
52
|
def lines
|
42
53
|
@lines ||= File.readlines file
|
43
54
|
end
|
data/lib/drg/tasks/updater.rb
CHANGED
@@ -16,41 +16,48 @@ module DRG
|
|
16
16
|
# @todo Cleanup old gems when finished
|
17
17
|
# @note `bundle outdated` returns lines that look like 'slop (newest 4.2.0, installed 3.6.0) in group "default"'
|
18
18
|
def perform
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
19
|
+
log 'Searching for outdated gems ....'
|
20
|
+
outdated = `bundle outdated`.scan(/\s\*\s(.+)\s/).flatten
|
21
|
+
gems = outdated.map do |item|
|
22
|
+
gem = OpenStruct.new
|
23
|
+
gem.name = item[/([\-\w0-9]+)\s/, 1]
|
24
|
+
gem.entry = gemfile.find_by_name(gem.name)
|
25
|
+
next unless gem.entry
|
26
|
+
gem.latest_version = item[/newest\s([\d.\w]+)/, 1]
|
27
|
+
gem.current_version = item[/installed\s([\d.\w]+)/, 1]
|
28
|
+
gem
|
29
|
+
end.compact
|
30
|
+
if gems.any?
|
31
|
+
gems.each &method(:try_update)
|
32
|
+
else
|
33
|
+
log 'All gems up to date!'
|
30
34
|
end
|
31
35
|
end
|
32
36
|
|
33
|
-
# @param [
|
34
|
-
def try_update(gem
|
35
|
-
|
37
|
+
# @param [OpenStruct] gem
|
38
|
+
def try_update(gem)
|
39
|
+
log(%Q[Updating "#{gem.name}" from #{gem.current_version} to #{gem.latest_version}])
|
40
|
+
gemfile.remove_version gem.entry
|
36
41
|
bundler.update(gem.name)
|
37
42
|
if $0.to_i.zero?
|
38
|
-
log(%Q[Succeeded in installing "#{gem.name}" (#{latest_version})])
|
43
|
+
log(%Q[Succeeded in installing "#{gem.name}" (#{gem.latest_version})])
|
39
44
|
if system('rake')
|
40
|
-
log(%Q[Tests passed! Updating Gemfile
|
41
|
-
gemfile.update(gem, latest_version)
|
45
|
+
log(%Q[Tests passed! Updating Gemfile entry for "#{gem.name}" to #{gem.latest_version}])
|
46
|
+
gemfile.update(gem.entry, gem.latest_version)
|
42
47
|
else
|
43
48
|
failures << gem.name
|
44
49
|
end
|
45
50
|
else
|
46
51
|
fail StandardError, %Q[Failed to update "#{gem.name}"]
|
47
52
|
end
|
48
|
-
rescue Bundler::GemNotFound, Bundler::InstallError
|
49
|
-
log %Q[Failed to find "#{gem.name}" (#{latest_version})]
|
50
|
-
|
51
|
-
# @todo retry it later
|
53
|
+
rescue Bundler::GemNotFound, Bundler::InstallError, Bundler::VersionConflict => e
|
54
|
+
log %Q[Failed to find a compatible of "#{gem.name}" (#{gem.latest_version}): #{e.class} #{e.message}]
|
55
|
+
gemfile.rollback
|
52
56
|
failures << gem.name
|
53
|
-
|
57
|
+
# @todo retry it later
|
58
|
+
rescue => e
|
59
|
+
puts "#{e.class}: #{e.message} #{e.backtrace}"
|
60
|
+
gemfile.rollback
|
54
61
|
end
|
55
62
|
|
56
63
|
# @note not used
|
data/lib/drg/version.rb
CHANGED
data/lib/drg.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: drg
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Buckley
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.10'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: duck_puncher
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.0.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 1.0.0
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: rake
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|