kettle-family 0.1.11 → 0.1.12
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/CHANGELOG.md +4 -0
- data/lib/kettle/family/cli.rb +2 -1
- data/lib/kettle/family/version.rb +1 -1
- data/lib/kettle/family/version_bump.rb +73 -11
- data.tar.gz.sig +0 -0
- metadata +4 -4
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: f65c88cd11fde014afd2cf4e90a46734d3bc4cad6941604809541404e1e4f8f0
|
|
4
|
+
data.tar.gz: 6f41492fbda81d8106de2e18c88ea34db50ac1e3910a10872d6dc804a6151f4b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 2fbd369fd177a00aae8db444e577c0c87ac9e5d5197301d3338172691ae8793326221453c33ad2a4780616668b0b73a3e3f28c25940bd25815d7ae6feb79bb63
|
|
7
|
+
data.tar.gz: 5dce9c3e088160948803fdf898a1bf913b7c9641a53babaa526fc7be855d3120fe02d4fab0a0e12cf8112b0780109cd9471a9e3eee462a7dc7b5d3e4d93824bf
|
checksums.yaml.gz.sig
CHANGED
|
Binary file
|
data/CHANGELOG.md
CHANGED
|
@@ -20,6 +20,10 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
20
20
|
|
|
21
21
|
### Added
|
|
22
22
|
|
|
23
|
+
- `kettle-family bump-version` now accepts the same relative bump targets as
|
|
24
|
+
`kettle-bump` (`major`, `minor`, `patch`, and `pre`) and applies them per
|
|
25
|
+
member from each member's current version.
|
|
26
|
+
|
|
23
27
|
### Changed
|
|
24
28
|
|
|
25
29
|
### Deprecated
|
data/lib/kettle/family/cli.rb
CHANGED
|
@@ -26,7 +26,7 @@ module Kettle
|
|
|
26
26
|
raise Error, "unknown command #{command.inspect}" unless COMMANDS.include?(command)
|
|
27
27
|
|
|
28
28
|
target_version = argv.shift if command == "bump-version"
|
|
29
|
-
raise Error, "bump-version requires VERSION" if command == "bump-version" && !target_version
|
|
29
|
+
raise Error, "bump-version requires VERSION, major, minor, patch, or pre" if command == "bump-version" && !target_version
|
|
30
30
|
|
|
31
31
|
options = parse_options
|
|
32
32
|
options[:target_version] = target_version
|
|
@@ -48,6 +48,7 @@ module Kettle
|
|
|
48
48
|
def help
|
|
49
49
|
out.puts(<<~HELP)
|
|
50
50
|
Usage: kettle-family COMMAND [options]
|
|
51
|
+
kettle-family bump-version VERSION|major|minor|patch|pre [options]
|
|
51
52
|
|
|
52
53
|
Commands:
|
|
53
54
|
discover Discover family members and print selected order
|
|
@@ -3,14 +3,19 @@
|
|
|
3
3
|
module Kettle
|
|
4
4
|
module Family
|
|
5
5
|
class VersionBump
|
|
6
|
+
BUMP_TYPES = %w[major minor patch pre].freeze
|
|
6
7
|
DEPENDENCY_METHODS = %i[add_dependency add_runtime_dependency].freeze
|
|
7
8
|
|
|
8
9
|
def initialize(members:, target_version:, from_version: nil, mode: :dry_run)
|
|
9
10
|
@members = members
|
|
10
|
-
@target_version =
|
|
11
|
+
@target_version = target_version.to_s
|
|
12
|
+
@explicit_target_version = validate_version(target_version) unless BUMP_TYPES.include?(@target_version)
|
|
11
13
|
@from_version = validate_version(from_version) if from_version
|
|
12
14
|
@mode = mode
|
|
13
15
|
@member_names = members.map(&:name)
|
|
16
|
+
@member_target_versions = members.each_with_object({}) do |member, memo|
|
|
17
|
+
memo[member.name] = resolve_target_version(member)
|
|
18
|
+
end
|
|
14
19
|
end
|
|
15
20
|
|
|
16
21
|
def results
|
|
@@ -19,7 +24,7 @@ module Kettle
|
|
|
19
24
|
|
|
20
25
|
private
|
|
21
26
|
|
|
22
|
-
attr_reader :members, :target_version, :from_version, :mode, :member_names
|
|
27
|
+
attr_reader :members, :target_version, :explicit_target_version, :from_version, :mode, :member_names, :member_target_versions
|
|
23
28
|
|
|
24
29
|
def validate_version(version)
|
|
25
30
|
Gem::Version.new(version).to_s
|
|
@@ -30,12 +35,13 @@ module Kettle
|
|
|
30
35
|
def result_for(member)
|
|
31
36
|
raise Error, "#{member.name} is #{member.version}, not --from #{from_version}" if from_version && member.version != from_version
|
|
32
37
|
|
|
33
|
-
|
|
38
|
+
member_target_version = target_version_for(member)
|
|
39
|
+
edits = collect_edits(member, member_target_version)
|
|
34
40
|
write_edits(edits) if mode == :execute
|
|
35
41
|
CommandResult.new(
|
|
36
42
|
member_name: member.name,
|
|
37
43
|
phase: "bump-version",
|
|
38
|
-
command: ["internal", "bump-version",
|
|
44
|
+
command: ["internal", "bump-version", member_target_version],
|
|
39
45
|
workdir: member.root,
|
|
40
46
|
status: check_failed?(edits) ? 1 : 0,
|
|
41
47
|
success: !check_failed?(edits),
|
|
@@ -59,20 +65,20 @@ module Kettle
|
|
|
59
65
|
nil
|
|
60
66
|
end
|
|
61
67
|
|
|
62
|
-
def collect_edits(member)
|
|
68
|
+
def collect_edits(member, member_target_version)
|
|
63
69
|
edits = []
|
|
64
|
-
edits << version_file_edit(member) if member.version_file
|
|
70
|
+
edits << version_file_edit(member, member_target_version) if member.version_file
|
|
65
71
|
edits.concat(gemspec_dependency_edits(member))
|
|
66
72
|
edits.compact
|
|
67
73
|
end
|
|
68
74
|
|
|
69
|
-
def version_file_edit(member)
|
|
75
|
+
def version_file_edit(member, member_target_version)
|
|
70
76
|
source = File.read(member.version_file)
|
|
71
77
|
node = version_string_node(source, member.version_file)
|
|
72
78
|
current = node.unescaped
|
|
73
|
-
return nil if current ==
|
|
79
|
+
return nil if current == member_target_version
|
|
74
80
|
|
|
75
|
-
replacement = quote_like(node.location.slice,
|
|
81
|
+
replacement = quote_like(node.location.slice, member_target_version)
|
|
76
82
|
file_edit(member.version_file, source, node.location.start_offset, node.location.end_offset, replacement)
|
|
77
83
|
end
|
|
78
84
|
|
|
@@ -131,14 +137,70 @@ module Kettle
|
|
|
131
137
|
raise Error, "ambiguous family dependency #{name_node.unescaped.inspect} in #{path}" unless requirement_node.is_a?(Prism::StringNode)
|
|
132
138
|
|
|
133
139
|
current = requirement_node.unescaped
|
|
140
|
+
dependency_target_version = member_target_versions.fetch(name_node.unescaped)
|
|
134
141
|
exact_prefix = "= "
|
|
135
142
|
raise Error, "ambiguous family dependency #{name_node.unescaped.inspect} requirement #{current.inspect} in #{path}" unless current.start_with?(exact_prefix)
|
|
136
|
-
return if current == "#{exact_prefix}#{
|
|
143
|
+
return if current == "#{exact_prefix}#{dependency_target_version}"
|
|
137
144
|
|
|
138
|
-
replacement = quote_like(requirement_node.location.slice, "#{exact_prefix}#{
|
|
145
|
+
replacement = quote_like(requirement_node.location.slice, "#{exact_prefix}#{dependency_target_version}")
|
|
139
146
|
file_edit(path, source, requirement_node.location.start_offset, requirement_node.location.end_offset, replacement)
|
|
140
147
|
end
|
|
141
148
|
|
|
149
|
+
def target_version_for(member)
|
|
150
|
+
member_target_versions.fetch(member.name)
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
def resolve_target_version(member)
|
|
154
|
+
return explicit_target_version unless BUMP_TYPES.include?(target_version)
|
|
155
|
+
|
|
156
|
+
bumped_version(target_version, member.version)
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
def bumped_version(type, current_version)
|
|
160
|
+
return bumped_prerelease_version(current_version) if type == "pre"
|
|
161
|
+
|
|
162
|
+
version = Gem::Version.new(current_version)
|
|
163
|
+
segments = version.segments
|
|
164
|
+
unless segments.all? { |segment| segment.is_a?(Integer) }
|
|
165
|
+
raise Error, "cannot #{type}-bump non-numeric version #{current_version.inspect}"
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
major, minor, patch = (segments + [0, 0, 0])[0, 3]
|
|
169
|
+
case type
|
|
170
|
+
when "major"
|
|
171
|
+
"#{major + 1}.0.0"
|
|
172
|
+
when "minor"
|
|
173
|
+
"#{major}.#{minor + 1}.0"
|
|
174
|
+
when "patch"
|
|
175
|
+
"#{major}.#{minor}.#{patch + 1}"
|
|
176
|
+
end
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
def bumped_prerelease_version(current_version)
|
|
180
|
+
version = Gem::Version.new(current_version)
|
|
181
|
+
segments = version.segments
|
|
182
|
+
prerelease_index = segments.index { |segment| !segment.is_a?(Integer) }
|
|
183
|
+
raise Error, "cannot pre-bump version without prerelease segment #{current_version.inspect}" unless prerelease_index
|
|
184
|
+
|
|
185
|
+
release_core = segments[0...prerelease_index].join(".")
|
|
186
|
+
prerelease_suffix = prerelease_suffix_for(current_version, release_core)
|
|
187
|
+
"#{release_core}.#{prerelease_suffix.next}"
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
def prerelease_suffix_for(current_version, release_core)
|
|
191
|
+
prefix = "#{release_core}."
|
|
192
|
+
return string_tail(current_version, prefix.length) if current_version.start_with?(prefix)
|
|
193
|
+
|
|
194
|
+
canonical_version = Gem::Version.new(current_version).to_s
|
|
195
|
+
return string_tail(canonical_version, prefix.length) if canonical_version.start_with?(prefix)
|
|
196
|
+
|
|
197
|
+
raise Error, "cannot find prerelease segment in version #{current_version.inspect}"
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
def string_tail(value, offset)
|
|
201
|
+
value[offset, value.length - offset]
|
|
202
|
+
end
|
|
203
|
+
|
|
142
204
|
def file_edit(path, source, start_offset, end_offset, replacement)
|
|
143
205
|
{path: path, source: source, start_offset: start_offset, end_offset: end_offset, replacement: replacement}
|
|
144
206
|
end
|
data.tar.gz.sig
CHANGED
|
Binary file
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: kettle-family
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.12
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Peter H. Boling
|
|
@@ -309,10 +309,10 @@ licenses:
|
|
|
309
309
|
- AGPL-3.0-only
|
|
310
310
|
metadata:
|
|
311
311
|
homepage_uri: https://kettle-family.galtzo.com
|
|
312
|
-
source_code_uri: https://github.com/kettle-dev/kettle-family/tree/v0.1.
|
|
313
|
-
changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v0.1.
|
|
312
|
+
source_code_uri: https://github.com/kettle-dev/kettle-family/tree/v0.1.12
|
|
313
|
+
changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v0.1.12/CHANGELOG.md
|
|
314
314
|
bug_tracker_uri: https://github.com/kettle-dev/kettle-family/issues
|
|
315
|
-
documentation_uri: https://www.rubydoc.info/gems/kettle-family/0.1.
|
|
315
|
+
documentation_uri: https://www.rubydoc.info/gems/kettle-family/0.1.12
|
|
316
316
|
funding_uri: https://github.com/sponsors/pboling
|
|
317
317
|
wiki_uri: https://github.com/kettle-dev/kettle-family/wiki
|
|
318
318
|
news_uri: https://www.railsbling.com/tags/kettle-family
|
metadata.gz.sig
CHANGED
|
Binary file
|