milestoner 10.3.0 → 11.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: c315f1ddc5e1602eec6678ea4d9940de8cc654ecd89088765bb26c25adc0c550
4
- data.tar.gz: 82a920c588f7bafc61b94d75539a9cb716a41c78b33e028ec7e0f5626136f97b
3
+ metadata.gz: 162f8f50f2f6d09758f25aff2e10a416e19b15e2d8468b28c8c58b9fa3f363af
4
+ data.tar.gz: 7d2401141fd1ad1596f10ef30b093fb1844d56fe43594b0dcd40844614ac3691
5
5
  SHA512:
6
- metadata.gz: 4abf959396e4398f75a5f845177e6bc882462ce4b7d94944b8e698f2ffa0b4317cbd020a9666c6e11831748d23d0f372470ec150bde177c723b60db636ad6a17
7
- data.tar.gz: 78f0b7cff488bdce3b49598bdd5d1fd4afb04f8cc6ff8bc6fe03f7466dd3aa1394ae76013fc2bacefcada5796f39392a58fe52d6959662d0222b4a243df17e27
6
+ metadata.gz: 6c6a6171c291547866078bfb165cfe70b5d4b20c6d09c09a9be0d810678a2985955a26f22fb3cfe4df56ce51b82b4a18d35662e576287408dbae6112c718b42a
7
+ data.tar.gz: 5067878d843e14e8048a27fc0a5a4febaee780f8f207a3b9035fd12e4c01c42f8151c981de909bf98fe413a35f52e104424872a9fa87840948a10df448c6a555
checksums.yaml.gz.sig CHANGED
Binary file
data.tar.gz.sig CHANGED
Binary file
data/README.adoc CHANGED
@@ -6,6 +6,8 @@
6
6
 
