gitcycle 0.2.19 → 0.2.20

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.
@@ -85,12 +85,12 @@ Scenario: Collaborator
85
85
  Your work will eventually merge into 'master'. Is this correct? (y/n)
86
86
  What branch would you like to eventually merge into?
87
87
  Retrieving branch information from gitcycle.
88
- Would you like to name your branch 'config.owner-some_branch-ticket.id'? (y/n)
88
+ Would you like to name your branch 'ticket.id'? (y/n)
89
89
  Adding remote repo 'config.owner/config.repo'.
90
90
  Fetching remote 'config.owner'.
91
- Checking out remote branch 'config.owner-some_branch-ticket.id' from 'config.owner/config.repo/some_branch'.
91
+ Checking out remote branch 'ticket.id' from 'config.owner/config.repo/some_branch'.
92
92
  Fetching remote 'origin'.
93
- Pushing 'origin/config.owner-some_branch-ticket.id'.
93
+ Pushing 'origin/ticket.id'.
94
94
  Sending branch information to gitcycle.
95
95
  """
96
96
  And redis entries valid
@@ -24,4 +24,23 @@ Scenario: Fresh repo
24
24
  Retrieving branch information from gitcycle.
25
25
  Tracking branch 'origin/master-last_ticket.id'.
26
26
  """
27
- And current branch is "master-last_ticket.id"
27
+ And current branch is "master-last_ticket.id"
28
+
29
+ Scenario: Collaborator
30
+ Given a fresh set of repositories
31
+ When I cd to the owner repo
32
+ And I execute gitcycle branch with a new URL or string
33
+ And I give default input
34
+ And gitcycle runs
35
+ And I cd to the user repo
36
+ And I execute gitcycle with "co config.owner/master-ticket.id"
37
+ And gitcycle runs
38
+ Then output includes
39
+ """
40
+ Adding remote repo 'config.owner/config.repo'.
41
+ Fetching remote 'config.owner'.
42
+ Creating branch 'master-ticket.id' from 'br/master-ticket.id'.
43
+ Sending branch information to gitcycle.
44
+ Checking out 'master-ticket.id'.
45
+ """
46
+ And current branch is "master-ticket.id"
@@ -22,6 +22,7 @@ Scenario: (Discuss) No parameters and something committed
22
22
  And I give default input
23
23
  And gitcycle runs
24
24
  And I commit something
25
+ And I wait for 5 seconds
25
26
  And I execute gitcycle with "discuss"
26
27
  And gitcycle runs
27
28
  Then output includes
@@ -0,0 +1,23 @@
1
+ Feature: Push
2
+
3
+ Scenario: Collaborator
4
+ Given a fresh set of repositories
5
+ When I cd to the owner repo
6
+ And I execute gitcycle branch with a new URL or string
7
+ And I give default input
8
+ And gitcycle runs
9
+ And I cd to the user repo
10
+ And I execute gitcycle with "co config.owner/master-ticket.id"
11
+ And gitcycle runs
12
+ And I commit something
13
+ And I execute gitcycle with "push"
14
+ And gitcycle runs
15
+ Then output includes
16
+ """
17
+ Retrieving branch information from gitcycle.
18
+ Adding remote repo 'config.owner/config.repo'.
19
+ Fetching remote 'config.owner'.
20
+ Merging remote branch 'master-ticket.id' from 'config.owner/config.repo'.
21
+ Pushing branch 'config.owner/master-ticket.id'.
22
+ """
23
+ And current branch is "master-ticket.id"
@@ -21,6 +21,45 @@ Scenario: Ready issue
21
21
  Creating GitHub pull request.
22
22
  Labeling issue as 'Pending Review'.
