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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +38 -1
- data/README.md +1 -1
- data/lib/kettle/drift/duplicate_line_validator.rb +3 -3
- data/lib/kettle/drift/serializer.rb +25 -4
- data/lib/kettle/drift/version.rb +1 -1
- data/lib/kettle/drift.rb +10 -8
- data.tar.gz.sig +0 -0
- metadata +17 -17
- 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: d70a155dafab4151668f8bd2d870e2aef516f7c0a10d2af6e689c2ba5ef9a405
|
|
4
|
+
data.tar.gz: 33510c05d08a7ebbdc11a18607914f3c8fe741cabfbf43bdd342f21b2aeb7a48
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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.
|
|
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.
|
|
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(
|
|
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 =
|
|
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 =
|
|
78
|
-
absolute_file =
|
|
79
|
-
|
|
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
|
-
|
|
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
|
data/lib/kettle/drift/version.rb
CHANGED
|
@@ -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.
|
|
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(
|
|
86
|
-
|
|
87
|
-
next
|
|
88
|
-
next
|
|
89
|
-
|
|
90
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
296
|
-
changelog_uri: https://github.com/kettle-dev/kettle-drift/blob/v1.0.
|
|
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.
|
|
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.
|
|
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
|