gitcycle 0.2.14 → 0.2.15

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.
@@ -0,0 +1,7 @@
1
+ Feature: Setup
2
+
3
+ Scenario: Setup
4
+ When I execute gitcycle setup
5
+ And gitcycle runs
6
+ Then output includes "Configuration saved."
7
+ And gitcycle.yml should be valid
@@ -17,10 +17,18 @@ require "gitcycle"
17
17
  $redis = Redis.new
18
18
 
19
19
  Before do |scenario|
20
+ Launchy.stub :open do |url|
21
+ if url =~ /https:\/\/github.com\/.+\/issues\/\d+/
22
+ $github_url = url
23
+ end
24
+ $url = url
25
+ end
26
+
20
27
  @scenario_title = scenario.title
21
28
  $execute = []
22
29
  $input = []
23
30
  $remotes = nil
31
+ $ticket = nil
24
32
  end
25
33
 
26
34
  def branches(options={})
@@ -36,7 +44,7 @@ end
36
44
 
37
45
  def config(reload=false)
38
46
  @config = nil if reload
39
- @config ||= YAML.load(File.read("#{BASE}/features/config.yml"))
47
+ @config ||= YAML.load(File.read("#{BASE}/features/config/config.yml"))
40
48
  Lighthouse.account = @config['lighthouse']['account']
41
49
  Lighthouse.token = @config['lighthouse']['token']
42
50
  @config
@@ -46,8 +54,11 @@ def gsub_variables(str)
46
54
  if $ticket
47
55
  str = str.gsub('ticket.id', $ticket.attributes['id'])
48
56
  end
49
- if $url
50
- issue_id = $url.match(/https:\/\/github.com\/.+\/issues\/(\d+)/)[1]
57
+ if $tickets
58
+ str = str.gsub('last_ticket.id', $tickets.last.attributes['id'])
59
+ end
60
+ if $github_url
61
+ issue_id = $github_url.match(/https:\/\/github.com\/.+\/issues\/(\d+)/)[1]
51
62
  str = str.gsub('issue.id', issue_id)
52
63
  end
53
64
  str = str.gsub('env.home', ENV['REPO'] == 'owner' ? config['owner'] : config['user'])
@@ -63,23 +74,73 @@ def log(match)
63
74
  end
64
75
 
65
76
  def repos(reload=false)
66
- if $repos && !reload
67
- $repos
68
- else
69
- owner = "#{BASE}/features/fixtures/owner"
70
- user = "#{BASE}/features/fixtures/user"
71
-
72
- FileUtils.rm_rf(owner)
73
- FileUtils.rm_rf(user)
74
-
77
+ fixtures = "#{BASE}/features/fixtures"
78
+
79
+ if !$repo_cache_created || !$repos || reload
80
+ Dir.chdir(fixtures)
81
+ end
82
+
83
+ if !$repo_cache_created || reload
84
+ $stdout.puts "Creating cached fixture repositories..."
85
+
75
86
  system [
76
- "cd #{BASE}/features/fixtures",
77
- "git clone git@github.com:#{config['owner']}/#{config['repo']}.git owner",
78
- "git clone git@github.com:#{config['user']}/#{config['repo']}.git user"
87
+ "rm -rf #{fixtures}/owner_cache",
88
+ "rm -rf #{fixtures}/user_cache",
89
+ "mkdir -p #{fixtures}/owner_cache",
90
+ "cd #{fixtures}/owner_cache",
91
+ "git init . -q",
92
+ "git remote add origin git@github.com:#{config['owner']}/#{config['repo']}.git",
93
+ "echo 'first commit' > README",
94
+ "git add .",
95
+ "git commit -q -a -m 'First commit'",
96
+ "git push origin master --force -q",
97
+ "git fetch -q",
98
+ "cd #{fixtures}",
99
+ "rm -rf user_cache",
100
+ "cp -r owner_cache user_cache",
101
+ "cd user_cache",
102
+ "git remote rm origin",
103
+ "git remote add origin git@github.com:#{config['user']}/#{config['repo']}.git",
104
+ "git fetch -q",
105
+ "git push origin master --force -q"
79
106
  ].join(' && ')
