git-story-workflow 0.1.3 → 0.2.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
  SHA256:
3
- metadata.gz: 4e9c0e5209e46016ff1be18d3f51713bf3e2d39ba7cbd60a40f6ab07946688d2
4
- data.tar.gz: '0186163afc2c28f3b22e529261032b59fd28278a031a2e34e07aca7191f344cf'
3
+ metadata.gz: 8b22aeccbb93e24c1ed444a5d846b739d35bf015bf09abfb7d5030ef88c740de
4
+ data.tar.gz: 445b375ad12702e5d4ffd5179014e0e360e70088bfc703bbf6c72256a583e16c
5
5
  SHA512:
6
- metadata.gz: c6f91055b4685f6975c6716b120f27a0f4b87b82a9df68a3c72ddcb2c4c3d09e5a4344f94c2dde2a59a1a59f7394b598a591cfbfd71bdf034c4cd84c647633ae
7
- data.tar.gz: 6b7e5f7d3788bc81065c2f65bc879d5a3fd784add6b166bfac44195840171cff4702c014e0e2169cbedb52f4860e15dc9400a91e69a68d929ef9d533d16b63bb
6
+ metadata.gz: 87ed8b1af5ae2754fbe5a4be9bcf0f5261da02601ffdcbf5892a2d29dab3da64c9704d9a1539a99cd007d8fb82d8945519e83c4d29bd11521b544bb3c4f60e86
7
+ data.tar.gz: f43aa63dee9673b3edf0ad8fd0caae1c25326f271b0842e50566e67cf358c61c758916db8d88307ba4f8016ed35b89a66af210f3c9b52d6d549f6c0443767611
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.3
1
+ 0.2.0
@@ -1,14 +1,14 @@
1
1
  # -*- encoding: utf-8 -*-
2
- # stub: git-story-workflow 0.1.3 ruby lib
2
+ # stub: git-story-workflow 0.2.0 ruby lib
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "git-story-workflow".freeze
6
- s.version = "0.1.3"
6
+ s.version = "0.2.0"
7
7
 
8
8
  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
9
9
  s.require_paths = ["lib".freeze]
10
10
  s.authors = ["Florian Frank".freeze]
11
- s.date = "2017-12-12"
11
+ s.date = "2017-12-15"
12
12
  s.description = "Gem abstracting a git workflow\u2026".freeze
13
13
  s.email = "flori@ping.de".freeze
14
14
  s.executables = ["git-story".freeze]
@@ -59,8 +59,15 @@ class Git::Story::App
59
59
 
60
60
  command doc: 'output the current story branch if it is checked out'
61
61
  def current(check: true)
62
- check and check_current
63
- current_branch
62
+ if check
63
+ if cb = current_branch_checked?
64
+ cb
65
+ else
66
+ error 'Switch to a story branch first for this operation!'
67
+ end
68
+ else
69
+ current_branch
70
+ end
64
71
  end
65
72
 
66
73
  def provide_name(story_id = nil)
@@ -116,6 +123,36 @@ class Git::Story::App
116
123
  "Getting #{url.inspect} => #{e.class}: #{e}".red
117
124
  end
118
125
 
126
+ command doc: '[STORY_ID] fetch status of current story'
127
+ def status(story_id = current(check: true)&.[](/_(\d+)\z/, 1)&.to_i)
128
+ if story = fetch_story(story_id)
129
+ jj story
130
+ color_state =
131
+ case cs = story.current_state
132
+ when 'unscheduled', 'planned', 'unstarted'
133
+ cs
134
+ when 'rejected'
135
+ cs.white.on_red
136
+ when 'accepted'
137
+ cs.green
138
+ else
139
+ cs.yellow
140
+ end
141
+ <<~end
142
+ Id: #{story.id}
143
+ Name: #{story.name.inspect.bold}
144
+ Type: #{story.story_type}
145
+ Estimate: #{story.estimate.to_s.yellow.bold}
146
+ State: #{color_state}
147
+ Branch: #{current_branch_checked?&.color('#ff5f00')}
148
+ Pivotal: #{story.url}
149
+ Labels: #{story.labels.map(&:name) * ?,}
150
+ end
151
+ end
152
+ rescue => e
153
+ "Getting pivotal story status => #{e.class}: #{e}".red
154
+ end
155
+
119
156
  command doc: '[AUTHOR] list all stories'