23
23
  """
24
+ And output includes "Opening issue" with URL
25
+ And URL is a valid issue
26
+
27
+ Scenario: Reopen pull request
28
+ Given a fresh set of repositories
29
+ When I cd to the user repo
30
+ And I execute gitcycle branch with a new URL or string
31
+ And I give default input
32
+ And gitcycle runs
33
+ And I commit something
34
+ And I execute gitcycle with "ready"
35
+ And gitcycle runs
36
+ And I cd to the owner repo
37
+ And I checkout master
38
+ And I execute gitcycle with "qa pass issue.id"
39
+ And I enter "y"
40
+ And gitcycle runs
41
+ And I wait for 5 seconds
42
+ And I cd to the user repo
43
+ And I checkout master-ticket.id
44
+ And I commit something
45
+ And I wait for 5 seconds
46
+ And I execute gitcycle with "ready"
47
+ And gitcycle runs
48
+ Then output includes
49
+ """
50
+ Retrieving branch information from gitcycle.
51
+ Adding remote repo 'config.owner/config.repo'.
52
+ Fetching remote 'config.owner'.
53
+ Merging remote branch 'master' from 'config.owner/config.repo'.
54
+ Adding remote repo 'config.user/config.repo'.
55
+ Fetching remote 'config.user'.
56
+ Merging remote branch 'master-ticket.id' from 'config.user/config.repo'.
57
+ Creating GitHub pull request.
58
+ Labeling issue as 'Pending Review'.
59
+ """
60
+ And output includes "Opening issue" with URL
61
+ And URL is a valid issue
62
+ And URL is not the same as the last
24
63
 
25
64
  Scenario: Collaborator
26
65
  Given a fresh set of repositories
@@ -42,5 +81,6 @@ Scenario: Collaborator
42
81
  Retrieving branch information from gitcycle.
43
82
  Adding remote repo 'config.owner/config.repo'.
44
83
  Fetching remote 'config.owner'.
84
+ Merging remote branch 'some_branch' from 'config.owner/gitcycle_test'.
45
85
  Pushing branch 'config.owner/some_branch'.
46
86
  """
@@ -18,6 +18,7 @@ $redis = Redis.new
18
18
 
19
19
  Before do |scenario|
20
20
  Launchy.stub :open do |url|
21
+ $last_url = $url
21
22
  if url =~ /https:\/\/github.com\/.+\/issues\/\d+/
22
23
  $github_url = url
23
24
  end
@@ -51,12 +52,12 @@ def config(reload=false)
51
52
  end
52
53
 
53
54
  def gsub_variables(str)
54
- if $ticket
55
- str = str.gsub('ticket.id', $ticket.attributes['id'])
56
- end
57
55
  if $tickets
58
56
  str = str.gsub('last_ticket.id', $tickets.last.attributes['id'])
59
57
  end
58
+ if $ticket
59
+ str = str.gsub('ticket.id', $ticket.attributes['id'])
60
+ end
60
61
  if $github_url
61
62
  issue_id = $github_url.match(/https:\/\/github.com\/.+\/issues\/(\d+)/)[1]
62
63
  str = str.gsub('issue.id', issue_id)
@@ -151,9 +152,6 @@ def run_gitcycle(cmd)
151
152
  @output << "#{str}\n"
152
153
  puts str
153
154
  end
154
- if @scenario_title.include?('Collaborator')
155
- @gitcycle.stub(:collab?).and_return(true)
156
- end
157
155
  if cmd
158
156
  @gitcycle.start(Shellwords.split(cmd))
159
157
  else
@@ -253,6 +251,16 @@ When /^gitcycle runs$/ do
253
251
  run_gitcycle($execute.shift) until $execute.empty?
254
252
  end
255
253
 
254
+ When /^I resolve the conflict/ do
255
+ $commit_msg = "#{@scenario_title} - #{rand}"
256
+ File.open('README', 'w') {|f| f.write($commit_msg) }
257
+ end
258
+
259
+ When /^I wait for (.+) seconds/ do |seconds|
260
+ $stdout.puts "Waiting #{seconds} seconds..."
261
+ sleep seconds.to_i
262
+ end
263
+
256
264
  Then /^gitcycle runs with exit$/ do
257
265
  $execute.each do |cmd|
258
266
  lambda { run_gitcycle(cmd) }.should raise_error SystemExit
@@ -292,12 +300,7 @@ end
292
300
 
293
301
  Then /^redis entries valid$/ do
294
302
  collab = @scenario_title.include?('Collaborator')
