git-process 1.0.11 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. data/CHANGELOG.md +37 -9
  2. data/Gemfile +2 -2
  3. data/Gemfile.lock +17 -17
  4. data/README.md +14 -7
  5. data/bin/git-new-fb +10 -2
  6. data/bin/git-pull-request +30 -6
  7. data/bin/git-sync +5 -2
  8. data/bin/git-to-master +62 -11
  9. data/git-process.gemspec +15 -15
  10. data/lib/git-process/abstract_error_builder.rb +0 -3
  11. data/lib/git-process/changed_file_helper.rb +30 -24
  12. data/lib/git-process/git_abstract_merge_error_builder.rb +31 -11
  13. data/lib/git-process/git_branch.rb +5 -0
  14. data/lib/git-process/git_config.rb +153 -0
  15. data/lib/git-process/git_lib.rb +212 -164
  16. data/lib/git-process/git_logger.rb +84 -0
  17. data/lib/git-process/git_merge_error.rb +3 -14
  18. data/lib/git-process/git_process.rb +44 -73
  19. data/lib/git-process/git_process_options.rb +6 -6
  20. data/lib/git-process/git_rebase_error.rb +4 -13
  21. data/lib/git-process/git_remote.rb +254 -0
  22. data/lib/git-process/github_configuration.rb +298 -0
  23. data/lib/git-process/github_pull_request.rb +65 -27
  24. data/lib/git-process/new_fb.rb +14 -4
  25. data/lib/git-process/parked_changes_error.rb +1 -1
  26. data/lib/git-process/pull_request.rb +100 -13
  27. data/lib/git-process/pull_request_error.rb +25 -0
  28. data/lib/git-process/rebase_to_master.rb +47 -27
  29. data/lib/git-process/sync.rb +48 -33
  30. data/lib/git-process/uncommitted_changes_error.rb +1 -1
  31. data/lib/git-process/version.rb +2 -2
  32. data/spec/GitRepoHelper.rb +48 -25
  33. data/spec/changed_file_helper_spec.rb +39 -58
  34. data/spec/git_abstract_merge_error_builder_spec.rb +42 -33
  35. data/spec/git_branch_spec.rb +30 -30
  36. data/spec/git_config_spec.rb +45 -0
  37. data/spec/git_lib_spec.rb +103 -122
  38. data/spec/git_logger_spec.rb +66 -0
  39. data/spec/git_process_spec.rb +81 -81
  40. data/spec/git_remote_spec.rb +188 -0
  41. data/spec/git_status_spec.rb +36 -36
  42. data/spec/github_configuration_spec.rb +152 -0
  43. data/spec/github_pull_request_spec.rb +39 -35
  44. data/spec/github_test_helper.rb +49 -0
  45. data/spec/new_fb_spec.rb +65 -24
  46. data/spec/pull_request_helper.rb +94 -0
  47. data/spec/pull_request_spec.rb +128 -0
  48. data/spec/rebase_to_master_spec.rb +241 -145
  49. data/spec/spec_helper.rb +20 -0
  50. data/spec/sync_spec.rb +115 -109
  51. metadata +34 -20
  52. data/lib/git-process/github_client.rb +0 -83
  53. data/lib/git-process/github_service.rb +0 -174
  54. data/spec/github_service_spec.rb +0 -211
@@ -1,10 +1,14 @@
1
1
  require 'git-process/rebase_to_master'
2
2
  require 'GitRepoHelper'
3
+ require 'github_test_helper'
4
+ require 'pull_request_helper'
3
5
  require 'webmock/rspec'
4
6
  require 'json'
7
+ include GitProc
5
8
 
6
- describe GitProc::RebaseToMaster do
9
+ describe RebaseToMaster do
7
10
  include GitRepoHelper
11
+ include GitHubTestHelper
8
12
 
9
13
 
10
14
  def log_level
@@ -14,32 +18,32 @@ describe GitProc::RebaseToMaster do
14
18
 
