story_branch 0.2.6 → 0.2.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +25 -33
- data/lib/story_branch.rb +111 -92
- metadata +6 -30
- data/bin/git-pivotal-story +0 -4
- data/bin/git-story-branch +0 -4
- data/bin/git-story-finish +0 -4
- data/bin/git-story-start +0 -4
- data/bin/git-story-unstart +0 -4
- data/bin/story-branch +0 -4
- data/bin/story-finish +0 -4
- data/bin/story-start +0 -4
- data/bin/story-unstart +0 -4
- data/bin/story_branch +0 -4
- data/bin/story_finish +0 -4
- data/bin/story_start +0 -4
- data/bin/story_unstart +0 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9c0e160a81842521457a2ef968e48f3960b2681d
|
4
|
+
data.tar.gz: a1a816524e43ce91699ca78b0f772c6e89a2795a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8328b3529fb52fd129fe8a936b1c07e940c094c6aa3d03d297ff1a9da0b0471e5d228f180ee1accfa2f0a8ff1c858136179cf111f9384e0b655bb6f1c917745d
|
7
|
+
data.tar.gz: 99e3f567048af4d348d0b510d09f3aca8e1147cb9afd00708614d4f079b5295517ff9c47a62dc594cbb0735edf345a76105087dd69db671660ee5cf9800d1bc6
|
data/README.md
CHANGED
@@ -2,32 +2,37 @@
|
|
2
2
|
|
3
3
|
# Story Branch
|
4
4
|
|
5
|
-
A small collection of tools for working with git branches
|
6
|
-
|
5
|
+
A small collection of tools for working with git branches and Pivotal
|
6
|
+
Tracker stories. `git story`, `git finish`, `git start` and `git
|
7
|
+
unstart`.
|
7
8
|
|
8
9
|
### Commentary
|
9
10
|
|
10
|
-
`git story`:
|
11
|
+
`git story`: Creates a git branch with automatic reference to a
|
11
12
|
Pivotal Tracker Story. It will get started stories from your active
|
12
13
|
project. You can enter text and press TAB to search for a story
|
13
14
|
name, or TAB to show the full list. It will then suggest an editable
|
14
15
|
branch name. When the branch is created the `story_id` will
|
15
|
-
be appended to it.
|
16
|
+
be appended to it.
|
17
|
+
|
18
|
+
e.g. `my-story-name-1234567`
|
19
|
+
|
20
|
+
`git finish`: Creates a git commit message for the staged changes.
|
21
|
+
|
22
|
+
e.g: `[Finishes #1234567] My Story Title`
|
23
|
+
|
24
|
+
You must stage all changes (or stash them) first. Note the commit will not
|
25
|
+
be pushed. Note: You'll be able to bail out before.
|
16
26
|
|
17
27
|
`git start`: Start a story in Pivotal Tracker from the terminal.
|
18
28
|
It'll get all unstarted stories in your current project. You can
|
19
29
|
enter text and press TAB to search for a story name, or TAB to show
|
20
|
-
the full list.
|
30
|
+
the full list.
|
21
31
|
|
22
|
-
`git unstart`: Unstart a
|
32
|
+
`git unstart`: Unstart a story in Pivotal Tracker from the terminal.
|
23
33
|
It'll get all started stories in your current project. You can
|
24
34
|
enter text and press TAB to search for a story name, or TAB to show
|
25
|
-
the full list.
|
26
|
-
|
27
|
-
`git finish`: Create commit/message for the staged changes, e.g:
|
28
|
-
"[Finishes #1234567] My Story Title" - optionally Finishes the story
|
29
|
-
via pivotal tracker's api. You must stage all changes (or stash
|
30
|
-
them) first.
|
35
|
+
the full list.
|
31
36
|
|
32
37
|
### Installing
|
33
38
|
|
@@ -35,47 +40,34 @@ Install the gem:
|
|
35
40
|
|
36
41
|
gem install story_branch
|
37
42
|
|
38
|
-
|
43
|
+
#### Settings
|
44
|
+
|
45
|
+
You must have a `PIVOTAL_API_KEY` environment variable set
|
39
46
|
to your Pivotal api key, plus either a `.story_branch` file or
|
40
47
|
`PIVOTAL_PROJECT_ID` environment variable set. Note, values in
|
41
48
|
`.story_branch` will override environment variable settings.
|
42
49
|
|
43
|
-
|
50
|
+
#### .story_branch file
|
44
51
|
|
45
52
|
A YAML file with either/both of:
|
46
53
|
|
47
54
|
api: YOUR.PIVOTAL.API.KEY.STRING
|
48
55
|
project: YOUR.PROJECT.ID.NUMBER
|
49
56
|
|
50
|
-
Can be saved to `~/` or `./`
|
57
|
+
Can be saved to `~/` or `./` (ie. your project folder)
|
51
58
|
|
52
59
|
### Usage
|
53
60
|
|
54
61
|
You run story_branch from the git/project root folder.
|
55
62
|
|
56
|
-
`
|
57
|
-
list of stories to work with.
|
63
|
+
`git story`, `git start` and `git unstart` are run interactively and
|
64
|
+
will display a list of stories to work with.
|
58
65
|
|
59
|
-
`finish` will scan the current branch name for a story id (as its
|
66
|
+
`git finish` will scan the current branch name for a story id (as its
|
60
67
|
suffix) and if a valid, active story is found on pivotal tracker it
|
61
68
|
will create a commit with a message to trigger pivotal's git
|
62
69
|
integraton features.
|
63
70
|
|
64
|
-
All text entry supports Readline keyboard shortcuts / bindings, (word fwd/back, undo etc.)
|
65
|
-
|
66
|
-
### Command names
|
67
|
-
|
68
|
-
It's possible to the commands in a few ways, we have deprecated the
|
69
|
-
old commmand names, and now encourage only the use of the `git`
|
70
|
-
style usage.
|
71
|
-
|
72
|
-
git style | deprecated
|
73
|
-
------------+---------------+--------------
|
74
|
-
git story | story_branch | story-branch
|
75
|
-
git start | story_start | story-start
|
76
|
-
git unstart| story_unstart | story-unstart
|
77
|
-
git finish | story_finish | story-finish
|
78
|
-
|
79
71
|
## Contributing
|
80
72
|
|
81
73
|
All pull requests are welcome and will be reviewed.
|
data/lib/story_branch.rb
CHANGED
@@ -3,33 +3,43 @@
|
|
3
3
|
# Authors: Jason Milkins <jason@opsmanager.com>
|
4
4
|
# Rui Baltazar <rui.p.baltazar@gmail.com>
|
5
5
|
# Dominic Wong <dominic.wong.617@gmail.com>
|
6
|
+
# Ranhiru Cooray <ranhiru@gmail.com>
|
6
7
|
# Gabe Hollombe <gabe@neo.com>
|
7
8
|
#
|
8
|
-
# Version: 0.2.
|
9
|
+
# Version: 0.2.7
|
9
10
|
#
|
10
11
|
# ## Description
|
11
|
-
#
|
12
|
-
#
|
13
|
-
#
|
12
|
+
# A small collection of tools for working with git branches and Pivotal
|
13
|
+
# Tracker stories. `git story`, `git finish`, `git start` and `git
|
14
|
+
# unstart`.
|
14
15
|
#
|
15
16
|
# ### Commentary
|
16
17
|
#
|
17
|
-
# `git story`:
|
18
|
+
# `git story`: Creates a git branch with automatic reference to a
|
18
19
|
# Pivotal Tracker Story. It will get started stories from your active
|
19
20
|
# project. You can enter text and press TAB to search for a story
|
20
21
|
# name, or TAB to show the full list. It will then suggest an editable
|
21
22
|
# branch name. When the branch is created the `story_id` will
|
22
23
|
# be appended to it.
|
23
24
|
#
|
25
|
+
# e.g. `my-story-name-1234567`
|
26
|
+
#
|
27
|
+
# `git finish`: Creates a git commit message for the staged changes.
|
28
|
+
#
|
29
|
+
# e.g: `[Finishes #1234567] My Story Title`
|
30
|
+
#
|
31
|
+
# You must stage all changes (or stash them) first. Note the commit will not
|
32
|
+
# be pushed. Note: You'll be able to bail out before.
|
33
|
+
#
|
24
34
|
# `git start`: Start a story in Pivotal Tracker from the terminal.
|
25
35
|
# It'll get all unstarted stories in your current project. You can
|
26
36
|
# enter text and press TAB to search for a story name, or TAB to show
|
27
37
|
# the full list.
|
28
|
-
|
29
|
-
# `git
|
30
|
-
#
|
31
|
-
#
|
32
|
-
#
|
38
|
+
#
|
39
|
+
# `git unstart`: Unstart a story in Pivotal Tracker from the terminal.
|
40
|
+
# It'll get all started stories in your current project. You can
|
41
|
+
# enter text and press TAB to search for a story name, or TAB to show
|
42
|
+
# the full list.
|
33
43
|
#
|
34
44
|
# ### Installing
|
35
45
|
#
|
@@ -37,44 +47,34 @@
|
|
37
47
|
#
|
38
48
|
# gem install story_branch
|
39
49
|
#
|
40
|
-
#
|
50
|
+
# #### Settings
|
51
|
+
#
|
52
|
+
# You must have a `PIVOTAL_API_KEY` environment variable set
|
41
53
|
# to your Pivotal api key, plus either a `.story_branch` file or
|
42
54
|
# `PIVOTAL_PROJECT_ID` environment variable set. Note, values in
|
43
55
|
# `.story_branch` will override environment variable settings.
|
44
56
|
#
|
45
|
-
#
|
57
|
+
# #### .story_branch file
|
46
58
|
#
|
47
59
|
# A YAML file with either/both of:
|
48
60
|
#
|
49
61
|
# api: YOUR.PIVOTAL.API.KEY.STRING
|
50
62
|
# project: YOUR.PROJECT.ID.NUMBER
|
51
63
|
#
|
52
|
-
# Can be saved to `~/` or `./`
|
64
|
+
# Can be saved to `~/` or `./` (ie. your project folder)
|
53
65
|
#
|
54
66
|
# ### Usage
|
55
67
|
#
|
56
68
|
# You run story_branch from the git/project root folder.
|
57
69
|
#
|
58
|
-
# `
|
59
|
-
# list of stories to work with.
|
70
|
+
# `git story`, `git start` and `git unstart` are run interactively and
|
71
|
+
# will display a list of stories to work with.
|
60
72
|
#
|
61
|
-
# `finish` will scan the current branch name for a story id (as its
|
73
|
+
# `git finish` will scan the current branch name for a story id (as its
|
62
74
|
# suffix) and if a valid, active story is found on pivotal tracker it
|
63
75
|
# will create a commit with a message to trigger pivotal's git
|
64
76
|
# integraton features.
|
65
77
|
#
|
66
|
-
# ### Command names
|
67
|
-
#
|
68
|
-
# It's possible to the commands in a few ways, we have deprecated the
|
69
|
-
# old commmand names, and now encourage only the use of the `git`
|
70
|
-
# style usage.
|
71
|
-
#
|
72
|
-
# git style | deprecated
|
73
|
-
# ------------+--------------+--------------
|
74
|
-
# git story | story_branch | story-branch
|
75
|
-
# git start | story_start | story-start
|
76
|
-
# git finish | story_finish | story-finish
|
77
|
-
#
|
78
78
|
# ## Contributing
|
79
79
|
#
|
80
80
|
# All pull requests are welcome and will be reviewed.
|
@@ -91,40 +91,44 @@ require 'levenshtein'
|
|
91
91
|
trap('INT') {exit}
|
92
92
|
|
93
93
|
module StoryBranch
|
94
|
+
|
94
95
|
class Main
|
96
|
+
|
95
97
|
ERRORS = {
|
96
|
-
|
98
|
+
"Stories in the started state must be estimated." =>
|
97
99
|
"Error: Pivotal won't allow you to start an unestimated story"
|
98
100
|
}
|
99
101
|
|
100
|
-
PIVOTAL_CONFIG_FILES = ['.story_branch',
|
101
|
-
PIVOTAL_API_CONFIG_FILES = ['.pivotal_api_key', "#{ENV['HOME']}/.pivotal_api_key"]
|
102
|
+
PIVOTAL_CONFIG_FILES = ['.story_branch',"#{ENV['HOME']}/.story_branch"]
|
102
103
|
|
103
104
|
attr_accessor :p
|
104
105
|
|
105
106
|
def initialize
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
@p
|
110
|
-
@p.
|
107
|
+
if config_file
|
108
|
+
@pivotal_info = YAML.load_file config_file
|
109
|
+
end
|
110
|
+
@p = PivotalUtils.new
|
111
|
+
@p.api_key = config_value "api", 'PIVOTAL_API_KEY'
|
112
|
+
@p.project_id = config_value "project", 'PIVOTAL_PROJECT_ID'
|
111
113
|
exit unless @p.valid?
|
112
114
|
end
|
113
115
|
|
114
116
|
def create_story_branch
|
115
117
|
begin
|
116
|
-
puts
|
118
|
+
puts "Connecting with Pivotal Tracker"
|
117
119
|
@p.get_project
|
118
|
-
puts
|
120
|
+
puts "Getting stories..."
|
119
121
|
stories = @p.display_stories :started, false
|
120
122
|
if stories.length < 1
|
121
|
-
puts
|
123
|
+
puts "No stories started, exiting"
|
122
124
|
exit
|
123
125
|
end
|
124
|
-
story
|
125
|
-
|
126
|
+
story = @p.select_story stories
|
127
|
+
if story
|
128
|
+
@p.create_feature_branch story
|
129
|
+
end
|
126
130
|
rescue RestClient::Unauthorized
|
127
|
-
$stderr.puts
|
131
|
+
$stderr.puts "Pivotal API key or Project ID invalid"
|
128
132
|
return nil
|
129
133
|
end
|
130
134
|
end
|
@@ -169,48 +173,43 @@ module StoryBranch
|
|
169
173
|
|
170
174
|
unless @p.is_current_branch_a_story?
|
171
175
|
puts "Your current branch: '#{GitUtils.current_branch}' is not linked to a Pivotal Tracker story."
|
172
|
-
return
|
176
|
+
return nil
|
173
177
|
end
|
174
178
|
|
175
179
|
if GitUtils.has_status? :untracked or GitUtils.has_status? :modified
|
176
|
-
puts
|
177
|
-
puts
|
178
|
-
puts
|
179
|
-
return
|
180
|
+
puts "There are unstaged changes"
|
181
|
+
puts "Use git add to stage changes before running git finish"
|
182
|
+
puts "Use git stash if you want to hide changes for this commit"
|
183
|
+
return nil
|
180
184
|
end
|
181
185
|
|
182
186
|
unless GitUtils.has_status? :added or GitUtils.has_status? :staged
|
183
|
-
puts
|
184
|
-
puts
|
185
|
-
return
|
187
|
+
puts "There are no staged changes."
|
188
|
+
puts "Nothing to do"
|
189
|
+
return nil
|
186
190
|
end
|
187
191
|
|
188
|
-
puts
|
192
|
+
puts "Use standard finishing commit message: [y/N]?"
|
189
193
|
commit_message = "[Finishes ##{GitUtils.current_branch_story_parts[:id]}] #{StringUtils.undashed GitUtils.current_branch_story_parts[:title]}"
|
190
194
|
puts commit_message
|
191
195
|
|
192
|
-
if gets.chomp!.downcase ==
|
196
|
+
if gets.chomp!.downcase == "y"
|
193
197
|
GitUtils.commit commit_message
|
194
198
|
else
|
195
199
|
puts "Aborted"
|
196
200
|
end
|
197
201
|
rescue RestClient::Unauthorized
|
198
|
-
$stderr.puts
|
202
|
+
$stderr.puts "Pivotal API key or Project ID invalid"
|
199
203
|
return nil
|
200
204
|
end
|
201
205
|
end
|
202
206
|
|
203
|
-
def config_file
|
204
|
-
|
205
|
-
end
|
206
|
-
|
207
|
-
def api_config_value
|
208
|
-
return @pivotal_api_info['api'] if @pivotal_api_info && @pivotal_api_info['api']
|
209
|
-
config_value 'api', 'PIVOTAL_API_KEY'
|
207
|
+
def config_file
|
208
|
+
PIVOTAL_CONFIG_FILES.select{|conf| File.exists? conf}.first
|
210
209
|
end
|
211
210
|
|
212
211
|
def config_value key, env
|
213
|
-
value = @pivotal_info[key] if @pivotal_info
|
212
|
+
value = @pivotal_info[key] if @pivotal_info and @pivotal_info[key]
|
214
213
|
value ||= env_required env
|
215
214
|
value
|
216
215
|
end
|
@@ -222,52 +221,62 @@ module StoryBranch
|
|
222
221
|
end
|
223
222
|
ENV[var_name]
|
224
223
|
end
|
224
|
+
|
225
225
|
end
|
226
226
|
|
227
227
|
class StringUtils
|
228
|
+
|
228
229
|
def self.dashed s
|
229
230
|
s.tr(' _,./:;+&', '-')
|
230
231
|
end
|
231
232
|
|
232
233
|
def self.simple_sanitize s
|
233
|
-
strip_newlines s.tr '\'"%!@#$(){}[]*\\?', ''
|
234
|
+
strip_newlines (s.tr '\'"%!@#$(){}[]*\\?', '')
|
234
235
|
end
|
235
236
|
|
236
237
|
def self.normalised_branch_name s
|
237
|
-
|
238
|
+
simple_sanitize((dashed s).downcase).squeeze("-")
|
238
239
|
end
|
239
240
|
|
240
241
|
def self.strip_newlines s
|
241
|
-
s.tr "\n",
|
242
|
+
s.tr "\n", "-"
|
242
243
|
end
|
243
244
|
|
244
245
|
def self.undashed s
|
245
|
-
s.
|
246
|
+
s.gsub(/-/, " ").capitalize
|
246
247
|
end
|
248
|
+
|
247
249
|
end
|
248
250
|
|
249
251
|
class GitUtils
|
252
|
+
|
250
253
|
def self.g
|
251
|
-
Git.open
|
254
|
+
Git.open "."
|
252
255
|
end
|
253
256
|
|
254
257
|
def self.is_existing_branch? name
|
255
258
|
branch_names.each do |n|
|
256
|
-
|
259
|
+
if Levenshtein.distance(n, name) < 3
|
260
|
+
return true
|
261
|
+
end
|
257
262
|
existing_branch_name = n.match(/(.*)(-[1-9][0-9]+$)/)
|
258
263
|
if existing_branch_name
|
259
264
|
levenshtein_distance = Levenshtein.distance existing_branch_name[1], name
|
260
|
-
|
265
|
+
if levenshtein_distance < 3
|
266
|
+
return true
|
267
|
+
end
|
261
268
|
end
|
262
269
|
end
|
263
|
-
false
|
270
|
+
return false
|
264
271
|
end
|
265
272
|
|
266
273
|
def self.is_existing_story? id
|
267
274
|
branch_names.each do |n|
|
268
275
|
branch_id = n.match(/-[1-9][0-9]+$/)
|
269
276
|
if branch_id
|
270
|
-
|
277
|
+
if branch_id.to_s == "-#{id}"
|
278
|
+
return true
|
279
|
+
end
|
271
280
|
end
|
272
281
|
end
|
273
282
|
false
|
@@ -286,8 +295,12 @@ module StoryBranch
|
|
286
295
|
end
|
287
296
|
|
288
297
|
def self.current_branch_story_parts
|
289
|
-
matches =
|
290
|
-
|
298
|
+
matches = current_story
|
299
|
+
if matches.length == 3
|
300
|
+
{ title: matches[1], id: matches[2] }
|
301
|
+
else
|
302
|
+
nil
|
303
|
+
end
|
291
304
|
end
|
292
305
|
|
293
306
|
def self.create_branch name
|
@@ -296,7 +309,11 @@ module StoryBranch
|
|
296
309
|
end
|
297
310
|
|
298
311
|
def self.status_collect status, regex
|
299
|
-
status.select
|
312
|
+
status.select{|e|
|
313
|
+
e.match(regex)
|
314
|
+
}.map{|e|
|
315
|
+
e.match(regex)[1]
|
316
|
+
}
|
300
317
|
end
|
301
318
|
|
302
319
|
def self.status
|
@@ -322,9 +339,11 @@ module StoryBranch
|
|
322
339
|
def self.commit message
|
323
340
|
g.commit(message)
|
324
341
|
end
|
342
|
+
|
325
343
|
end
|
326
344
|
|
327
345
|
class PivotalUtils
|
346
|
+
|
328
347
|
attr_accessor :api_key, :project_id, :project
|
329
348
|
|
330
349
|
def valid?
|
@@ -337,10 +356,11 @@ module StoryBranch
|
|
337
356
|
end
|
338
357
|
|
339
358
|
def is_current_branch_a_story?
|
340
|
-
GitUtils.current_story
|
359
|
+
GitUtils.current_story and
|
360
|
+
GitUtils.current_story.length == 3 and
|
341
361
|
filtered_stories_list(:started, true)
|
342
362
|
.map(&:id)
|
343
|
-
.include?
|
363
|
+
.include? GitUtils.current_story[2].to_i
|
344
364
|
end
|
345
365
|
|
346
366
|
def story_from_current_branch
|
@@ -356,9 +376,9 @@ module StoryBranch
|
|
356
376
|
stories = project.stories.all({current_state: state})
|
357
377
|
if estimated
|
358
378
|
stories.select{|s|
|
359
|
-
s.story_type ==
|
360
|
-
s.story_type ==
|
361
|
-
(s.story_type ==
|
379
|
+
s.story_type == "bug" or
|
380
|
+
s.story_type == "chore" or
|
381
|
+
(s.story_type == "feature" and s.estimate and s.estimate >= 0)}
|
362
382
|
else
|
363
383
|
stories
|
364
384
|
end
|
@@ -400,17 +420,16 @@ module StoryBranch
|
|
400
420
|
dashed_story_name = StringUtils.normalised_branch_name story.name
|
401
421
|
feature_branch_name = nil
|
402
422
|
puts "You are checked out at: #{GitUtils.current_branch}"
|
403
|
-
while feature_branch_name == nil
|
404
|
-
puts
|
405
|
-
feature_branch_name = readline(
|
423
|
+
while feature_branch_name == nil or feature_branch_name == ""
|
424
|
+
puts "Provide a new branch name... (TAB for suggested name)" if [nil, ""].include? feature_branch_name
|
425
|
+
feature_branch_name = readline("Name of feature branch: ", [dashed_story_name])
|
406
426
|
end
|
407
427
|
feature_branch_name.chomp!
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
GitUtils.create_branch feature_branch_name_with_story_id
|
428
|
+
if validate_branch_name feature_branch_name, story.id
|
429
|
+
feature_branch_name_with_story_id = "#{feature_branch_name}-#{story.id}"
|
430
|
+
puts "Creating: #{feature_branch_name_with_story_id} with #{GitUtils.current_branch} as parent"
|
431
|
+
GitUtils.create_branch feature_branch_name_with_story_id
|
432
|
+
end
|
414
433
|
end
|
415
434
|
|
416
435
|
# Branch name validation
|
@@ -420,7 +439,7 @@ module StoryBranch
|
|
420
439
|
return false
|
421
440
|
end
|
422
441
|
if GitUtils.is_existing_branch? name
|
423
|
-
puts "Error:
|
442
|
+
puts "Error: This name is very similar to an existing branch. Avoid confusion and use a more unique name."
|
424
443
|
return false
|
425
444
|
end
|
426
445
|
unless valid_branch_name? name
|
@@ -441,10 +460,10 @@ module StoryBranch
|
|
441
460
|
# Store the state of the terminal
|
442
461
|
RbReadline.clear_history
|
443
462
|
if completions.length > 0
|
444
|
-
completions.each {
|
445
|
-
RbReadline.rl_completer_word_break_characters =
|
446
|
-
Readline.completion_proc = proc {
|
447
|
-
Readline.completion_append_character =
|
463
|
+
completions.each {|i| Readline::HISTORY.push i}
|
464
|
+
RbReadline.rl_completer_word_break_characters = ""
|
465
|
+
Readline.completion_proc = proc {|s| completions.grep(/#{Regexp.escape(s)}/) }
|
466
|
+
Readline.completion_append_character = ""
|
448
467
|
end
|
449
468
|
Readline.readline(prompt, false)
|
450
469
|
end
|
metadata
CHANGED
@@ -1,17 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: story_branch
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jason Milkins
|
8
8
|
- Rui Baltazar
|
9
9
|
- Dominic Wong
|
10
|
+
- Ranhiru Cooray
|
10
11
|
- Gabe Hollombe
|
11
12
|
autorequire:
|
12
13
|
bindir: bin
|
13
14
|
cert_chain: []
|
14
|
-
date:
|
15
|
+
date: 2015-04-14 00:00:00.000000000 Z
|
15
16
|
dependencies:
|
16
17
|
- !ruby/object:Gem::Dependency
|
17
18
|
name: pivotal-tracker
|
@@ -90,47 +91,22 @@ email:
|
|
90
91
|
- jasonm23@gmail.com
|
91
92
|
- rui.p.baltazar@gmail.com
|
92
93
|
- dominic.wong.617@gmail.com
|
94
|
+
- ranhiru@gmail.com
|
93
95
|
- gabe@neo.com
|
94
96
|
executables:
|
95
|
-
- story_start
|
96
|
-
- story-start
|
97
|
-
- git-start
|
98
|
-
- git-story-start
|
99
|
-
- story_unstart
|
100
|
-
- story-unstart
|
101
|
-
- git-unstart
|
102
|
-
- git-story-unstart
|
103
|
-
- story_branch
|
104
|
-
- story-branch
|
105
97
|
- git-story
|
106
|
-
- git-story-branch
|
107
|
-
- git-pivotal-story
|
108
|
-
- story_finish
|
109
|
-
- story-finish
|
110
98
|
- git-finish
|
111
|
-
- git-
|
99
|
+
- git-start
|
100
|
+
- git-unstart
|
112
101
|
extensions: []
|
113
102
|
extra_rdoc_files: []
|
114
103
|
files:
|
115
104
|
- LICENCE
|
116
105
|
- README.md
|
117
106
|
- bin/git-finish
|
118
|
-
- bin/git-pivotal-story
|
119
107
|
- bin/git-start
|
120
108
|
- bin/git-story
|
121
|
-
- bin/git-story-branch
|
122
|
-
- bin/git-story-finish
|
123
|
-
- bin/git-story-start
|
124
|
-
- bin/git-story-unstart
|
125
109
|
- bin/git-unstart
|
126
|
-
- bin/story-branch
|
127
|
-
- bin/story-finish
|
128
|
-
- bin/story-start
|
129
|
-
- bin/story-unstart
|
130
|
-
- bin/story_branch
|
131
|
-
- bin/story_finish
|
132
|
-
- bin/story_start
|
133
|
-
- bin/story_unstart
|
134
110
|
- lib/story_branch.rb
|
135
111
|
homepage: https://github.com/jasonm23/story_branch
|
136
112
|
licenses:
|
data/bin/git-pivotal-story
DELETED
data/bin/git-story-branch
DELETED
data/bin/git-story-finish
DELETED
data/bin/git-story-start
DELETED
data/bin/git-story-unstart
DELETED
data/bin/story-branch
DELETED
data/bin/story-finish
DELETED
data/bin/story-start
DELETED
data/bin/story-unstart
DELETED
data/bin/story_branch
DELETED
data/bin/story_finish
DELETED
data/bin/story_start
DELETED
data/bin/story_unstart
DELETED