smarter_bundler 0.1.0 → 0.1.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.
- data/.travis.yml +15 -1
- data/bin/test +3 -0
- data/lib/smarter_bundler/bundle.rb +24 -4
- data/lib/smarter_bundler/gemfile.rb +5 -2
- data/lib/smarter_bundler/shell.rb +1 -0
- data/lib/smarter_bundler/version.rb +1 -1
- metadata +2 -5
data/.travis.yml
CHANGED
@@ -23,13 +23,27 @@ matrix:
|
|
23
23
|
- rvm: 1.8.7
|
24
24
|
env: RUBYGEMS_VERSION=1.8.25
|
25
25
|
|
26
|
+
- rvm: 1.9.2
|
27
|
+
|
26
28
|
- rvm: 1.9.3
|
27
29
|
|
28
|
-
- rvm: 2.
|
30
|
+
- rvm: 2.0.0
|
31
|
+
|
32
|
+
- rvm: 2.1.0
|
33
|
+
|
34
|
+
- rvm: 2.1.10
|
35
|
+
|
36
|
+
- rvm: 2.2.0
|
37
|
+
|
38
|
+
- rvm: 2.2.2
|
29
39
|
|
30
40
|
- rvm: 2.2.9
|
31
41
|
|
42
|
+
- rvm: 2.3.0
|
43
|
+
|
32
44
|
- rvm: 2.3.6
|
33
45
|
|
46
|
+
- rvm: 2.4.0
|
47
|
+
|
34
48
|
- rvm: 2.4.3
|
35
49
|
|
data/bin/test
CHANGED
@@ -56,6 +56,9 @@ do
|
|
56
56
|
cp -f Gemfile.default Gemfile
|
57
57
|
# Exclude debugger - it breaks for many varied reasons on travis
|
58
58
|
../../exe/smarter_bundle --without debug
|
59
|
+
echo Gemfile changes:
|
60
|
+
diff Gemfile.default Gemfile
|
61
|
+
echo
|
59
62
|
bundle exec ruby -e 'puts "Test of #{ENV['"'"'d'"'"']}/Gemfile with ruby #{RUBY_VERSION} passed at #{Time.now}!"'
|
60
63
|
)
|
61
64
|
done
|
@@ -5,6 +5,14 @@ module SmarterBundler
|
|
5
5
|
class Bundle
|
6
6
|
include SmarterBundler::Shell
|
7
7
|
|
8
|
+
KNOWN_ISSUES_192 = {
|
9
|
+
'unicorn' => '5.0',
|
10
|
+
#'nokogiri' => '1.6.0',
|
11
|
+
'jbuilder' => '2.0.0',
|
12
|
+
}
|
13
|
+
|
14
|
+
|
15
|
+
|
8
16
|
def run(bundle_args)
|
9
17
|
puts "Smarter Bundler will recursively install your gems and output the successful bundler output. This may take a while."
|
10
18
|
count = 0
|
@@ -20,9 +28,13 @@ module SmarterBundler
|
|
20
28
|
exit 1
|
21
29
|
end
|
22
30
|
previous_failure = failed_gem_and_version
|
23
|
-
|
31
|
+
gem, version = *failed_gem_and_version
|
32
|
+
if install_failed_gem gem, version
|
24
33
|
puts "Retrying seems to have fixed the problem"
|
25
|
-
elsif
|
34
|
+
elsif gemfile.restrict_gem_version(gem, known_issues(gem))
|
35
|
+
gemfile.save
|
36
|
+
count += 1
|
37
|
+
elsif ruby_version_clash(result) && gemfile.restrict_gem_version(gem, version)
|
26
38
|
gemfile.save
|
27
39
|
count += 1
|
28
40
|
else
|
@@ -41,14 +53,22 @@ module SmarterBundler
|
|
41
53
|
shell "bundle #{bundle_args}"
|
42
54
|
end
|
43
55
|
|
44
|
-
def install_failed_gem(
|
45
|
-
shell? "gem install '#{
|
56
|
+
def install_failed_gem(gem, version)
|
57
|
+
shell? "gem install '#{gem}' -v '#{version}'"
|
46
58
|
end
|
47
59
|
|
48
60
|
def ruby_version_clash(result)
|
49
61
|
result.output.select{|l| l =~ /requires Ruby version/}.any?
|
50
62
|
end
|
51
63
|
|
64
|
+
def known_issues(gem)
|
65
|
+
if RUBY_VERSION < '1.9.3'
|
66
|
+
KNOWN_ISSUES_192[gem]
|
67
|
+
else
|
68
|
+
nil
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
52
72
|
def parse_output(result)
|
53
73
|
result.output.each do |line|
|
54
74
|
if line =~ /Make sure that `gem install (\S+) -v '(\S+)'`/
|
@@ -15,19 +15,22 @@ module SmarterBundler
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def restrict_gem_version gem, version_limit
|
18
|
+
return false unless version_limit.to_s =~ /\d\.\d/
|
18
19
|
if @contents.select{|line| line =~ /^\s*gem\s+['"]#{gem}['"]/}.empty?
|
19
20
|
@contents << "gem '#{gem}', '>=0'"
|
20
21
|
end
|
21
22
|
adjusted = false
|
22
23
|
@contents.map! do |line|
|
23
|
-
if line =~ /^(\s*gem\s+['"]#{gem}['"])(\s*,\*['"]([^'"]*)['"])?(
|
24
|
+
if line =~ /^(\s*gem\s+['"]#{gem}['"])(\s*,\*['"]([^'"]*)['"])?(.*?)$/
|
24
25
|
gem_and_name = $1
|
25
26
|
rest_of_line = $4
|
26
27
|
version = $3.to_s
|
28
|
+
puts "Found #{gem_name_name} with version spec: #{version} and other args: #{rest_of_line}"
|
27
29
|
new_version = version.sub(/<=?\s*[^,\s]+/, '').sub(/^\s*,\s*/, '').sub(/\s*,\s*$/, '') + (version == '' ? '' : ', ') + "< #{version_limit}"
|
30
|
+
puts " Calculated new_version spec: #{new_version}"
|
28
31
|
if new_version != version
|
29
32
|
@changed = true
|
30
|
-
rest_of_line.sub(
|
33
|
+
rest_of_line.sub!(/ # REQUIRED - Added by SmarterBundler.*/, '')
|
31
34
|
rest_of_line << ' # REQUIRED - Added by SmarterBundler'
|
32
35
|
line = "#{gem_and_name}, '#{new_version}'#{rest_of_line}"
|
33
36
|
puts "Changed Gemfile line to: #{line}"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: smarter_bundler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -99,16 +99,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
99
99
|
version: '0'
|
100
100
|
segments:
|
101
101
|
- 0
|
102
|
-
hash:
|
102
|
+
hash: 1603618397689055998
|
103
103
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
104
104
|
none: false
|
105
105
|
requirements:
|
106
106
|
- - ! '>='
|
107
107
|
- !ruby/object:Gem::Version
|
108
108
|
version: '0'
|
109
|
-
segments:
|
110
|
-
- 0
|
111
|
-
hash: 1256460857645242723
|
112
109
|
requirements: []
|
113
110
|
rubyforge_project:
|
114
111
|
rubygems_version: 1.8.23.2
|