git-story-workflow 1.2.0 → 1.4.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 36b917809872cfe428b4919698d7c9fc4cfa5ae9fee374ae9c3b893b5061080c
4
- data.tar.gz: a44657b9ce55dd5fec18f68abc04109e49ee17e44e76e490b6e4bcfe61585d7d
3
+ metadata.gz: 57fd6d4ff94ab8ef89840a6c7fd9af4ff8865a6aa15ab9c562cbe536c98675af
4
+ data.tar.gz: 4831ce63881313940343c5e0bf447cba8de302c122ffedb8682cd0ce6125a7f3
5
5
  SHA512:
6
- metadata.gz: a043895d4a9e6057d243e5447eec1668e8c05a0190abd60cfe443e2f0c59784c9ed10d7865a1c04dbb8687889b7c480d0c0b08f6307d27776ccee623c577c0e0
7
- data.tar.gz: 5a5020e9b44229ea153aeaa8f97eb83bf54a65567774eb2adb7ad1e01e12ed1df802c713412d5179029b2fb10ced2226a7b2752db040d005ccb668fd9dade5f6
6
+ metadata.gz: a873c02d9271925c6855017e64034d4a06dba3706c27c6e64d588e5a7aaec12097a3ea0dca44caa6a6202e4867e8ea1b4232cb4e6be9fea54633e1fdd06a4cbe
7
+ data.tar.gz: 0e9afef53d03a5f306ee92796d2066cf5ce62edc78c42442d8cdb84667fafe4d331a0f6a850b16baf6cb6d8cad8ceddcd76413baab81210fbe57520df1eec202
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.2.0
1
+ 1.4.2
data/config/story.yml CHANGED
@@ -2,3 +2,4 @@
2
2
  pivotal_token: <%= ENV['PIVOTAL_TOKEN'] %>
3
3
  pivotal_project: 123456789
4
4
  deploy_tag_prefix: production_deploy_
5
+ semaphore_project_url: https://xxx.semaphoreci.com/projects/yyy
@@ -1,14 +1,14 @@
1
1
  # -*- encoding: utf-8 -*-
2
- # stub: git-story-workflow 1.2.0 ruby lib
2
+ # stub: git-story-workflow 1.4.2 ruby lib
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "git-story-workflow".freeze
6
- s.version = "1.2.0"
6
+ s.version = "1.4.2"
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 = "2021-05-04"
11
+ s.date = "2021-09-27"
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]
data/lib/git/story/app.rb CHANGED
@@ -286,7 +286,7 @@ class Git::Story::App
286
286
  command doc: '[BRANCH] open branch on github'
287
287
  def github(branch = current(check: false))
288
288
  if url = github_url(branch)
289
- system "open #{url.inspect}"
289
+ sh "open #{url.inspect}"
290
290
  end
291
291
  nil
292
292
  end
@@ -295,14 +295,28 @@ class Git::Story::App
295
295
  def pivotal(branch = current(check: true))
296
296
  if story_id = branch&.[](/_(\d+)\z/, 1)&.to_i
297
297
  story_url = fetch_story(story_id)&.url
298
- system "open #{story_url}"
298
+ sh "open #{story_url}"
299
299
  end
300
300
  nil
301
301
  end
302
302
 
303
303
  command doc: 'open project on semaphore'
304
304
  def semaphore
305
- system "open #{complex_config.story.semaphore_project_url}"
305
+ sh "open #{complex_config.story.semaphore_project_url}"
306
+ nil
307
+ end
308
+
309
+ command doc: '[REF] create a hotfix branch from REF'
310
+ def hotfix(ref = nil)
311
+ if ref
312
+ start_point = ref
313
+ elsif tag = tags.last
314
+ start_point = tag_name(tag)
315
+ else
316
+ fail 'no last deployment tag found'
317
+ end
318
+ branch = "hotfix_#{start_point}"
319
+ sh "git checkout -b #{branch.inspect} #{start_point.inspect}"
306
320
  nil
307
321
  end
308
322
 
@@ -394,7 +408,7 @@ class Git::Story::App
394
408
  end
395
409
  loop do
396
410
  r = block.()
397
- system('clear')
411
+ sh 'clear'
398
412
  start = Time.now
399
413
  puts r
400
414
  refresh_at = start + seconds
@@ -452,7 +466,12 @@ class Git::Story::App
452
466
  def pivotal_get(path)
