kettle-family 1.2.86 → 1.2.87
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 +14 -1
- data/README.md +1 -1
- data/lib/kettle/family/version.rb +1 -1
- data/lib/kettle/family/workflow.rb +29 -16
- 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: 7086b3a051cb1074cba223e715123b349a3e7d4cb5f46722288e445fac66dc7c
|
|
4
|
+
data.tar.gz: e67273a3a81b3a2b8a471357715849f88edb5bcc93c22dc8d8ed3d2b98a20aad
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 225bf1edf702b9012649f4cd6a754a05bfbcec584c2bd2557a786a8b74be74991a63fc6e252902fdd42960bf3bf1b5ad1d3ad111e12d192a4ff11a6749dd5418
|
|
7
|
+
data.tar.gz: 3534c07147cf99302f3afdb23bad476335a4d8c7fba7ac9bf2e83db2895a242e0fb4802ecd3209bad259c7229d6b8cc1dd35f698e18fa40d8f2b17f7c9be2158
|
checksums.yaml.gz.sig
CHANGED
|
Binary file
|
data/CHANGELOG.md
CHANGED
|
@@ -30,6 +30,17 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
30
30
|
|
|
31
31
|
### Security
|
|
32
32
|
|
|
33
|
+
## [1.2.87] - 2026-09-06
|
|
34
|
+
|
|
35
|
+
- TAG: [v1.2.87][1.2.87t]
|
|
36
|
+
- COVERAGE: 93.10% -- 5813/6244 lines in 34 files
|
|
37
|
+
- BRANCH COVERAGE: 76.17% -- 2356/3093 branches in 34 files
|
|
38
|
+
- 31.79% documented
|
|
39
|
+
|
|
40
|
+
### Fixed
|
|
41
|
+
|
|
42
|
+
- Allow template-managed local lockfiles and modular Gemfiles to continue a template run without autostashing.
|
|
43
|
+
|
|
33
44
|
## [1.2.86] - 2026-09-06
|
|
34
45
|
|
|
35
46
|
- TAG: [v1.2.86][1.2.86t]
|
|
@@ -2538,7 +2549,9 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
2538
2549
|
- Fixed CI load failures on engines without compatible `pty` support by falling back to Open3 for interactive release commands.
|
|
2539
2550
|
- Fixed Ruby 3.2 version-bump support by loading Prism lazily and wiring the Prism gem only for MRI versions that need it.
|
|
2540
2551
|
|
|
2541
|
-
[Unreleased]: https://github.com/kettle-dev/kettle-family/compare/v1.2.
|
|
2552
|
+
[Unreleased]: https://github.com/kettle-dev/kettle-family/compare/v1.2.87...HEAD
|
|
2553
|
+
[1.2.87]: https://github.com/kettle-dev/kettle-family/compare/v1.2.86...v1.2.87
|
|
2554
|
+
[1.2.87t]: https://github.com/kettle-dev/kettle-family/releases/tag/v1.2.87
|
|
2542
2555
|
[1.2.86]: https://github.com/kettle-dev/kettle-family/compare/v1.2.85...v1.2.86
|
|
2543
2556
|
[1.2.86t]: https://github.com/kettle-dev/kettle-family/releases/tag/v1.2.86
|
|
2544
2557
|
[1.2.85]: https://github.com/kettle-dev/kettle-family/compare/v1.2.84...v1.2.85
|
data/README.md
CHANGED
|
@@ -1081,7 +1081,7 @@ Thanks for RTFM. ☺️
|
|
|
1081
1081
|
[📌gitmoji]: https://gitmoji.dev
|
|
1082
1082
|
[📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
|
|
1083
1083
|
[🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
|
|
1084
|
-
[🧮kloc-img]: https://img.shields.io/badge/KLOC-6.
|
|
1084
|
+
[🧮kloc-img]: https://img.shields.io/badge/KLOC-6.244-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
|
|
1085
1085
|
[🔐security]: https://github.com/kettle-dev/kettle-family/blob/main/SECURITY.md
|
|
1086
1086
|
[🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
|
|
1087
1087
|
[📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
|
|
@@ -5,7 +5,7 @@ module Kettle
|
|
|
5
5
|
# Version namespace for this gem.
|
|
6
6
|
module Version
|
|
7
7
|
# Current gem version.
|
|
8
|
-
VERSION = "1.2.
|
|
8
|
+
VERSION = "1.2.87"
|
|
9
9
|
end
|
|
10
10
|
# Current gem version exposed at the traditional constant location.
|
|
11
11
|
VERSION = Version::VERSION # Traditional Constant Location
|
|
@@ -60,6 +60,7 @@ module Kettle
|
|
|
60
60
|
"bupb" => %w[bundle update --bundler]
|
|
61
61
|
}.freeze
|
|
62
62
|
TEMPLATE_AUTOSTASH_ALLOWED_DIRECTORIES = %w[lib spec test].freeze
|
|
63
|
+
TEMPLATE_MANAGED_DIRTY_PATH_PATTERN = %r{(?:\A|/)(?:Gemfile\.lock|Appraisal\.root\.gemfile\.lock|\.structuredmerge/kettle-jem\.lock|gemfiles/modular/[^/]+_local\.gemfile)\z}
|
|
63
64
|
PRE_TEMPLATE_BOOTSTRAP_GEMS = %w[nomono kettle-dev].freeze
|
|
64
65
|
GIT_SYNC_COMMANDS = {
|
|
65
66
|
"push" => [["push", %w[git push]]],
|
|
@@ -266,20 +267,23 @@ module Kettle
|
|
|
266
267
|
break
|
|
267
268
|
end
|
|
268
269
|
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
270
|
+
stashable_paths = template_autostashable_dirty_paths(dirty_paths)
|
|
271
|
+
if stashable_paths.any?
|
|
272
|
+
stash_result = runner.call(
|
|
273
|
+
member: member,
|
|
274
|
+
phase: "template_autostash",
|
|
275
|
+
command: ["sh", "-lc", template_autostash_command(member, stashable_paths)]
|
|
276
|
+
)
|
|
277
|
+
results << stash_result
|
|
278
|
+
break unless stash_result.ok?
|
|
276
279
|
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
280
|
+
stash_ref = stash_result.stdout.to_s.lines.last.to_s.strip
|
|
281
|
+
if stash_ref.empty?
|
|
282
|
+
results << template_sync_failure_result(member, "could not determine the temporary template autostash reference")
|
|
283
|
+
break
|
|
284
|
+
end
|
|
285
|
+
stashes << {member: member, ref: stash_ref}
|
|
281
286
|
end
|
|
282
|
-
stashes << {member: member, ref: stash_ref}
|
|
283
287
|
end
|
|
284
288
|
|
|
285
289
|
upstream = git_upstream_for(member)
|
|
@@ -304,7 +308,11 @@ module Kettle
|
|
|
304
308
|
def template_blocking_dirty_paths(dirty_paths)
|
|
305
309
|
return dirty_paths unless autostash
|
|
306
310
|
|
|
307
|
-
dirty_paths.reject { |path| template_autostash_allowed_path?(path) }
|
|
311
|
+
dirty_paths.reject { |path| template_autostash_allowed_path?(path) || template_managed_dirty_path?(path) }
|
|
312
|
+
end
|
|
313
|
+
|
|
314
|
+
def template_autostashable_dirty_paths(dirty_paths)
|
|
315
|
+
dirty_paths.select { |path| template_autostash_allowed_path?(path) }
|
|
308
316
|
end
|
|
309
317
|
|
|
310
318
|
def template_autostash_allowed_path?(status_line)
|
|
@@ -312,6 +320,10 @@ module Kettle
|
|
|
312
320
|
TEMPLATE_AUTOSTASH_ALLOWED_DIRECTORIES.include?(path.split("/", 2).first)
|
|
313
321
|
end
|
|
314
322
|
|
|
323
|
+
def template_managed_dirty_path?(status_line)
|
|
324
|
+
GitStatus.path_from_status_line(status_line).match?(TEMPLATE_MANAGED_DIRTY_PATH_PATTERN)
|
|
325
|
+
end
|
|
326
|
+
|
|
315
327
|
def restore_template_autostashes(stashes, runner:, preserve_members: [])
|
|
316
328
|
preserve_members = Array(preserve_members).map(&:to_s)
|
|
317
329
|
stashes.reverse_each.map do |stash|
|
|
@@ -467,9 +479,10 @@ module Kettle
|
|
|
467
479
|
status.success? ? stdout.strip : nil
|
|
468
480
|
end
|
|
469
481
|
|
|
470
|
-
def template_autostash_command(member)
|
|
482
|
+
def template_autostash_command(member, paths)
|
|
471
483
|
label = "kettle-family-template-#{member.name}-#{Process.pid}-#{Time.now.to_i}"
|
|
472
|
-
|
|
484
|
+
pathspecs = paths.map { |path| Shellwords.escape(GitStatus.path_from_status_line(path)) }.join(" ")
|
|
485
|
+
"git stash push --include-untracked --message #{Shellwords.escape(label)} -- #{pathspecs} && " \
|
|
473
486
|
"ref=$(git stash list -1 --format=%gd) && " \
|
|
474
487
|
"git checkout \"$ref\" -- .tool-versions 2>/dev/null || true; " \
|
|
475
488
|
"for path in mise.toml .mise.toml; do " \
|
|
@@ -479,7 +492,7 @@ module Kettle
|
|
|
479
492
|
|
|
480
493
|
def template_dirty_worktree_result(member, dirty_paths)
|
|
481
494
|
stash_guidance = if autostash
|
|
482
|
-
"automatic template autostash is limited to lib/, spec/, and test/ files"
|
|
495
|
+
"automatic template autostash is limited to lib/, spec/, and test/ files; generated lockfiles and modular *_local.gemfile files are left in place"
|
|
483
496
|
else
|
|
484
497
|
"automatic template autostash is disabled"
|
|
485
498
|
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: 1.2.
|
|
4
|
+
version: 1.2.87
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Peter H. Boling
|
|
@@ -442,10 +442,10 @@ licenses:
|
|
|
442
442
|
- AGPL-3.0-only
|
|
443
443
|
metadata:
|
|
444
444
|
homepage_uri: https://kettle-family.galtzo.com
|
|
445
|
-
source_code_uri: https://github.com/kettle-dev/kettle-family/tree/v1.2.
|
|
446
|
-
changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v1.2.
|
|
445
|
+
source_code_uri: https://github.com/kettle-dev/kettle-family/tree/v1.2.87
|
|
446
|
+
changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v1.2.87/CHANGELOG.md
|
|
447
447
|
bug_tracker_uri: https://github.com/kettle-dev/kettle-family/issues
|
|
448
|
-
documentation_uri: https://www.rubydoc.info/gems/kettle-family/1.2.
|
|
448
|
+
documentation_uri: https://www.rubydoc.info/gems/kettle-family/1.2.87
|
|
449
449
|
funding_uri: https://github.com/sponsors/pboling
|
|
450
450
|
wiki_uri: https://github.com/kettle-dev/kettle-family/wiki
|
|
451
451
|
news_uri: https://www.railsbling.com/tags/kettle-family
|
metadata.gz.sig
CHANGED
|
Binary file
|