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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/README.adoc +2 -3
- data/lib/milestoner.rb +2 -2
- data/lib/milestoner/cli.rb +2 -2
- data/lib/milestoner/commit.rb +24 -0
- data/lib/milestoner/identity.rb +1 -1
- data/lib/milestoner/pusher.rb +12 -6
- data/lib/milestoner/tagger.rb +36 -62
- metadata +31 -214
- metadata.gz.sig +0 -0
- data/lib/milestoner/git/config.rb +0 -30
- data/lib/milestoner/git/kit.rb +0 -48
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 162f8f50f2f6d09758f25aff2e10a416e19b15e2d8468b28c8c58b9fa3f363af
|
4
|
+
data.tar.gz: 7d2401141fd1ad1596f10ef30b093fb1844d56fe43594b0dcd40844614ac3691
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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/
|
8
|
-
require "milestoner/git/kit"
|
8
|
+
require "milestoner/commit"
|
9
9
|
require "milestoner/tagger"
|
10
10
|
require "milestoner/pusher"
|
11
11
|
require "milestoner/publisher"
|
data/lib/milestoner/cli.rb
CHANGED
@@ -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: #{
|
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: #{
|
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
|
data/lib/milestoner/identity.rb
CHANGED
data/lib/milestoner/pusher.rb
CHANGED
@@ -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
|
7
|
-
@
|
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
|
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
|
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 :
|
22
|
+
attr_reader :repository, :version
|
23
23
|
|
24
24
|
def tag_exists? version
|
25
|
-
|
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
|
data/lib/milestoner/tagger.rb
CHANGED
@@ -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:
|
11
|
-
# :reek:InstanceVariableAssumption
|
8
|
+
# :reek:TooManyInstanceVariables
|
12
9
|
class Tagger
|
13
|
-
attr_reader :
|
10
|
+
attr_reader :commit_prefixes
|
14
11
|
|
15
|
-
def initialize commit_prefixes: [],
|
12
|
+
def initialize commit_prefixes: [], repository: GitPlus::Repository.new, presenter: Commit
|
16
13
|
@commit_prefixes = commit_prefixes
|
17
|
-
@
|
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
|
-
|
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(&:
|
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 { |
|
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
|
-
|
41
|
-
|
42
|
-
return if
|
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
|
-
|
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 :
|
50
|
+
attr_reader :repository, :presenter, :shell
|
50
51
|
|
51
|
-
def
|
52
|
-
|
52
|
+
def saved_commits
|
53
|
+
repository.commits
|
53
54
|
end
|
54
55
|
|
55
|
-
def
|
56
|
-
"
|
56
|
+
def tagged_commits
|
57
|
+
repository.commits "#{repository.tag_last}..HEAD"
|
57
58
|
end
|
58
59
|
|
59
|
-
def
|
60
|
-
|
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
|
-
|
71
|
-
|
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
|
-
|
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
|
74
|
+
groups[key] << commit
|
79
75
|
end
|
80
76
|
end
|
81
77
|
|
82
|
-
def
|
83
|
-
%(Version #{
|
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
|
97
|
-
return false unless
|
82
|
+
def local? version
|
83
|
+
return false unless repository.tag_local? version
|
98
84
|
|
99
|
-
shell.say_status :warn, "Local tag exists: #{
|
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:
|
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/
|
14
|
-
|
15
|
-
|
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/
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
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:
|
31
|
+
date: 2021-04-04 00:00:00.000000000 Z
|
32
32
|
dependencies:
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
|
-
name:
|
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.
|
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.
|
46
|
+
version: '0.4'
|
61
47
|
- !ruby/object:Gem::Dependency
|
62
|
-
name:
|
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:
|
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
|
250
|
-
type: :
|
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
|
74
|
+
version: '7.0'
|
257
75
|
- !ruby/object:Gem::Dependency
|
258
|
-
name:
|
76
|
+
name: thor
|
259
77
|
requirement: !ruby/object:Gem::Requirement
|
260
78
|
requirements:
|
261
79
|
- - "~>"
|
262
80
|
- !ruby/object:Gem::Version
|
263
|
-
version: '
|
264
|
-
type: :
|
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: '
|
88
|
+
version: '0.20'
|
271
89
|
- !ruby/object:Gem::Dependency
|
272
|
-
name:
|
90
|
+
name: versionaire
|
273
91
|
requirement: !ruby/object:Gem::Requirement
|
274
92
|
requirements:
|
275
93
|
- - "~>"
|
276
94
|
- !ruby/object:Gem::Version
|
277
|
-
version: '0
|
278
|
-
type: :
|
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
|
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: '
|
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.
|
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
|
data/lib/milestoner/git/kit.rb
DELETED
@@ -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
|