15
19
  before(:each) do
16
20
  create_files(%w(.gitignore))
17
- gitprocess.commit('initial')
21
+ gitlib.commit('initial')
18
22
  end
19
23
 
20
24
 
21
25
  after(:each) do
22
- rm_rf(tmpdir)
26
+ rm_rf(gitlib.workdir)
23
27
  end
24
28
 
25
29
 
26
- def create_process(dir, opts)
27
- GitProc::RebaseToMaster.new(dir, opts)
30
+ def create_process(base, opts = {})
31
+ RebaseToMaster.new(base, opts)
28
32
  end
29
33
 
30
34
 
31
- describe "rebase to master" do
35
+ describe 'rebase to master' do
32
36
 
33
37
  it "should work easily for a simple rebase" do
34
- gitprocess.checkout('fb', :new_branch => 'master')
38
+ gitlib.checkout('fb', :new_branch => 'master')
35
39
  change_file_and_commit('a', '')
36
40
 
37
41
  commit_count.should == 2
38
42
 
39
- gitprocess.checkout('master')
43
+ gitlib.checkout('master')
40
44
  change_file_and_commit('b', '')
41
45
 
42
- gitprocess.checkout('fb')
46
+ gitlib.checkout('fb')
43
47
 
44
48
  gitprocess.run
45
49
 
@@ -47,110 +51,85 @@ describe GitProc::RebaseToMaster do
47
51
  end
48
52
 
49
53
 
50
- it "should work for a rebase after a rerere merge" do
54
+ it 'should work for a rebase after a rerere merge' do
51
55
  # Make sure rerere is enabled
52
- gitprocess.rerere_enabled(true, false)
53
- gitprocess.rerere_autoupdate(false, false)
56
+ config.rerere_enabled(true, false)
57
+ config.rerere_autoupdate(false, false)
54
58
 
55
59
  # Create the file to conflict on
56
60
  change_file_and_commit('a', '')
57
61
 
58
62
  # In the new branch, give it a new value
59
- gitprocess.checkout('fb', :new_branch => 'master') do
63
+ gitlib.checkout('fb', :new_branch => 'master') do
60
64
  change_file_and_commit('a', 'hello')
61
65
  end
62
66
 
63
- # Change the value as well in the origional branch
64
- gitprocess.checkout('master') do
67
+ # Change the value as well in the original branch
68
+ gitlib.checkout('master') do
65
69
  change_file_and_commit('a', 'goodbye')
66
70
  end
67
71
 
68
72
  # Merge in the new branch; don't error-out because will auto-fix.
69
- gitprocess.checkout('fb') do
70
- gitprocess.merge('master') rescue
73
+ gitlib.checkout('fb') do
74
+ gitlib.merge('master') rescue
71
75
  change_file_and_commit('a', 'merged')
72
76
  end
73
77
 
74
78
  # Make another change on master
75
- gitprocess.checkout('master') do
79
+ gitlib.checkout('master') do
76
80
  change_file_and_commit('b', '')
77
81
  end
78
82
 
79
83
  # Go back to the branch and try to rebase
80
- gitprocess.checkout('fb')
84
+ gitlib.checkout('fb')
81
85
 
82
86
  begin
83
87
  gitprocess.runner
84
88
  raise "Should have raised RebaseError"
85
- rescue GitProc::RebaseError => exp
86
- exp.resolved_files.should == %w(a)
87
- exp.unresolved_files.should == []
88
-
89
- exp.commands.length.should == 3
90
- exp.commands[0].should match /^# Verify/
91
- exp.commands[1].should == 'git add a'
92
- exp.commands[2].should == 'git rebase --continue'
89
+ rescue RebaseError => exp
90
+ error_builder = exp.error_builder
91
+ error_builder.resolved_files.should == %w(a)
92
+ error_builder.unresolved_files.should == []
93
+
94
+ error_builder.commands.length.should == 3
95
+ error_builder.commands[0].should match /^# Verify/
96
+ error_builder.commands[1].should == 'git add a'
97
+ error_builder.commands[2].should == 'git rebase --continue'
93
98
  end