80
107
 
81
- $repos = { :owner => owner, :user => user }
108
+ unless $repo_cache_created
109
+ $stdout.puts "Clearing old fixture branches..."
110
+
111
+ [ 'owner', 'user' ].each do |type|
112
+ system(
113
+ "cd #{fixtures}/#{type}_cache && " +
114
+ [
115
+ "git branch -r",
116
+ "grep origin/",
117
+ "grep -v master$",
118
+ "grep -v HEAD",
119
+ "cut -d/ -f2-",
120
+ "while read line; do git push origin :$line -q; git branch -D $line; done;"
121
+ ].join(' | ')
122
+ )
123
+ end
124
+ end
125
+
126
+ $repo_cache_created = true
82
127
  end
128
+
129
+ if !$repos || reload
130
+ $repos = {}
131
+
132
+ [ 'owner', 'user' ].each do |type|
133
+ FileUtils.rm_rf("#{fixtures}/#{type}")
134
+ $repos[type.to_sym] = "#{fixtures}/#{type}"
135
+
136
+ system [
137
+ "cd #{fixtures}",
138
+ "cp -R #{type}_cache #{type}"
139
+ ].join(' && ')
140
+ end
141
+ end
142
+
143
+ $repos
83
144
  end
84
145
 
85
146
  def run_gitcycle(cmd)
@@ -90,6 +151,9 @@ def run_gitcycle(cmd)
90
151
  @output << "#{str}\n"
91
152
  puts str
92
153
  end
154
+ if @scenario_title.include?('Collaborator')
155
+ @gitcycle.stub(:collab?).and_return(true)
156
+ end
93
157
  if cmd
94
158
  @gitcycle.start(Shellwords.split(cmd))
95
159
  else
@@ -105,15 +169,8 @@ Given /^a fresh set of repositories$/ do
105
169
  repos(true)
106
170
  end
107
171
 
108
- Given /^a new Lighthouse ticket$/ do
109
- $ticket = Lighthouse::Ticket.new(
110
- :body => "test",
111
- :project_id => config['lighthouse']['project'],
112
- :state => "open",
113
- :title => "Test ticket"
114
- )
115
- $ticket.save
116
- $ticket.attributes['id'] = "master-#{$ticket.attributes['id']}"
172
+ When /^I create a new branch "([^\"]*)"$/ do |branch|
173
+ `git branch #{branch}`
117
174
  end
118
175
 
119
176
  When /^I execute gitcycle with nothing$/ do
@@ -124,6 +181,11 @@ When /^I execute gitcycle with "([^\"]*)"$/ do |cmd|
124
181
  $execute << gsub_variables(cmd)
125
182
  end
126
183
 
184
+ When /^I give default input$/ do
185
+ step "I enter \"y\""
186
+ step "I enter \"y\""
187
+ end
188
+
127
189
  When /^I execute gitcycle setup$/ do
128
190
  FileUtils.rm(GITCYCLE) if File.exists?(GITCYCLE)
129
191
  $execute << [
@@ -140,10 +202,23 @@ When /^I execute gitcycle setup$/ do
140
202
  ].join(' ')
141
203
  end
142
204
 
143
- When /^I execute gitcycle (.*) with the Lighthouse ticket URL$/ do |cmd|
205
+ When /^I execute gitcycle (.*) with a new URL or string$/ do |cmd|
206
+ $ticket = Lighthouse::Ticket.new(
207
+ :body => "test",
208
+ :project_id => config['lighthouse']['project'],
209
+ :state => "open",
210
+ :title => "Test ticket"
211
+ )
212
+ $ticket.save
213
+ $tickets ||= []
214
+ $tickets << $ticket
144
215
  $execute << "#{cmd} #{$ticket.url}"
145
216
  end
146
217
 
218
+ When /^I execute gitcycle (.*) with the last URL or string$/ do |cmd|
219
+ $execute << "#{cmd} #{$tickets.last.url}"
220
+ end
221
+
147
222
  When /^I cd to the (.*) repo$/ do |user|
148
223
  if ENV['REPO']
149
224
  puts "(overiding repo as #{ENV['REPO']})"