453
467
  path = path.sub(/\A\/*/, '')
454
468
  url = "https://www.pivotaltracker.com/services/v5/#{path}"
455
- @debug and STDERR.puts "Fetching #{url.inspect}"
469
+ if pivotal_token
470
+ @debug and STDERR.puts "Fetching #{url.inspect}"
471
+ else
472
+ STDERR.puts "Cannot fetch #{url.inspect} without PIVOTAL_TOKEN set as env var"
473
+ return
474
+ end
456
475
  URI.open(url,
457
476
  'X-TrackerToken' => pivotal_token,
458
477
  'Content-Type' => 'application/xml',
@@ -2,11 +2,14 @@
2
2
  # Installed by the git-story gem
3
3
 
4
4
  require 'tempfile'
5
+ require 'complex_config/rude'
6
+ include ComplexConfig::Provider::Shortcuts
5
7
 
6
8
  class CommitMesssageParser
7
9
  def initialize
8
10
  @line_index = 0
9
11
  @story_number_found = false
12
+ @story_number_done = false
10
13
  @message_data = []
11
14
  end
12
15
 
@@ -16,10 +19,20 @@ class CommitMesssageParser
16
19
  @story_number_found
17
20
  end
18
21
 
22
+ def story_number_done?
23
+ @story_number_done
24
+ end
25
+
19
26
  def parse(template)
20
27
  @message_data = template.readlines
21
28
  @message_data.each do |line|
22
- line =~ /\[.*#\d+.*\]/ and @story_number_found = true
29
+ if /^\s*\[.*(?:#\d+|TODO|(?<done>DONE)).*\]/i =~ line
30
+ @story_number_found = true
31
+ if @story_number_done = !!done
32
+ @message_data.slice!(@line_index)
33
+ next
34
+ end
35
+ end
23
36
  if line =~ /^\s*#/
24
37
  break
25
38
  else
@@ -49,21 +62,31 @@ story_numbers =
49
62
  break $1.split(/_/)
50
63
  } || []
51
64
  story_numbers.map!(&:chomp)
52
- unless story_numbers.empty?
53
- Tempfile.open('commit') do |output|
54
- File.open(ARGV.first) do |template|
55
- message_parsed = CommitMesssageParser.new.parse(template)
56
- if message_parsed.story_number_found?
57
- output.puts message_parsed.total
58
- else
59
- output.puts message_parsed.data, "",
60
- "[#{story_numbers.map { |story_number| "##{story_number}" } * ' '}]",
61
- "", message_parsed.footer
62
- end
63
- output.rewind
64
- File.open(ARGV.first, 'w') do |message|
65
- message.write output.read
65
+ Tempfile.open('commit') do |output|
66
+ File.open(ARGV.first) do |template|
67
+ message_parsed = CommitMesssageParser.new.parse(template)
68
+ if message_parsed.story_number_found?
69
+ output.puts message_parsed.total
70
+ elsif complex_config.story.todo_nudging? && story_numbers.empty? && !message_parsed.story_number_done?
71
+ output.puts message_parsed.data, "", "[TODO]", "", message_parsed.footer
72
+ else
73
+ full_message = [ message_parsed.data, "", ]
74
+ if prefix = complex_config.story.pivotal_reference_prefix?
75
+ pivotal_reference = -> number { "%s-%u" % [ prefix, number ] }
76
+ full_message.concat(
77
+ story_numbers.each_with_index.map { |story_number, i| "#{i + 1}. " + pivotal_reference.(story_number) }
78
+ )
79
+ full_message << ""
66
80
  end
81
+ full_message <<
82
+ "[#{story_numbers.map { |story_number| "##{story_number}" } * ' '}]" <<
83
+ "" <<
84
+ message_parsed.footer
85
+ output.puts full_message
86
+ end
87
+ output.rewind
88
+ File.open(ARGV.first, 'w') do |message|
89
+ message.write output.read
67
90
  end
68
91
  end
69
92
  end
@@ -1,6 +1,6 @@
1
1
  module Git::Story
2
2
  # Git::Story version
3
- VERSION = '1.2.0'
3
+ VERSION = '1.4.2'
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: 1.2.0
4
+ version: 1.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Florian Frank
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-05-04 00:00:00.000000000 Z
11
+ date: 2021-09-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gem_hadar