94
99
  end
95
100
 
96
101
 
97
102
  describe "when used on _parking_" do
98
103
  it 'should fail #rebase_to_master' do
99
- gitprocess.checkout('_parking_', :new_branch => 'master')
104
+ gitlib.checkout('_parking_', :new_branch => 'master')
100
105
  change_file_and_commit('a', '')
101
106
 
102
- expect { gitprocess.verify_preconditions }.should raise_error GitProc::ParkedChangesError
107
+ expect { gitprocess.verify_preconditions }.to raise_error ParkedChangesError
103
108
  end
104
109
  end
105
110
 
106
111
 
107
112
  describe "closing the pull request" do
113
+ include PullRequestHelper
108
114
 
109
- it "should work for an existing pull request" do
110
- stub_request(:get, /test_repo\/pulls\?access_token=/).
111
- to_return(:status => 200, :body => JSON([{:number => 987, :state => 'open', :html_url => 'test_url', :head => {:ref => 'fb'}, :base => {:ref => 'master'}}]))
112
- stub_request(:patch, /test_repo\/pulls\/987\?access_token=/).
113
- with(:body => JSON({:state => 'closed'})).
114
- to_return(:status => 200, :body => JSON([{:number => 987, :state => 'closed', :html_url => 'test_url', :head => {:ref => 'fb'}, :base => {:ref => 'master'}}]))
115
115
 
116
- gitprocess.branch('fb', :base_branch => 'master')
117
-
118
- gp = clone('fb')
119
- gp.config('gitProcess.github.authToken', 'test-token')
120
- gp.config('remote.origin.url', 'git@github.com:test_repo.git')
121
- gp.config('github.user', 'test_user')
122
-
123
- rtm = GitProc::RebaseToMaster.new(gp.workdir, {:log_level => log_level})
124
- rtm.stub(:fetch)
125
- rtm.stub(:push)
126
- rtm.runner
116
+ def pull_request
117
+ @pr ||= create_pull_request(:pr_number => '987', :head_branch => 'fb', :base_branch => 'master')
127
118
  end
128
119
 
129
120
 
130
121
  it "should not try when there is no auth token" do
131
- gitprocess.branch('fb', :base_branch => 'master')
132
- gp = clone('fb')
133
- gp.config('gitProcess.github.authToken', '')
134
- gp.config('remote.origin.url', 'git@github.com:test_repo.git')
135
- gp.config('github.user', 'test_user')
136
-
137
- rtm = GitProc::RebaseToMaster.new(gp.workdir, {:log_level => log_level})
138
- rtm.stub(:fetch)
139
- rtm.stub(:push)
140
- rtm.runner
141
- end
142
-
143
-
144
- it "should not try when there is a file:// origin url" do
145
- gitprocess.branch('fb', :base_branch => 'master')
146
- gp = clone('fb')
147
- gp.config('gitProcess.github.authToken', 'test-token')
148
- gp.config('github.user', 'test_user')
149
-
150
- rtm = GitProc::RebaseToMaster.new(gp.workdir, {:log_level => log_level})
151
- rtm.stub(:fetch)
152
- rtm.stub(:push)
153
- rtm.runner
122
+ gitlib.branch('fb', :base_branch => 'master')
123
+ clone_repo('fb') do |gl|
124
+ gl.config['gitProcess.github.authToken'] = ''
125
+ gl.config['remote.origin.url'] = 'git@github.com:test_repo.git'
126
+ gl.config['github.user'] = 'test_user'
127
+
128
+ rtm = RebaseToMaster.new(gl, :log_level => log_level)
129
+ rtm.gitlib.stub(:fetch)
130
+ rtm.gitlib.stub(:push)
131
+ rtm.runner
132
+ end
154
133
  end