@@ -160,19 +235,22 @@ When /^I commit something$/ do
160
235
  branch = branches(:current => true)
161
236
  $commit_msg = "#{@scenario_title} - #{rand}"
162
237
  File.open('README', 'w') {|f| f.write($commit_msg) }
163
- `git add . && git add . -u && git commit -a -m '#{$commit_msg}'`
164
- `git push origin #{branch}`
238
+ `git add . && git add . -u && git commit -q -a -m '#{$commit_msg}'`
239
+ `git push origin #{branch} -q`
165
240
  end
166
241
 
167
242
  When /^I checkout (.+)$/ do |branch|
168
243
  branch = gsub_variables(branch)
169
- `git checkout #{branch}`
244
+ `git checkout #{branch} -q`
170
245
  end
171
246
 
172
- Then /^gitcycle runs$/ do
173
- $execute.each do |cmd|
174
- run_gitcycle(cmd)
175
- end
247
+ When /^I push (.+)$/ do |branch|
248
+ branch = gsub_variables(branch)
249
+ `git push origin #{branch} -q`
250
+ end
251
+
252
+ When /^gitcycle runs$/ do
253
+ run_gitcycle($execute.shift) until $execute.empty?
176
254
  end
177
255
 
178
256
  Then /^gitcycle runs with exit$/ do
@@ -198,12 +276,12 @@ end
198
276
 
199
277
  Then /^output includes \"([^\"]*)" with URL$/ do |expected|
200
278
  expected = gsub_variables(expected)