120
157
  def list(author = nil, mark_red: current(check: false))
121
158
  stories.map { |b|
@@ -252,9 +289,11 @@ class Git::Story::App
252
289
  end
253
290
 
254
291
  def fetch_story_name(story_id)
255
- if story = pivotal_get("projects/#{pivotal_project}/stories/#{story_id}")
256
- story_name = story.name.full? or return
257
- end
292
+ fetch_story(story_id)&.name
293
+ end
294
+
295
+ def fetch_story(story_id)
296
+ pivotal_get("projects/#{pivotal_project}/stories/#{story_id}").full?
258
297
  end
259
298
 
260
299
  def pivotal_get(path)
@@ -278,36 +317,40 @@ class Git::Story::App
278
317
  sh 'git fetch --tags'
279
318
  end
280
319
 
320
+ def apply_story_accessors(ref)
321
+ branch =~ BRANCH_NAME_REGEX or return
322
+ branch.extend StoryAccessors
323
+ branch.story_base_name = ref[0]
324
+ branch.story_name = $1
325
+ branch.story_id = $2.to_i
326
+ branch.story_created_at = ref[1]
327
+ branch.story_author = ref[2]
328
+ branch
329
+ end
330
+
281
331
  def stories
282
332
  sh 'git remote prune origin', error: false
283
333
  refs = capture("git for-each-ref --format='%(refname);%(committerdate);%(authorname) %(authoremail)'")
284
334
  refs = refs.lines.map { |l|
285
- r = l.chomp.split(?;)
286
- next unless r[0] =~ %r(/origin/)
287
- r[0] = File.basename(r[0])
288
- next unless r[0] =~ BRANCH_NAME_REGEX
289
- r[1] = Time.parse(r[1])
290
- r
291
- }.compact.map do |r|
292
- b = r[0]
293
- b =~ BRANCH_NAME_REGEX
294
- b.extend StoryAccessors
295
- b.story_base_name = r[0]
296
- b.story_name = $1
297
- b.story_id = $2.to_i
298
- b.story_created_at = r[1]
299
- b.story_author = r[2]
300
- b
301
- end
335
+ ref = l.chomp.split(?;)
336
+ next unless ref[0] =~ %r(/origin/)
337
+ ref[0] = File.basename(ref[0])
338
+ next unless ref[0] =~ BRANCH_NAME_REGEX
339
+ ref[1] = Time.parse(ref[1])
340
+ ref
341
+ }.compact.map do |ref|
342
+ apply_story_accessors ref
343
+ end.compact
302
344
  end
303
345
 
304
346
  def current_branch
305
347
  capture("git rev-parse --abbrev-ref HEAD").strip
306
348
  end
307
349
 
308
- def check_current
309
- current_branch =~ BRANCH_NAME_REGEX or
310
- error 'Switch to a story branch first for this operation!'
350
+ def current_branch_checked?
351
+ if (cb = current_branch) =~ BRANCH_NAME_REGEX
352
+ cb
353
+ end
311
354
  end
312
355
 
313
356
  def format_tag_time(tag)
@@ -1,6 +1,6 @@
1
1
  module Git::Story
2
2
  # Git::Story version
3
- VERSION = '0.1.3'
3
+ VERSION = '0.2.0'
4
4
  VERSION_ARRAY = VERSION.split('.').map(&:to_i) # :nodoc:
5
5
  VERSION_MAJOR = VERSION_ARRAY[0] # :nodoc:
6
6
  VERSION_MINOR = VERSION_ARRAY[1] # :nodoc:
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: git-story-workflow
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Florian Frank
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-12-12 00:00:00.000000000 Z
11
+ date: 2017-12-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gem_hadar