git-story-workflow 1.2.0 → 1.4.2

Sign up to get free protection for your applications and to get access to all the features.
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