gitcycle 0.1.1 → 0.1.2
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.
- 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
|