gitcycle 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/bin/gitc +1 -12
- data/features/gitcycle.feature +36 -20
- data/features/steps/gitcycle_steps.rb +59 -41
- data/features/support/env.rb +2 -0
- data/gitcycle.gemspec +2 -1
- data/lib/gitcycle.rb +44 -43
- metadata +96 -130
data/.gitignore
CHANGED
data/bin/gitc
CHANGED
@@ -2,15 +2,4 @@
|
|
2
2
|
|
3
3
|
require File.expand_path("../../lib/gitcycle", __FILE__)
|
4
4
|
|
5
|
-
|
6
|
-
command = ARGV.shift
|
7
|
-
|
8
|
-
if command.nil?
|
9
|
-
puts "\nNo command specified\n".red
|
10
|
-
elsif gitcycle.respond_to?(command)
|
11
|
-
gitcycle.send(command, *ARGV)
|
12
|
-
elsif ARGV.empty?
|
13
|
-
gitcycle.create_branch(command)
|
14
|
-
else
|
15
|
-
puts "\nCommand '#{command}' not found.\n".red
|
16
|
-
end
|
5
|
+
Gitcycle.new(ARGV)
|
data/features/gitcycle.feature
CHANGED
@@ -1,16 +1,19 @@
|
|
1
1
|
Feature: gitcycle
|
2
2
|
|
3
3
|
Scenario: No command given
|
4
|
-
When I execute gitcycle with
|
5
|
-
Then
|
4
|
+
When I execute gitcycle with nothing
|
5
|
+
Then gitcycle runs
|
6
|
+
And output includes "No command specified"
|
6
7
|
|
7
8
|
Scenario: Non-existent command
|
8
9
|
When I execute gitcycle with "blah blah"
|
9
|
-
Then
|
10
|
+
Then gitcycle runs
|
11
|
+
And output includes "Command 'blah' not found"
|
10
12
|
|
11
13
|
Scenario: Setup
|
12
14
|
When I execute gitcycle setup
|
13
|
-
Then
|
15
|
+
Then gitcycle runs
|
16
|
+
And output includes "Configuration saved."
|
14
17
|
And gitcycle.yml should be valid
|
15
18
|
|
16
19
|
Scenario: Feature branch w/ custom branch name
|
@@ -20,7 +23,8 @@ Scenario: Feature branch w/ custom branch name
|
|
20
23
|
And I execute gitcycle with the Lighthouse ticket URL
|
21
24
|
And I enter "n"
|
22
25
|
And I enter "ticket.id-rename"
|
23
|
-
Then
|
26
|
+
Then gitcycle runs
|
27
|
+
And output includes "Retrieving branch information from gitcycle."
|
24
28
|
And output includes "Would you like to name your branch 'ticket.id'?"
|
25
29
|
And output includes "What would you like to name your branch?"
|
26
30
|
And output includes "Creating 'ticket.id-rename' from 'master'."
|
@@ -35,7 +39,8 @@ Scenario: Feature branch
|
|
35
39
|
When I cd to the user repo
|
36
40
|
And I execute gitcycle with the Lighthouse ticket URL
|
37
41
|
And I enter "y"
|
38
|
-
Then
|
42
|
+
Then gitcycle runs
|
43
|
+
And output includes "Retrieving branch information from gitcycle."
|
39
44
|
And output includes "Would you like to name your branch 'ticket.id'?"
|
40
45
|
And output does not include "What would you like to name your branch?"
|
41
46
|
And output includes "Creating 'ticket.id' from 'master'."
|
@@ -47,7 +52,8 @@ Scenario: Feature branch
|
|
47
52
|
Scenario: Checkout via ticket w/ existing branch
|
48
53
|
When I cd to the user repo
|
49
54
|
And I execute gitcycle with the Lighthouse ticket URL
|
50
|
-
Then
|
55
|
+
Then gitcycle runs
|
56
|
+
And output includes "Retrieving branch information from gitcycle."
|
51
57
|
And output does not include "Would you like to name your branch 'ticket.id'?"
|
52
58
|
And output does not include "What would you like to name your branch?"
|
53
59
|
And output does not include "Creating 'ticket.id' from 'master'."
|
@@ -60,7 +66,8 @@ Scenario: Checkout via ticket w/ fresh repo
|
|
60
66
|
Given a fresh set of repositories
|
61
67
|
When I cd to the user repo
|
62
68
|
And I execute gitcycle with the Lighthouse ticket URL
|
63
|
-
Then
|
69
|
+
Then gitcycle runs
|
70
|
+
And output includes "Retrieving branch information from gitcycle."
|
64
71
|
And output does not include "Would you like to name your branch 'ticket.id'?"
|
65
72
|
And output does not include "What would you like to name your branch?"
|
66
73
|
And output does not include "Creating 'ticket.id' from 'master'."
|
@@ -74,8 +81,10 @@ Scenario: Pull changes from upstream
|
|
74
81
|
And I checkout master
|
75
82
|
And I commit something
|
76
83
|
And I cd to the user repo
|
84
|
+
And I checkout ticket.id
|
77
85
|
And I execute gitcycle with "pull"
|
78
|
-
Then
|
86
|
+
Then gitcycle runs
|
87
|
+
And output includes "Retrieving branch information from gitcycle."
|
79
88
|
And output includes "Adding remote repo 'config.owner/config.repo'."
|
80
89
|
And output includes "Fetching remote branch 'master'."
|
81
90
|
And output includes "Merging remote branch 'master' from 'config.owner/config.repo'."
|
@@ -85,7 +94,8 @@ Scenario: Discuss commits w/ no parameters and nothing committed
|
|
85
94
|
When I cd to the user repo
|
86
95
|
And I checkout ticket.id
|
87
96
|
And I execute gitcycle with "discuss"
|
88
|
-
Then
|
97
|
+
Then gitcycle runs
|
98
|
+
And output includes "Retrieving branch information from gitcycle."
|
89
99
|
And output includes "Creating GitHub pull request."
|
90
100
|
And output does not include "Branch not found."
|
91
101
|
And output does not include "Opening issue"
|
@@ -97,7 +107,8 @@ Scenario: Discuss commits w/ no parameters and something committed
|
|
97
107
|
And I checkout ticket.id
|
98
108
|
And I commit something
|
99
109
|
And I execute gitcycle with "discuss"
|
100
|
-
Then
|
110
|
+
Then gitcycle runs
|
111
|
+
And output includes "Retrieving branch information from gitcycle."
|
101
112
|
And output includes "Creating GitHub pull request."
|
102
113
|
And output does not include "Branch not found."
|
103
114
|
And output includes "Opening issue" with URL
|
@@ -109,7 +120,8 @@ Scenario: Discuss commits w/ parameters
|
|
109
120
|
When I cd to the user repo
|
110
121
|
And I checkout ticket.id
|
111
122
|
And I execute gitcycle with "discuss issue.id"
|
112
|
-
Then
|
123
|
+
Then gitcycle runs
|
124
|
+
And output includes "Retrieving branch information from gitcycle."
|
113
125
|
And output does not include "Creating GitHub pull request."
|
114
126
|
And output does not include "Branch not found."
|
115
127
|
And output does not include "You must push code before opening a pull request."
|
@@ -120,36 +132,40 @@ Scenario: Ready issue w/ no parameters
|
|
120
132
|
When I cd to the user repo
|
121
133
|
And I checkout ticket.id
|
122
134
|
And I execute gitcycle with "ready"
|
123
|
-
Then
|
135
|
+
Then gitcycle runs
|
136
|
+
And output includes "Labeling issue as 'Pending Review'."
|
124
137
|
|
125
138
|
Scenario: Ready issue w/ parameters
|
126
139
|
When I cd to the user repo
|
127
140
|
And I execute gitcycle with "ready issue.id"
|
128
|
-
Then
|
141
|
+
Then gitcycle runs
|
142
|
+
And output includes "Labeling issues as 'Pending Review'."
|
129
143
|
|
130
144
|
Scenario: Reviewed issue w/ no parameters
|
131
145
|
When I cd to the user repo
|
132
146
|
And I checkout ticket.id
|
133
147
|
And I execute gitcycle with "reviewed"
|
134
|
-
Then
|
148
|
+
Then gitcycle runs
|
149
|
+
And output includes "Labeling issue as 'Pending QA'."
|
135
150
|
|
136
151
|
Scenario: Reviewed issue w/ parameters
|
137
152
|
When I cd to the user repo
|
138
153
|
And I execute gitcycle with "reviewed issue.id"
|
139
|
-
Then
|
154
|
+
Then gitcycle runs
|
155
|
+
And output includes "Labeling issues as 'Pending QA'."
|
140
156
|
|
141
157
|
Scenario: QA issue
|
142
158
|
When I cd to the owner repo
|
143
159
|
And I checkout master
|
144
160
|
And I execute gitcycle with "qa issue.id"
|
145
|
-
Then
|
161
|
+
Then gitcycle runs
|
162
|
+
And output includes "Retrieving branch information from gitcycle."
|
146
163
|
And output does not include "Checking out source branch 'master'."
|
147
164
|
And output does not include "Tracking source branch 'master'."
|
148
|
-
And output does not include "Deleting old QA branch 'qa_master'."
|
149
165
|
And output includes "Creating QA branch 'qa_master'."
|
150
|
-
And output includes "Adding remote repo '
|
166
|
+
And output includes "Adding remote repo 'env.home/config.repo'."
|
151
167
|
And output includes "Fetching remote branch 'ticket.id'."
|
152
|
-
And output includes "Merging remote branch 'ticket.id' from '
|
168
|
+
And output includes "Merging remote branch 'ticket.id' from 'env.home/config.repo'."
|
153
169
|
And output includes "Pushing QA branch 'qa_master'."
|
154
170
|
And output includes "Type 'gitc qa pass' to approve all issues in this branch."
|
155
171
|
And output includes "Type 'gitc qa fail' to reject all issues in this branch."
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require '
|
1
|
+
require 'cucumber/rspec/doubles'
|
2
2
|
require 'lighthouse'
|
3
3
|
require 'redis'
|
4
4
|
require 'rspec/expectations'
|
@@ -11,23 +11,26 @@ BIN = "#{BASE}/bin/gitc"
|
|
11
11
|
ENV['CONFIG'] = GITCYCLE = "#{BASE}/features/fixtures/gitcycle.yml"
|
12
12
|
ENV['ENV'] = 'development'
|
13
13
|
|
14
|
+
$:.unshift File.expand_path(__FILE__, "../../../lib")
|
15
|
+
require "gitcycle"
|
16
|
+
|
14
17
|
$redis = Redis.new
|
15
18
|
|
16
19
|
Before do |scenario|
|
17
|
-
@aruba_timeout_seconds = 10
|
18
20
|
@scenario_title = scenario.title
|
21
|
+
$execute = []
|
22
|
+
$input = []
|
23
|
+
$remotes = nil
|
19
24
|
end
|
20
25
|
|
21
26
|
def branches(options={})
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
b
|
30
|
-
end
|
27
|
+
b = `git branch#{" -a" if options[:all]}`
|
28
|
+
if options[:current]
|
29
|
+
b.match(/\*\s+(.+)/)[1]
|
30
|
+
elsif options[:match]
|
31
|
+
b.match(/([\s]+|origin\/)(#{options[:match]})/)[2] rescue nil
|
32
|
+
else
|
33
|
+
b
|
31
34
|
end
|
32
35
|
end
|
33
36
|
|
@@ -47,6 +50,7 @@ def gsub_variables(str)
|
|
47
50
|
issue_id = $url.match(/https:\/\/github.com\/.+\/issues\/(\d+)/)[1]
|
48
51
|
str = str.gsub('issue.id', issue_id)
|
49
52
|
end
|
53
|
+
str = str.gsub('env.home', ENV['REPO'] == 'owner' ? config['owner'] : config['user'])
|
50
54
|
str = str.gsub('config.owner', config['owner'])
|
51
55
|
str = str.gsub('config.repo', config['repo'])
|
52
56
|
str = str.gsub('config.user', config['user'])
|
@@ -54,11 +58,8 @@ def gsub_variables(str)
|
|
54
58
|
end
|
55
59
|
|
56
60
|
def log(match)
|
57
|
-
|
58
|
-
|
59
|
-
match = !(match =~ /^#{match}$/).nil?
|
60
|
-
end
|
61
|
-
match
|
61
|
+
log = `git log --pretty=format:%s`
|
62
|
+
!(match =~ /^#{match}$/).nil?
|
62
63
|
end
|
63
64
|
|
64
65
|
def repos(reload=false)
|
@@ -81,15 +82,25 @@ def repos(reload=false)
|
|
81
82
|
end
|
82
83
|
end
|
83
84
|
|
84
|
-
def run_gitcycle(cmd
|
85
|
-
|
86
|
-
|
87
|
-
|
85
|
+
def run_gitcycle(cmd)
|
86
|
+
@output = ''
|
87
|
+
@gitcycle = Gitcycle.new
|
88
|
+
@gitcycle.stub(:puts) do |str|
|
89
|
+
str = str.gsub(/\e\[\d{1,2}m/, '')
|
90
|
+
@output << str
|
91
|
+
puts str
|
92
|
+
end
|
93
|
+
if cmd
|
94
|
+
@gitcycle.start(Shellwords.split(cmd))
|
88
95
|
else
|
89
|
-
|
96
|
+
@gitcycle.start
|
90
97
|
end
|
91
98
|
end
|
92
99
|
|
100
|
+
def type(text)
|
101
|
+
$input << text
|
102
|
+
end
|
103
|
+
|
93
104
|
Given /^a fresh set of repositories$/ do
|
94
105
|
repos(true)
|
95
106
|
end
|
@@ -104,20 +115,23 @@ Given /^a new Lighthouse ticket$/ do
|
|
104
115
|
$ticket.save
|
105
116
|
end
|
106
117
|
|
118
|
+
When /^I execute gitcycle with nothing$/ do
|
119
|
+
$execute << nil
|
120
|
+
end
|
121
|
+
|
107
122
|
When /^I execute gitcycle with "([^\"]*)"$/ do |cmd|
|
108
|
-
|
109
|
-
run_gitcycle(cmd)
|
123
|
+
$execute << gsub_variables(cmd)
|
110
124
|
end
|
111
125
|
|
112
126
|
When /^I execute gitcycle setup$/ do
|
113
127
|
FileUtils.rm(GITCYCLE) if File.exists?(GITCYCLE)
|
114
|
-
|
128
|
+
$execute << [
|
115
129
|
"setup",
|
116
130
|
config['user'],
|
117
131
|
config['repo'],
|
118
132
|
config['token_dev']
|
119
133
|
].join(' ')
|
120
|
-
|
134
|
+
$execute << [
|
121
135
|
"setup",
|
122
136
|
config['user'],
|
123
137
|
"#{config['owner']}/#{config['repo']}",
|
@@ -126,12 +140,14 @@ When /^I execute gitcycle setup$/ do
|
|
126
140
|
end
|
127
141
|
|
128
142
|
When /^I execute gitcycle with the Lighthouse ticket URL$/ do
|
129
|
-
|
143
|
+
$execute << $ticket.url
|
130
144
|
end
|
131
145
|
|
132
146
|
When /^I cd to the (.*) repo$/ do |user|
|
133
|
-
|
134
|
-
|
147
|
+
if ENV['REPO']
|
148
|
+
puts "(overiding repo as #{ENV['REPO']})"
|
149
|
+
end
|
150
|
+
Dir.chdir($repos[(ENV['REPO'] || user).to_sym])
|
135
151
|
end
|
136
152
|
|
137
153
|
When /^I enter "([^\"]*)"$/ do |input|
|
@@ -141,18 +157,20 @@ end
|
|
141
157
|
|
142
158
|
When /^I commit something$/ do
|
143
159
|
branch = branches(:current => true)
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
`git push origin #{branch}`
|
149
|
-
end
|
160
|
+
$commit_msg = "#{@scenario_title} - #{rand}"
|
161
|
+
File.open('README', 'w') {|f| f.write($commit_msg) }
|
162
|
+
`git add . && git add . -u && git commit -a -m '#{$commit_msg}'`
|
163
|
+
`git push origin #{branch}`
|
150
164
|
end
|
151
165
|
|
152
166
|
When /^I checkout (.+)$/ do |branch|
|
153
167
|
branch = gsub_variables(branch)
|
154
|
-
|
155
|
-
|
168
|
+
`git checkout #{branch}`
|
169
|
+
end
|
170
|
+
|
171
|
+
Then /^gitcycle runs$/ do
|
172
|
+
$execute.each do |cmd|
|
173
|
+
run_gitcycle(cmd)
|
156
174
|
end
|
157
175
|
end
|
158
176
|
|
@@ -168,19 +186,18 @@ end
|
|
168
186
|
|
169
187
|
Then /^output includes \"([^\"]*)"$/ do |expected|
|
170
188
|
expected = gsub_variables(expected)
|
171
|
-
|
189
|
+
@output.include?(expected).should == true
|
172
190
|
end
|
173
191
|
|
174
192
|
Then /^output includes \"([^\"]*)" with URL$/ do |expected|
|
175
|
-
puts all_output.inspect
|
176
193
|
expected = gsub_variables(expected)
|
177
|
-
|
178
|
-
$url =
|
194
|
+
@output.include?(expected).should == true
|
195
|
+
$url = @output.match(/#{expected}.*(https?:\/\/[^\s]+)/)[1]
|
179
196
|
end
|
180
197
|
|
181
198
|
Then /^output does not include \"([^\"]*)"$/ do |expected|
|
182
199
|
expected = gsub_variables(expected)
|
183
|
-
|
200
|
+
@output.include?(expected).should == false
|
184
201
|
end
|
185
202
|
|
186
203
|
Then /^redis entries valid$/ do
|
@@ -199,6 +216,7 @@ Then /^redis entries valid$/ do
|
|
199
216
|
should = {
|
200
217
|
'lighthouse_url' => $ticket.url,
|
201
218
|
'body' => "<div><p>test</p></div>\n\n#{$ticket.url}",
|
219
|
+
'home' => 'br',
|
202
220
|
'name' => $ticket.attributes['id'] + add,
|
203
221
|
'id' => $ticket.attributes['id'] + add,
|
204
222
|
'title' => $ticket.title,
|
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.1.
|
9
|
+
s.version = '0.1.2'
|
10
10
|
s.platform = Gem::Platform::RUBY
|
11
11
|
s.authors = [ 'Winton Welsh' ]
|
12
12
|
s.email = [ 'mail@wintoni.us' ]
|
@@ -24,6 +24,7 @@ Gem::Specification.new do |s|
|
|
24
24
|
s.add_development_dependency "lighthouse"
|
25
25
|
s.add_development_dependency "redis"
|
26
26
|
s.add_development_dependency "rspec"
|
27
|
+
s.add_development_dependency "simplecov"
|
27
28
|
s.add_development_dependency "yajl-ruby"
|
28
29
|
|
29
30
|
s.add_dependency "launchy", "= 2.0.5"
|
data/lib/gitcycle.rb
CHANGED
@@ -21,14 +21,17 @@ class Gitcycle
|
|
21
21
|
"http://gitcycle.bleacherreport.com/api"
|
22
22
|
end
|
23
23
|
|
24
|
-
def initialize
|
24
|
+
def initialize(args=nil)
|
25
25
|
if ENV['CONFIG']
|
26
26
|
@config_path = File.expand_path(ENV['CONFIG'])
|
27
27
|
else
|
28
28
|
@config_path = File.expand_path("~/.gitcycle.yml")
|
29
29
|
end
|
30
|
+
|
30
31
|
load_config
|
31
32
|
load_git
|
33
|
+
|
34
|
+
start(args) if args
|
32
35
|
end
|
33
36
|
|
34
37
|
def create_branch(url_or_title)
|
@@ -55,6 +58,7 @@ class Gitcycle
|
|
55
58
|
name = branch['name']
|
56
59
|
|
57
60
|
unless branch['exists']
|
61
|
+
branch['home'] = @git_login
|
58
62
|
branch['source'] = branches(:current => true)
|
59
63
|
|
60
64
|
unless yes?("Would you like to name your branch '#{name}'?")
|
@@ -82,6 +86,7 @@ class Gitcycle
|
|
82
86
|
|
83
87
|
puts "Sending branch information to gitcycle.".green
|
84
88
|
get('branch',
|
89
|
+
'branch[home]' => branch['home'],
|
85
90
|
'branch[name]' => branch['name'],
|
86
91
|
'branch[rename]' => name != branch['name'] ? name : nil,
|
87
92
|
'branch[source]' => branch['source']
|
@@ -139,11 +144,15 @@ class Gitcycle
|
|
139
144
|
'create' => 0
|
140
145
|
)
|
141
146
|
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
+
if branch
|
148
|
+
merge_remote_branch(
|
149
|
+
:owner => branch['repo']['owner'],
|
150
|
+
:repo => branch['repo']['name'],
|
151
|
+
:branch => branch['source']
|
152
|
+
)
|
153
|
+
else
|
154
|
+
puts "Branch not found.\n".red
|
155
|
+
end
|
147
156
|
end
|
148
157
|
|
149
158
|
def qa(*issues)
|
@@ -169,40 +178,17 @@ class Gitcycle
|
|
169
178
|
puts "Checking out #{qa_branch['source']}.".green
|
170
179
|
run("git checkout #{qa_branch['source']}")
|
171
180
|
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
)
|
182
|
-
|
183
|
-
branches = qa_branch['branches']
|
184
|
-
else
|
185
|
-
issues = [1..-1]
|
186
|
-
|
187
|
-
branches = qa_branch['branches'].select do |b|
|
188
|
-
issues.include?(b['issue'])
|
189
|
-
end
|
190
|
-
|
191
|
-
branches.each do |branch|
|
192
|
-
merge_remote_branch(
|
193
|
-
:user => branch['user'],
|
194
|
-
:repo => branch['repo'].split(':'),
|
195
|
-
:branch => branch['branch']
|
196
|
-
)
|
181
|
+
puts "Merging '#{branch}' into '#{qa_branch['source']}'.\n".green
|
182
|
+
run("git merge #{branch}")
|
183
|
+
run("git push origin #{qa_branch['source']}")
|
184
|
+
|
185
|
+
puts "\nLabeling all issues as '#{label}'.\n".green
|
186
|
+
get('label',
|
187
|
+
'qa_branch[source]' => branch.gsub(/^qa_/, ''),
|
188
|
+
'labels' => [ label ]
|
189
|
+
)
|
197
190
|
|
198
|
-
|
199
|
-
get('label',
|
200
|
-
'qa_branch[source]' => branch.gsub(/^qa_/, ''),
|
201
|
-
'issue' => branch['issue'],
|
202
|
-
'labels' => [ label ]
|
203
|
-
)
|
204
|
-
end
|
205
|
-
end
|
191
|
+
branches = qa_branch['branches']
|
206
192
|
|
207
193
|
puts "\nMarking Lighthouse tickets as 'pending-approval'.\n".green
|
208
194
|
branches = branches.collect do |b|
|
@@ -294,6 +280,19 @@ class Gitcycle
|
|
294
280
|
puts "\nConfiguration saved.\n".green
|
295
281
|
end
|
296
282
|
|
283
|
+
def start(args=[])
|
284
|
+
command = args.shift
|
285
|
+
if command.nil?
|
286
|
+
puts "\nNo command specified\n".red
|
287
|
+
elsif self.respond_to?(command)
|
288
|
+
send(command, *args)
|
289
|
+
elsif args.empty?
|
290
|
+
create_branch(command)
|
291
|
+
else
|
292
|
+
puts "\nCommand '#{command}' not found.\n".red
|
293
|
+
end
|
294
|
+
end
|
295
|
+
|
297
296
|
private
|
298
297
|
|
299
298
|
def branches(options={})
|
@@ -322,6 +321,8 @@ class Gitcycle
|
|
322
321
|
source = qa_branch['source']
|
323
322
|
name = "qa_#{source}"
|
324
323
|
|
324
|
+
puts qa_branch.inspect
|
325
|
+
|
325
326
|
unless qa_branch['branches'].empty?
|
326
327
|
unless options[:preserve]
|
327
328
|
if branches(:current => source)
|
@@ -334,7 +335,7 @@ class Gitcycle
|
|
334
335
|
run("git fetch && git checkout -b #{source} origin/#{source}")
|
335
336
|
end
|
336
337
|
|
337
|
-
if branches(:match => name)
|
338
|
+
if branches(:match => name, :all => true)
|
338
339
|
puts "Deleting old QA branch '#{name}'.\n".green
|
339
340
|
run("git branch -D #{name}")
|
340
341
|
run("git push origin :#{name}")
|
@@ -349,11 +350,11 @@ class Gitcycle
|
|
349
350
|
qa_branch['branches'][range].each do |branch|
|
350
351
|
issue = branch['issue']
|
351
352
|
owner, repo = branch['repo'].split(':')
|
352
|
-
|
353
|
+
home = branch['home']
|
353
354
|
branch = branch['branch']
|
354
355
|
|
355
356
|
output = merge_remote_branch(
|
356
|
-
:owner =>
|
357
|
+
:owner => home,
|
357
358
|
:repo => repo,
|
358
359
|
:branch => branch
|
359
360
|
)
|
@@ -481,7 +482,7 @@ class Gitcycle
|
|
481
482
|
|
482
483
|
def q(question, extra='')
|
483
484
|
puts "#{question.yellow}#{extra}"
|
484
|
-
$stdin.gets.strip
|
485
|
+
$input ? $input.shift : $stdin.gets.strip
|
485
486
|
end
|
486
487
|
|
487
488
|
def run(cmd)
|
metadata
CHANGED
@@ -1,149 +1,123 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: gitcycle
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.2
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 1
|
9
|
-
- 1
|
10
|
-
version: 0.1.1
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Winton Welsh
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
dependencies:
|
21
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-01-17 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
22
15
|
name: aruba
|
23
|
-
|
24
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: &70203661925140 !ruby/object:Gem::Requirement
|
25
17
|
none: false
|
26
|
-
requirements:
|
27
|
-
- -
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
|
30
|
-
segments:
|
31
|
-
- 0
|
32
|
-
version: "0"
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
33
22
|
type: :development
|
34
|
-
version_requirements: *id001
|
35
|
-
- !ruby/object:Gem::Dependency
|
36
|
-
name: cucumber
|
37
23
|
prerelease: false
|
38
|
-
|
24
|
+
version_requirements: *70203661925140
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: cucumber
|
27
|
+
requirement: &70203661924700 !ruby/object:Gem::Requirement
|
39
28
|
none: false
|
40
|
-
requirements:
|
41
|
-
- -
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
|
44
|
-
segments:
|
45
|
-
- 0
|
46
|
-
version: "0"
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
47
33
|
type: :development
|
48
|
-
version_requirements: *id002
|
49
|
-
- !ruby/object:Gem::Dependency
|
50
|
-
name: lighthouse
|
51
34
|
prerelease: false
|
52
|
-
|
35
|
+
version_requirements: *70203661924700
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: lighthouse
|
38
|
+
requirement: &70203661924280 !ruby/object:Gem::Requirement
|
53
39
|
none: false
|
54
|
-
requirements:
|
55
|
-
- -
|
56
|
-
- !ruby/object:Gem::Version
|
57
|
-
|
58
|
-
segments:
|
59
|
-
- 0
|
60
|
-
version: "0"
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
61
44
|
type: :development
|
62
|
-
version_requirements: *id003
|
63
|
-
- !ruby/object:Gem::Dependency
|
64
|
-
name: redis
|
65
45
|
prerelease: false
|
66
|
-
|
46
|
+
version_requirements: *70203661924280
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: redis
|
49
|
+
requirement: &70203661923860 !ruby/object:Gem::Requirement
|
67
50
|
none: false
|
68
|
-
requirements:
|
69
|
-
- -
|
70
|
-
- !ruby/object:Gem::Version
|
71
|
-
|
72
|
-
segments:
|
73
|
-
- 0
|
74
|
-
version: "0"
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
75
55
|
type: :development
|
76
|
-
|
77
|
-
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *70203661923860
|
58
|
+
- !ruby/object:Gem::Dependency
|
78
59
|
name: rspec
|
60
|
+
requirement: &70203661923440 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
type: :development
|
79
67
|
prerelease: false
|
80
|
-
|
68
|
+
version_requirements: *70203661923440
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: simplecov
|
71
|
+
requirement: &70203661923020 !ruby/object:Gem::Requirement
|
81
72
|
none: false
|
82
|
-
requirements:
|
83
|
-
- -
|
84
|
-
- !ruby/object:Gem::Version
|
85
|
-
|
86
|
-
segments:
|
87
|
-
- 0
|
88
|
-
version: "0"
|
73
|
+
requirements:
|
74
|
+
- - ! '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
89
77
|
type: :development
|
90
|
-
version_requirements: *id005
|
91
|
-
- !ruby/object:Gem::Dependency
|
92
|
-
name: yajl-ruby
|
93
78
|
prerelease: false
|
94
|
-
|
79
|
+
version_requirements: *70203661923020
|
80
|
+
- !ruby/object:Gem::Dependency
|
81
|
+
name: yajl-ruby
|
82
|
+
requirement: &70203661922600 !ruby/object:Gem::Requirement
|
95
83
|
none: false
|
96
|
-
requirements:
|
97
|
-
- -
|
98
|
-
- !ruby/object:Gem::Version
|
99
|
-
|
100
|
-
segments:
|
101
|
-
- 0
|
102
|
-
version: "0"
|
84
|
+
requirements:
|
85
|
+
- - ! '>='
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '0'
|
103
88
|
type: :development
|
104
|
-
version_requirements: *id006
|
105
|
-
- !ruby/object:Gem::Dependency
|
106
|
-
name: launchy
|
107
89
|
prerelease: false
|
108
|
-
|
90
|
+
version_requirements: *70203661922600
|
91
|
+
- !ruby/object:Gem::Dependency
|
92
|
+
name: launchy
|
93
|
+
requirement: &70203661922100 !ruby/object:Gem::Requirement
|
109
94
|
none: false
|
110
|
-
requirements:
|
111
|
-
- -
|
112
|
-
- !ruby/object:Gem::Version
|
113
|
-
hash: 5
|
114
|
-
segments:
|
115
|
-
- 2
|
116
|
-
- 0
|
117
|
-
- 5
|
95
|
+
requirements:
|
96
|
+
- - =
|
97
|
+
- !ruby/object:Gem::Version
|
118
98
|
version: 2.0.5
|
119
99
|
type: :runtime
|
120
|
-
version_requirements: *id007
|
121
|
-
- !ruby/object:Gem::Dependency
|
122
|
-
name: yajl-ruby
|
123
100
|
prerelease: false
|
124
|
-
|
101
|
+
version_requirements: *70203661922100
|
102
|
+
- !ruby/object:Gem::Dependency
|
103
|
+
name: yajl-ruby
|
104
|
+
requirement: &70203661234040 !ruby/object:Gem::Requirement
|
125
105
|
none: false
|
126
|
-
requirements:
|
127
|
-
- -
|
128
|
-
- !ruby/object:Gem::Version
|
129
|
-
hash: 19
|
130
|
-
segments:
|
131
|
-
- 1
|
132
|
-
- 1
|
133
|
-
- 0
|
106
|
+
requirements:
|
107
|
+
- - =
|
108
|
+
- !ruby/object:Gem::Version
|
134
109
|
version: 1.1.0
|
135
110
|
type: :runtime
|
136
|
-
|
111
|
+
prerelease: false
|
112
|
+
version_requirements: *70203661234040
|
137
113
|
description: Tame your development cycle.
|
138
|
-
email:
|
114
|
+
email:
|
139
115
|
- mail@wintoni.us
|
140
|
-
executables:
|
116
|
+
executables:
|
141
117
|
- gitc
|
142
118
|
extensions: []
|
143
|
-
|
144
119
|
extra_rdoc_files: []
|
145
|
-
|
146
|
-
files:
|
120
|
+
files:
|
147
121
|
- .gitignore
|
148
122
|
- Gemfile
|
149
123
|
- LICENSE
|
@@ -153,44 +127,36 @@ files:
|
|
153
127
|
- features/config.example.yml
|
154
128
|
- features/gitcycle.feature
|
155
129
|
- features/steps/gitcycle_steps.rb
|
130
|
+
- features/support/env.rb
|
156
131
|
- gitcycle.gemspec
|
157
132
|
- lib/ext/string.rb
|
158
133
|
- lib/gitcycle.rb
|
159
|
-
has_rdoc: true
|
160
134
|
homepage: https://github.com/winton/gitcycle
|
161
135
|
licenses: []
|
162
|
-
|
163
136
|
post_install_message:
|
164
137
|
rdoc_options: []
|
165
|
-
|
166
|
-
require_paths:
|
138
|
+
require_paths:
|
167
139
|
- lib
|
168
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
140
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
169
141
|
none: false
|
170
|
-
requirements:
|
171
|
-
- -
|
172
|
-
- !ruby/object:Gem::Version
|
173
|
-
|
174
|
-
|
175
|
-
- 0
|
176
|
-
version: "0"
|
177
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ! '>='
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
178
147
|
none: false
|
179
|
-
requirements:
|
180
|
-
- -
|
181
|
-
- !ruby/object:Gem::Version
|
182
|
-
|
183
|
-
segments:
|
184
|
-
- 0
|
185
|
-
version: "0"
|
148
|
+
requirements:
|
149
|
+
- - ! '>='
|
150
|
+
- !ruby/object:Gem::Version
|
151
|
+
version: '0'
|
186
152
|
requirements: []
|
187
|
-
|
188
153
|
rubyforge_project:
|
189
|
-
rubygems_version: 1.
|
154
|
+
rubygems_version: 1.8.10
|
190
155
|
signing_key:
|
191
156
|
specification_version: 3
|
192
157
|
summary: Tame your development cycle
|
193
|
-
test_files:
|
158
|
+
test_files:
|
194
159
|
- features/config.example.yml
|
195
160
|
- features/gitcycle.feature
|
196
161
|
- features/steps/gitcycle_steps.rb
|
162
|
+
- features/support/env.rb
|