gitcycle 0.2.12 → 0.2.13
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +32 -43
- data/features/gitcycle.feature +5 -26
- data/features/steps/gitcycle_steps.rb +2 -6
- data/gitcycle.gemspec +1 -1
- data/lib/gitcycle.rb +64 -68
- metadata +3 -3
data/README.md
CHANGED
@@ -29,7 +29,7 @@ Branch From Ticket
|
|
29
29
|
|
30
30
|
First, checkout the branch that you will eventually merge your code into:
|
31
31
|
|
32
|
-
gitc checkout
|
32
|
+
gitc checkout [BRANCH]
|
33
33
|
|
34
34
|
Type `gitc branch` + your ticket URL to create a new branch:
|
35
35
|
|
@@ -81,55 +81,49 @@ Code Review
|
|
81
81
|
|
82
82
|
Periodically check for "Pending Review" issues on GitHub.
|
83
83
|
|
84
|
-
|
84
|
+
### Pass
|
85
|
+
|
86
|
+
gitc review pass [GITHUB ISSUE #] [...]
|
87
|
+
|
88
|
+
Label the issue "Pending QA".
|
85
89
|
|
86
|
-
|
90
|
+
### Fail
|
91
|
+
|
92
|
+
gitc review fail [GITHUB ISSUE #] [...]
|
93
|
+
|
94
|
+
Label the issue "Fail".
|
87
95
|
|
88
96
|
Quality Assurance
|
89
97
|
-----------------
|
90
98
|
|
91
99
|
Periodically check for "Pending QA" issues on Github.
|
92
100
|
|
93
|
-
|
101
|
+
### Create QA Branch
|
94
102
|
|
95
103
|
gitc qa [GITHUB ISSUE #] [...]
|
96
104
|
|
97
105
|
Now you have a QA branch containing all commits from the specified Github issue numbers.
|
98
106
|
|
99
|
-
|
100
|
-
-------
|
101
|
-
|
102
|
-
If a feature does not pass QA:
|
103
|
-
|
104
|
-
gitc qa fail [GITHUB ISSUE #] [...]
|
105
|
-
|
106
|
-
To fail all issues:
|
107
|
-
|
108
|
-
gitc qa fail
|
109
|
-
|
110
|
-
This adds a "fail" label to the issue.
|
107
|
+
### Fail
|
111
108
|
|
112
|
-
|
113
|
-
-------
|
109
|
+
gitc qa fail [GITHUB ISSUE #]
|
114
110
|
|
115
|
-
|
111
|
+
Label the issue with "Fail" and regenerate the QA branch without the failing issue.
|
116
112
|
|
117
|
-
|
118
|
-
|
119
|
-
To pass all issues:
|
113
|
+
### Pass
|
120
114
|
|
121
115
|
gitc qa pass
|
122
116
|
|
123
|
-
|
117
|
+
Label all issues "Pass" and the merge the QA branch into target branch.
|
124
118
|
|
125
|
-
|
126
|
-
----
|
119
|
+
### Status
|
127
120
|
|
128
|
-
|
121
|
+
See who is QA'ing what:
|
129
122
|
|
130
|
-
|
123
|
+
gitc qa
|
131
124
|
|
132
|
-
|
125
|
+
Checkout
|
126
|
+
--------
|
133
127
|
|
134
128
|
### Collaborate
|
135
129
|
|
@@ -137,35 +131,30 @@ Checkout branches from other forks:
|
|
137
131
|
|
138
132
|
gitc checkout [USER] [BRANCH]
|
139
133
|
|
140
|
-
###
|
134
|
+
### From Ticket
|
141
135
|
|
142
|
-
|
136
|
+
Checkout a branch from a ticket URL:
|
143
137
|
|
144
|
-
gitc
|
138
|
+
gitc checkout [TICKET URL]
|
145
139
|
|
146
|
-
###
|
140
|
+
### Upstream Branch
|
147
141
|
|
148
|
-
|
142
|
+
Gitcycle automatically knows if you are checking out an upstream branch:
|
149
143
|
|
150
|
-
gitc
|
144
|
+
gitc checkout [BRANCH]
|
151
145
|
|
152
146
|
Todo
|
153
147
|
----
|
154
148
|
|
155
149
|
* Label issues with ticket milestone
|
156
|
-
*
|
150
|
+
* Issues aren't assigned to people
|
157
151
|
* Add comment on lighthouse with issue URL
|
158
|
-
* gitc discuss should tag issue with 'Discuss'
|
159
152
|
* On pass or fail, send email to Github email
|
160
|
-
* Note you can use gitc with a string
|
153
|
+
* Note you can use gitc with a string (and get this working)
|
161
154
|
* gitc qa pass, should not set ticket to pending-approval if its already resolved
|
162
155
|
* If gitc redo happens on branch with Github issue, close the existing issue
|
163
|
-
* Add comment on lighthouse with issue URL
|
164
156
|
* Instead of detecting CONFLICT, use error status $? != 0
|
165
|
-
* gitc qa pass # since we're changing this to pass all the tickets, we need to loop through all the merged issues and update the lighthouse state to pending-qa
|
166
|
-
* There's still a Tagging Issue I tried to fix parseLabel http://d.pr/8eOS , Pass should remove Pending *, but remove the Branch Name. Also, when I gitc reviewed failed [issue number] it marks it pending-qa and failed.. not correct. I'll take a look at this over the weekend -Tung
|
167
|
-
* gitc discuss should tag issue with 'Discuss'
|
168
157
|
* gitc ready - possibly do syntax checks
|
169
158
|
$ gitc st - shortcut
|
170
|
-
*
|
171
|
-
*
|
159
|
+
* There's still a Tagging Issue I tried to fix parseLabel http://d.pr/8eOS , Pass should remove Pending *, but remove the Branch Name. Also, when I gitc reviewed failed [issue number] it marks it pending-qa and failed.. not correct. I'll take a look at this over the weekend -Tung
|
160
|
+
* gitc qa pass # since we're changing this to pass all the tickets, we need to loop through all the merged issues and update the lighthouse state to pending-qa
|
data/features/gitcycle.feature
CHANGED
@@ -62,31 +62,9 @@ Scenario: Feature branch
|
|
62
62
|
"""
|
63
63
|
And redis entries valid
|
64
64
|
|
65
|
-
Scenario: Redo feature branch
|
66
|
-
Given a fresh set of repositories
|
67
|
-
When I cd to the user repo
|
68
|
-
And I execute gitcycle redo with the Lighthouse ticket URL
|
69
|
-
And I enter "y"
|
70
|
-
And I enter "y"
|
71
|
-
Then gitcycle runs
|
72
|
-
And output includes
|
73
|
-
"""
|
74
|
-
Retrieving branch information from gitcycle.
|
75
|
-
Your work will eventually merge into 'master'. Is this correct? (y/n)
|
76
|
-
Would you like to name your branch 'ticket.id'? (y/n)
|
77
|
-
Adding remote repo 'config.owner/config.repo'.
|
78
|
-
Fetching remote 'config.owner'.
|
79
|
-
Checking out remote branch 'ticket.id' from 'config.owner/config.repo/master'.
|
80
|
-
Fetching remote 'origin'.
|
81
|
-
Pulling 'origin/ticket.id'.
|
82
|
-
Pushing 'origin/ticket.id'.
|
83
|
-
Sending branch information to gitcycle.
|
84
|
-
"""
|
85
|
-
And redis entries valid
|
86
|
-
|
87
65
|
Scenario: Checkout via ticket w/ existing branch
|
88
66
|
When I cd to the user repo
|
89
|
-
And I execute gitcycle
|
67
|
+
And I execute gitcycle checkout with the Lighthouse ticket URL
|
90
68
|
Then gitcycle runs
|
91
69
|
And output includes
|
92
70
|
"""
|
@@ -98,7 +76,7 @@ Scenario: Checkout via ticket w/ existing branch
|
|
98
76
|
Scenario: Checkout via ticket w/ fresh repo
|
99
77
|
Given a fresh set of repositories
|
100
78
|
When I cd to the user repo
|
101
|
-
And I execute gitcycle
|
79
|
+
And I execute gitcycle checkout with the Lighthouse ticket URL
|
102
80
|
Then gitcycle runs
|
103
81
|
And output includes
|
104
82
|
"""
|
@@ -147,6 +125,7 @@ Scenario: Discuss commits w/ no parameters and something committed
|
|
147
125
|
"""
|
148
126
|
Retrieving branch information from gitcycle.
|
149
127
|
Creating GitHub pull request.
|
128
|
+
Labeling issue as 'Discuss'.
|
150
129
|
"""
|
151
130
|
And output includes "Opening issue" with URL
|
152
131
|
And URL is a valid issue
|
@@ -190,13 +169,13 @@ Scenario: Ready issue w/ parameters
|
|
190
169
|
Scenario: Reviewed issue w/ no parameters
|
191
170
|
When I cd to the user repo
|
192
171
|
And I checkout ticket.id
|
193
|
-
And I execute gitcycle with "
|
172
|
+
And I execute gitcycle with "review pass"
|
194
173
|
Then gitcycle runs
|
195
174
|
And output includes "Labeling issue as 'Pending QA'."
|
196
175
|
|
197
176
|
Scenario: Reviewed issue w/ parameters
|
198
177
|
When I cd to the user repo
|
199
|
-
And I execute gitcycle with "
|
178
|
+
And I execute gitcycle with "review pass issue.id"
|
200
179
|
Then gitcycle runs
|
201
180
|
And output includes "Labeling issues as 'Pending QA'."
|
202
181
|
|
@@ -140,12 +140,8 @@ When /^I execute gitcycle setup$/ do
|
|
140
140
|
].join(' ')
|
141
141
|
end
|
142
142
|
|
143
|
-
When /^I execute gitcycle
|
144
|
-
$execute << "
|
145
|
-
end
|
146
|
-
|
147
|
-
When /^I execute gitcycle redo with the Lighthouse ticket URL$/ do
|
148
|
-
$execute << "redo #{$ticket.url}"
|
143
|
+
When /^I execute gitcycle (.*) with the Lighthouse ticket URL$/ do |cmd|
|
144
|
+
$execute << "#{cmd} #{$ticket.url}"
|
149
145
|
end
|
150
146
|
|
151
147
|
When /^I cd to the (.*) repo$/ do |user|
|
data/gitcycle.gemspec
CHANGED
data/lib/gitcycle.rb
CHANGED
@@ -65,34 +65,29 @@ class Gitcycle
|
|
65
65
|
exec_git(:branch, args)
|
66
66
|
end
|
67
67
|
|
68
|
-
params['reset'] = '1' if args.include?('--redo')
|
69
|
-
|
70
68
|
puts "\nRetrieving branch information from gitcycle.\n".green
|
71
69
|
branch = get('branch', params)
|
72
70
|
name = branch['name']
|
73
71
|
|
74
72
|
begin
|
75
73
|
owner, repo = branch['repo'].split(':')
|
74
|
+
branch['home'] = @git_login
|
76
75
|
|
77
|
-
unless branch['
|
78
|
-
branch['
|
79
|
-
|
80
|
-
unless yes?("\nYour work will eventually merge into '#{branch['source']}'. Is this correct?")
|
81
|
-
branch['source'] = q("What branch would you like to eventually merge into?")
|
82
|
-
end
|
83
|
-
|
84
|
-
unless yes?("Would you like to name your branch '#{name}'?")
|
85
|
-
name = q("\nWhat would you like to name your branch?")
|
86
|
-
name = name.gsub(/[\s\W]/, '-')
|
87
|
-
end
|
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?")
|
78
|
+
end
|
88
79
|
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
:branch => branch['source'],
|
93
|
-
:target => name
|
94
|
-
)
|
80
|
+
unless yes?("Would you like to name your branch '#{name}'?")
|
81
|
+
name = q("\nWhat would you like to name your branch?")
|
82
|
+
name = name.gsub(/[\s\W]/, '-')
|
95
83
|
end
|
84
|
+
|
85
|
+
checkout_remote_branch(
|
86
|
+
:owner => owner,
|
87
|
+
:repo => repo,
|
88
|
+
:branch => branch['source'],
|
89
|
+
:target => name
|
90
|
+
)
|
96
91
|
rescue SystemExit, Interrupt
|
97
92
|
puts "\nDeleting branch from gitcycle.\n".green
|
98
93
|
branch = get('branch',
|
@@ -102,17 +97,13 @@ class Gitcycle
|
|
102
97
|
)
|
103
98
|
end
|
104
99
|
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
'branch[rename]' => name != branch['name'] ? name : nil,
|
113
|
-
'branch[source]' => branch['source']
|
114
|
-
)
|
115
|
-
end
|
100
|
+
puts "Sending branch information to gitcycle.".green
|
101
|
+
get('branch',
|
102
|
+
'branch[home]' => branch['home'],
|
103
|
+
'branch[name]' => branch['name'],
|
104
|
+
'branch[rename]' => name != branch['name'] ? name : nil,
|
105
|
+
'branch[source]' => branch['source']
|
106
|
+
)
|
116
107
|
|
117
108
|
puts "\n"
|
118
109
|
end
|
@@ -124,39 +115,45 @@ class Gitcycle
|
|
124
115
|
|
125
116
|
require_git && require_config
|
126
117
|
|
127
|
-
|
128
|
-
|
118
|
+
if args.length == 1 && args[0] =~ /^https?:\/\//
|
119
|
+
puts "\nRetrieving branch information from gitcycle.\n".green
|
120
|
+
branch = get('branch', 'branch[lighthouse_url]' => args[0])
|
121
|
+
checkout_or_track(:name => branch['name'], :remote => 'origin')
|
122
|
+
else
|
123
|
+
remote, branch = args
|
124
|
+
remote, branch = nil, remote if branch.nil?
|
129
125
|
|
130
|
-
|
131
|
-
|
126
|
+
unless branches(:match => branch)
|
127
|
+
collab = branch && remote
|
132
128
|
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
)
|
143
|
-
|
144
|
-
puts "Creating branch '#{branch}' from '#{remote}/#{branch}'.\n".green
|
145
|
-
run("git branch --no-track #{branch} #{remote}/#{branch}")
|
146
|
-
|
147
|
-
if collab
|
148
|
-
puts "Sending branch information to gitcycle.".green
|
149
|
-
get('branch',
|
150
|
-
'branch[home]' => remote,
|
151
|
-
'branch[name]' => branch,
|
152
|
-
'branch[collab]' => 1,
|
153
|
-
'create' => 1
|
129
|
+
unless collab
|
130
|
+
puts "\nRetrieving repo information from gitcycle.\n".green
|
131
|
+
repo = get('repo')
|
132
|
+
remote = repo['owner']
|
133
|
+
end
|
134
|
+
|
135
|
+
add_remote_and_fetch(
|
136
|
+
:owner => remote,
|
137
|
+
:repo => @git_repo
|
154
138
|
)
|
139
|
+
|
140
|
+
puts "Creating branch '#{branch}' from '#{remote}/#{branch}'.\n".green
|
141
|
+
run("git branch --no-track #{branch} #{remote}/#{branch}")
|
142
|
+
|
143
|
+
if collab
|
144
|
+
puts "Sending branch information to gitcycle.".green
|
145
|
+
get('branch',
|
146
|
+
'branch[home]' => remote,
|
147
|
+
'branch[name]' => branch,
|
148
|
+
'branch[collab]' => 1,
|
149
|
+
'create' => 1
|
150
|
+
)
|
151
|
+
end
|
155
152
|
end
|
156
|
-
end
|
157
153
|
|
158
|
-
|
159
|
-
|
154
|
+
puts "Checking out '#{branch}'.\n".green
|
155
|
+
run("git checkout #{branch}")
|
156
|
+
end
|
160
157
|
end
|
161
158
|
alias :co :checkout
|
162
159
|
|
@@ -202,6 +199,12 @@ class Gitcycle
|
|
202
199
|
if branch == false
|
203
200
|
puts "Branch not found.\n".red
|
204
201
|
elsif branch['issue_url']
|
202
|
+
puts "\nLabeling issue as 'Discuss'.\n".green
|
203
|
+
get('label',
|
204
|
+
'branch[name]' => branch['name'],
|
205
|
+
'labels' => [ 'Discuss' ]
|
206
|
+
)
|
207
|
+
|
205
208
|
puts "Opening issue: #{branch['issue_url']}\n".green
|
206
209
|
Launchy.open(branch['issue_url'])
|
207
210
|
else
|
@@ -403,7 +406,7 @@ class Gitcycle
|
|
403
406
|
elsif branch['issue_url']
|
404
407
|
puts "\nLabeling issue as 'Pending Review'.\n".green
|
405
408
|
get('label',
|
406
|
-
'branch[name]' =>
|
409
|
+
'branch[name]' => branch['name'],
|
407
410
|
'labels' => [ 'Pending Review' ]
|
408
411
|
)
|
409
412
|
|
@@ -422,19 +425,12 @@ class Gitcycle
|
|
422
425
|
end
|
423
426
|
end
|
424
427
|
|
425
|
-
def
|
426
|
-
args << "--redo"
|
427
|
-
branch(*args)
|
428
|
-
end
|
429
|
-
|
430
|
-
def reviewed(*issues)
|
428
|
+
def review(pass_fail, *issues)
|
431
429
|
require_git && require_config
|
432
430
|
|
433
|
-
if
|
434
|
-
issues = issues.reject{|x| x=='fail'}
|
431
|
+
if pass_fail == 'fail'
|
435
432
|
label = 'Fail'
|
436
433
|
else
|
437
|
-
issues = issues.reject{|x| x=='pass'}
|
438
434
|
label = 'Pending QA'
|
439
435
|
end
|
440
436
|
|
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:
|
4
|
+
hash: 13
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 2
|
9
|
-
-
|
10
|
-
version: 0.2.
|
9
|
+
- 13
|
10
|
+
version: 0.2.13
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Winton Welsh
|