github-pivotal-flow 0.0.9 → 0.1.0
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.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2d3dc57a3d6971ab0f6f3cc715b8ed92ec6e09a9
|
4
|
+
data.tar.gz: d464f101f21dc6d6cfccc0903c73d0b7d8b2c9d5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7aa4127d145bc305ac40e50620057dc801aa0e547830939f5d7ab03470396a3b082d5e04cb034cf647a657329bfab08533549d6ce62455440d985e944c36a20d
|
7
|
+
data.tar.gz: 873c99a594c2d6684b744b54ae1f803f05730904be0edd15b8f2ed0f18e1557c550c922d725972469a1ffb6117d0d9fe96fe91b15ce618e6e4935ee2b677efa0
|
@@ -4,7 +4,9 @@ module GithubPivotalFlow
|
|
4
4
|
|
5
5
|
# Finishes a Pivotal Tracker story
|
6
6
|
def run!
|
7
|
+
raise_error_if_development_or_master
|
7
8
|
story = @configuration.story
|
9
|
+
fail("Could not find story associated with branch") unless story
|
8
10
|
story.can_merge?
|
9
11
|
commit_message = options[:commit_message]
|
10
12
|
if story.release?
|
@@ -17,6 +19,11 @@ module GithubPivotalFlow
|
|
17
19
|
|
18
20
|
private
|
19
21
|
|
22
|
+
def raise_error_if_development_or_master
|
23
|
+
fail("Cannot finish development branch") if Git.current_branch == @configuration.development_branch
|
24
|
+
fail("Cannot finish master branch") if Git.current_branch == @configuration.master_branch
|
25
|
+
end
|
26
|
+
|
20
27
|
def parse_argv(*args)
|
21
28
|
OptionParser.new do |opts|
|
22
29
|
opts.banner = "Usage: git finish [options]"
|
@@ -80,7 +80,7 @@ module GithubPivotalFlow
|
|
80
80
|
end
|
81
81
|
|
82
82
|
def create_branch!(commit_message = nil, options = {})
|
83
|
-
commit_message ||= "Starting [#{story_type} ##{id}]: #{name}"
|
83
|
+
commit_message ||= "Starting [#{story_type} ##{id}]: #{escape_quotes(name)}"
|
84
84
|
commit_message << " [ci skip]" unless options[:run_ci]
|
85
85
|
print "Creating branch for story with branch name #{branch_name} from #{root_branch_name}... "
|
86
86
|
Git.checkout(root_branch_name)
|
@@ -111,7 +111,7 @@ module GithubPivotalFlow
|
|
111
111
|
end
|
112
112
|
|
113
113
|
def merge_release!(commit_message = nil, options = {})
|
114
|
-
commit_message ||= "Release #{name}"
|
114
|
+
commit_message ||= "Release #{escape_quotes(name)}"
|
115
115
|
commit_message << "\n\n[#{options[:no_complete] ? '' : 'Completes '}##{id}] "
|
116
116
|
print "Merging #{branch_name} to #{master_branch_name}... "
|
117
117
|
Git.checkout(master_branch_name)
|
@@ -121,9 +121,8 @@ module GithubPivotalFlow
|
|
121
121
|
else
|
122
122
|
Git.merge(branch_name, commit_message: commit_message, no_ff: true)
|
123
123
|
end
|
124
|
-
Git.tag(name)
|
125
124
|
print "Merging #{branch_name} to #{development_branch_name}... "
|
126
|
-
Git
|
125
|
+
Git.checkout(development_branch_name)
|
127
126
|
Git.pull_remote(development_branch_name)
|
128
127
|
if trivial_merge?(development_branch_name)
|
129
128
|
Git.merge(branch_name, commit_message: commit_message, ff: true)
|
@@ -131,6 +130,7 @@ module GithubPivotalFlow
|
|
131
130
|
Git.merge(branch_name, commit_message: commit_message, no_ff: true)
|
132
131
|
end
|
133
132
|
Git.checkout(master_branch_name)
|
133
|
+
Git.tag(name)
|
134
134
|
Git.push(master_branch_name, development_branch_name)
|
135
135
|
Git.push_tags
|
136
136
|
self.delete_branch!
|
@@ -288,5 +288,9 @@ module GithubPivotalFlow
|
|
288
288
|
prefix = "#{prefix.strip}/" unless prefix.strip[-1,1] == '/'
|
289
289
|
return prefix.strip
|
290
290
|
end
|
291
|
+
|
292
|
+
def escape_quotes(string)
|
293
|
+
string.gsub('"', '\"')
|
294
|
+
end
|
291
295
|
end
|
292
296
|
end
|
@@ -8,7 +8,7 @@ module GithubPivotalFlow
|
|
8
8
|
$stderr = StringIO.new
|
9
9
|
|
10
10
|
@project = double('project')
|
11
|
-
@story = double('story')
|
11
|
+
@story = double('story', branch_name: 'feature/1234-sample_story')
|
12
12
|
@configuration = double('configuration')
|
13
13
|
@configuration.stub(
|
14
14
|
development_branch: 'development',
|
@@ -26,7 +26,23 @@ module GithubPivotalFlow
|
|
26
26
|
allow(Configuration).to receive(:new).and_return(@configuration)
|
27
27
|
allow(Project).to receive(:find).and_return(@project)
|
28
28
|
@finish = Finish.new
|
29
|
-
|
29
|
+
allow(Git).to receive(:current_branch).and_return(@story.branch_name)
|
30
|
+
allow(@configuration).to receive(:story).and_return(@story)
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'fails if you are on the development branch' do
|
34
|
+
allow(Git).to receive(:current_branch).and_return(@configuration.development_branch)
|
35
|
+
expect { @finish.run! }.to raise_error("Cannot finish development branch")
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'fails if you are on the master branch' do
|
39
|
+
allow(Git).to receive(:current_branch).and_return(@configuration.master_branch)
|
40
|
+
expect { @finish.run! }.to raise_error("Cannot finish master branch")
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'fails if we cannot find the story this branch relates to' do
|
44
|
+
allow(@configuration).to receive(:story).and_return(nil)
|
45
|
+
expect { @finish.run! }.to raise_error("Could not find story associated with branch")
|
30
46
|
end
|
31
47
|
|
32
48
|
it 'merges the branch back to its root by default' do
|
@@ -163,6 +163,13 @@ module GithubPivotalFlow
|
|
163
163
|
|
164
164
|
@story.create_branch!('Message')
|
165
165
|
end
|
166
|
+
|
167
|
+
it 'supports stories with quotes in their name' do
|
168
|
+
@story.stub(name: 'Fancy story with "quotes"', branch_name: 'feature/123456-my_branch')
|
169
|
+
expect(Git).to receive(:commit).with(hash_including(commit_message: 'Starting [feature #123456]: Fancy story with \"quotes\" [ci skip]'))
|
170
|
+
|
171
|
+
@story.create_branch!
|
172
|
+
end
|
166
173
|
end
|
167
174
|
end
|
168
175
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: github-pivotal-flow
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Donald Piret
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-01-
|
11
|
+
date: 2014-01-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: highline
|