7
7
  [link=http://badge.fury.io/rb/milestoner]
8
8
  image::https://badge.fury.io/rb/milestoner.svg[Gem Version]
9
+ [link=https://www.alchemists.io/projects/code_quality]
10
+ image::https://img.shields.io/badge/code_style-alchemists-brightgreen.svg[Alchemists Style Guide]
9
11
  [link=https://circleci.com/gh/bkuhlmann/milestoner]
10
12
  image::https://circleci.com/gh/bkuhlmann/milestoner.svg?style=svg[Circle CI Status]
11
13
 
@@ -28,11 +30,8 @@ toc::[]
28
30
  ** Updated
29
31
  ** Removed
30
32
  ** Refactored
31
- * Ensures Git commit merge messages are excluded.
32
33
  * Ensures Git commit messages are alphabetically sorted.
33
34
  * Ensures duplicate Git commit messages are removed (if any).
34
- * Ensures Git commit messages are sanitized by removing extra spaces and `+[ci skip]+` text within
35
- each Git tag message.
36
35
  * Provides optional security for signing Git tags with https://www.gnupg.org[GnuPG] signing key.
37
36
 
38
37
  == Screencasts
data/lib/milestoner.rb CHANGED
@@ -1,11 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "git_plus"
3
4
  require "milestoner/identity"
4
5
  require "milestoner/errors/base"
5
6
  require "milestoner/errors/duplicate_tag"
6
7
  require "milestoner/errors/git"
7
- require "milestoner/git/config"
8
- require "milestoner/git/kit"
8
+ require "milestoner/commit"
9
9
  require "milestoner/tagger"
10
10
  require "milestoner/pusher"
11
11
  require "milestoner/publisher"
@@ -46,7 +46,7 @@ module Milestoner
46
46
  default: false
47
47
  def tag version
48
48
  tagger.create version, sign: sign_tag?(options[:sign])
49
- say "Repository tagged: #{tagger.version}."
49
+ say "Repository tagged: #{version}."
50
50
  rescue StandardError => error
51
51
  say_status :error, error.message, :red
52
52
  end
@@ -69,7 +69,7 @@ module Milestoner
69
69
  default: false
70
70
  def publish version
71
71
  publisher.publish version, sign: sign_tag?(options[:sign])
72
- say_status :info, "Repository tagged and pushed: #{tagger.version}.", :green
72
+ say_status :info, "Repository tagged and pushed: #{version}.", :green
73
73
  say_status :info, "Milestone published!", :green
74
74
  rescue StandardError => error
75
75
  say_status :error, error.message, :red
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "forwardable"
4
+
5
+ module Milestoner
6
+ # Wraps the Git Kit Commit for presentation purposes.
7
+ class Commit
8
+ extend Forwardable
9
+
10
+ delegate [*GitPlus::Commit.members, :fixup?, :squash?] => :source
11
+
12
+ def initialize source
13
+ @source = source
14
+ end
15
+
16
+ def subject_author delimiter: " - "
17
+ "#{subject}#{delimiter}#{author_name}"
18
+ end
19
+
20
+ private
21
+
22
+ attr_reader :source
23
+ end
24
+ end
@@ -5,7 +5,7 @@ module Milestoner
5
5
  module Identity
6
6
  NAME = "milestoner"
7
7
  LABEL = "Milestoner"
8
- VERSION = "10.3.0"
8
+ VERSION = "11.2.0"
9
9
  VERSION_LABEL = "#{LABEL} #{VERSION}"
10
10
  end
11
11
  end
@@ -3,26 +3,32 @@
3
3
  module Milestoner
4
4
  # Handles publishing of Git tags to remote repository.
5
5
  class Pusher
6
- def initialize git: Git::Kit.new
7
- @git = git
6
+ def initialize repository: GitPlus::Repository.new
7
+ @repository = repository
8
8
  end
9
9
 
10
10
  def push version
11
11
  version = Versionaire::Version version
12
12
 
13
- fail Errors::Git, "Remote repository not configured." unless git.remote?
13
+ fail Errors::Git, "Remote repository not configured." unless repository.config_origin?
14
14
  fail Errors::Git, "Remote tag exists: #{version}." if tag_exists? version
15
- return if git.push_tags.empty?
15
+ return if push_tags
16
16
 
17
17
  fail Errors::Git, "Tags could not be pushed to remote repository."
18
18
  end
19
19
 
20
20
  private
21
21
 
22
- attr_reader :git, :version
22
+ attr_reader :repository, :version
23
23
 
24
24
  def tag_exists? version
25
- git.tag_remote? version
25
+ repository.tag_remote? version
26
+ end
27
+
28
+ def push_tags
29
+ repository.tag_push.then do |_stdout, stderr, status|
30
+ status.success? && stderr.match?(/[new tag]/)
31
+ end
26
32
  end
27
33
  end
28
34
  end
@@ -1,115 +1,89 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "open3"
4
3
  require "thor"
5
4
  require "versionaire"
6
- require "tempfile"
7
5
 
8
6
  module Milestoner
9
7
  # Handles the tagging of a project repository.
10
- # :reek:TooManyMethods
11
- # :reek:InstanceVariableAssumption
8
+ # :reek:TooManyInstanceVariables
12
9
  class Tagger
13
- attr_reader :version, :commit_prefixes
10
+ attr_reader :commit_prefixes
14
11
 
15
- def initialize commit_prefixes: [], git: Git::Kit.new
12
+ def initialize commit_prefixes: [], repository: GitPlus::Repository.new, presenter: Commit
16
13
  @commit_prefixes = commit_prefixes
17
- @git = git
14
+ @repository = repository
15
+ @presenter = presenter
18
16
  @shell = Thor::Shell::Color.new
19
17
  end
20
18
 
21
19
  def commit_prefix_regex
22
- return Regexp.new "" if commit_prefixes.empty?
23
-
24
- Regexp.union commit_prefixes
20
+ commit_prefixes.empty? ? Regexp.new("") : Regexp.union(commit_prefixes)
25
21
  end
26
22
 
27
23
  def commits
28
24
  groups = build_commit_prefix_groups
29
25
  group_by_commit_prefix groups
30
- groups.each_value(&:sort!)
31
- groups.values.flatten.uniq
26
+ groups.each_value { |commits| commits.sort_by!(&:subject) }
27
+ groups.values.flatten.uniq(&:subject)
32
28
  end
33
29
 
34
30
  def commit_list
35
- commits.map { |commit| "- #{commit}" }
31
+ commits.map { |source| presenter.new source }
32
+ .map { |commit| "- #{commit.subject_author}" }
36
33
  end
37
34
 
38
35
  # :reek:BooleanParameter
36
+ # :reek:ControlParameter
37
+ # :reek:TooManyStatements
39
38
  def create version, sign: false
40
- @version = Versionaire::Version version
41
- fail Errors::Git, "Unable to tag without commits." unless git.commits?
42
- return if existing_tag?
39
+ version = Versionaire::Version version
40
+
41
+ return if local? version
42
+ fail Errors::Git, "Unable to tag without commits." if computed_commits.empty?
43
43
 
44
- git_tag sign: sign
44
+ content = message version
45
+ sign ? repository.tag_sign(version, content) : repository.tag_unsign(version, content)
45
46
  end
46
47
 
47
48
  private
48
49
 
49
- attr_reader :git, :shell
50
+ attr_reader :repository, :presenter, :shell
50
51
 
51
- def git_log_command
52
- "git log --oneline --no-merges --format='%s'"
52
+ def saved_commits
53
+ repository.commits
53
54
  end
54
55
 
55
- def git_tag_command
56
- "$(git describe --abbrev=0 --tags --always)..HEAD"
56
+ def tagged_commits
57
+ repository.commits "#{repository.tag_last}..HEAD"
57
58
  end
58
59
 
59
- def git_commits_command
60
- return "#{git_log_command} #{git_tag_command}" if git.tagged?
61
-
62
- git_log_command
63
- end
64
-
65
- def raw_commits
66
- `#{git_commits_command}`.split "\n"
60
+ def computed_commits
61
+ (repository.tagged? ? tagged_commits : saved_commits)
67
62
  end
68
63
 
69
64
  def build_commit_prefix_groups
70
- groups = commit_prefixes.map.with_object({}) { |prefix, group| group.merge! prefix => [] }
71
- groups.merge! "Other" => []
65
+ commit_prefixes.map
66
+ .with_object({}) { |prefix, group| group.merge! prefix => [] }
67
+ .merge! "Other" => []
72
68
  end
73
69
 
74
70
  def group_by_commit_prefix groups = {}
75
- raw_commits.each do |commit|
76
- prefix = commit[commit_prefix_regex]
71
+ computed_commits.each do |commit|
72
+ prefix = commit.subject[commit_prefix_regex]
77
73
  key = groups.key?(prefix) ? prefix : "Other"
78
- groups[key] << commit.gsub(/\[ci\sskip\]/, "").squeeze(" ").strip
74
+ groups[key] << commit
79
75
  end
80
76
  end
81
77
 
82
- def git_message
83
- %(Version #{@version}\n\n#{commit_list.join "\n"}\n\n)
84
- end
85
-
86
- # :reek:BooleanParameter
87
- # :reek:ControlParameter
88
- def git_options message_file, sign: false
89
- options = %(--sign --annotate "#{@version}" ) +
90
- %(--cleanup verbatim --file "#{message_file.path}")
91
- return options.gsub "--sign ", "" unless sign
92
-
93
- options
78
+ def message version
79
+ %(Version #{version}\n\n#{commit_list.join "\n"}\n\n)
94
80
  end
95
81
 
96
- def existing_tag?
97
- return false unless git.tag_local? @version
82
+ def local? version
83
+ return false unless repository.tag_local? version
98
84
 
99
- shell.say_status :warn, "Local tag exists: #{@version}. Skipped.", :yellow
85
+ shell.say_status :warn, "Local tag exists: #{version}. Skipped.", :yellow
100
86
  true
101
87
  end
102
-
103
- # :reek:BooleanParameter
104
- # :reek:TooManyStatements
105
- def git_tag sign: false
106
- message_file = Tempfile.new Identity::NAME
107
- File.open(message_file, "w") { |file| file.write git_message }
108
- status = system "git tag #{git_options message_file, sign: sign}"
109
- fail Errors::Git, "Unable to create tag: #{@version}." unless status
110
- ensure
111
- message_file.close
112
- message_file.unlink
113
- end
114
88
  end
115
89
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: milestoner
3
3
  version: !ruby/object:Gem::Version
4
- version: 10.3.0
4
+ version: 11.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brooke Kuhlmann
@@ -10,9 +10,9 @@ bindir: bin
10
10
  cert_chain:
11
11
  - |
12
12
  -----BEGIN CERTIFICATE-----
13
- MIIC/jCCAeagAwIBAgIBAzANBgkqhkiG9w0BAQsFADAlMSMwIQYDVQQDDBpicm9v
14
- a2UvREM9YWxjaGVtaXN0cy9EQz1pbzAeFw0yMDAzMTUxNDQ1MzJaFw0yMTAzMTUx
15
- NDQ1MzJaMCUxIzAhBgNVBAMMGmJyb29rZS9EQz1hbGNoZW1pc3RzL0RDPWlvMIIB
13
+ MIIC/jCCAeagAwIBAgIBBDANBgkqhkiG9w0BAQsFADAlMSMwIQYDVQQDDBpicm9v
14
+ a2UvREM9YWxjaGVtaXN0cy9EQz1pbzAeFw0yMTAzMTkxMjQ4MDZaFw0yMjAzMTkx
15
+ MjQ4MDZaMCUxIzAhBgNVBAMMGmJyb29rZS9EQz1hbGNoZW1pc3RzL0RDPWlvMIIB
16
16
  IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6l1qpXTiomH1RfMRloyw7MiE
17
17
  xyVx/x8Yc3EupdH7uhNaTXQGyORN6aOY//1QXXMHIZ9tW74nZLhesWMSUMYy0XhB
18
18
  brs+KkurHnc9FnEJAbG7ebGvl/ncqZt72nQvaxpDxvuCBHgJAz+8i5wl6FhLw+oT
@@ -20,46 +20,32 @@ cert_chain:
20
20
  D5vkU0YlAm1r98BymuJlcQ1qdkVEI1d48ph4kcS0S0nv1RiuyVb6TCAR3Nu3VaVq
21
21
  3fPzZKJLZBx67UvXdbdicWPiUR75elI4PXpLIic3xytaF52ZJYyKZCNZJhNwfQID
22
22
  AQABozkwNzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQU0nzow9vc
23
- 2CdikiiE3fJhP/gY4ggwDQYJKoZIhvcNAQELBQADggEBAIHhAlD3po4sTYqacXaQ
24
- XI9jIhrfMy//2PgbHWcETtlJPBeNUbbSNBABcllUHKqYsVDlSvSmss034KSWNR8F
25
- bF1GcloicyvcCC4y6IoW4it0COAcdeaaxkxiBSgKdQFpff9REnDlIKK4uQ9lLxIo
26
- Y2G5xubiziKZkyfWFuSr67PIjW3Bu673D1JVBArhA1qbgQmYQcy1CkGOjo+iO8Nf
27
- 7u/QSfBHb+r/bXhKscDgPpnKwbUmvgO2+94zJG9KsrmIydlzYfsD09aXKx0t6Xy4
28
- 2XV8FRa7/JimI07sPLC13eLY3xd/aYTi85Z782KIA4j0G8XEEWAX0ouBhlXPocZv
29
- QWc=
23
+ 2CdikiiE3fJhP/gY4ggwDQYJKoZIhvcNAQELBQADggEBAEjpaOXHHp8s/7GL2qCb
24
+ YAs7urOLv9VHSPfQWAwaTMVnSsIf3Sw4xzISOP/mmfEPBPXtz61K5esrE/uTFtgb
25
+ FyjxQk2H0sEWgrRXGGNHBWQRhhEs7LP/TByoC15A0br++xLxRz4r7HBLGAWQQDpg
26
+ 66BJ2TBVjxS6K64tKbq7+ACyrOZGgTfNHACh4M076y0x0oRf/rwBrU39/KRfuhbb
27
+ cm+nNCEtO35gTmZ2bVDHLGvWazi3gJt6+huQjfXTCUUG2YYBxwhu+GPdAGQPxpf9
28
+ lkHilIrX69jq8wMPpBhlaw2mRmeSL50Wv5u6xVBvOHhXFSP1crXM95vfLhLyRYod
29
+ W2A=
30
30
  -----END CERTIFICATE-----
31
- date: 2020-10-18 00:00:00.000000000 Z
31
+ date: 2021-04-04 00:00:00.000000000 Z
32
32
  dependencies:
33
33
  - !ruby/object:Gem::Dependency
34
- name: runcom
35
- requirement: !ruby/object:Gem::Requirement
36
- requirements:
37
- - - "~>"
38
- - !ruby/object:Gem::Version
39
- version: '6.0'
40
- type: :runtime
41
- prerelease: false
42
- version_requirements: !ruby/object:Gem::Requirement
43
- requirements:
44
- - - "~>"
45
- - !ruby/object:Gem::Version
46
- version: '6.0'
47
- - !ruby/object:Gem::Dependency
48
- name: thor
34
+ name: git_plus
49
35
  requirement: !ruby/object:Gem::Requirement
50
36
  requirements:
51
37
  - - "~>"
52
38
  - !ruby/object:Gem::Version
53
- version: '0.20'
39
+ version: '0.4'
54
40
  type: :runtime
55
41
  prerelease: false
56
42
  version_requirements: !ruby/object:Gem::Requirement
57
43
  requirements:
58
44
  - - "~>"
59
45
  - !ruby/object:Gem::Version
60
- version: '0.20'
46
+ version: '0.4'
61
47
  - !ruby/object:Gem::Dependency
62
- name: versionaire
48
+ name: refinements
63
49
  requirement: !ruby/object:Gem::Requirement
64
50
  requirements:
65
51
  - - "~>"
@@ -73,215 +59,47 @@ dependencies:
73
59
  - !ruby/object:Gem::Version
74
60
  version: '8.0'
75
61
  - !ruby/object:Gem::Dependency
76
- name: bundler-audit
77
- requirement: !ruby/object:Gem::Requirement
78
- requirements:
79
- - - "~>"
80
- - !ruby/object:Gem::Version
81
- version: '0.6'
82
- type: :development
83
- prerelease: false
84
- version_requirements: !ruby/object:Gem::Requirement
85
- requirements:
86
- - - "~>"
87
- - !ruby/object:Gem::Version
88
- version: '0.6'
89
- - !ruby/object:Gem::Dependency
90
- name: climate_control
91
- requirement: !ruby/object:Gem::Requirement
92
- requirements:
93
- - - "~>"
94
- - !ruby/object:Gem::Version
95
- version: '0.1'
96
- type: :development
97
- prerelease: false
98
- version_requirements: !ruby/object:Gem::Requirement
99
- requirements:
100
- - - "~>"
101
- - !ruby/object:Gem::Version
102
- version: '0.1'
103
- - !ruby/object:Gem::Dependency
104
- name: gemsmith
105
- requirement: !ruby/object:Gem::Requirement
106
- requirements:
107
- - - "~>"
108
- - !ruby/object:Gem::Version
109
- version: '14.2'
110
- type: :development
111
- prerelease: false
112
- version_requirements: !ruby/object:Gem::Requirement
113
- requirements:
114
- - - "~>"
115
- - !ruby/object:Gem::Version
116
- version: '14.2'
117
- - !ruby/object:Gem::Dependency
118
- name: git-lint
119
- requirement: !ruby/object:Gem::Requirement
120
- requirements:
121
- - - "~>"
122
- - !ruby/object:Gem::Version
123
- version: '1.0'
124
- type: :development
125
- prerelease: false
126
- version_requirements: !ruby/object:Gem::Requirement
127
- requirements:
128
- - - "~>"
129
- - !ruby/object:Gem::Version
130
- version: '1.0'
131
- - !ruby/object:Gem::Dependency
132
- name: guard-rspec
133
- requirement: !ruby/object:Gem::Requirement
134
- requirements:
135
- - - "~>"
136
- - !ruby/object:Gem::Version
137
- version: '4.7'
138
- type: :development
139
- prerelease: false
140
- version_requirements: !ruby/object:Gem::Requirement
141
- requirements:
142
- - - "~>"
143
- - !ruby/object:Gem::Version
144
- version: '4.7'
145
- - !ruby/object:Gem::Dependency
146
- name: pry
147
- requirement: !ruby/object:Gem::Requirement
148
- requirements:
149
- - - "~>"
150
- - !ruby/object:Gem::Version
151
- version: '0.13'
152
- type: :development
153
- prerelease: false
154
- version_requirements: !ruby/object:Gem::Requirement
155
- requirements:
156
- - - "~>"
157
- - !ruby/object:Gem::Version
158
- version: '0.13'
159
- - !ruby/object:Gem::Dependency
160
- name: pry-byebug
161
- requirement: !ruby/object:Gem::Requirement
162
- requirements:
163
- - - "~>"
164
- - !ruby/object:Gem::Version
165
- version: '3.9'
166
- type: :development
167
- prerelease: false
168
- version_requirements: !ruby/object:Gem::Requirement
169
- requirements:
170
- - - "~>"
171
- - !ruby/object:Gem::Version
172
- version: '3.9'
173
- - !ruby/object:Gem::Dependency
174
- name: rake
175
- requirement: !ruby/object:Gem::Requirement
176
- requirements:
177
- - - "~>"
178
- - !ruby/object:Gem::Version
179
- version: '13.0'
180
- type: :development
181
- prerelease: false
182
- version_requirements: !ruby/object:Gem::Requirement
183
- requirements:
184
- - - "~>"
185
- - !ruby/object:Gem::Version
186
- version: '13.0'
187
- - !ruby/object:Gem::Dependency
188
- name: reek
189
- requirement: !ruby/object:Gem::Requirement
190
- requirements:
191
- - - "~>"
192
- - !ruby/object:Gem::Version
193
- version: '6.0'
194
- type: :development
195
- prerelease: false
196
- version_requirements: !ruby/object:Gem::Requirement
197
- requirements:
198
- - - "~>"
199
- - !ruby/object:Gem::Version
200
- version: '6.0'
201
- - !ruby/object:Gem::Dependency
202
- name: rspec
203
- requirement: !ruby/object:Gem::Requirement
204
- requirements:
205
- - - "~>"
206
- - !ruby/object:Gem::Version
207
- version: '3.9'
208
- type: :development
209
- prerelease: false
210
- version_requirements: !ruby/object:Gem::Requirement
211
- requirements:
212
- - - "~>"
213
- - !ruby/object:Gem::Version
214
- version: '3.9'
215
- - !ruby/object:Gem::Dependency
216
- name: rubocop
217
- requirement: !ruby/object:Gem::Requirement
218
- requirements:
219
- - - "~>"
220
- - !ruby/object:Gem::Version
221
- version: '0.89'
222
- type: :development
223
- prerelease: false
224
- version_requirements: !ruby/object:Gem::Requirement
225
- requirements:
226
- - - "~>"
227
- - !ruby/object:Gem::Version
228
- version: '0.89'
229
- - !ruby/object:Gem::Dependency
230
- name: rubocop-performance
231
- requirement: !ruby/object:Gem::Requirement
232
- requirements:
233
- - - "~>"
234
- - !ruby/object:Gem::Version
235
- version: '1.5'
236
- type: :development
237
- prerelease: false
238
- version_requirements: !ruby/object:Gem::Requirement
239
- requirements:
240
- - - "~>"
241
- - !ruby/object:Gem::Version
242
- version: '1.5'
243
- - !ruby/object:Gem::Dependency
244
- name: rubocop-rake
62
+ name: runcom
245
63
  requirement: !ruby/object:Gem::Requirement
246
64
  requirements:
247
65
  - - "~>"
248
66
  - !ruby/object:Gem::Version
249
- version: '0.5'
250
- type: :development
67
+ version: '7.0'
68
+ type: :runtime
251
69
  prerelease: false
252
70
  version_requirements: !ruby/object:Gem::Requirement
253
71
  requirements:
254
72
  - - "~>"
255
73
  - !ruby/object:Gem::Version
256
- version: '0.5'
74
+ version: '7.0'
257
75
  - !ruby/object:Gem::Dependency
258
- name: rubocop-rspec
76
+ name: thor
259
77
  requirement: !ruby/object:Gem::Requirement
260
78
  requirements:
261
79
  - - "~>"
262
80
  - !ruby/object:Gem::Version
263
- version: '1.39'
264
- type: :development
81
+ version: '0.20'
82
+ type: :runtime
265
83
  prerelease: false
266
84
  version_requirements: !ruby/object:Gem::Requirement
267
85
  requirements:
268
86
  - - "~>"
269
87
  - !ruby/object:Gem::Version
270
- version: '1.39'
88
+ version: '0.20'
271
89
  - !ruby/object:Gem::Dependency
272
- name: simplecov
90
+ name: versionaire
273
91
  requirement: !ruby/object:Gem::Requirement
274
92
  requirements:
275
93
  - - "~>"
276
94
  - !ruby/object:Gem::Version
277
- version: '0.19'
278
- type: :development
95
+ version: '9.0'
96
+ type: :runtime
279
97
  prerelease: false
280
98
  version_requirements: !ruby/object:Gem::Requirement
281
99
  requirements:
282
100
  - - "~>"
283
101
  - !ruby/object:Gem::Version
284
- version: '0.19'
102
+ version: '9.0'
285
103
  description:
286
104
  email:
287
105
  - brooke@alchemists.io
@@ -297,11 +115,10 @@ files:
297
115
  - bin/milestoner
298
116
  - lib/milestoner.rb
299
117
  - lib/milestoner/cli.rb
118
+ - lib/milestoner/commit.rb
300
119
  - lib/milestoner/errors/base.rb
301
120
  - lib/milestoner/errors/duplicate_tag.rb
302
121
  - lib/milestoner/errors/git.rb
303
- - lib/milestoner/git/config.rb
304
- - lib/milestoner/git/kit.rb
305
122
  - lib/milestoner/identity.rb
306
123
  - lib/milestoner/publisher.rb
307
124
  - lib/milestoner/pusher.rb
@@ -322,14 +139,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
322
139
  requirements:
323
140
  - - "~>"
324
141
  - !ruby/object:Gem::Version
325
- version: '2.7'
142
+ version: '3.0'
326
143
  required_rubygems_version: !ruby/object:Gem::Requirement
327
144
  requirements:
328
145
  - - ">="
329
146
  - !ruby/object:Gem::Version
330
147
  version: '0'
331
148
  requirements: []
332
- rubygems_version: 3.1.4
149
+ rubygems_version: 3.2.15
333
150
  signing_key:
334
151
  specification_version: 4
335
152
  summary: A command line interface for crafting Git repository milestones.
metadata.gz.sig CHANGED
Binary file
@@ -1,30 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "open3"
4
-
5
- module Milestoner
6
- module Git
7
- # A lightweight Git Config wrapper.
8
- class Config
9
- def initialize shell: Open3
10
- @shell = shell
11
- end
12
-
13
- def get key
14
- shell.capture3 "git config --get #{key}"
15
- end
16
-
17
- def set key, value
18
- shell.capture3 %(git config --add #{key} "#{value}")
19
- end
20
-
21
- def value key
22
- get(key).first.chomp
23
- end
24
-
25
- private
26
-
27
- attr_reader :shell
28
- end
29
- end
30
- end
@@ -1,48 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Milestoner
4
- module Git
5
- # A lightweight Git wrapper.
6
- class Kit
7
- def initialize
8
- @git_dir = File.join Dir.pwd, ".git"
9
- end
10
-
11
- def supported?
12
- File.exist? git_dir
13
- end
14
-
15
- def commits?
16
- !shell("git log").empty?
17
- end
18
-
19
- def push_tags
20
- shell "git push --tags"
21
- end
22
-
23
- def tagged?
24
- !shell("git tag").empty?
25
- end
26
-
27
- def tag_local? tag
28
- shell("git tag --list #{tag}").match?(/\A#{tag}\Z/)
29
- end
30
-
31
- def tag_remote? tag
32
- shell("git ls-remote --tags origin #{tag}").match?(%r(.+tags/#{tag}\Z))
33
- end
34
-
35
- def remote?
36
- !shell("git config remote.origin.url").empty?
37
- end
38
-
39
- private
40
-
41
- attr_reader :git_dir
42
-
43
- def shell command
44
- String `#{command}`
45
- end
46
- end
47
- end
48
- end