295
- before =
296
- if collab
297
- "br-some_branch-"
298
- else
299
- "master-"
300
- end
303
+ before = collab ? "" : "master-"
301
304
  after =
302
305
  if @scenario_title.include?('Custom branch name')
303
306
  "-rename"
@@ -327,6 +330,7 @@ Then /^redis entries valid$/ do
327
330
  'user' => config['user'],
328
331
  'source' => collab ? 'some_branch' : 'master'
329
332
  }
333
+ should['collab'] = '1' if collab
330
334
  if @scenario_title.include?("(Discuss)") && @scenario_title.include?("something committed")
331
335
  should['labels'] = 'Branch - master'
332
336
  should['issue_url'] = $github_url
@@ -344,4 +348,8 @@ end
344
348
 
345
349
  Then /^URL is a valid issue$/ do
346
350
  $github_url.should =~ /https:\/\/github.com\/.+\/issues\/\d+/
351
+ end
352
+
353
+ Then /^URL is not the same as the last$/ do
354
+ $last_url.should_not == $url
347
355
  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.19'
9
+ s.version = '0.2.20'
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
@@ -71,17 +71,19 @@ class Gitcycle
71
71
  params['branch[source]'] = q("What branch would you like to eventually merge into?")
72
72
  end
73
73
 
74
+ source = params['branch[source]']
75
+ if source.include?('/')
76
+ params['branch[home]'], params['branch[source]'] = source.split('/')
77
+ params['branch[collab]'] = 1
78
+ end
79
+
74
80
  puts "\nRetrieving branch information from gitcycle.\n".green
75
81
  branch = get('branch', params)
76
82
  name = branch['name']
77
83
 
78
84
  begin
79
85
  owner, repo = branch['repo'].split(':')
80
- branch['home'] = @git_login
81
-
82
- if branch['source'].include?('/')
83
- branch['home'], branch['source'] = branch['source'].split('/')
84
- end
86
+ branch['home'] ||= @git_login
85
87
 
86
88
  unless yes?("Would you like to name your branch '#{name}'?")
87
89
  name = q("\nWhat would you like to name your branch?")
@@ -89,7 +91,7 @@ class Gitcycle
89
91
  end
90
92
 
91
93
  checkout_remote_branch(
92
- :owner => owner,
94
+ :owner => branch['collab'] ? branch['home'] : owner,
93
95
  :repo => repo,
94
96
  :branch => branch['source'],
95
97
  :target => name
@@ -115,13 +117,13 @@ class Gitcycle
115
117
  end
116
118
 
117
119
  def checkout(*args)
118
- if args.length > 2 || options?(args)
120
+ if args.length != 1 || options?(args)
119
121
  exec_git(:checkout, args)
120
122
  end
121
123
 
122
124
  require_git && require_config
123
125
 
124
- if args.length == 1 && args[0] =~ /^https?:\/\//
126
+ if args[0] =~ /^https?:\/\//
125
127
  puts "\nRetrieving branch information from gitcycle.\n".green
126
128
  branch = get('branch', 'branch[lighthouse_url]' => args[0], 'create' => 0)
127
129
  if branch
@@ -131,7 +133,7 @@ class Gitcycle
131
133
  puts "\nDid you mean: gitc branch #{args[0]}\n".yellow
132
134
  end
133
135
  else
134
- remote, branch = args
136
+ remote, branch = args[0].split('/')
135
137
  remote, branch = nil, remote if branch.nil?
136
138
 
137
139
  unless branches(:match => branch)
@@ -156,6 +158,8 @@ class Gitcycle
156
158
  get('branch',
157
159
  'branch[home]' => remote,
158
160
  'branch[name]' => branch,
161
+ 'branch[source]' => branch,
162
+ 'branch[collab]' => 1,
159
163
  'create' => 1
160
164
  )
161
165
  end
@@ -246,12 +250,12 @@ class Gitcycle
246
250
  'create' => 0
247
251
  )
248
252
 
249
- if collab?(branch)
253
+ if branch && branch['collab']
250
254
  # Merge from collab