201
- @output.include?(expected).should == true
202
- $url = @output.match(/#{expected}.*(https?:\/\/[^\s]+)/)[1]
279
+ @output.should =~ /#{expected}.*(https?:\/\/[^\s]+)/
203
280
  end
204
281
 
205
282
  Then /^output includes$/ do |expected|
206
283
  expected = gsub_variables(expected).gsub('\t', "\t")
284
+ $stdout.puts expected
207
285
  @output.gsub(/\n+/, "\n").include?(expected).should == true
208
286
  end
209
287
 
@@ -213,7 +291,20 @@ Then /^output does not include \"([^\"]*)"$/ do |expected|
213
291
  end
214
292
 
215
293
  Then /^redis entries valid$/ do
216
- add = @scenario_title.include?('custom branch name') ? "-rename" : ""
294
+ collab = @scenario_title.include?('Collaborator')
295
+ before =
296
+ if collab
297
+ "br-some_branch-"
298
+ else
299
+ "master-"
300
+ end
301
+ after =
302
+ if @scenario_title.include?('Custom branch name')
303
+ "-rename"
304
+ else
305
+ ""
306
+ end
307
+ ticket_id = "#{before}#{$ticket.attributes['id']}#{after}"
217
308
  branch = $redis.hget(
218
309
  [
219
310
  "users",
@@ -222,22 +313,22 @@ Then /^redis entries valid$/ do
222
313
  "#{config['owner']}:#{config['repo']}",
223
314
  "branches"
224
315
  ].join('/'),
225
- $ticket.attributes['id'] + add
316
+ ticket_id
226
317
  )
227
318
  branch = Yajl::Parser.parse(branch)
228
319
  should = {
229
320
  'lighthouse_url' => $ticket.url,
230
321
  'body' => "<div><p>test</p></div>\n\n#{$ticket.url}",
231
- 'home' => ENV['REPO'] == 'owner' ? config['owner'] : config['user'],
232
- 'name' => $ticket.attributes['id'] + add,
233
- 'id' => $ticket.attributes['id'] + add,
322
+ 'home' => collab || ENV['REPO'] == 'owner' ? config['owner'] : config['user'],
323
+ 'name' => ticket_id,
324
+ 'id' => ticket_id,
234
325
  'title' => $ticket.title,
235
326
  'repo' => "#{config['owner']}:#{config['repo']}",
236
327
  'user' => config['user'],
237
- 'source' => 'master'
328
+ 'source' => collab ? 'some_branch' : 'master'
238
329
  }
239
- if @scenario_title == 'Discuss commits w/ no parameters and something committed'
240
- should['issue_url'] = $url
330
+ if @scenario_title == 'No parameters and something committed'
331
+ should['issue_url'] = $github_url
241
332
  end
242
333
  branch.should == should
243
334
  end
@@ -251,5 +342,5 @@ Then /^git log should contain the last commit$/ do
251
342
  end
252
343
 
253
344
  Then /^URL is a valid issue$/ do
254
- $url.should =~ /https:\/\/github.com\/.+\/issues\/\d+/
345
+ $github_url.should =~ /https:\/\/github.com\/.+\/issues\/\d+/
255
346
  end
data/gitcycle.gemspec CHANGED
@@ -6,7 +6,7 @@ $:.unshift lib unless $:.include?(lib)
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "gitcycle"
9
- s.version = '0.2.14'
9
+ s.version = '0.2.15'
10
10
  s.platform = Gem::Platform::RUBY
11
11
  s.authors = [ 'Winton Welsh' ]
12
12
  s.email = [ 'mail@wintoni.us' ]
data/lib/gitcycle.rb CHANGED
@@ -25,6 +25,8 @@ class Gitcycle
25
25
  end
26
26
 
27
27
  def initialize(args=nil)
28
+ $remotes = {}
29
+
28
30
  if ENV['CONFIG']
29
31
  @config_path = File.expand_path(ENV['CONFIG'])
30
32
  else
@@ -65,6 +67,10 @@ class Gitcycle
65
67
  exec_git(:branch, args)
66
68
  end
67
69
 
70
+ unless yes?("\nYour work will eventually merge into '#{params['branch[source]']}'. Is this correct?")
71
+ params['branch[source]'] = q("What branch would you like to eventually merge into?")
72
+ end
73
+
68
74
  puts "\nRetrieving branch information from gitcycle.\n".green
69
75
  branch = get('branch', params)
70
76
  name = branch['name']
@@ -73,8 +79,8 @@ class Gitcycle
73
79
  owner, repo = branch['repo'].split(':')
74
80
  branch['home'] = @git_login
75
81
 
76
- unless yes?("\nYour work will eventually merge into '#{branch['source']}'. Is this correct?")
77
- branch['source'] = q("What branch would you like to eventually merge into?")
82
+ if branch['source'].include?('/')
83
+ branch['home'], branch['source'] = branch['source'].split('/')
78
84
  end
79
85
 
80
86
  unless yes?("Would you like to name your branch '#{name}'?")
@@ -145,14 +151,13 @@ class Gitcycle
145
151
  get('branch',
146
152
  'branch[home]' => remote,
147
153
  'branch[name]' => branch,
148
- 'branch[collab]' => 1,
149
154
  'create' => 1
150
155
  )
151
156
  end
152
157
  end
153
158
 
154
159
  puts "Checking out '#{branch}'.\n".green
155
- run("git checkout #{branch}")
160
+ run("git checkout -q #{branch}")
156
161
  end
157
162
  end
158
163
  alias :co :checkout
@@ -236,9 +241,7 @@ class Gitcycle
236
241
  'create' => 0
237
242
  )
238
243
 
239
- collab = branch && branch['collab'] == '1'
240
-
241
- if collab
244
+ if collab?(branch)
242
245
  # Merge from collab
243
246
  merge_remote_branch(
244
247
  :owner => branch['home'],
@@ -264,7 +267,7 @@ class Gitcycle
264
267
  )
265
268
  end
266
269
 
267
- unless collab
270
+ unless collab?(branch)
268
271
  # Merge from origin