155
134
 
156
135
  end
@@ -161,34 +140,35 @@ describe GitProc::RebaseToMaster do
161
140
  describe "custom integration branch" do
162
141
 
163
142
  it "should use the 'gitProcess.integrationBranch' configuration" do
164
- gitprocess.checkout('int-br', :new_branch => 'master')
143
+ gitlib.checkout('int-br', :new_branch => 'master')
165
144
  change_file_and_commit('a', '')
166
145
 
167
- gitprocess.checkout('fb', :new_branch => 'master')
146
+ gitlib.checkout('fb', :new_branch => 'master')
168
147
  change_file_and_commit('b', '')
169
148
 
170
- gitprocess.branches['master'].delete!
149
+ gitlib.branches['master'].delete!
171
150
 
172
- gl = clone('int-br')
173
- gl.config('gitProcess.integrationBranch', 'int-br')
151
+ clone_repo('int-br') do |gl|
152
+ gl.config['gitProcess.integrationBranch'] = 'int-br'
174
153
 
175
- gl.checkout('ab', :new_branch => 'origin/int-br')
154
+ gl.checkout('ab', :new_branch => 'origin/int-br')
176
155
 
177
- my_branches = gl.branches
178
- my_branches.include?('origin/master').should be_false
179
- my_branches['ab'].sha.should == my_branches['origin/int-br'].sha
156
+ my_branches = gl.branches
157
+ my_branches.include?('origin/master').should be_false
158
+ my_branches['ab'].sha.should == my_branches['origin/int-br'].sha
180
159
 
181
- gl.stub(:repo_name).and_return('test_repo')
160
+ gl.stub(:repo_name).and_return('test_repo')
182
161
 
183
- change_file_and_commit('c', '', gl)
162
+ change_file_and_commit('c', '', gl)
184
163
 
185
- my_branches = gl.branches
186
- my_branches['ab'].sha.should_not == my_branches['origin/int-br'].sha
164
+ my_branches = gl.branches
165
+ my_branches['ab'].sha.should_not == my_branches['origin/int-br'].sha
187
166
 
188
- GitProc::RebaseToMaster.new(gl.workdir, {:log_level => log_level}).runner
167
+ RebaseToMaster.new(gl, :log_level => log_level).runner
189
168
 
190
- my_branches = gl.branches
191
- my_branches['HEAD'].sha.should == my_branches['origin/int-br'].sha
169
+ my_branches = gl.branches
170
+ my_branches['HEAD'].sha.should == my_branches['origin/int-br'].sha
171
+ end
192
172
  end
193
173
 
194
174
  end
@@ -199,56 +179,56 @@ describe GitProc::RebaseToMaster do
199
179
  describe "when handling the parking branch" do
200
180
 
201
181
  it "should create it based on origin/master" do
202
- gitprocess.branch('fb', :base_branch => 'master')
203
- clone('fb') do |gp|
204
- gp.remove_feature_branch
205
- gp.branches.current.name.should == '_parking_'
182
+ gitlib.branch('fb', :base_branch => 'master')
183
+ clone_repo('fb') do |gl|
184
+ create_process(gl).remove_feature_branch
185
+ gl.branches.current.name.should == '_parking_'
206
186
  end
207
187
  end
208
188
 
209
189
 
210
190
  it "should move it to the new origin/master if it already exists and is clean" do
211
- clone do |gp|
212
- gp.branch('_parking_', :base_branch => 'origin/master')
213
- change_file_and_commit('a', '', gp)
191
+ clone_repo do |gl|
192
+ gl.branch('_parking_', :base_branch => 'origin/master')
193
+ change_file_and_commit('a', '', gl)
214
194
 
215
- gp.checkout('fb', :new_branch => 'origin/master')
195
+ gl.checkout('fb', :new_branch => 'origin/master')
216
196
 
217
- gp.remove_feature_branch
197
+ create_process(gl).remove_feature_branch
218
198
 
