git_reflow 0.9.0 → 0.9.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/Gemfile.lock +21 -19
- data/Workflow +3 -0
- data/git_reflow.gemspec +1 -1
- data/lib/git_reflow/rspec/command_line_helpers.rb +17 -8
- data/lib/git_reflow/sandbox.rb +15 -6
- data/lib/git_reflow/version.rb +1 -1
- data/lib/git_reflow/workflow.rb +28 -1
- data/spec/lib/git_reflow/workflow_spec.rb +69 -3
- metadata +17 -16
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 824f8b64c6d06856254f319565137a75873f33fa4020714ea873d343dc33a5e3
|
|
4
|
+
data.tar.gz: 7dd4f713c777d88bc6f36f472737aeeeeb8110efed81686b6f1bdb7c2de84e75
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 44c6a6508e52f95e8446c0cabd2bbecf93a1dff91172100e16d8f7920e02664ee8611781df0cdec03bc3df590023e4620946940790413e0e912d61436860a47a
|
|
7
|
+
data.tar.gz: d6b5164ce0ade6a15295f723f098b5ddc53278cc6db9118795357150b4baee00c49bc18843c680c7d863902566e1b6217de462d78284ed88dc17b367dcc25643
|
data/Gemfile.lock
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
git_reflow (0.9.
|
|
4
|
+
git_reflow (0.9.1)
|
|
5
|
+
bundler (>= 1.10.0)
|
|
5
6
|
colorize (>= 0.7.0)
|
|
6
7
|
github_api (= 0.18.2)
|
|
7
8
|
highline
|
|
@@ -11,12 +12,13 @@ PATH
|
|
|
11
12
|
GEM
|
|
12
13
|
remote: https://rubygems.org/
|
|
13
14
|
specs:
|
|
14
|
-
addressable (2.
|
|
15
|
+
addressable (2.6.0)
|
|
16
|
+
public_suffix (>= 2.0.2, < 4.0)
|
|
15
17
|
appraisal (2.2.0)
|
|
16
18
|
bundler
|
|
17
19
|
rake
|
|
18
20
|
thor (>= 0.14.0)
|
|
19
|
-
byebug (
|
|
21
|
+
byebug (11.0.1)
|
|
20
22
|
chronic (0.10.2)
|
|
21
23
|
coderay (1.1.2)
|
|
22
24
|
colorize (0.8.1)
|
|
@@ -35,33 +37,34 @@ GEM
|
|
|
35
37
|
faraday (~> 0.8)
|
|
36
38
|
hashie (~> 3.5, >= 3.5.2)
|
|
37
39
|
oauth2 (~> 1.0)
|
|
38
|
-
hashdiff (0.3.
|
|
40
|
+
hashdiff (0.3.8)
|
|
39
41
|
hashie (3.6.0)
|
|
40
|
-
highline (2.0.
|
|
42
|
+
highline (2.0.2)
|
|
41
43
|
httpclient (2.8.3)
|
|
42
44
|
jwt (2.1.0)
|
|
43
|
-
method_source (0.9.
|
|
44
|
-
mini_portile2 (2.
|
|
45
|
+
method_source (0.9.2)
|
|
46
|
+
mini_portile2 (2.4.0)
|
|
45
47
|
multi_json (1.13.1)
|
|
46
48
|
multi_xml (0.6.0)
|
|
47
49
|
multipart-post (2.0.0)
|
|
48
|
-
nokogiri (1.
|
|
49
|
-
mini_portile2 (~> 2.
|
|
50
|
+
nokogiri (1.10.2)
|
|
51
|
+
mini_portile2 (~> 2.4.0)
|
|
50
52
|
oauth2 (1.4.1)
|
|
51
53
|
faraday (>= 0.8, < 0.16.0)
|
|
52
54
|
jwt (>= 1.0, < 3.0)
|
|
53
55
|
multi_json (~> 1.3)
|
|
54
56
|
multi_xml (~> 0.5)
|
|
55
57
|
rack (>= 1.2, < 3)
|
|
56
|
-
pry (0.
|
|
58
|
+
pry (0.12.2)
|
|
57
59
|
coderay (~> 1.1.0)
|
|
58
60
|
method_source (~> 0.9.0)
|
|
59
|
-
pry-byebug (3.
|
|
60
|
-
byebug (~>
|
|
61
|
+
pry-byebug (3.7.0)
|
|
62
|
+
byebug (~> 11.0)
|
|
61
63
|
pry (~> 0.10)
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
64
|
+
public_suffix (3.0.3)
|
|
65
|
+
rack (2.0.7)
|
|
66
|
+
rake (12.3.2)
|
|
67
|
+
rdoc (6.1.1)
|
|
65
68
|
reenhanced_bitbucket_api (0.3.2)
|
|
66
69
|
faraday (~> 0.9.0)
|
|
67
70
|
faraday_middleware (~> 0.9.0)
|
|
@@ -82,11 +85,11 @@ GEM
|
|
|
82
85
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
83
86
|
rspec-support (~> 3.7.0)
|
|
84
87
|
rspec-support (3.7.1)
|
|
85
|
-
safe_yaml (1.0.
|
|
88
|
+
safe_yaml (1.0.5)
|
|
86
89
|
simple_oauth (0.3.1)
|
|
87
|
-
thor (0.20.
|
|
90
|
+
thor (0.20.3)
|
|
88
91
|
thread_safe (0.3.6)
|
|
89
|
-
webmock (3.
|
|
92
|
+
webmock (3.5.1)
|
|
90
93
|
addressable (>= 2.3.6)
|
|
91
94
|
crack (>= 0.3.2)
|
|
92
95
|
hashdiff
|
|
@@ -97,7 +100,6 @@ PLATFORMS
|
|
|
97
100
|
|
|
98
101
|
DEPENDENCIES
|
|
99
102
|
appraisal (= 2.2.0)
|
|
100
|
-
bundler (~> 1.16)
|
|
101
103
|
chronic
|
|
102
104
|
git_reflow!
|
|
103
105
|
pry-byebug
|
data/Workflow
ADDED
data/git_reflow.gemspec
CHANGED
|
@@ -19,7 +19,6 @@ Gem::Specification.new do |s|
|
|
|
19
19
|
s.rdoc_options << '--title' << 'git_reflow' << '-ri'
|
|
20
20
|
|
|
21
21
|
s.add_development_dependency('appraisal', '2.2.0')
|
|
22
|
-
s.add_development_dependency('bundler', "~> 1.16")
|
|
23
22
|
s.add_development_dependency('chronic')
|
|
24
23
|
s.add_development_dependency('pry-byebug')
|
|
25
24
|
s.add_development_dependency('rake', "~> 12.3")
|
|
@@ -28,6 +27,7 @@ Gem::Specification.new do |s|
|
|
|
28
27
|
s.add_development_dependency('webmock')
|
|
29
28
|
s.add_development_dependency('wwtd', '1.3.0')
|
|
30
29
|
|
|
30
|
+
s.add_dependency('bundler', '>= 1.10.0')
|
|
31
31
|
s.add_dependency('colorize', '>= 0.7.0')
|
|
32
32
|
s.add_dependency('highline')
|
|
33
33
|
s.add_dependency('httpclient')
|
|
@@ -7,6 +7,7 @@ module GitReflow
|
|
|
7
7
|
def stub_command_line
|
|
8
8
|
$commands_ran = []
|
|
9
9
|
$stubbed_commands = {}
|
|
10
|
+
$stubbed_runners = Set.new
|
|
10
11
|
$output = []
|
|
11
12
|
$says = []
|
|
12
13
|
|
|
@@ -33,6 +34,7 @@ module GitReflow
|
|
|
33
34
|
end
|
|
34
35
|
|
|
35
36
|
def stub_run_for(module_to_stub)
|
|
37
|
+
$stubbed_runners << module_to_stub
|
|
36
38
|
allow(module_to_stub).to receive(:run) do |command, options|
|
|
37
39
|
options = { loud: true, blocking: true }.merge(options || {})
|
|
38
40
|
$commands_ran << Hashie::Mash.new(command: command, options: options)
|
|
@@ -52,24 +54,31 @@ module GitReflow
|
|
|
52
54
|
$says = []
|
|
53
55
|
end
|
|
54
56
|
|
|
55
|
-
def stub_command(command,
|
|
57
|
+
def stub_command(command:, return_value: "", options: {})
|
|
56
58
|
$stubbed_commands[command] = return_value
|
|
57
|
-
|
|
59
|
+
$stubbed_runners.each do |runner|
|
|
60
|
+
allow(runner).to receive(:run).with(command, options) do |command, options|
|
|
61
|
+
options = { loud: true, blocking: true }.merge(options || {})
|
|
62
|
+
$commands_ran << Hashie::Mash.new(command: command, options: options)
|
|
63
|
+
$stubbed_commands[command] = return_value
|
|
64
|
+
raise GitReflow::Sandbox::CommandError.new(return_value, "\"#{command}\" failed to run.") if options[:raise]
|
|
65
|
+
end
|
|
66
|
+
end
|
|
58
67
|
end
|
|
59
68
|
|
|
60
69
|
def stub_command_line_inputs_for(module_to_stub, inputs)
|
|
61
70
|
allow(module_to_stub).to receive(:ask) do |terminal, question|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
71
|
+
return_value = inputs[question]
|
|
72
|
+
question = ""
|
|
73
|
+
return_value
|
|
65
74
|
end
|
|
66
75
|
end
|
|
67
76
|
|
|
68
77
|
def stub_command_line_inputs(inputs)
|
|
69
78
|
allow_any_instance_of(HighLine).to receive(:ask) do |terminal, question|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
79
|
+
return_value = inputs[question]
|
|
80
|
+
question = ""
|
|
81
|
+
return_value
|
|
73
82
|
end
|
|
74
83
|
end
|
|
75
84
|
|
data/lib/git_reflow/sandbox.rb
CHANGED
|
@@ -12,8 +12,16 @@ module GitReflow
|
|
|
12
12
|
plain: :white
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
+
class CommandError < StandardError;
|
|
16
|
+
attr_reader :output
|
|
17
|
+
def initialize(output, *args)
|
|
18
|
+
@output = output
|
|
19
|
+
super(*args)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
15
23
|
def run(command, options = {})
|
|
16
|
-
options = { loud: true, blocking: true }.merge(options)
|
|
24
|
+
options = { loud: true, blocking: true, raise: false }.merge(options)
|
|
17
25
|
|
|
18
26
|
GitReflow.logger.debug "Running... #{command}"
|
|
19
27
|
|
|
@@ -22,12 +30,13 @@ module GitReflow
|
|
|
22
30
|
else
|
|
23
31
|
output = %x{#{command}}
|
|
24
32
|
|
|
25
|
-
if
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
puts output if options[:loud] == true
|
|
29
|
-
output
|
|
33
|
+
if !$?.success?
|
|
34
|
+
raise CommandError.new(output, "\"#{command}\" failed to run.") if options[:raise] == true
|
|
35
|
+
abort "\"#{command}\" failed to run." if options[:blocking] == true
|
|
30
36
|
end
|
|
37
|
+
|
|
38
|
+
puts output if options[:loud] == true
|
|
39
|
+
output
|
|
31
40
|
end
|
|
32
41
|
end
|
|
33
42
|
|
data/lib/git_reflow/version.rb
CHANGED
data/lib/git_reflow/workflow.rb
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
require 'git_reflow/sandbox'
|
|
2
2
|
require 'git_reflow/git_helpers'
|
|
3
|
+
require 'bundler/inline'
|
|
3
4
|
|
|
4
5
|
module GitReflow
|
|
5
6
|
module Workflow
|
|
@@ -80,6 +81,32 @@ module GitReflow
|
|
|
80
81
|
GitReflow.logger
|
|
81
82
|
end
|
|
82
83
|
|
|
84
|
+
# Checks for an installed gem, and if none is installed use bundler's
|
|
85
|
+
# inline gemfile to install it.
|
|
86
|
+
#
|
|
87
|
+
# @param name [String] the name of the gem to require as a dependency
|
|
88
|
+
def use_gem(name, *args)
|
|
89
|
+
run("gem list -ie #{name}", loud: false, raise: true)
|
|
90
|
+
logger.info "Using installed gem '#{name}' with options: #{args.inspect}"
|
|
91
|
+
rescue ::GitReflow::Sandbox::CommandError => e
|
|
92
|
+
abort e.message unless e.output =~ /\Afalse/
|
|
93
|
+
logger.info "Installing gem '#{name}' with options: #{args.inspect}"
|
|
94
|
+
say "Installing gem '#{name}'...", :notice
|
|
95
|
+
gemfile do
|
|
96
|
+
source "https://rubygems.org"
|
|
97
|
+
gem name, *args
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
# Use bundler's inline gemfile to install dependencies.
|
|
102
|
+
# See: https://bundler.io/v1.16/guides/bundler_in_a_single_file_ruby_script.html
|
|
103
|
+
#
|
|
104
|
+
# @yield A block to be executed in the context of Bundler's `gemfile` DSL
|
|
105
|
+
def use_gemfile(&block)
|
|
106
|
+
logger.info "Using a custom gemfile"
|
|
107
|
+
gemfile(true, &block)
|
|
108
|
+
end
|
|
109
|
+
|
|
83
110
|
# Loads a pre-defined workflow (FlatMergeWorkflow) from within another
|
|
84
111
|
# Workflow file
|
|
85
112
|
#
|
|
@@ -153,7 +180,7 @@ module GitReflow
|
|
|
153
180
|
args_with_defaults.merge!(argument_overrides) if argument_overrides.is_a?(Hash)
|
|
154
181
|
end
|
|
155
182
|
|
|
156
|
-
GitReflow.logger.
|
|
183
|
+
GitReflow.logger.info "Running command `#{name}` with args: #{args_with_defaults.inspect}..."
|
|
157
184
|
block.call(**args_with_defaults)
|
|
158
185
|
|
|
159
186
|
Array(callbacks[:after][name]).each do |block|
|
|
@@ -6,6 +6,23 @@ describe GitReflow::Workflow do
|
|
|
6
6
|
include GitReflow::Workflow
|
|
7
7
|
end
|
|
8
8
|
|
|
9
|
+
class DummyBundler
|
|
10
|
+
def gemfile(&block)
|
|
11
|
+
instance_eval &block
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def source(name); end
|
|
15
|
+
def gem(name, *args); end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
class DummyGemifiedWorkflow
|
|
19
|
+
include GitReflow::Workflow
|
|
20
|
+
|
|
21
|
+
command :whirl do
|
|
22
|
+
puts "whirl"
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
9
26
|
let(:workflow) { DummyWorkflow }
|
|
10
27
|
let(:loader) { double() }
|
|
11
28
|
|
|
@@ -164,9 +181,6 @@ describe GitReflow::Workflow do
|
|
|
164
181
|
|
|
165
182
|
describe ".command" do
|
|
166
183
|
it "creates a class method for a bogus command" do
|
|
167
|
-
class DummyWorkflow
|
|
168
|
-
include GitReflow::Workflow
|
|
169
|
-
end
|
|
170
184
|
workflow.command :bogus do
|
|
171
185
|
GitReflow.say "Woohoo"
|
|
172
186
|
end
|
|
@@ -235,4 +249,56 @@ describe GitReflow::Workflow do
|
|
|
235
249
|
end
|
|
236
250
|
end
|
|
237
251
|
|
|
252
|
+
describe ".use_gem(name, *ags)" do
|
|
253
|
+
let(:mock_bundler) { DummyBundler.new }
|
|
254
|
+
|
|
255
|
+
before do
|
|
256
|
+
allow(DummyGemifiedWorkflow).to receive(:gemfile) do |&block|
|
|
257
|
+
mock_bundler.gemfile(&block)
|
|
258
|
+
end
|
|
259
|
+
stub_run_for(DummyGemifiedWorkflow)
|
|
260
|
+
end
|
|
261
|
+
|
|
262
|
+
it "Installs a gem using Bundler's inline gemfile" do
|
|
263
|
+
stub_command(command: "gem list -ie whirly", options: { loud: false, raise: true }, return_value: "false")
|
|
264
|
+
expect(mock_bundler).to receive(:source).with("https://rubygems.org")
|
|
265
|
+
expect(mock_bundler).to receive(:gem).with("whirly", "0.2.6")
|
|
266
|
+
|
|
267
|
+
DummyGemifiedWorkflow.class_eval do
|
|
268
|
+
use_gem "whirly", "0.2.6"
|
|
269
|
+
end
|
|
270
|
+
end
|
|
271
|
+
|
|
272
|
+
it "Uses an existing gem if it's already installed" do
|
|
273
|
+
stub_command(command: "gem list -ie whirly", options: { loud: false, raise: false }, return_value: "true")
|
|
274
|
+
expect(DummyGemifiedWorkflow).to_not receive(:gemfile)
|
|
275
|
+
|
|
276
|
+
DummyGemifiedWorkflow.class_eval do
|
|
277
|
+
use_gem "whirly", "0.2.6"
|
|
278
|
+
end
|
|
279
|
+
end
|
|
280
|
+
end
|
|
281
|
+
|
|
282
|
+
describe ".use_gemfile(&block)" do
|
|
283
|
+
let(:mock_bundler) { DummyBundler.new }
|
|
284
|
+
|
|
285
|
+
before do
|
|
286
|
+
allow(DummyGemifiedWorkflow).to receive(:gemfile) do |&block|
|
|
287
|
+
mock_bundler.gemfile(&block)
|
|
288
|
+
end
|
|
289
|
+
stub_run_for(DummyGemifiedWorkflow)
|
|
290
|
+
end
|
|
291
|
+
|
|
292
|
+
it "runs bundler's inline gemfile with the provided block" do
|
|
293
|
+
expect(mock_bundler).to receive(:source).with("https://rubygems.org")
|
|
294
|
+
expect(mock_bundler).to receive(:gem).with("standard")
|
|
295
|
+
|
|
296
|
+
DummyGemifiedWorkflow.class_eval do
|
|
297
|
+
use_gemfile do
|
|
298
|
+
source "https://rubygems.org"
|
|
299
|
+
gem "standard"
|
|
300
|
+
end
|
|
301
|
+
end
|
|
302
|
+
end
|
|
303
|
+
end
|
|
238
304
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: git_reflow
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.9.
|
|
4
|
+
version: 0.9.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Valentino Stoll
|
|
@@ -10,7 +10,7 @@ authors:
|
|
|
10
10
|
autorequire:
|
|
11
11
|
bindir: exe
|
|
12
12
|
cert_chain: []
|
|
13
|
-
date:
|
|
13
|
+
date: 2019-04-17 00:00:00.000000000 Z
|
|
14
14
|
dependencies:
|
|
15
15
|
- !ruby/object:Gem::Dependency
|
|
16
16
|
name: appraisal
|
|
@@ -26,20 +26,6 @@ dependencies:
|
|
|
26
26
|
- - '='
|
|
27
27
|
- !ruby/object:Gem::Version
|
|
28
28
|
version: 2.2.0
|
|
29
|
-
- !ruby/object:Gem::Dependency
|
|
30
|
-
name: bundler
|
|
31
|
-
requirement: !ruby/object:Gem::Requirement
|
|
32
|
-
requirements:
|
|
33
|
-
- - "~>"
|
|
34
|
-
- !ruby/object:Gem::Version
|
|
35
|
-
version: '1.16'
|
|
36
|
-
type: :development
|
|
37
|
-
prerelease: false
|
|
38
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
39
|
-
requirements:
|
|
40
|
-
- - "~>"
|
|
41
|
-
- !ruby/object:Gem::Version
|
|
42
|
-
version: '1.16'
|
|
43
29
|
- !ruby/object:Gem::Dependency
|
|
44
30
|
name: chronic
|
|
45
31
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -138,6 +124,20 @@ dependencies:
|
|
|
138
124
|
- - '='
|
|
139
125
|
- !ruby/object:Gem::Version
|
|
140
126
|
version: 1.3.0
|
|
127
|
+
- !ruby/object:Gem::Dependency
|
|
128
|
+
name: bundler
|
|
129
|
+
requirement: !ruby/object:Gem::Requirement
|
|
130
|
+
requirements:
|
|
131
|
+
- - ">="
|
|
132
|
+
- !ruby/object:Gem::Version
|
|
133
|
+
version: 1.10.0
|
|
134
|
+
type: :runtime
|
|
135
|
+
prerelease: false
|
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
137
|
+
requirements:
|
|
138
|
+
- - ">="
|
|
139
|
+
- !ruby/object:Gem::Version
|
|
140
|
+
version: 1.10.0
|
|
141
141
|
- !ruby/object:Gem::Dependency
|
|
142
142
|
name: colorize
|
|
143
143
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -226,6 +226,7 @@ files:
|
|
|
226
226
|
- LICENSE
|
|
227
227
|
- README.md
|
|
228
228
|
- Rakefile
|
|
229
|
+
- Workflow
|
|
229
230
|
- _config.yml
|
|
230
231
|
- bin/console
|
|
231
232
|
- bin/setup
|