269
272
  merge_remote_branch(
270
273
  :owner => @git_login,
@@ -281,12 +284,11 @@ class Gitcycle
281
284
 
282
285
  require_git && require_config
283
286
 
284
- branch = pull
285
- remote = branch && branch['collab'] == '1' ? branch['home'] : 'origin'
286
-
287
+ pull
287
288
  branch = branches(:current => true)
288
- puts "\nPushing branch '#{remote}/#{branch}'.\n".green
289
- run("git push #{remote} #{branch}")
289
+
290
+ puts "\nPushing branch 'origin/#{branch}'.\n".green
291
+ run("git push origin #{branch} -q")
290
292
  end
291
293
 
292
294
  def qa(*issues)
@@ -303,15 +305,31 @@ class Gitcycle
303
305
  end
304
306
  elsif issues.first == 'fail' || issues.first == 'pass'
305
307
  branch = branches(:current => true)
306
- label = issues.first.capitalize
307
-
308
- if branch =~ /^qa_/
308
+ pass_fail = issues.first
309
+ label = pass_fail.capitalize
310
+ issues = issues[1..-1]
311
+
312
+ if pass_fail == 'pass' && !issues.empty?
313
+ puts "\nWARNING: #{
314
+ issues.length == 1 ? "This issue" : "These issues"
315
+ } will merge straight into '#{branch}' without testing.\n".red
316
+
317
+ if yes?("Continue?")
318
+ qa_branch = create_qa_branch(
319
+ :instructions => false,
320
+ :issues => issues,
321
+ :source => branch
322
+ )
323
+ `git checkout qa_#{qa_branch['source']}_#{qa_branch['user']} -q`
324
+ $remotes = {}
325
+ qa('pass')
326
+ else
327
+ exit
328
+ end
329
+ elsif branch =~ /^qa_/
309
330
  puts "\nRetrieving branch information from gitcycle.\n".green
310
331
  qa_branch = get('qa_branch', :source => branch.gsub(/^qa_/, ''))
311
332
 
312
- pass_fail = issues.first
313
- issues = issues[1..-1]
314
-
315
333
  if pass_fail == 'pass'
316
334
  checkout_or_track(:name => qa_branch['source'], :remote => 'origin')
317
335
  end
@@ -324,19 +342,18 @@ class Gitcycle
324
342
  end
325
343
  end
326
344
 
327
- branches.each do |branch|
328
- if pass_fail == 'pass'
329
- merge_remote_branch(
330
- :owner => branch['home'],
331
- :repo => branch['repo'].split(':')[1],
332
- :branch => branch['branch'],
333
- :issue => branch['issue'],
334
- :issues => qa_branch['branches'].collect { |b| b['issue'] },
335
- :type => :from_qa
336
- )
337
- end
345
+ if pass_fail == 'pass' && issues.empty?
346
+ owner, repo = qa_branch['repo'].split(':')
347
+ merge_remote_branch(
348
+ :owner => owner,
349
+ :repo => repo,
350
+ :branch => "qa_#{qa_branch['source']}_#{qa_branch['user']}",
351
+ :type => :from_qa
352
+ )
353
+ end
338
354
 
339
- unless issues.empty?
355
+ unless issues.empty?
356
+ branches.each do |branch|
340
357
  puts "\nLabeling issue #{branch['issue']} as '#{label}'.\n".green