219
- gp.branches.current.name.should == '_parking_'
199
+ gl.branches.current.name.should == '_parking_'
220
200
  end
221
201
  end
222
202
 
223
203
 
224
204
  it "should move it to the new origin/master if it already exists and changes are part of the current branch" do
225
- gitprocess.checkout('afb', :new_branch => 'master')
226
- clone do |gp|
227
- gp.checkout('_parking_', :new_branch => 'origin/master') do
228
- change_file_and_commit('a', '', gp)
205
+ gitlib.checkout('afb', :new_branch => 'master')
206
+ clone_repo do |gl|
207
+ gl.checkout('_parking_', :new_branch => 'origin/master') do
208
+ change_file_and_commit('a', '', gl)
229
209
  end
230
210
 
231
- gp.checkout('fb', :new_branch => '_parking_')
232
- gp.push('origin', 'fb', 'master')
211
+ gl.checkout('fb', :new_branch => '_parking_')
212
+ gl.push('origin', 'fb', 'master')
233
213
 
234
- gp.remove_feature_branch
235
- gp.branches.current.name.should == '_parking_'
214
+ create_process(gl).remove_feature_branch
215
+ gl.branches.current.name.should == '_parking_'
236
216
  end
237
217
  end
238
218
 
239
219
 
240
220
  it "should move it out of the way if it has unaccounted changes on it" do
241
- clone do |gp|
242
- gp.checkout('_parking_', :new_branch => 'origin/master')
243
- change_file_and_commit('a', '', gp)
244
- gp.checkout('fb', :new_branch => 'origin/master')
221
+ clone_repo do |gl|
222
+ gl.checkout('_parking_', :new_branch => 'origin/master')
223
+ change_file_and_commit('a', '', gl)
224
+ gl.checkout('fb', :new_branch => 'origin/master')
245
225
 
246
- gp.branches.include?('_parking_OLD_').should be_false
226
+ gl.branches.include?('_parking_OLD_').should be_false
247
227
 
248
- gp.remove_feature_branch
228
+ create_process(gl).remove_feature_branch
249
229
 
250
- gp.branches.include?('_parking_OLD_').should be_true
251
- gp.branches.current.name.should == '_parking_'
230
+ gl.branches.include?('_parking_OLD_').should be_true
231
+ gl.branches.current.name.should == '_parking_'
252
232
  end
253
233
  end
254
234
 
@@ -256,28 +236,28 @@ describe GitProc::RebaseToMaster do
256
236
 
257
237
 
258
238
  it "should delete the old local branch when it has been merged into origin/master" do
259
- clone do |gp|
260
- change_file_and_commit('a', '', gp)
239
+ clone_repo do |gl|
240
+ change_file_and_commit('a', '', gl)
261
241
 
262
- gp.checkout('fb', :new_branch => 'origin/master')
263
- gp.branches.include?('fb').should be_true
242
+ gl.checkout('fb', :new_branch => 'origin/master')
243
+ gl.branches.include?('fb').should be_true
264
244
 
265
- gp.remove_feature_branch
245
+ create_process(gl).remove_feature_branch
266
246
 
267
- gp.branches.include?('fb').should be_false
268
- gp.branches.current.name.should == '_parking_'
247
+ gl.branches.include?('fb').should be_false
248
+ gl.branches.current.name.should == '_parking_'
269
249
  end
270
250
  end
271
251
 
272
252
 
273
253
  it "should raise an error when the local branch has not been merged into origin/master" do
274
- clone do |gp|
275
- gp.checkout('fb', :new_branch => 'origin/master')
276
- change_file_and_commit('a', '', gp)
254
+ clone_repo do |gl|
255
+ gl.checkout('fb', :new_branch => 'origin/master')
256
+ change_file_and_commit('a', '', gl)
277
257
 
278
- gp.branches.include?('fb').should be_true
258
+ gl.branches.include?('fb').should be_true
279
259
 
