bummr 0.1.2 → 0.1.4
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 +4 -7
- data/bummr.gemspec +2 -0
- data/lib/bummr/bisecter.rb +29 -0
- data/lib/bummr/check.rb +70 -0
- data/lib/bummr/cli.rb +22 -131
- data/lib/bummr/log.rb +8 -0
- data/lib/bummr/outdated.rb +4 -2
- data/lib/bummr/rebaser.rb +29 -0
- data/lib/bummr/updater.rb +40 -0
- data/lib/bummr/version.rb +1 -1
- data/lib/bummr.rb +14 -2
- data/spec/check_spec.rb +125 -0
- data/spec/lib/bisecter_spec.rb +32 -0
- data/spec/lib/cli_spec.rb +112 -0
- data/spec/lib/log_spec.rb +33 -0
- data/spec/lib/outdated_spec.rb +74 -0
- data/spec/lib/rebaser_spec.rb +64 -0
- data/spec/lib/updater_spec.rb +133 -0
- data/spec/spec_helper.rb +3 -0
- metadata +49 -4
- data/spec/outdated_spec.rb +0 -25
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a6413e280f39b5c4f19afd9bffd18b6b86c324a1
|
4
|
+
data.tar.gz: 292d5f9cbbd1a73c93e12012acb8008078024484
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9192c684fd46c2b0ea404d9e837dccd708d4c5f804edcd3583046d3d58e0e173945ed58f990e650eca95bc92cef959df476e9e86d396d6289014f056b30dceef
|
7
|
+
data.tar.gz: 586e248bebae4861de260e63cc98f0fbd53d381ad267d0974913b4ff967a3cd4e5a60c4fb3cd5fad5c33c511ebaefb792cffc03dd9ff3c19eb275aa241a84823
|
data/README.md
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
# Bummr
|
2
2
|
|
3
|
+
[](https://circleci.com/gh/lpender/bummr)
|
4
|
+
[](https://codeclimate.com/github/lpender/bummr)
|
5
|
+
[](https://codeclimate.com/github/lpender/bummr/coverage)
|
6
|
+
|
3
7
|
Updating Gems one by one is a bumm(e)r: especially when one gem causes your build
|
4
8
|
to fail.
|
5
9
|
|
@@ -94,13 +98,6 @@ I'd like to create feature tests, but because Bummr relies on command line
|
|
94
98
|
manipulations which need to be doubled, I'm waiting on [this
|
95
99
|
issue](https://github.com/bjoernalbers/aruba-doubles/issues/5)
|
96
100
|
|
97
|
-
## Wanted
|
98
|
-
|
99
|
-
Here are some things I'd love to add to Bummr:
|
100
|
-
|
101
|
-
- Test coverage.
|
102
|
-
- Configuration options (for test script path, name of master branch, etc)
|
103
|
-
|
104
101
|
## Thank you!
|
105
102
|
|
106
103
|
Thanks to Ryan Sonnek for the [Bundler
|
data/bummr.gemspec
CHANGED
@@ -23,10 +23,12 @@ Gem::Specification.new do |spec|
|
|
23
23
|
|
24
24
|
spec.add_development_dependency "rspec"
|
25
25
|
spec.add_development_dependency "rspec-nc"
|
26
|
+
spec.add_development_dependency "spring"
|
26
27
|
spec.add_development_dependency "bundler"
|
27
28
|
spec.add_development_dependency "rake"
|
28
29
|
spec.add_development_dependency "guard"
|
29
30
|
spec.add_development_dependency "pry"
|
30
31
|
spec.add_development_dependency "pry-remote"
|
31
32
|
spec.add_development_dependency "pry-nav"
|
33
|
+
spec.add_development_dependency "codeclimate-test-reporter"
|
32
34
|
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Bummr
|
2
|
+
class Bisecter
|
3
|
+
include Singleton
|
4
|
+
|
5
|
+
def bisect
|
6
|
+
puts "Bad commits found! Bisecting...".red
|
7
|
+
|
8
|
+
system("bundle")
|
9
|
+
system("git bisect start")
|
10
|
+
system("git bisect bad")
|
11
|
+
system("git bisect good master")
|
12
|
+
|
13
|
+
Open3.popen2e("git bisect run #{TEST_COMMAND}") do |_std_in, std_out_err|
|
14
|
+
while line = std_out_err.gets
|
15
|
+
puts line
|
16
|
+
|
17
|
+
sha_regex = Regexp::new("(.*) is the first bad commit\n").match(line)
|
18
|
+
unless sha_regex.nil?
|
19
|
+
sha = sha_regex[1]
|
20
|
+
end
|
21
|
+
|
22
|
+
if line == "bisect run success\n"
|
23
|
+
Bummr::Rebaser.instance.remove_commit(sha)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/lib/bummr/check.rb
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
module Bummr
|
2
|
+
class Check
|
3
|
+
include Singleton
|
4
|
+
|
5
|
+
def check(fullcheck=true)
|
6
|
+
@errors = []
|
7
|
+
|
8
|
+
check_master
|
9
|
+
check_log
|
10
|
+
check_status
|
11
|
+
|
12
|
+
if fullcheck == true
|
13
|
+
check_diff
|
14
|
+
end
|
15
|
+
|
16
|
+
if @errors.any?
|
17
|
+
unless yes? "Bummr found errors! Do you want to continue anyway?".red
|
18
|
+
exit 0
|
19
|
+
end
|
20
|
+
else
|
21
|
+
puts "Ready to run bummr.".green
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def check_master
|
28
|
+
if `git rev-parse --abbrev-ref HEAD` == "master\n"
|
29
|
+
message = "Bummr is not meant to be run on master"
|
30
|
+
puts message.red
|
31
|
+
puts "Please checkout a branch with 'git checkout -b update-gems'"
|
32
|
+
@errors.push message
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def check_log
|
37
|
+
unless File.directory? "log"
|
38
|
+
message = "There is no log directory or you are not in the root"
|
39
|
+
puts message.red
|
40
|
+
@errors.push message
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def check_status
|
45
|
+
status = `git status`
|
46
|
+
|
47
|
+
if status.index 'are currently'
|
48
|
+
message = ""
|
49
|
+
|
50
|
+
if status.index 'rebasing'
|
51
|
+
message += "You are already rebasing. "
|
52
|
+
elsif status.index 'bisecting'
|
53
|
+
message += "You are already bisecting. "
|
54
|
+
end
|
55
|
+
|
56
|
+
message += "Make sure `git status` is clean"
|
57
|
+
puts message.red
|
58
|
+
@errors.push message
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def check_diff
|
63
|
+
unless `git diff master`.empty?
|
64
|
+
message = "Please make sure that `git diff master` returns empty"
|
65
|
+
puts message.red
|
66
|
+
@errors.push message
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
data/lib/bummr/cli.rb
CHANGED
@@ -1,125 +1,49 @@
|
|
1
|
-
require 'thor'
|
2
|
-
require 'open3'
|
3
|
-
require 'colorize'
|
4
|
-
|
5
1
|
TEST_COMMAND = ENV["BUMMR_TEST"] || "bundle exec rake"
|
6
2
|
|
7
3
|
module Bummr
|
8
4
|
class CLI < Thor
|
5
|
+
include Bummr::Log
|
6
|
+
|
9
7
|
desc "check", "Run automated checks to see if bummr can be run"
|
10
8
|
def check(fullcheck=true)
|
11
|
-
|
12
|
-
|
13
|
-
if `git rev-parse --abbrev-ref HEAD` == "master\n"
|
14
|
-
message = "Bummr is not meant to be run on master"
|
15
|
-
say message.red
|
16
|
-
say "Please checkout a branch with 'git checkout -b update-gems'"
|
17
|
-
errors.push message
|
18
|
-
end
|
19
|
-
|
20
|
-
unless File.directory? "log"
|
21
|
-
message = "There is no log directory or you are not in the root"
|
22
|
-
say message.red
|
23
|
-
errors.push message
|
24
|
-
end
|
25
|
-
|
26
|
-
status = `git status`
|
27
|
-
|
28
|
-
if status.index 'are currently'
|
29
|
-
message = ""
|
30
|
-
|
31
|
-
if status.index 'rebasing'
|
32
|
-
message += "You are already rebasing. "
|
33
|
-
elsif status.index 'bisecting'
|
34
|
-
message += "You are already bisecting. "
|
35
|
-
end
|
36
|
-
|
37
|
-
message += "Make sure `git status` is clean"
|
38
|
-
say message.red
|
39
|
-
errors.push message
|
40
|
-
end
|
41
|
-
|
42
|
-
if fullcheck == true
|
43
|
-
unless `git diff master`.empty?
|
44
|
-
message = "Please make sure that `git diff master` returns empty"
|
45
|
-
say message.red
|
46
|
-
errors.push message
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
if errors.any?
|
51
|
-
exit 0
|
52
|
-
else
|
53
|
-
puts "Ready to run bummr.".green
|
54
|
-
|
55
|
-
end
|
9
|
+
Bummr::Check.instance.check(fullcheck)
|
56
10
|
end
|
57
11
|
|
58
12
|
desc "update", "Update outdated gems, run tests, bisect if tests fail"
|
59
13
|
def update
|
60
|
-
|
61
|
-
say "- Be in the root path of a clean git branch off of master"
|
62
|
-
say "- Have no commits or local changes"
|
63
|
-
say "- Have a 'log' directory, where we can place logs"
|
64
|
-
say "- Have your build configured to fail fast (recommended)"
|
65
|
-
say "- Have locked any Gem version that you don't wish to update in your Gemfile"
|
66
|
-
say "- It is recommended that you lock your versions of `ruby` and `rails in your Gemfile`"
|
67
|
-
say "Your test command is: '#{TEST_COMMAND}'"
|
14
|
+
ask_questions
|
68
15
|
|
69
16
|
if yes? "Are you ready to use Bummr? (y/n)"
|
70
17
|
check
|
71
18
|
log("Bummr update initiated #{Time.now}")
|
72
|
-
|
19
|
+
system("bundle")
|
73
20
|
|
74
21
|
outdated_gems = Bummr::Outdated.instance.outdated_gems
|
75
22
|
|
76
23
|
if outdated_gems.empty?
|
77
|
-
|
24
|
+
puts "No outdated gems to update".green
|
78
25
|
else
|
79
|
-
|
26
|
+
Bummr::Updater.new(outdated_gems).update_gems
|
80
27
|
|
81
|
-
outdated_gems.each_with_index do |gem, index|
|
82
|
-
say "Updating #{gem[:name]}: #{index+1} of #{outdated_gems.count}"
|
83
|
-
|
84
|
-
system("bundle update --source #{gem[:name]}")
|
85
|
-
updated_version = `bundle list | grep " #{gem[:name]} "`.split('(')[1].split(')')[0]
|
86
|
-
message = "Update #{gem[:name]} from #{gem[:installed]} to #{updated_version}"
|
87
|
-
|
88
|
-
if gem[:newest] != updated_version
|
89
|
-
log("#{gem[:name]} not updated from #{gem[:installed]} to latest: #{gem[:newest]}")
|
90
|
-
end
|
91
|
-
|
92
|
-
unless gem[:installed] == updated_version
|
93
|
-
say message.green
|
94
|
-
system("git commit -am '#{message}'")
|
95
|
-
else
|
96
|
-
log("#{gem[:name]} not updated")
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
say "Choose which gems to update"
|
101
28
|
system("git rebase -i master")
|
102
|
-
|
103
|
-
log "Running Update + #{Time.now}"
|
104
|
-
|
105
29
|
test
|
106
30
|
end
|
107
31
|
else
|
108
|
-
|
32
|
+
puts "Thank you!".green
|
109
33
|
end
|
110
34
|
end
|
111
35
|
|
112
36
|
desc "test", "Test for a successful build and bisect if necesssary"
|
113
37
|
def test
|
114
38
|
check(false)
|
115
|
-
|
116
|
-
|
39
|
+
system "bundle"
|
40
|
+
puts "Testing the build!".green
|
117
41
|
|
118
42
|
if system(TEST_COMMAND) == false
|
119
43
|
bisect
|
120
44
|
else
|
121
|
-
|
122
|
-
|
45
|
+
puts "Passed the build!".green
|
46
|
+
puts "See log/bummr.log for details".yellow
|
123
47
|
system("cat log/bummr.log")
|
124
48
|
end
|
125
49
|
end
|
@@ -127,54 +51,21 @@ module Bummr
|
|
127
51
|
desc "bisect", "Find the bad commit, remove it, test again"
|
128
52
|
def bisect
|
129
53
|
check(false)
|
130
|
-
say "Bad commits found! Bisecting...".red
|
131
|
-
|
132
|
-
system("git bisect start head master")
|
133
|
-
|
134
|
-
Open3.popen2e("git bisect run #{TEST_COMMAND}") do |std_in, std_out_err|
|
135
|
-
while line = std_out_err.gets
|
136
|
-
puts line
|
137
|
-
|
138
|
-
sha_regex = Regexp::new("(.*) is the first bad commit\n").match(line)
|
139
|
-
unless sha_regex.nil?
|
140
|
-
sha = sha_regex[1]
|
141
|
-
end
|
142
54
|
|
143
|
-
|
144
|
-
remove_commit(sha)
|
145
|
-
end
|
146
|
-
end
|
147
|
-
end
|
55
|
+
Bummr::Bisecter.instance.bisect
|
148
56
|
end
|
149
57
|
|
150
58
|
private
|
151
59
|
|
152
|
-
def
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
say message.red
|
162
|
-
log message
|
163
|
-
|
164
|
-
say "Resetting..."
|
165
|
-
system("git bisect reset")
|
166
|
-
|
167
|
-
say "Removing commit..."
|
168
|
-
if system("git rebase -X ours --onto #{sha}^ #{sha}")
|
169
|
-
say "Successfully removed bad commit...".green
|
170
|
-
say "Re-testing build...".green
|
171
|
-
test
|
172
|
-
else
|
173
|
-
say message.red
|
174
|
-
say "Could not automatically remove this commit!".red
|
175
|
-
say "Please resolve conflicts, then 'git rebase --continue'."
|
176
|
-
say "Run 'bummr test' again once the rebase is complete"
|
177
|
-
end
|
60
|
+
def ask_questions
|
61
|
+
puts "To run Bummr, you must:"
|
62
|
+
puts "- Be in the root path of a clean git branch off of master"
|
63
|
+
puts "- Have no commits or local changes"
|
64
|
+
puts "- Have a 'log' directory, where we can place logs"
|
65
|
+
puts "- Have your build configured to fail fast (recommended)"
|
66
|
+
puts "- Have locked any Gem version that you don't wish to update in your Gemfile"
|
67
|
+
puts "- It is recommended that you lock your versions of `ruby` and `rails in your Gemfile`"
|
68
|
+
puts "Your test command is: '#{TEST_COMMAND}'"
|
178
69
|
end
|
179
70
|
end
|
180
71
|
end
|
data/lib/bummr/log.rb
ADDED
data/lib/bummr/outdated.rb
CHANGED
@@ -9,7 +9,7 @@ module Bummr
|
|
9
9
|
@outdated_gems ||= begin
|
10
10
|
results = []
|
11
11
|
|
12
|
-
Open3.popen2("bundle outdated --strict") do |
|
12
|
+
Open3.popen2("bundle outdated --strict") do |_std_in, std_out|
|
13
13
|
while line = std_out.gets
|
14
14
|
puts line
|
15
15
|
gem = parse_gem_from(line)
|
@@ -25,13 +25,15 @@ module Bummr
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def parse_gem_from(line)
|
28
|
-
regex = / \* (.*) \(newest (\d
|
28
|
+
regex = / \* (.*) \(newest (\d[\d\.]*\d)[,\s] installed (\d[\d\.]*\d)[\),\s]/.match line
|
29
29
|
|
30
30
|
unless regex.nil?
|
31
31
|
{ name: regex[1], newest: regex[2], installed: regex[3] }
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
35
|
+
private
|
36
|
+
|
35
37
|
def gemfile_contains(gem_name)
|
36
38
|
/gem ['"]#{gem_name}['"]/.match gemfile
|
37
39
|
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Bummr
|
2
|
+
class Rebaser
|
3
|
+
include Singleton
|
4
|
+
include Log
|
5
|
+
|
6
|
+
def remove_commit(sha)
|
7
|
+
log "Bad commit: #{commit_message_for(sha)}, #{sha}".red
|
8
|
+
log "Resetting..."
|
9
|
+
system("git bisect reset")
|
10
|
+
|
11
|
+
log "Removing commit..."
|
12
|
+
if system("git rebase -X ours --onto #{sha}^ #{sha}")
|
13
|
+
log "Successfully removed bad commit...".green
|
14
|
+
log "Re-testing build...".green
|
15
|
+
system("bummr test")
|
16
|
+
else
|
17
|
+
log "Could not automatically remove this commit!".red
|
18
|
+
log "Please resolve conflicts, then 'git rebase --continue'."
|
19
|
+
log "Run 'bummr test' again once the rebase is complete"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def commit_message_for(sha)
|
26
|
+
`git log --pretty=format:'%s' -n 1 #{sha}`
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Bummr
|
2
|
+
class Updater
|
3
|
+
def initialize(outdated_gems)
|
4
|
+
@outdated_gems = outdated_gems
|
5
|
+
end
|
6
|
+
|
7
|
+
def update_gems
|
8
|
+
puts "Updating outdated gems".green
|
9
|
+
|
10
|
+
@outdated_gems.each_with_index do |gem, index|
|
11
|
+
update_gem(gem, index)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def update_gem(gem, index)
|
16
|
+
puts "Updating #{gem[:name]}: #{index+1} of #{@outdated_gems.count}"
|
17
|
+
system("bundle update #{gem[:name]}")
|
18
|
+
|
19
|
+
updated_version = updated_version_for(gem)
|
20
|
+
message = "Update #{gem[:name]} from #{gem[:installed]} to #{updated_version}"
|
21
|
+
|
22
|
+
if gem[:installed] == updated_version
|
23
|
+
log("#{gem[:name]} not updated")
|
24
|
+
return
|
25
|
+
end
|
26
|
+
|
27
|
+
if gem[:newest] != updated_version
|
28
|
+
log("#{gem[:name]} not updated from #{gem[:installed]} to latest: #{gem[:newest]}")
|
29
|
+
end
|
30
|
+
|
31
|
+
log "Commit: #{message}".green
|
32
|
+
system("git commit -am '#{message}'")
|
33
|
+
end
|
34
|
+
|
35
|
+
def updated_version_for(gem)
|
36
|
+
`bundle list | grep " #{gem[:name]} "`.split('(')[1].split(')')[0]
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
data/lib/bummr/version.rb
CHANGED
data/lib/bummr.rb
CHANGED
@@ -1,3 +1,15 @@
|
|
1
|
-
|
2
|
-
require "bummr/
|
1
|
+
# grouped by dependency order than alpha
|
2
|
+
require "bummr/log"
|
3
|
+
require 'colorize'
|
4
|
+
require 'open3'
|
5
|
+
require 'singleton'
|
6
|
+
require 'thor'
|
7
|
+
|
8
|
+
require "bummr/bisecter"
|
9
|
+
require "bummr/check"
|
3
10
|
require "bummr/outdated"
|
11
|
+
require "bummr/rebaser"
|
12
|
+
require "bummr/updater"
|
13
|
+
|
14
|
+
require "bummr/cli"
|
15
|
+
require "bummr/version"
|
data/spec/check_spec.rb
ADDED
@@ -0,0 +1,125 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Bummr::Check do
|
4
|
+
let(:check) { Bummr::Check.instance }
|
5
|
+
|
6
|
+
before(:each) do
|
7
|
+
allow(check)
|
8
|
+
.to receive(:check_master).and_return(nil)
|
9
|
+
allow(check)
|
10
|
+
.to receive(:check_log).and_return(nil)
|
11
|
+
allow(check)
|
12
|
+
.to receive(:check_status).and_return(nil)
|
13
|
+
allow(check)
|
14
|
+
.to receive(:check_diff).and_return(nil)
|
15
|
+
allow(check).to receive(:puts)
|
16
|
+
allow(check).to receive(:yes?).and_return(false)
|
17
|
+
allow(check).to receive(:exit).and_return(false)
|
18
|
+
end
|
19
|
+
|
20
|
+
describe "#check" do
|
21
|
+
context "all checks pass" do
|
22
|
+
context "not full check" do
|
23
|
+
it "returns 'Ready to run bummr.' and proceeds" do
|
24
|
+
check.check
|
25
|
+
|
26
|
+
expect(check).to have_received(:puts).with("Ready to run bummr.".green)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
context "full check" do
|
31
|
+
it "returns 'Ready to run bummr.' and proceeds" do
|
32
|
+
check.check(true)
|
33
|
+
|
34
|
+
expect(check).to have_received(:puts).with("Ready to run bummr.".green)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
context "check_master fails" do
|
40
|
+
it "reports the error and exits after confirm" do
|
41
|
+
allow(check)
|
42
|
+
.to receive(:check_master).and_call_original
|
43
|
+
allow(check).to receive(:`).with('git rev-parse --abbrev-ref HEAD')
|
44
|
+
.and_return "master\n"
|
45
|
+
|
46
|
+
check.check
|
47
|
+
|
48
|
+
expect(check).to have_received(:puts)
|
49
|
+
.with("Bummr is not meant to be run on master".red)
|
50
|
+
expect(check).to have_received(:yes?)
|
51
|
+
expect(check).to have_received(:exit).with(0)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
context "check_log fails" do
|
56
|
+
it "reports the error and exits after confirm" do
|
57
|
+
allow(check)
|
58
|
+
.to receive(:check_log).and_call_original
|
59
|
+
allow(File).to receive(:directory?).with('log')
|
60
|
+
.and_return false
|
61
|
+
|
62
|
+
check.check
|
63
|
+
|
64
|
+
expect(check).to have_received(:puts)
|
65
|
+
.with("There is no log directory or you are not in the root".red)
|
66
|
+
expect(check).to have_received(:yes?)
|
67
|
+
expect(check).to have_received(:exit).with(0)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
context "check_status fails" do
|
72
|
+
context "due to bisecting" do
|
73
|
+
before do
|
74
|
+
allow(check)
|
75
|
+
.to receive(:check_status).and_call_original
|
76
|
+
allow(check).to receive(:`).with('git status')
|
77
|
+
.and_return "are currently bisecting"
|
78
|
+
end
|
79
|
+
|
80
|
+
it "reports the error and exits after confirm" do
|
81
|
+
check.check
|
82
|
+
|
83
|
+
expect(check).to have_received(:puts)
|
84
|
+
.with("You are already bisecting. Make sure `git status` is clean".red)
|
85
|
+
expect(check).to have_received(:yes?)
|
86
|
+
expect(check).to have_received(:exit).with(0)
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
context "due to rebasing" do
|
91
|
+
before do
|
92
|
+
allow(check).to receive(:check_status).and_call_original
|
93
|
+
allow(check).to receive(:`).with('git status')
|
94
|
+
.and_return "are currently rebasing"
|
95
|
+
end
|
96
|
+
|
97
|
+
it "reports the error and exits after confirm" do
|
98
|
+
check.check
|
99
|
+
|
100
|
+
expect(check).to have_received(:puts)
|
101
|
+
.with("You are already rebasing. Make sure `git status` is clean".red)
|
102
|
+
expect(check).to have_received(:yes?)
|
103
|
+
expect(check).to have_received(:exit).with(0)
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
context "check_diff fails" do
|
109
|
+
before do
|
110
|
+
allow(check).to receive(:check_diff).and_call_original
|
111
|
+
allow(check).to receive(:`).with('git diff master')
|
112
|
+
.and_return "+ file"
|
113
|
+
end
|
114
|
+
|
115
|
+
it "reports the error and exits after confirm" do
|
116
|
+
check.check(true)
|
117
|
+
|
118
|
+
expect(check).to have_received(:puts)
|
119
|
+
.with("Please make sure that `git diff master` returns empty".red)
|
120
|
+
expect(check).to have_received(:yes?)
|
121
|
+
expect(check).to have_received(:exit).with(0)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Bummr::Bisecter do
|
4
|
+
let(:std_out_err_bad_commit) {
|
5
|
+
output = String.new
|
6
|
+
output += "mybadcommit is the first bad commit\n"
|
7
|
+
output += "bisect run success\n"
|
8
|
+
StringIO.new(output)
|
9
|
+
}
|
10
|
+
let(:bisecter) { described_class.instance }
|
11
|
+
let(:rebaser) { Bummr::Rebaser.instance }
|
12
|
+
|
13
|
+
before do
|
14
|
+
allow(STDOUT).to receive(:puts)
|
15
|
+
allow(bisecter).to receive(:system).with("bundle")
|
16
|
+
allow(bisecter).to receive(:system)
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "#bisect" do
|
20
|
+
context "bad commit" do
|
21
|
+
it "rebases it out" do
|
22
|
+
allow(Open3).to receive(:popen2e).and_yield(nil, std_out_err_bad_commit)
|
23
|
+
allow(rebaser).to receive(:remove_commit)
|
24
|
+
.with("mybadcommit")
|
25
|
+
|
26
|
+
bisecter.bisect
|
27
|
+
|
28
|
+
expect(rebaser).to have_received(:remove_commit).with("mybadcommit")
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,112 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Bummr::CLI do
|
4
|
+
# https://github.com/wireframe/gitx/blob/171da367072b0e82d5906d1e5b3f8ff38e5774e7/spec/thegarage/gitx/cli/release_command_spec.rb#L9
|
5
|
+
let(:args) { [] }
|
6
|
+
let(:options) { {} }
|
7
|
+
let(:config) { { pretend: true } }
|
8
|
+
let(:cli) { described_class.new(args, options, config) }
|
9
|
+
let(:outdated_gems) {
|
10
|
+
[
|
11
|
+
{ name: "myGem", installed: "0.3.2", newest: "0.3.5" },
|
12
|
+
{ name: "otherGem", installed: "1.3.2.23", newest: "1.6.5" },
|
13
|
+
{ name: "thirdGem", installed: "4.3.4", newest: "5.6.45" },
|
14
|
+
]
|
15
|
+
}
|
16
|
+
|
17
|
+
describe "#update" do
|
18
|
+
context "when user rejects moving forward" do
|
19
|
+
it "does not attempt to move forward" do
|
20
|
+
expect(cli).to receive(:yes?).and_return(false)
|
21
|
+
expect(cli).not_to receive(:check)
|
22
|
+
|
23
|
+
cli.update
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
context "when user agrees to move forward" do
|
28
|
+
context "and there are no outdated gems" do
|
29
|
+
it "informs that there are no outdated gems" do
|
30
|
+
allow_any_instance_of(Bummr::Outdated).to receive(:outdated_gems)
|
31
|
+
.and_return []
|
32
|
+
|
33
|
+
expect(cli).to receive(:ask_questions)
|
34
|
+
expect(cli).to receive(:yes?).and_return(true)
|
35
|
+
expect(cli).to receive(:check)
|
36
|
+
expect(cli).to receive(:log)
|
37
|
+
expect(cli).to receive(:system).with("bundle")
|
38
|
+
expect(cli).to receive(:puts).with("No outdated gems to update".green)
|
39
|
+
|
40
|
+
cli.update
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
context "and there are outdated gems" do
|
45
|
+
it "calls 'update' on the updater" do
|
46
|
+
allow_any_instance_of(Bummr::Outdated).to receive(:outdated_gems)
|
47
|
+
.and_return outdated_gems
|
48
|
+
updater = double
|
49
|
+
allow(updater).to receive(:update_gems)
|
50
|
+
|
51
|
+
expect(cli).to receive(:ask_questions)
|
52
|
+
expect(cli).to receive(:yes?).and_return(true)
|
53
|
+
expect(cli).to receive(:check)
|
54
|
+
expect(cli).to receive(:log)
|
55
|
+
expect(cli).to receive(:system).with("bundle")
|
56
|
+
expect(Bummr::Updater).to receive(:new).with(outdated_gems).and_return updater
|
57
|
+
expect(cli).to receive(:system).with("git rebase -i master")
|
58
|
+
expect(cli).to receive(:test)
|
59
|
+
|
60
|
+
cli.update
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
describe "#test" do
|
67
|
+
before do
|
68
|
+
allow(STDOUT).to receive(:puts)
|
69
|
+
allow(cli).to receive(:check)
|
70
|
+
allow(cli).to receive(:system)
|
71
|
+
allow(cli).to receive(:bisect)
|
72
|
+
end
|
73
|
+
|
74
|
+
context "build passes" do
|
75
|
+
it "reports that it passed the build, does not bisect" do
|
76
|
+
allow(cli).to receive(:system).with("bundle exec rake").and_return true
|
77
|
+
|
78
|
+
cli.test
|
79
|
+
|
80
|
+
expect(cli).to have_received(:check).with(false)
|
81
|
+
expect(cli).to have_received(:system).with("bundle")
|
82
|
+
expect(cli).to have_received(:system).with("bundle exec rake")
|
83
|
+
expect(cli).not_to have_received(:bisect)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
context "build fails" do
|
88
|
+
it "bisects" do
|
89
|
+
allow(cli).to receive(:system).with("bundle exec rake").and_return false
|
90
|
+
|
91
|
+
cli.test
|
92
|
+
|
93
|
+
expect(cli).to have_received(:check).with(false)
|
94
|
+
expect(cli).to have_received(:system).with("bundle")
|
95
|
+
expect(cli).to have_received(:system).with("bundle exec rake")
|
96
|
+
expect(cli).to have_received(:bisect)
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
describe "#bisect" do
|
102
|
+
it "calls Bummr:Bisecter.instance.bisect" do
|
103
|
+
allow(cli).to receive(:check)
|
104
|
+
allow_any_instance_of(Bummr::Bisecter).to receive(:bisect)
|
105
|
+
bisecter = Bummr::Bisecter.instance
|
106
|
+
|
107
|
+
cli.bisect
|
108
|
+
|
109
|
+
expect(bisecter).to have_received(:bisect)
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Bummr::Log do
|
4
|
+
let(:object) { Object.new }
|
5
|
+
let(:message) { "test message" }
|
6
|
+
|
7
|
+
before do
|
8
|
+
`mkdir -p log`
|
9
|
+
object.extend(Bummr::Log)
|
10
|
+
end
|
11
|
+
|
12
|
+
after do
|
13
|
+
`rm log/bummr.log`
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "#log" do
|
17
|
+
it "puts the message" do
|
18
|
+
allow(STDOUT).to receive(:puts)
|
19
|
+
|
20
|
+
object.log message
|
21
|
+
|
22
|
+
expect(STDOUT).to have_received(:puts).with(message)
|
23
|
+
end
|
24
|
+
|
25
|
+
it "outputs the message to log/bummr.log" do
|
26
|
+
object.log message
|
27
|
+
|
28
|
+
result = `cat log/bummr.log`
|
29
|
+
|
30
|
+
expect(result).to eq message + "\n"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Bummr::Outdated do
|
4
|
+
# https://github.com/wireframe/gitx/blob/8e3cdc8b5d0c2082ed3daaf2fc054654b2e7a6c8/spec/gitx/executor_spec.rb#L9
|
5
|
+
let(:stdoutput) {
|
6
|
+
output = String.new
|
7
|
+
output += " * devise (newest 4.1.1, installed 3.5.2) in group \"default\"\n"
|
8
|
+
output += " * rake (newest 11.1.2, installed 10.4.2)\n"
|
9
|
+
output += " * rails (newest 4.2.6, installed 4.2.5.1, requested ~> 4.2.0) in group \"default\"\n"
|
10
|
+
StringIO.new(output)
|
11
|
+
}
|
12
|
+
|
13
|
+
let(:gemfile) {
|
14
|
+
gemfile = String.new
|
15
|
+
gemfile += "gem 'devise'\n"
|
16
|
+
gemfile += "gem 'rake'\n"
|
17
|
+
gemfile += "gem 'rails'\n"
|
18
|
+
gemfile
|
19
|
+
}
|
20
|
+
|
21
|
+
describe "#outdated_gems" do
|
22
|
+
it "Correctly identifies outdated gems" do
|
23
|
+
allow(Open3).to receive(:popen2).and_yield(nil, stdoutput)
|
24
|
+
allow_any_instance_of(described_class).to receive(:gemfile).and_return gemfile
|
25
|
+
|
26
|
+
instance = Bummr::Outdated.instance
|
27
|
+
result = instance.outdated_gems
|
28
|
+
|
29
|
+
expect(result[0][:name]).to eq('devise')
|
30
|
+
expect(result[0][:newest]).to eq('4.1.1')
|
31
|
+
expect(result[0][:installed]).to eq('3.5.2')
|
32
|
+
|
33
|
+
expect(result[1][:name]).to eq('rake')
|
34
|
+
expect(result[1][:newest]).to eq('11.1.2')
|
35
|
+
expect(result[1][:installed]).to eq('10.4.2')
|
36
|
+
|
37
|
+
expect(result[2][:name]).to eq('rails')
|
38
|
+
expect(result[2][:newest]).to eq('4.2.6')
|
39
|
+
expect(result[2][:installed]).to eq('4.2.5.1')
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe "#parse_gem_from" do
|
44
|
+
it 'line' do
|
45
|
+
line = ' * devise (newest 4.1.1, installed 3.5.2) in group "default"'
|
46
|
+
|
47
|
+
gem = Bummr::Outdated.instance.parse_gem_from(line)
|
48
|
+
|
49
|
+
expect(gem[:name]).to eq('devise')
|
50
|
+
expect(gem[:newest]).to eq('4.1.1')
|
51
|
+
expect(gem[:installed]).to eq('3.5.2')
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'line in group' do
|
55
|
+
line = ' * rake (newest 11.1.2, installed 10.4.2)'
|
56
|
+
|
57
|
+
gem = Bummr::Outdated.instance.parse_gem_from(line)
|
58
|
+
|
59
|
+
expect(gem[:name]).to eq('rake')
|
60
|
+
expect(gem[:newest]).to eq('11.1.2')
|
61
|
+
expect(gem[:installed]).to eq('10.4.2')
|
62
|
+
end
|
63
|
+
|
64
|
+
it 'line with requested' do
|
65
|
+
line = ' * rails (newest 4.2.6, installed 4.2.5.1, requested ~> 4.2.0) in group "default"'
|
66
|
+
|
67
|
+
gem = Bummr::Outdated.instance.parse_gem_from(line)
|
68
|
+
|
69
|
+
expect(gem[:name]).to eq('rails')
|
70
|
+
expect(gem[:newest]).to eq('4.2.6')
|
71
|
+
expect(gem[:installed]).to eq('4.2.5.1')
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Bummr::Rebaser do
|
4
|
+
# let(:commit_message) { "test commit message" }
|
5
|
+
let(:rebaser) { Bummr::Rebaser.instance }
|
6
|
+
let(:sha) { "testsha" }
|
7
|
+
let(:rebase_command) { "git rebase -X ours --onto #{sha}^ #{sha}" }
|
8
|
+
|
9
|
+
before do
|
10
|
+
allow(rebaser).to receive(:commit_message_for).and_return "commit message"
|
11
|
+
allow(rebaser).to receive(:log)
|
12
|
+
allow(rebaser).to receive(:system)
|
13
|
+
end
|
14
|
+
|
15
|
+
describe "#remove_commit" do
|
16
|
+
it "logs the bad commit" do
|
17
|
+
rebaser.remove_commit(sha)
|
18
|
+
|
19
|
+
expect(rebaser).to have_received(:log).with(
|
20
|
+
"Bad commit: commit message, #{sha}".red
|
21
|
+
)
|
22
|
+
end
|
23
|
+
|
24
|
+
it "resets the bisection" do
|
25
|
+
rebaser.remove_commit(sha)
|
26
|
+
|
27
|
+
expect(rebaser).to have_received(:system).with("git bisect reset")
|
28
|
+
end
|
29
|
+
|
30
|
+
context "successfully rebases the commit out" do
|
31
|
+
before(:each) do
|
32
|
+
allow(rebaser).to receive(:system).with(rebase_command).and_return true
|
33
|
+
end
|
34
|
+
|
35
|
+
it "logs the successful result" do
|
36
|
+
rebaser.remove_commit(sha)
|
37
|
+
|
38
|
+
expect(rebaser).to have_received(:log).with(
|
39
|
+
"Successfully removed bad commit...".green
|
40
|
+
)
|
41
|
+
end
|
42
|
+
|
43
|
+
it "tests the build again" do
|
44
|
+
rebaser.remove_commit(sha)
|
45
|
+
|
46
|
+
expect(rebaser).to have_received(:system).with "bummr test"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
context "fails to rebase the commit out" do
|
51
|
+
before(:each) do
|
52
|
+
allow(rebaser).to receive(:system).with(rebase_command).and_return false
|
53
|
+
end
|
54
|
+
|
55
|
+
it "logs the failure to rebase" do
|
56
|
+
rebaser.remove_commit(sha)
|
57
|
+
|
58
|
+
expect(rebaser).to have_received(:log).with(
|
59
|
+
"Could not automatically remove this commit!".red
|
60
|
+
)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,133 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Bummr::Updater do
|
4
|
+
let(:outdated_gems) {
|
5
|
+
[
|
6
|
+
{ name: "myGem", installed: "0.3.2", newest: "0.3.5" },
|
7
|
+
{ name: "otherGem", installed: "1.3.2.23", newest: "1.6.5" },
|
8
|
+
{ name: "thirdGem", installed: "4.3.4", newest: "5.6.45" },
|
9
|
+
]
|
10
|
+
}
|
11
|
+
let(:gem) { outdated_gems[0] }
|
12
|
+
let(:updater) { described_class.new(outdated_gems) }
|
13
|
+
let(:newest) { outdated_gems[0][:newest] }
|
14
|
+
let(:installed) { outdated_gems[0][:installed] }
|
15
|
+
let(:intermediate_version) { "0.3.4" }
|
16
|
+
let(:update_cmd) { "bundle update #{gem[:name]}" }
|
17
|
+
|
18
|
+
describe "#update_gems" do
|
19
|
+
it "calls update_gem on each gem" do
|
20
|
+
allow(updater).to receive(:update_gem)
|
21
|
+
|
22
|
+
updater.update_gems
|
23
|
+
|
24
|
+
outdated_gems.each_with_index do |gem, index|
|
25
|
+
expect(updater).to have_received(:update_gem).with(gem, index)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe "#update_gem" do
|
31
|
+
it "attempts to update the gem" do
|
32
|
+
allow(updater).to receive(:system).with(update_cmd)
|
33
|
+
allow(updater).to receive(:updated_version_for).with(gem).and_return installed
|
34
|
+
allow(updater).to receive(:log)
|
35
|
+
|
36
|
+
updater.update_gem(gem, 0)
|
37
|
+
end
|
38
|
+
|
39
|
+
context "not updated at all" do
|
40
|
+
it "logs that it's not updated to the latest" do
|
41
|
+
allow(updater).to receive(:system).with(update_cmd)
|
42
|
+
allow(updater).to receive(:updated_version_for).with(gem).and_return installed
|
43
|
+
allow(updater).to receive(:log)
|
44
|
+
|
45
|
+
updater.update_gem(gem, 0)
|
46
|
+
|
47
|
+
expect(updater).to have_received(:log).with("#{gem[:name]} not updated")
|
48
|
+
end
|
49
|
+
|
50
|
+
it "doesn't commit anything" do
|
51
|
+
allow(updater).to receive(:system).with(update_cmd)
|
52
|
+
allow(updater).to receive(:updated_version_for).with(gem).and_return installed
|
53
|
+
allow(updater).to receive(:log)
|
54
|
+
|
55
|
+
updater.update_gem(gem, 0)
|
56
|
+
|
57
|
+
expect(updater).to_not have_received(:system).with /git commit/
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
context "not updated to the newest version" do
|
62
|
+
before(:each) do
|
63
|
+
allow(updater).to receive(:updated_version_for).with(gem).and_return(
|
64
|
+
intermediate_version
|
65
|
+
)
|
66
|
+
end
|
67
|
+
|
68
|
+
it "logs that it's not updated to the latest" do
|
69
|
+
not_latest_message =
|
70
|
+
"#{gem[:name]} not updated from #{gem[:installed]} to latest: #{gem[:newest]}"
|
71
|
+
allow(updater).to receive(:system)
|
72
|
+
allow(updater).to receive(:log)
|
73
|
+
|
74
|
+
updater.update_gem(gem, 0)
|
75
|
+
|
76
|
+
expect(updater).to have_received(:log).with not_latest_message
|
77
|
+
end
|
78
|
+
|
79
|
+
it "commits" do
|
80
|
+
commit_message =
|
81
|
+
"'Update #{gem[:name]} from #{gem[:installed]} to #{intermediate_version}'"
|
82
|
+
allow(updater).to receive(:system)
|
83
|
+
allow(updater).to receive(:log)
|
84
|
+
|
85
|
+
updater.update_gem(gem, 0)
|
86
|
+
|
87
|
+
expect(updater).to have_received(:system).with(
|
88
|
+
"git commit -am #{commit_message}"
|
89
|
+
)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
context "updated the gem to the latest" do
|
94
|
+
before(:each) do
|
95
|
+
allow(updater).to receive(:updated_version_for).and_return newest
|
96
|
+
end
|
97
|
+
|
98
|
+
it "logs the commit" do
|
99
|
+
commit_message =
|
100
|
+
"Commit: Update #{gem[:name]} from #{gem[:installed]} to #{gem[:newest]}".green
|
101
|
+
allow(updater).to receive(:system)
|
102
|
+
allow(updater).to receive(:log)
|
103
|
+
|
104
|
+
updater.update_gem(gem, 0)
|
105
|
+
|
106
|
+
expect(updater).to have_received(:log).with commit_message
|
107
|
+
end
|
108
|
+
|
109
|
+
it "commits" do
|
110
|
+
commit_message =
|
111
|
+
"Update #{gem[:name]} from #{gem[:installed]} to #{gem[:newest]}"
|
112
|
+
allow(updater).to receive(:system)
|
113
|
+
allow(updater).to receive(:log)
|
114
|
+
|
115
|
+
updater.update_gem(gem, 0)
|
116
|
+
|
117
|
+
expect(updater).to have_received(:system).with(
|
118
|
+
"git commit -am '#{commit_message}'"
|
119
|
+
)
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
describe "#updated_version_for" do
|
125
|
+
it "returns the correct version from bundle list" do
|
126
|
+
allow(updater).to receive(:`).with(
|
127
|
+
"bundle list | grep \" #{gem[:name]} \""
|
128
|
+
).and_return(" * #{gem[:name]} (3.5.2)\n")
|
129
|
+
|
130
|
+
expect(updater.updated_version_for(gem)).to eq "3.5.2"
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bummr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lee Pender
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-06-
|
11
|
+
date: 2016-06-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: spring
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: bundler
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -150,6 +164,20 @@ dependencies:
|
|
150
164
|
- - ">="
|
151
165
|
- !ruby/object:Gem::Version
|
152
166
|
version: '0'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: codeclimate-test-reporter
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - ">="
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
type: :development
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - ">="
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '0'
|
153
181
|
description: See Readme
|
154
182
|
email:
|
155
183
|
- lpender@gmail.com
|
@@ -166,10 +194,21 @@ files:
|
|
166
194
|
- bin/bummr
|
167
195
|
- bummr.gemspec
|
168
196
|
- lib/bummr.rb
|
197
|
+
- lib/bummr/bisecter.rb
|
198
|
+
- lib/bummr/check.rb
|
169
199
|
- lib/bummr/cli.rb
|
200
|
+
- lib/bummr/log.rb
|
170
201
|
- lib/bummr/outdated.rb
|
202
|
+
- lib/bummr/rebaser.rb
|
203
|
+
- lib/bummr/updater.rb
|
171
204
|
- lib/bummr/version.rb
|
172
|
-
- spec/
|
205
|
+
- spec/check_spec.rb
|
206
|
+
- spec/lib/bisecter_spec.rb
|
207
|
+
- spec/lib/cli_spec.rb
|
208
|
+
- spec/lib/log_spec.rb
|
209
|
+
- spec/lib/outdated_spec.rb
|
210
|
+
- spec/lib/rebaser_spec.rb
|
211
|
+
- spec/lib/updater_spec.rb
|
173
212
|
- spec/spec_helper.rb
|
174
213
|
homepage: https://github.com/lpender/bummr
|
175
214
|
licenses:
|
@@ -196,5 +235,11 @@ signing_key:
|
|
196
235
|
specification_version: 4
|
197
236
|
summary: Helper script to intelligently update your Gemfile
|
198
237
|
test_files:
|
199
|
-
- spec/
|
238
|
+
- spec/check_spec.rb
|
239
|
+
- spec/lib/bisecter_spec.rb
|
240
|
+
- spec/lib/cli_spec.rb
|
241
|
+
- spec/lib/log_spec.rb
|
242
|
+
- spec/lib/outdated_spec.rb
|
243
|
+
- spec/lib/rebaser_spec.rb
|
244
|
+
- spec/lib/updater_spec.rb
|
200
245
|
- spec/spec_helper.rb
|
data/spec/outdated_spec.rb
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Bummr::Outdated do
|
4
|
-
describe "#parse_gem_from" do
|
5
|
-
it 'line' do
|
6
|
-
line = ' * devise (newest 4.1.1, installed 3.5.2) in group "default"'
|
7
|
-
|
8
|
-
gem = Bummr::Outdated.instance.parse_gem_from(line)
|
9
|
-
|
10
|
-
expect(gem[:name]).to eq('devise')
|
11
|
-
expect(gem[:newest]).to eq('4.1.1')
|
12
|
-
expect(gem[:installed]).to eq('3.5.2')
|
13
|
-
end
|
14
|
-
|
15
|
-
it 'line in group' do
|
16
|
-
line = ' * rake (newest 11.1.2, installed 10.4.2)'
|
17
|
-
|
18
|
-
gem = Bummr::Outdated.instance.parse_gem_from(line)
|
19
|
-
|
20
|
-
expect(gem[:name]).to eq('rake')
|
21
|
-
expect(gem[:newest]).to eq('11.1.2')
|
22
|
-
expect(gem[:installed]).to eq('10.4.2')
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|