kettle-drift 1.0.14 → 1.0.15

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: 23e879797f1c1d7c8a61135b2d845b9c6911fc1d6c5eec4a7baa7128f80d3ebc
4
- data.tar.gz: ee0d94f285a7589c6dab6a7cebd9c27a3ad4b87f3374536ffc3562190c7c5801
3
+ metadata.gz: d70a155dafab4151668f8bd2d870e2aef516f7c0a10d2af6e689c2ba5ef9a405
4
+ data.tar.gz: 33510c05d08a7ebbdc11a18607914f3c8fe741cabfbf43bdd342f21b2aeb7a48
5
5
  SHA512:
6
- metadata.gz: 2aad73a71625265d883885adf52d8b7bd74ec0c651ec6637edafe39d5a104a7e37700b5a68868da8d8323e643ba3afde8125b763bf75b14da10578dd2d0249e2
7
- data.tar.gz: a6e0a676d4127de1cac748262ff3f02f4a69527190b5a323b0cf9ddbdab04ba7dc72566d0b4c576cd3c89e4df6b2441b24e347143adacdb315b78e30cc6f72ff
6
+ metadata.gz: e02f71937a093bf9dcdea7e36eee0dde61ceb7560296ba5c9519c8a7fb00d103b324908bf32aa10b623e2fd748d2982fd78445280a6607cfc616ad4d59552901
7
+ data.tar.gz: e6b223fdce7e0e8f32ca9fa2414aeeee0330d69f190f044200465b17ce43526602fcf1cd2ed2f3901a6358cae13b680f35f43f4bbe7c58f0fed749a5958cfdc9
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -30,6 +30,41 @@ Please file a bug if you notice a violation of semantic versioning.
30
30
 
31
31
  ### Security
32
32
 
33
+ ## [1.0.15] - 2026-09-28
34
+
35
+ - TAG: [v1.0.15][1.0.15t]
36
+ - COVERAGE: 81.69% -- 455/557 lines in 14 files
37
+ - BRANCH COVERAGE: 67.42% -- 149/221 branches in 14 files
38
+ - 36.79% documented
39
+
40
+ ### Added
41
+
42
+ - kettle-jem-template-20260913-001 - Templating now also surfaces a review
43
+ entry in `dependency_conflicts.resolve` when a direct development
44
+ dependency doesn't support one or more of this project's declared
45
+ `engines:` and has no template-managed modular home (e.g. `sqlite3` on
46
+ `jruby`). Review each entry and pick a resolution per the project's own
47
+ engine support needs.
48
+
49
+ ### Changed
50
+
51
+ - [kc] kettle-jem/prepare: updated 12 project files:
52
+ - dependencies (12)
53
+
54
+ - [kc] kettle-jem/template: updated 22 project files:
55
+ - code and tests (2)
56
+ - dependencies (1)
57
+ - other (1)
58
+ - workflows (18)
59
+
60
+ ### Fixed
61
+
62
+ - Handle Windows path spellings when identifying template-managed drift files.
63
+
64
+ - Keep drift lockfile paths project-relative across filesystem path aliases.
65
+
66
+ - Resolve existing ancestor aliases when serializing paths for files not yet created.
67
+
33
68
  ## [1.0.14] - 2026-09-14
34
69
 
35
70
  - TAG: [v1.0.14][1.0.14t]
@@ -307,7 +342,9 @@ Please file a bug if you notice a violation of semantic versioning.
307
342
 
308
343
  - Initial release
309
344
 
310
- [Unreleased]: https://github.com/kettle-dev/kettle-drift/compare/v1.0.14...HEAD
345
+ [Unreleased]: https://github.com/kettle-dev/kettle-drift/compare/v1.0.15...HEAD
346
+ [1.0.15]: https://github.com/kettle-dev/kettle-drift/compare/v1.0.14...v1.0.15
347
+ [1.0.15t]: https://github.com/kettle-dev/kettle-drift/releases/tag/v1.0.15
311
348
  [1.0.14]: https://github.com/kettle-dev/kettle-drift/compare/v1.0.13...v1.0.14
312
349
  [1.0.14t]: https://github.com/kettle-dev/kettle-drift/releases/tag/v1.0.14
313
350
  [1.0.13]: https://github.com/kettle-dev/kettle-drift/compare/v1.0.12...v1.0.13
data/README.md CHANGED
@@ -445,7 +445,7 @@ Thanks for RTFM. ☺️
445
445
  [📌gitmoji]: https://gitmoji.dev
