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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 21a652aea8226a4e77e30eec15208ab8337acb1c588828c2513d74b73d83186b
4
- data.tar.gz: fe8cefdd96d256b3a0c08db1eab5ff75c03a2afe7f70d1a8ca3778d9b1609444
3
+ metadata.gz: 7086b3a051cb1074cba223e715123b349a3e7d4cb5f46722288e445fac66dc7c
4
+ data.tar.gz: e67273a3a81b3a2b8a471357715849f88edb5bcc93c22dc8d8ed3d2b98a20aad
5
5
  SHA512:
6
- metadata.gz: 491966653b36eb913a447b028de8f68dc7bf3f9e8291bea3205d95083d7d7173fe310eb8f81f456793a7f4f86650229ac2b940ef6f29bb0a7620c949c6444dbd
7
- data.tar.gz: 98e477f02f7d1d7dbfd142108430061d11061e215702544cb304e0a126403ec2fc15aa41f89b0431436cfe6b0c53c1dcc7eb60239805d8a0d4c384bd2558985d
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.86...HEAD
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.236-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
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.86"
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
- stash_result = runner.call(
270
- member: member,
271
- phase: "template_autostash",
272
- command: ["sh", "-lc", template_autostash_command(member)]
273
- )
274
- results << stash_result
275
- break unless stash_result.ok?
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
- stash_ref = stash_result.stdout.to_s.lines.last.to_s.strip
278
- if stash_ref.empty?
279
- results << template_sync_failure_result(member, "could not determine the temporary template autostash reference")
280
- break
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
- "git stash push --include-untracked --message #{Shellwords.escape(label)} && " \
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.86
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.86
446
- changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v1.2.86/CHANGELOG.md
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.86
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