341
358
  get('label',
342
359
  'qa_branch[source]' => qa_branch['source'],
@@ -371,7 +388,7 @@ class Gitcycle
371
388
  run("git add . && git add . -u && git commit -a -F .git/MERGE_MSG")
372
389
 
373
390
  puts "Pushing merge resolution of #{conflict['branch']} (issue ##{conflict['issue']}).\n".green
374
- run("git push origin qa_#{qa_branch['source']}_#{qa_branch['user']}")
391
+ run("git push origin qa_#{qa_branch['source']}_#{qa_branch['user']} -q")
375
392
 
376
393
  puts "\nDe-conflicting on gitcycle.\n".green
377
394
  get('qa_branch',
@@ -397,31 +414,29 @@ class Gitcycle
397
414
  def ready(*issues)
398
415
  require_git && require_config
399
416
 
400
- if issues.empty?
401
- branch = pull
402
- branch = create_pull_request(branch)
417
+ branch = pull
403
418
 
404
- if branch == false
405
- puts "Branch not found.\n".red
406
- elsif branch['issue_url']
407
- puts "\nLabeling issue as 'Pending Review'.\n".green
408
- get('label',
409
- 'branch[name]' => branch['name'],
410
- 'labels' => [ 'Pending Review' ]
411
- )
419
+ if branch && !collab?(branch)
420
+ branch = create_pull_request(branch)
421
+ end
412
422
 
413
- puts "Opening issue: #{branch['issue_url']}\n".green
414
- Launchy.open(branch['issue_url'])
415
- else
416
- puts "You have not pushed any commits to '#{branch['name']}'.\n".red
417
- end
418
- else
419
- puts "\nLabeling issues as 'Pending Review'.\n".green
423
+ if branch == false
424
+ puts "Branch not found.\n".red
425
+ elsif collab?(branch)
426
+ remote, branch = branch['home'], branch['source']
427
+ puts "\nPushing branch '#{remote}/#{branch}'.\n".green
428
+ run("git push #{remote} #{branch} -q")
429
+ elsif branch['issue_url']
430
+ puts "\nLabeling issue as 'Pending Review'.\n".green
420
431
  get('label',
421
- 'issues' => issues,
422
- 'labels' => [ 'Pending Review' ],
423
- 'scope' => 'repo'
432
+ 'branch[name]' => branch['name'],
433
+ 'labels' => [ 'Pending Review' ]
424
434
  )
435
+
436
+ puts "Opening issue: #{branch['issue_url']}\n".green
437
+ Launchy.open(branch['issue_url'])
438
+ else
439
+ puts "You have not pushed any commits to '#{branch['name']}'.\n".red
425
440
  end
426
441
  end
427
442
 
@@ -483,8 +498,6 @@ class Gitcycle
483
498
  owner = options[:owner]
484
499
  repo = options[:repo]
485
500
 
486
- $remotes ||= {}
487
-
488
501
  unless $remotes[owner]
489
502
  $remotes[owner] = true
490
503
 
@@ -514,14 +527,14 @@ class Gitcycle
514
527
 
515
528
  if branches(:match => name)
516
529
  puts "Checking out branch '#{name}'.\n".green
517
- run("git checkout #{name}")
530
+ run("git checkout #{name} -q")
518
531
  else
519
532
  puts "Tracking branch '#{remote}/#{name}'.\n".green
520
533
  run("git fetch -q #{remote}")
521
- run("git checkout -b #{name} #{remote}/#{name}")
534
+ run("git checkout -q -b #{name} #{remote}/#{name}")
522
535
  end
523
536
 
524
- run("git pull #{remote} #{name}")
537
+ run("git pull #{remote} #{name} -q")
525
538
  end
526
539
 
527
540
  def checkout_remote_branch(options={})
@@ -532,12 +545,12 @@ class Gitcycle
532
545
 
533
546
  if branches(:match => target)
534
547
  if yes?("You already have a branch called '#{target}'. Overwrite?")
535
- run("git push origin :#{target}")
536
- run("git checkout master")
548
+ run("git push origin :#{target} -q")
549
+ run("git checkout master -q")
537
550
  run("branch -D #{target}")
538
551
  else
539
- run("git checkout #{target}")
540
- run("git pull origin #{target}")
552
+ run("git checkout #{target} -q")
553
+ run("git pull origin #{target} -q")
541
554
  return
542
555
  end
543
556
  end
@@ -545,18 +558,30 @@ class Gitcycle
545
558
  add_remote_and_fetch(options)
546
559
 
547
560
  puts "Checking out remote branch '#{target}' from '#{owner}/#{repo}/#{branch}'.\n".green
548
- run("git checkout -b #{target} #{owner}/#{branch}")
561
+ run("git checkout -q -b #{target} #{owner}/#{branch}")
549
562
 
550
563
  puts "Fetching remote 'origin'.\n".green
551
564
  run("git fetch -q origin")
552
565
 
553
566
  if branches(:remote => true, :match => "origin/#{target}")
554
567
  puts "Pulling 'origin/#{target}'.\n".green
555
- run("git pull origin #{target}")
568
+ run("git pull origin #{target} -q")
556
569
  end
557
570
 
558
571
  puts "Pushing 'origin/#{target}'.\n".green
559
- run("git push origin #{target}")
572
+ run("git push origin #{target} -q")
573
+ end
574
+
575
+ def collab?(branch)
576
+ return false unless branch
577
+ owner =
578
+ if branch['repo'].is_a?(::Hash)
579
+ branch['repo']['owner']
580
+ else
581
+ branch['repo'].split(':')[0]
582
+ end
583
+ branch['home'] != branch['user'] &&
584
+ branch['home'] != owner
560
585
  end
561
586
 
562
587
  def command_not_recognized
@@ -588,17 +613,21 @@ class Gitcycle
588
613
  end
589
614
 
590
615
  def create_qa_branch(options)
616
+ instructions = options[:instructions]
591
617
  issues = options[:issues]
592
618
  range = options[:range] || (0..-1)
619
+ source = options[:source]
593
620
 
594
621
  if (issues && !issues.empty?) || options[:qa_branch]
595
622
  if options[:qa_branch]
596
623
  qa_branch = options[:qa_branch]
597
624
  else
598
- source = branches(:current => true)
599
-
600
- unless yes?("\nDo you want to create a QA branch from '#{source}'?")
601
- source = q("What branch would you like to base this QA branch off of?")
625
+ unless source
626
+ source = branches(:current => true)
627
+
628
+ unless yes?("\nDo you want to create a QA branch from '#{source}'?")
629
+ source = q("What branch would you like to base this QA branch off of?")
630
+ end
602
631
  end
603
632
 
604
633
  puts "\nRetrieving branch information from gitcycle.\n".green
@@ -613,10 +642,10 @@ class Gitcycle
613
642
  if branches(:match => name, :all => true)
614
643
  puts "Deleting old QA branch '#{name}'.\n".green
615
644
  if branches(:match => name)
616
- run("git checkout master")
645
+ run("git checkout master -q")
617
646
  run("git branch -D #{name}")
618
647
  end
619
- run("git push origin :#{name}")
648
+ run("git push origin :#{name} -q")
620
649
  end
621
650
 
622
651
  checkout_remote_branch(
@@ -651,8 +680,10 @@ class Gitcycle
651
680
  )
652
681
  end
653
682
 
654
- puts "\nType '".yellow + "gitc qa pass".green + "' to approve all issues in this branch.\n".yellow
655
- puts "Type '".yellow + "gitc qa fail".red + "' to reject all issues in this branch.\n".yellow
683
+ unless options[:instructions] == false
684
+ puts "\nType '".yellow + "gitc qa pass".green + "' to approve all issues in this branch.\n".yellow
685
+ puts "Type '".yellow + "gitc qa fail".red + "' to reject all issues in this branch.\n".yellow
686
+ end
656
687
 
657
688
  unless warnings.empty?
658
689
  puts "\n#{"WARNING:".red} If you pass this QA branch, the following branches will merge into '#{source.yellow}':\n"
@@ -665,6 +696,8 @@ class Gitcycle
665
696
  puts "\nBe sure this is correct!\n".yellow
666
697
  end
667
698
  end
699
+
700
+ qa_branch
668
701
  end
669
702
  end
670
703
 
@@ -684,7 +717,7 @@ class Gitcycle
684
717
  if $? != 0
685
718
  puts "Conflict occurred when merging '#{branch}'#{" (issue ##{issue})" if issue}.\n".red
686
719
 
687
- if type # from_qa or to_qa
720
+ if type == :to_qa
688
721
  puts "Please resolve this conflict with '#{owner}'.\n".yellow
689
722
 
690
723
  puts "\nSending conflict information to gitcycle.\n".green
@@ -696,7 +729,7 @@ class Gitcycle
696
729
  elsif type # from_qa or to_qa
697
730
  branch = branches(:current => true)
698
731
  puts "Pushing branch '#{branch}'.\n".green
699
- run("git push origin #{branch}")
732
+ run("git push origin #{branch} -q")
700
733
  end
701
734
  end
702
735
 
@@ -765,7 +798,7 @@ class Gitcycle
765
798
 
766
799
  if branches(:remote => true, :match => "#{owner}/#{branch}")
767
800
  puts "\nMerging remote branch '#{branch}' from '#{owner}/#{repo}'.\n".green
768
- run("git merge #{owner}/#{branch}")
801
+ run("git merge #{owner}/#{branch} -q")
769
802
 
770
803
  fix_conflict(options)
771
804
  end