446
446
  [📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
447
447
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
448
- [🧮kloc-img]: https://img.shields.io/badge/KLOC-0.542-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
448
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-0.557-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
449
449
  [🔐security]: https://github.com/kettle-dev/kettle-drift/blob/main/SECURITY.md
450
450
  [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
451
451
  [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
@@ -179,11 +179,11 @@ module Kettle
179
179
  return [] unless File.directory?(template_dir)
180
180
 
181
181
  managed = []
182
- Dir.glob(File.join(template_dir, "**", "*"), File::FNM_DOTMATCH).each do |src|
182
+ Dir.glob("**/*", File::FNM_DOTMATCH, base: template_dir).each do |rel|
183
+ src = File.join(template_dir, rel)
183
184
  next unless File.file?(src)
184
185
 
185
- rel = src.sub(%r{^#{Regexp.escape(template_dir)}/?}, "")
186
- rel = rel.sub(/\.example\z/, "")
186
+ rel = rel.delete_suffix(".example")
187
187
  next if rel.include?(".no-osc")
188
188
 
189
189
  dest = File.join(project_root, rel)
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "json"
4
+ require "pathname"
4
5
 
5
6
  module Kettle
6
7
  module Drift
@@ -74,11 +75,31 @@ module Kettle
74
75
  file = path.to_s
75
76
  return file if project_root.to_s.strip.empty?
76
77
 
77
- root = File.expand_path(project_root.to_s)
78
- absolute_file = File.expand_path(file)
79
- return file unless absolute_file == root || absolute_file.start_with?("#{root}/")
78
+ root = canonical_path(project_root)
79
+ absolute_file = canonical_path(file)
80
+ relative = Pathname(absolute_file).relative_path_from(Pathname(root))
81
+ return file if relative.each_filename.first == ".."
80
82
 
81
- absolute_file.delete_prefix("#{root}/").delete_prefix(root)
83
+ relative.to_s.tr("\\", "/").delete_prefix("./")
84
+ rescue ArgumentError
85
+ file
86
+ end
87
+
88
+ def canonical_path(path)
89
+ expanded = File.expand_path(path.to_s)
90
+ existing = expanded
91
+ suffix = []
92
+ until File.exist?(existing) || File.symlink?(existing)
93
+ parent = File.dirname(existing)
94
+ return expanded if parent == existing
95
+
96
+ suffix.unshift(File.basename(existing))
97
+ existing = parent
98
+ end
99
+
100
+ suffix.reduce(File.realpath(existing)) { |resolved, component| File.join(resolved, component) }
101
+ rescue SystemCallError
102
+ expanded
82
103
  end
83
104
  end
84
105
  end
@@ -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.0.14"
8
+ VERSION = "1.0.15"
9
9
  end
10
10
  # Current gem version exposed at the traditional constant location.
11
11
  VERSION = Version::VERSION # Traditional Constant Location
data/lib/kettle/drift.rb CHANGED
@@ -82,14 +82,16 @@ module Kettle
82
82
  def target_files(project_root:, template_dir: nil)
83
83
  return Kettle::Drift::DuplicateLineValidator.template_managed_files(project_root: project_root, template_dir: template_dir) if template_dir
84
84
 
85
- Dir.glob(File.join(project_root, "**", "*"), File::FNM_DOTMATCH).select do |path|
86
- next false unless File.file?(path)
87
- next false if EXCLUDED_FILE_EXTENSIONS.include?(File.extname(path).downcase)
88
- next false if dependency_lockfile?(path)
89
-
90
- relative = path.delete_prefix("#{project_root}/")
91
- segments = relative.split("/")
92
- segments.none? { |segment| segment.start_with?(".") || EXCLUDED_PATH_SEGMENTS.include?(segment) }
85
+ Dir.glob("**/*", File::FNM_DOTMATCH, base: project_root).filter_map do |relative|
86
+ path = File.join(project_root, relative)
87
+ next unless File.file?(path)
88
+ next if EXCLUDED_FILE_EXTENSIONS.include?(File.extname(path).downcase)
89
+ next if dependency_lockfile?(path)
90
+
91
+ segments = relative.tr("\\", "/").split("/")
92
+ next unless segments.none? { |segment| segment.start_with?(".") || EXCLUDED_PATH_SEGMENTS.include?(segment) }
93
+
94
+ path
93
95
  end
94
96
  end
95
97
 
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kettle-drift
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.14
4
+ version: 1.0.15
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter H. Boling
@@ -66,7 +66,7 @@ dependencies:
66
66
  version: '3.1'
67
67
  - - ">="
68
68
  - !ruby/object:Gem::Version
69
- version: 3.1.1
69
+ version: 3.1.5
70
70
  type: :development
71
71
  prerelease: false
72
72
  version_requirements: !ruby/object:Gem::Requirement
@@ -76,7 +76,7 @@ dependencies:
76
76
  version: '3.1'
77
77
  - - ">="
78
78
  - !ruby/object:Gem::Version
79
- version: 3.1.1
79
+ version: 3.1.5
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: bundler-audit
82
82
  requirement: !ruby/object:Gem::Requirement
@@ -154,7 +154,7 @@ dependencies:
154
154
  version: '3.2'
155
155
  - - ">="
156
156
  - !ruby/object:Gem::Version
157
- version: 3.2.3
157
+ version: 3.2.4
158
158
  type: :development
159
159
  prerelease: false
160
160
  version_requirements: !ruby/object:Gem::Requirement
@@ -164,7 +164,7 @@ dependencies:
164
164
  version: '3.2'
165
165
  - - ">="
166
166
  - !ruby/object:Gem::Version
167
- version: 3.2.3
167
+ version: 3.2.4
168
168
  - !ruby/object:Gem::Dependency
169
169
  name: kettle-test
170
170
  requirement: !ruby/object:Gem::Requirement
@@ -174,7 +174,7 @@ dependencies:
174
174
  version: '2.0'
175
175
  - - ">="
176
176
  - !ruby/object:Gem::Version
177
- version: 2.0.22
177
+ version: 2.0.23
178
178
  type: :development
179
179
  prerelease: false
180
180
  version_requirements: !ruby/object:Gem::Requirement
@@ -184,7 +184,7 @@ dependencies:
184
184
  version: '2.0'
185
185
  - - ">="
186
186
  - !ruby/object:Gem::Version
187
- version: 2.0.22
187
+ version: 2.0.23
188
188
  - !ruby/object:Gem::Dependency
189
189
  name: turbo_tests2
190
190
  requirement: !ruby/object:Gem::Requirement
@@ -194,7 +194,7 @@ dependencies:
194
194
  version: '3.2'
195
195
  - - ">="
196
196
  - !ruby/object:Gem::Version
197
- version: 3.2.7
197
+ version: 3.2.12
198
198
  type: :development
199
199
  prerelease: false
200
200
  version_requirements: !ruby/object:Gem::Requirement
@@ -204,7 +204,7 @@ dependencies:
204
204
  version: '3.2'
205
205
  - - ">="
206
206
  - !ruby/object:Gem::Version
207
- version: 3.2.7
207
+ version: 3.2.12
208
208
  - !ruby/object:Gem::Dependency
209
209
  name: ruby-progressbar
210
210
  requirement: !ruby/object:Gem::Requirement
@@ -228,7 +228,7 @@ dependencies:
228
228
  version: '1.0'
229
229
  - - ">="
230
230
  - !ruby/object:Gem::Version
231
- version: 1.0.8
231
+ version: 1.0.9
232
232
  type: :development
233
233
  prerelease: false
234
234
  version_requirements: !ruby/object:Gem::Requirement
@@ -238,7 +238,7 @@ dependencies:
238
238
  version: '1.0'
239
239
  - - ">="
240
240
  - !ruby/object:Gem::Version
241
- version: 1.0.8
241
+ version: 1.0.9
242
242
  - !ruby/object:Gem::Dependency
243
243
  name: gitmoji-regex
244
244
  requirement: !ruby/object:Gem::Requirement
@@ -248,7 +248,7 @@ dependencies:
248
248
  version: '2.0'
249
249
  - - ">="
250
250
  - !ruby/object:Gem::Version
251
- version: 2.0.12
251
+ version: 2.0.13
252
252
  type: :development
253
253
  prerelease: false
254
254
  version_requirements: !ruby/object:Gem::Requirement
@@ -258,7 +258,7 @@ dependencies:
258
258
  version: '2.0'
259
259
  - - ">="
260
260
  - !ruby/object:Gem::Version
261
- version: 2.0.12
261
+ version: 2.0.13
262
262
  description: "\U0001F372 Kettle::Drift tracks repeated adjacent-line chunks that usually
263
263
  signal template drift or copy/paste corruption."
264
264
  email:
@@ -292,10 +292,10 @@ licenses:
292
292
  - AGPL-3.0-only
293
293
  metadata:
294
294
  homepage_uri: https://kettle-drift.galtzo.com
295
- source_code_uri: https://github.com/kettle-dev/kettle-drift/tree/v1.0.14
296
- changelog_uri: https://github.com/kettle-dev/kettle-drift/blob/v1.0.14/CHANGELOG.md
295
+ source_code_uri: https://github.com/kettle-dev/kettle-drift/tree/v1.0.15
296
+ changelog_uri: https://github.com/kettle-dev/kettle-drift/blob/v1.0.15/CHANGELOG.md
297
297
  bug_tracker_uri: https://github.com/kettle-dev/kettle-drift/issues
298
- documentation_uri: https://www.rubydoc.info/gems/kettle-drift/1.0.14
298
+ documentation_uri: https://www.rubydoc.info/gems/kettle-drift/1.0.15
299
299
  funding_uri: https://github.com/sponsors/pboling
300
300
  wiki_uri: https://github.com/kettle-dev/kettle-drift/wiki
301
301
  news_uri: https://www.railsbling.com/tags/kettle-drift
@@ -326,7 +326,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
326
326
  - !ruby/object:Gem::Version
327
327
  version: '0'
328
328
  requirements: []
329
- rubygems_version: 4.0.17
329
+ rubygems_version: 4.0.20
330
330
  specification_version: 4
331
331
  summary: "\U0001F372 Detect duplicated adjacent lines introduced by template drift."
332
332
  test_files: []
metadata.gz.sig CHANGED
Binary file