280
- expect { gp.remove_feature_branch }.should raise_error GitProc::GitProcessError
260
+ expect { create_process(gl).remove_feature_branch }.to raise_error GitProcessError
281
261
  end
282
262
  end
283
263
 
@@ -285,14 +265,14 @@ describe GitProc::RebaseToMaster do
285
265
  it "should delete the old remote branch" do
286
266
  change_file_and_commit('a', '')
287
267
 
288
- gitprocess.branch('fb', :base_branch => 'master')
268
+ gitlib.branch('fb', :base_branch => 'master')
289
269
 
290
- clone('fb') do |gp|
291
- gp.branches.include?('origin/fb').should be_true
292
- gp.remove_feature_branch
293
- gp.branches.include?('origin/fb').should be_false
294
- gitprocess.branches.include?('fb').should be_false
295
- gp.branches.current.name.should == '_parking_'
270
+ clone_repo('fb') do |gl|
271
+ gl.branches.include?('origin/fb').should be_true
272
+ create_process(gl).remove_feature_branch
273
+ gl.branches.include?('origin/fb').should be_false
274
+ gitlib.branches.include?('fb').should be_false
275
+ gl.branches.current.name.should == '_parking_'
296
276
  end
297
277
  end
298
278
 
@@ -302,13 +282,15 @@ describe GitProc::RebaseToMaster do
302
282
  describe ":keep option" do
303
283
 
304
284
  it "should not try to close a pull request or remove remote branch" do
305
- gitprocess.branch('fb', :base_branch => 'master')
285
+ gitlib.branch('fb', :base_branch => 'master')
306
286
 
307
- rtm = GitProc::RebaseToMaster.new(clone('fb').workdir, {:log_level => log_level, :keep => true})
308
- rtm.should_receive(:fetch)
309
- rtm.should_receive(:push).with('origin', rtm.branches.current, 'master')
310
- rtm.should_not_receive(:push).with('origin', nil, nil, :delete => 'fb')
311
- rtm.runner
287
+ clone_repo('fb') do |gl|
288
+ rtm = GitProc::RebaseToMaster.new(gl, :log_level => log_level, :keep => true)
289
+ gl.should_receive(:fetch)
290
+ gl.should_receive(:push).with('origin', gl.branches.current.name, 'master')
291
+ gl.should_not_receive(:push).with('origin', nil, nil, :delete => 'fb')
292
+ rtm.runner
293
+ end
312
294
  end
313
295
 
314
296
  end
@@ -317,15 +299,129 @@ describe GitProc::RebaseToMaster do
317
299
  describe ":interactive option" do
318
300
 
319
301
  it "should try to do an interactive rebase" do