251
255
  merge_remote_branch(
252
256
  :owner => branch['home'],
253
257
  :repo => branch['repo']['name'],
254
- :branch => branch['name']
258
+ :branch => branch['source']
255
259
  )
256
260
  elsif branch
257
261
  # Merge from upstream source branch
@@ -272,7 +276,7 @@ class Gitcycle
272
276
  )
273
277
  end
274
278
 
275
- unless collab?(branch)
279
+ unless branch && branch['collab']
276
280
  # Merge from origin
277
281
  merge_remote_branch(
278
282
  :owner => @git_login,
@@ -289,11 +293,15 @@ class Gitcycle
289
293
 
290
294
  require_git && require_config
291
295
 
292
- pull
293
- branch = branches(:current => true)
296
+ branch = pull
294
297
 
295
- puts "\nPushing branch 'origin/#{branch}'.\n".green
296
- run("git push origin #{branch} -q")
298
+ if branch['collab']
299
+ puts "\nPushing branch '#{branch['home']}/#{branch['name']}'.\n".green
300
+ run("git push #{branch['home']} #{branch['name']} -q")
301
+ else
302
+ puts "\nPushing branch 'origin/#{branch}'.\n".green
303
+ run("git push origin #{branch} -q")
304
+ end
297
305
  end
298
306
 
299
307
  def qa(*issues)
@@ -421,14 +429,14 @@ class Gitcycle
421
429
 
422
430
  branch = pull
423
431
 
424
- if branch && !collab?(branch)
432
+ if branch && !branch['collab']
425
433
  force = branch['labels'] && branch['labels'].include?('Pass')
426
434
  branch = create_pull_request(branch, force)
427
435
  end
428
436
 
429
437
  if branch == false
430
438
  puts "Branch not found.\n".red
431
- elsif collab?(branch)
439
+ elsif branch['collab']
432
440
  remote, branch = branch['home'], branch['source']
433
441
  puts "\nPushing branch '#{remote}/#{branch}'.\n".green
434
442
  run("git push #{remote} #{branch} -q")
@@ -578,18 +586,6 @@ class Gitcycle
578
586
  run("git push origin #{target} -q")
579
587
  end
580
588
 
581
- def collab?(branch)
582
- return false unless branch
583
- owner =
584
- if branch['repo'].is_a?(::Hash)
585
- branch['repo']['owner']
586
- else
587
- branch['repo'].split(':')[0]
588
- end
589
- branch['home'] != branch['user'] &&
590
- branch['home'] != owner
591
- end
592
-
593
589
  def command_not_recognized
594
590
  readme = "https://github.com/winton/gitcycle/blob/master/README.md"
595
591
  puts "\nCommand not recognized.".red
@@ -793,7 +789,7 @@ class Gitcycle
793
789
 
794
790
  if branches(:remote => true, :match => "#{owner}/#{branch}")
795
791
  puts "\nMerging remote branch '#{branch}' from '#{owner}/#{repo}'.\n".green
796
- run("git merge #{owner}/#{branch} -q")
792
+ run("git merge #{owner}/#{branch}")
797
793
 
798
794
  fix_conflict(options)
799
795
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gitcycle
3
3
  version: !ruby/object:Gem::Version
4
- hash: 49
4
+ hash: 63
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 2
9
- - 19
10
- version: 0.2.19
9
+ - 20
10
+ version: 0.2.20
11
11
  platform: ruby
12
12
  authors:
13
13
  - Winton Welsh
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-05-02 00:00:00 -07:00
18
+ date: 2012-08-09 00:00:00 -07:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -156,6 +156,7 @@ files:
156
156
  - features/discuss.feature
157
157
  - features/errors.feature
158
158
  - features/pull.feature
159
+ - features/push.feature
159
160
  - features/qa.feature
160
161
  - features/ready.feature
161
162
  - features/review.feature
@@ -206,6 +207,7 @@ test_files:
206
207
  - features/discuss.feature
207
208
  - features/errors.feature
208
209
  - features/pull.feature
210
+ - features/push.feature
209
211
  - features/qa.feature
210
212
  - features/ready.feature
211
213
  - features/review.feature