320
- gitprocess.branch('fb', :base_branch => 'master')
321
-
322
- rtm = GitProc::RebaseToMaster.new(clone('fb').workdir, {:log_level => log_level, :interactive => true})
323
- rtm.should_receive(:fetch)
324
- rtm.should_receive(:rebase).with('origin/master', {})
325
- rtm.should_receive(:rebase).with('origin/master', :interactive => true)
326
- rtm.should_receive(:push).with('origin', rtm.branches.current, 'master')
327
- rtm.should_receive(:push).with('origin', nil, nil, :delete => 'fb')
328
- rtm.runner
302
+ gitlib.branch('fb', :base_branch => 'master')
303
+
304
+ clone_repo('fb') do |gl|
305
+ rtm = GitProc::RebaseToMaster.new(gl, :log_level => log_level, :interactive => true)
306
+ gl.should_receive(:fetch)
307
+ gl.should_receive(:rebase).with('origin/master', {})
308
+ gl.should_receive(:rebase).with('origin/master', :interactive => true)
309
+ gl.should_receive(:push).with('origin', gl.branches.current.name, 'master')
310
+ gl.should_receive(:push).with('origin', nil, nil, :delete => 'fb')
311
+ rtm.runner
312
+ end
313
+ end
314
+
315
+ end
316
+
317
+
318
+ describe 'to-master pull request' do
319
+ include PullRequestHelper
320
+
321
+
322
+ def pull_request_number
323
+ pull_request[:number]
324
+ end
325
+
326
+
327
+ def head_repo_name
328
+ pull_request[:head][:repo][:name]
329
+ end
330
+
331
+
332
+ def base_repo_name
333
+ pull_request[:base][:repo][:name]
334
+ end
335
+
336
+
337
+ def base_branch_name
338
+ pull_request[:base][:ref]
339
+ end
340
+
341
+
342
+ def head_branch_name
343
+ pull_request[:head][:ref]
344
+ end
345
+
346
+
347
+ before(:each) do
348
+ gitlib.branch(head_branch_name, :base_branch => 'master')
349
+ end
350
+
351
+
352
+ def configure(gl)
353
+ gl.config['gitProcess.github.authToken'] = 'sdfsfsdf'
354
+ gl.config["remote.#{head_repo_name}.url"] = "git@github.com:#{head_repo_name}.git"
355
+ gl.config['github.user'] = 'jdigger'
356
+ gl.config['gitProcess.remoteName'] = head_repo_name
357
+
358
+ stub_fetch(:head, gl)
359
+ stub_fetch(:base, gl)
360
+
361
+ stub_get("https://api.github.com/repos/#{head_repo_name}/pulls/#{pull_request_number}", :body => pull_request)
362
+ stub_patch("https://api.github.com/repos/#{head_repo_name}/pulls/#{pull_request_number}")
363
+ end
364
+
365
+
366
+ describe "with PR #" do
367
+
368
+ def pull_request
369
+ @pr ||= create_pull_request({})
370
+ end
371
+
372
+
373
+ def create_process(dir, opts)
374
+ RebaseToMaster.new(dir, opts.merge({:prNumber => pull_request_number}))
375
+ end
376
+
377
+
378
+ it "should checkout the branch for the pull request" do
379
+ clone_repo('master', head_repo_name) do |gl|
380
+ gl.branch("#{base_repo_name}/#{base_branch_name}", :base_branch => "#{head_repo_name}/master")
381
+
382
+ configure(gl)
383
+
384
+ rtm = GitProc::RebaseToMaster.new(gl, :log_level => log_level, :prNumber => pull_request_number)
385
+
386
+ gl.should_receive(:push).with(head_repo_name, head_branch_name, 'master')
387
+ gl.should_receive(:push).with(head_repo_name, nil, nil, :delete => head_branch_name)
388
+
389
+ rtm.runner
390
+ end
391
+ end
392
+
393
+ end
394
+
395
+
396
+ describe "with repo name and PR #" do
397
+
398
+ def pull_request
399
+ @pr ||= create_pull_request(:base_remote => 'sourcerepo', :base_repo => 'source_repo')
400
+ end
401
+
402
+
403
+ def create_process(dir, opts = {})
404
+ RebaseToMaster.new(dir, opts.merge({:prNumber => var,
405
+ :server => pull_request[:head][:remote]}))
406
+ end
407
+
408
+
409
+ it "should checkout the branch for the pull request" do
410
+ clone_repo('master', head_repo_name) do |gl|
411
+ add_remote(:base, gl)
412
+ gl.branch("#{base_repo_name}/#{base_branch_name}", :base_branch => "#{head_repo_name}/master")
413
+
414
+ configure(gl)
415
+
416
+ rtm = GitProc::RebaseToMaster.new(gl, :log_level => log_level, :prNumber => pull_request_number)
417
+
418
+ gl.should_receive(:push).with(head_repo_name, head_branch_name, 'master')
419
+ gl.should_receive(:push).with(head_repo_name, nil, nil, :delete => head_branch_name)
420
+
421
+ rtm.runner
422
+ end
423
+ end
424
+
329
425
  end
330
426
 
331
427
  end