kettle-drift 1.0.0 → 1.0.2
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 +30 -3
- data/CONTRIBUTING.md +21 -0
- data/README.md +15 -19
- data/SECURITY.md +1 -1
- data/lib/kettle/drift/cli.rb +2 -2
- data/lib/kettle/drift/plugin.rb +49 -3
- data/lib/kettle/drift/version.rb +1 -1
- data/lib/kettle/drift.rb +12 -9
- data/sig/kettle/drift/version.rbs +0 -1
- data.tar.gz.sig +3 -3
- metadata +39 -13
- 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: d5fcd44d3230a87f30015bf2a4a8712f957fae6b16d3224bf944ff5ab8a1205e
|
|
4
|
+
data.tar.gz: 1d32fbb029578f6e803eb386228f0824a00da3b14c7eff442fd14225806edc58
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 07d22f1a6ff858603dcb43e58b7398ce3b87f70349a876b4da8a89ddba3db535dc0dcd84dcef5f877fa2e8620fa478f1f435d42617f5dc52cbbc3f10c07dd30d
|
|
7
|
+
data.tar.gz: ae0d7068450c4c95c037238164fa4b6aaa584e5c3a3ad4d93bd28504e92e77705b894675494c0bacd329df860de2186728ee7b59d8b4798f7ce3e63bf48ac215
|
checksums.yaml.gz.sig
CHANGED
|
Binary file
|
data/CHANGELOG.md
CHANGED
|
@@ -28,10 +28,33 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
28
28
|
|
|
29
29
|
### Fixed
|
|
30
30
|
|
|
31
|
+
### Security
|
|
32
|
+
|
|
33
|
+
## [1.0.2] - 2026-06-03
|
|
34
|
+
|
|
35
|
+
- TAG: [v1.0.2][1.0.2t]
|
|
36
|
+
- COVERAGE: 83.98% -- 430/512 lines in 13 files
|
|
37
|
+
- BRANCH COVERAGE: 65.84% -- 133/202 branches in 13 files
|
|
38
|
+
- 33.01% documented
|
|
39
|
+
|
|
40
|
+
### Fixed
|
|
41
|
+
|
|
42
|
+
- Suppressed warning/report output when current duplicate drift exactly matches
|
|
43
|
+
the checked-in lockfile baseline.
|
|
44
|
+
|
|
45
|
+
## [1.0.1] - 2026-05-28
|
|
46
|
+
|
|
47
|
+
- TAG: [v1.0.1][1.0.1t]
|
|
48
|
+
- COVERAGE: 84.12% -- 429/510 lines in 13 files
|
|
49
|
+
- BRANCH COVERAGE: 65.84% -- 133/202 branches in 13 files
|
|
50
|
+
- 32.35% documented
|
|
51
|
+
|
|
52
|
+
### Fixed
|
|
53
|
+
|
|
31
54
|
- Prevented the Rakefile template hook from adding a second trailing newline
|
|
32
55
|
when refreshing the kettle-drift task block.
|
|
33
|
-
|
|
34
|
-
|
|
56
|
+
- Inserted the kettle-drift Rakefile task block after the complete guarded
|
|
57
|
+
`kettle-dev` block so templating does not corrupt destination Rakefiles.
|
|
35
58
|
|
|
36
59
|
## [1.0.0] - 2026-05-24
|
|
37
60
|
|
|
@@ -44,6 +67,10 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
44
67
|
|
|
45
68
|
- Initial release
|
|
46
69
|
|
|
47
|
-
[Unreleased]: https://github.com/kettle-rb/kettle-drift/compare/v1.0.
|
|
70
|
+
[Unreleased]: https://github.com/kettle-rb/kettle-drift/compare/v1.0.2...HEAD
|
|
71
|
+
[1.0.2]: https://github.com/kettle-rb/kettle-drift/compare/v1.0.1...v1.0.2
|
|
72
|
+
[1.0.2t]: https://github.com/kettle-rb/kettle-drift/releases/tag/v1.0.2
|
|
73
|
+
[1.0.1]: https://github.com/kettle-rb/kettle-drift/compare/v1.0.0...v1.0.1
|
|
74
|
+
[1.0.1t]: https://github.com/kettle-rb/kettle-drift/releases/tag/v1.0.1
|
|
48
75
|
[1.0.0]: https://github.com/kettle-rb/kettle-drift/compare/bd038cd14dc083203b58f8fee359e63d6feeaaca...v1.0.0
|
|
49
76
|
[1.0.0t]: https://github.com/kettle-rb/kettle-drift/releases/tag/v1.0.0
|
data/CONTRIBUTING.md
CHANGED
|
@@ -102,11 +102,32 @@ Git hooks and commit message helpers (exe/kettle-commit-msg)
|
|
|
102
102
|
- GIT_HOOK_FOOTER_SENTINEL: Required when footer append is enabled — a unique first-line sentinel to prevent duplicates
|
|
103
103
|
- GIT_HOOK_FOOTER_APPEND_DEBUG: Extra debug output in the footer template (true/false)
|
|
104
104
|
|
|
105
|
+
Git diff driver setup
|
|
106
|
+
- Local setup writes repository `.gitattributes` entries and local Git `diff.smorg-*` command config so this checkout uses StructuredMerge semantic diffs.
|
|
107
|
+
- Global setup registers `diff.smorg-*` commands once in the user Git config; use it when you work across several StructuredMerge-enabled repositories.
|
|
108
|
+
- Include-file setup writes `.git/smorg/config` and includes it from local Git config, keeping command registrations out of the repository files.
|
|
109
|
+
- Git hosting forges generally ignore external diff drivers, so pull request views may still show raw textual diffs even when local `git diff` uses semantic drivers.
|
|
110
|
+
|
|
111
|
+
```console
|
|
112
|
+
K_JEM_TEMPLATING=true bundle exec kettle-jem install
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Troubleshooting Git diffs
|
|
116
|
+
- Use `git diff --no-ext-diff` to compare against Git's built-in diff output.
|
|
117
|
+
- Use `git diff --no-textconv` when a textconv projection obscures the raw file bytes you need to inspect.
|
|
118
|
+
- If Git reports a missing `smorg-*` executable, rerun `bundle install` and the setup command above, then check `git config --local --get-regexp '^diff\.smorg-'`.
|
|
119
|
+
- To remove managed local entries, run `K_JEM_TEMPLATING=true bundle exec kettle-jem install --undo`; remove global command registrations with `git config --global --unset-all diff.smorg-ruby.command`.
|
|
120
|
+
|
|
105
121
|
For a quick starting point, this repository’s `mise.toml` defines the shared defaults, and `.env.local` can override them locally. Copy `.env.local.example` to `.env.local`, use `KEY=value` lines, and either activate `mise` in your shell or run commands through `mise exec -C /path/to/project -- ...`.
|
|
106
122
|
|
|
107
123
|
## Appraisals
|
|
108
124
|
|
|
109
125
|
From time to time the [appraisal2][🚎appraisal2] gemfiles in `gemfiles/` will need to be updated.
|
|
126
|
+
Generated appraisal and CI workflow floors are controlled by `ruby.test_minimum`
|
|
127
|
+
in `.structuredmerge/kettle-jem.yml`; this project was templated with `ruby.test_minimum: 3.2.0`.
|
|
128
|
+
That value describes the lowest Ruby version expected to run the test/development
|
|
129
|
+
toolchain, and it may be higher than the gemspec runtime floor.
|
|
130
|
+
|
|
110
131
|
They are created and updated with the commands:
|
|
111
132
|
|
|
112
133
|
```console
|
data/README.md
CHANGED
|
@@ -1,19 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
<a href="https://github.com/kettle-rb"><img alt="kettle-rb Logo by Aboling0, CC BY-SA 4.0" src="https://logos.galtzo.com/assets/images/kettle-rb/avatar-128px.svg" width="12%" align="right"/></a> <a href="https://github.com/kettle-rb/kettle-drift"><img alt="kettle-drift Logo by Aboling0, CC BY-SA 4.0" src="https://logos.galtzo.com/assets/images/kettle-rb/kettle-drift/avatar-128px.svg" width="12%" align="right"/></a>
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
[🖼️galtzo-floss]: https://discord.gg/3qme4XHNKN
|
|
5
|
-
[🖼️ruby-lang-i]: https://logos.galtzo.com/assets/images/ruby-lang/avatar-128px.svg
|
|
6
|
-
[🖼️ruby-lang]: https://www.ruby-lang.org/
|
|
7
|
-
[🖼️kettle-rb-i]: https://logos.galtzo.com/assets/images/kettle-rb/avatar-128px.svg
|
|
8
|
-
[🖼️kettle-rb]: https://github.com/kettle-rb
|
|
9
|
-
[🖼️kettle-rb-kettle-drift-i]: https://logos.galtzo.com/assets/images/kettle-rb/kettle-drift/avatar-128px.svg
|
|
10
|
-
[🖼️kettle-rb-kettle-drift]: https://github.com/kettle-rb/kettle-drift
|
|
3
|
+
# 🍲 Kettle::Drift
|
|
11
4
|
|
|
12
|
-
|
|
5
|
+
[![Version][👽versioni]][👽version] [![GitHub tag (latest SemVer)][⛳️tag-img]][⛳️tag] [![License: AGPL-3.0-only][📄license-img]][📄license] [![Downloads Rank][👽dl-ranki]][👽dl-rank] [![CodeCov Test Coverage][🏀codecovi]][🏀codecov] [![Coveralls Test Coverage][🏀coveralls-img]][🏀coveralls] [![QLTY Test Coverage][🏀qlty-covi]][🏀qlty-cov] [![QLTY Maintainability][🏀qlty-mnti]][🏀qlty-mnt] [![CI Heads][🚎3-hd-wfi]][🚎3-hd-wf] [![CI Runtime Dependencies @ HEAD][🚎12-crh-wfi]][🚎12-crh-wf] [![CI Current][🚎11-c-wfi]][🚎11-c-wf] [![CI Truffle Ruby][🚎9-t-wfi]][🚎9-t-wf] [![CI JRuby][🚎10-j-wfi]][🚎10-j-wf] [![Deps Locked][🚎13-🔒️-wfi]][🚎13-🔒️-wf] [![Deps Unlocked][🚎14-🔓️-wfi]][🚎14-🔓️-wf] [![CI Test Coverage][🚎2-cov-wfi]][🚎2-cov-wf] [![CI Style][🚎5-st-wfi]][🚎5-st-wf]
|
|
13
6
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
`if ci_badges.map(&:color).detect { it != "green"}` ☝️ [let me know][🖼️galtzo-floss], as I may have missed the [discord notification][🖼️galtzo-floss].
|
|
7
|
+
`if ci_badges.map(&:color).detect { it != "green"}` ☝️ [let me know][✉️discord-invite], as I may have missed the [discord notification][✉️discord-invite].
|
|
17
8
|
|
|
18
9
|
---
|
|
19
10
|
|
|
@@ -28,7 +19,7 @@ I've summarized my thoughts in [this blog post](https://dev.to/galtzo/hostile-ta
|
|
|
28
19
|
|
|
29
20
|
</details>
|
|
30
21
|
|
|
31
|
-
## 🌻 Synopsis
|
|
22
|
+
## 🌻 Synopsis <a href="https://discord.gg/3qme4XHNKN"><img alt="Galtzo FLOSS Logo by Aboling0, CC BY-SA 4.0" src="https://logos.galtzo.com/assets/images/galtzo-floss/avatar-128px.svg" width="8%" align="right"/></a> <a href="https://ruby-toolbox.com"><img alt="ruby-lang Logo, Yukihiro Matsumoto, Ruby Visual Identity Team, CC BY-SA 2.5" src="https://logos.galtzo.com/assets/images/ruby-lang/avatar-128px.svg" width="8%" align="right"/></a>
|
|
32
23
|
|
|
33
24
|
`kettle-drift` tracks repeated adjacent-line chunks that usually signal
|
|
34
25
|
template drift or copy/paste corruption. When it is injected into a project by
|
|
@@ -55,6 +46,10 @@ the whole repository.
|
|
|
55
46
|
### Compatibility
|
|
56
47
|
|
|
57
48
|
Compatible with MRI Ruby 3.2.0+, and concordant releases of JRuby, and TruffleRuby.
|
|
49
|
+
CI workflows and Appraisals are generated for MRI Ruby 3.2.0+.
|
|
50
|
+
This test floor is configured by `ruby.test_minimum` in `.kettle-jem.yml` and
|
|
51
|
+
may be higher than the gem's runtime compatibility floor when legacy Rubies are
|
|
52
|
+
not practical for the current toolchain.
|
|
58
53
|
|
|
59
54
|
| 🚚 _Amazing_ test matrix was brought to you by | 🔎 appraisal2 🔎 and the color 💚 green 💚 |
|
|
60
55
|
|------------------------------------------------|--------------------------------------------------------|
|
|
@@ -280,6 +275,8 @@ To say "thanks!" ☝️ Join the Discord or 👇️ send money.
|
|
|
280
275
|
|
|
281
276
|
### Please give the project a star ⭐ ♥.
|
|
282
277
|
|
|
278
|
+
Many parts of this project are actively managed by a [kettle-jem](https://github.com/structuredmerge/structuredmerge-ruby/tree/main/gems/kettle-jem) smart template utilizing [StructuredMerge.org](https://structuredmerge.org) merge contracts.
|
|
279
|
+
|
|
283
280
|
Thanks for RTFM. ☺️
|
|
284
281
|
|
|
285
282
|
[⛳liberapay-img]: https://img.shields.io/liberapay/goal/pboling.svg?logo=liberapay&color=a51611&style=flat
|
|
@@ -382,8 +379,6 @@ Thanks for RTFM. ☺️
|
|
|
382
379
|
[🏀codecovi]: https://codecov.io/gh/kettle-rb/kettle-drift/graph/badge.svg
|
|
383
380
|
[🏀coveralls]: https://coveralls.io/github/kettle-rb/kettle-drift?branch=main
|
|
384
381
|
[🏀coveralls-img]: https://coveralls.io/repos/github/kettle-rb/kettle-drift/badge.svg?branch=main
|
|
385
|
-
[🖐codeQL]: https://github.com/kettle-rb/kettle-drift/security/code-scanning
|
|
386
|
-
[🖐codeQL-img]: https://github.com/kettle-rb/kettle-drift/actions/workflows/codeql-analysis.yml/badge.svg
|
|
387
382
|
[🚎ruby-3.2-wf]: https://github.com/kettle-rb/kettle-drift/actions/workflows/ruby-3.2.yml
|
|
388
383
|
[🚎ruby-3.3-wf]: https://github.com/kettle-rb/kettle-drift/actions/workflows/ruby-3.3.yml
|
|
389
384
|
[🚎ruby-3.4-wf]: https://github.com/kettle-rb/kettle-drift/actions/workflows/ruby-3.4.yml
|
|
@@ -444,7 +439,7 @@ Thanks for RTFM. ☺️
|
|
|
444
439
|
[📌gitmoji]: https://gitmoji.dev
|
|
445
440
|
[📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
|
|
446
441
|
[🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
|
|
447
|
-
[🧮kloc-img]: https://img.shields.io/badge/KLOC-0.
|
|
442
|
+
[🧮kloc-img]: https://img.shields.io/badge/KLOC-0.512-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
|
|
448
443
|
[🔐security]: https://github.com/kettle-rb/kettle-drift/blob/main/SECURITY.md
|
|
449
444
|
[🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
|
|
450
445
|
[📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
|
|
@@ -453,6 +448,7 @@ Thanks for RTFM. ☺️
|
|
|
453
448
|
[📄license-img]: https://img.shields.io/badge/License-AGPL--3.0--only-259D6C.svg
|
|
454
449
|
[📄license-compat]: https://www.apache.org/legal/resolved.html#category-x
|
|
455
450
|
[📄license-compat-img]: https://img.shields.io/badge/Apache_Incompatible:_Category_X-✗-C0392B.svg?style=flat&logo=Apache
|
|
451
|
+
|
|
456
452
|
[📄ilo-declaration]: https://www.ilo.org/declaration/lang--en/index.htm
|
|
457
453
|
[📄ilo-declaration-img]: https://img.shields.io/badge/ILO_Fundamental_Principles-✓-259D6C.svg?style=flat
|
|
458
454
|
[🚎yard-current]: http://rubydoc.info/gems/kettle-drift
|
|
@@ -469,9 +465,9 @@ Thanks for RTFM. ☺️
|
|
|
469
465
|
| Field | Value |
|
|
470
466
|
|---|---|
|
|
471
467
|
| Package | kettle-drift |
|
|
472
|
-
| Description |
|
|
468
|
+
| Description | 🍲 Kettle::Drift tracks repeated adjacent-line chunks that usually signal template drift or copy/paste corruption. |
|
|
473
469
|
| Homepage | https://github.com/kettle-rb/kettle-drift |
|
|
474
|
-
| Source | https://github.com/kettle-rb/kettle-drift/tree/v1.0.
|
|
470
|
+
| Source | https://github.com/kettle-rb/kettle-drift/tree/v1.0.1 |
|
|
475
471
|
| License | `AGPL-3.0-only` |
|
|
476
472
|
| Funding | https://github.com/sponsors/pboling, https://issuehunt.io/u/pboling, https://ko-fi.com/pboling, https://liberapay.com/pboling/donate, https://opencollective.com/kettle-rb, https://patreon.com/galtzo, https://polar.sh/pboling, https://thanks.dev/u/gh/pboling, https://tidelift.com/funding/github/rubygems/kettle-drift, https://www.buymeacoffee.com/pboling |
|
|
477
473
|
<!-- kettle-jem:metadata:end -->
|
data/SECURITY.md
CHANGED
data/lib/kettle/drift/cli.rb
CHANGED
|
@@ -20,8 +20,8 @@ module Kettle
|
|
|
20
20
|
mode: options.fetch(:mode),
|
|
21
21
|
)
|
|
22
22
|
|
|
23
|
-
if outcome.clean?
|
|
24
|
-
puts "[kettle-drift] ✅ No duplicate drift detected (min_chars=#{options[:min_chars]}, files=#{outcome.files.size}, baseline=#{outcome.baseline_set.size})"
|
|
23
|
+
if outcome.clean? || outcome.diff.state == :no_changes
|
|
24
|
+
puts "[kettle-drift] ✅ No new duplicate drift detected (min_chars=#{options[:min_chars]}, files=#{outcome.files.size}, baseline=#{outcome.baseline_set.size})"
|
|
25
25
|
else
|
|
26
26
|
puts "[kettle-drift] ⚠️ #{outcome.warning_count} drift warning(s) across #{outcome.results.size} unique chunk(s) (files=#{outcome.files.size}, baseline=#{outcome.baseline_set.size})"
|
|
27
27
|
puts "[kettle-drift] 📄 Report: #{Kettle::Drift.display_path(outcome.json_path)}" if outcome.json_path
|
data/lib/kettle/drift/plugin.rb
CHANGED
|
@@ -67,14 +67,60 @@ module Kettle
|
|
|
67
67
|
|
|
68
68
|
def insert_snippet(content)
|
|
69
69
|
lines = content.lines
|
|
70
|
-
|
|
71
|
-
if
|
|
72
|
-
lines.insert(
|
|
70
|
+
insert_after_line = kettle_dev_anchor_end_line(content)
|
|
71
|
+
if insert_after_line
|
|
72
|
+
lines.insert(insert_after_line, "\n", RAKEFILE_SNIPPET, "\n")
|
|
73
73
|
lines.join
|
|
74
74
|
else
|
|
75
75
|
[content.rstrip, "", RAKEFILE_SNIPPET.rstrip, ""].join("\n")
|
|
76
76
|
end
|
|
77
77
|
end
|
|
78
|
+
|
|
79
|
+
def kettle_dev_anchor_end_line(content)
|
|
80
|
+
prism_kettle_dev_anchor_end_line(content) || require_kettle_dev_line(content)
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def prism_kettle_dev_anchor_end_line(content)
|
|
84
|
+
require "prism"
|
|
85
|
+
result = Prism.parse(content.to_s)
|
|
86
|
+
return unless result.success?
|
|
87
|
+
|
|
88
|
+
top_level_nodes = result.value.statements&.body.to_a
|
|
89
|
+
anchor_node = top_level_nodes.reverse.find { |node| contains_kettle_dev_require?(node) }
|
|
90
|
+
anchor_node&.location&.end_line
|
|
91
|
+
rescue LoadError
|
|
92
|
+
nil
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def contains_kettle_dev_require?(node)
|
|
96
|
+
return false unless node.respond_to?(:child_nodes)
|
|
97
|
+
return true if kettle_dev_require_call?(node)
|
|
98
|
+
|
|
99
|
+
node.child_nodes.compact.any? { |child| contains_kettle_dev_require?(child) }
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def kettle_dev_require_call?(node)
|
|
103
|
+
return false unless node.is_a?(Prism::CallNode)
|
|
104
|
+
return false unless node.name == :require
|
|
105
|
+
|
|
106
|
+
node.arguments&.arguments.to_a.any? do |argument|
|
|
107
|
+
argument.is_a?(Prism::StringNode) && argument.unescaped == "kettle/dev"
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
# This fallback is intentionally line-based because it is only used when
|
|
112
|
+
# Prism is unavailable in the templating runtime.
|
|
113
|
+
def require_kettle_dev_line(content)
|
|
114
|
+
lines = content.lines
|
|
115
|
+
require_index = lines.rindex { |line| line.strip == 'require "kettle/dev"' || line.strip == "require 'kettle/dev'" }
|
|
116
|
+
return unless require_index
|
|
117
|
+
|
|
118
|
+
block_start = lines[0..require_index].rindex { |line| line.strip == "begin" }
|
|
119
|
+
return require_index + 1 unless block_start
|
|
120
|
+
|
|
121
|
+
block_end = lines[block_start..].to_a.index { |line| line.strip == "end" }
|
|
122
|
+
block_end ? block_start + block_end + 1 : require_index + 1
|
|
123
|
+
end
|
|
78
124
|
end
|
|
79
125
|
end
|
|
80
126
|
end
|
data/lib/kettle/drift/version.rb
CHANGED
data/lib/kettle/drift.rb
CHANGED
|
@@ -113,8 +113,15 @@ module Kettle
|
|
|
113
113
|
results = Kettle::Drift::DuplicateLineValidator.subtract_baseline(results, baseline_set: baseline_set)
|
|
114
114
|
warning_count = Kettle::Drift::DuplicateLineValidator.warning_count(results)
|
|
115
115
|
|
|
116
|
+
process_result = Kettle::Drift::Process.new(
|
|
117
|
+
project_root: expanded_project_root,
|
|
118
|
+
lock_path: expanded_lock_path,
|
|
119
|
+
mode: mode,
|
|
120
|
+
results: results,
|
|
121
|
+
printer_class: printer_class,
|
|
122
|
+
).run
|
|
116
123
|
expanded_json_path = nil
|
|
117
|
-
|
|
124
|
+
if write_json_report?(results, process_result.diff)
|
|
118
125
|
expanded_json_path = if json_path
|
|
119
126
|
File.expand_path(json_path, expanded_project_root)
|
|
120
127
|
else
|
|
@@ -123,14 +130,6 @@ module Kettle
|
|
|
123
130
|
Kettle::Drift::DuplicateLineValidator.write_json(results, expanded_json_path)
|
|
124
131
|
end
|
|
125
132
|
|
|
126
|
-
process_result = Kettle::Drift::Process.new(
|
|
127
|
-
project_root: expanded_project_root,
|
|
128
|
-
lock_path: expanded_lock_path,
|
|
129
|
-
mode: mode,
|
|
130
|
-
results: results,
|
|
131
|
-
printer_class: printer_class,
|
|
132
|
-
).run
|
|
133
|
-
|
|
134
133
|
Kettle::Drift::Outcome.new(
|
|
135
134
|
project_root: expanded_project_root,
|
|
136
135
|
files: selected_files,
|
|
@@ -145,6 +144,10 @@ module Kettle
|
|
|
145
144
|
exit_code: process_result.exit_code,
|
|
146
145
|
)
|
|
147
146
|
end
|
|
147
|
+
|
|
148
|
+
def write_json_report?(results, diff)
|
|
149
|
+
!results.empty? && diff.state != :no_changes
|
|
150
|
+
end
|
|
148
151
|
end
|
|
149
152
|
end
|
|
150
153
|
end
|
data.tar.gz.sig
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
x����x�&�� ��c��B�/��Iɹ`�ޡ9���D%��4!��;N�G9d9��m��Ü]+�x�$j˲�����P
|
|
2
|
+
�YÍS� ���2:k�̓��gu���u�������A0�1i�D~ʛD��(I_p����H/!��z�NS��1�)@Uyh�-Ix�(P��*�|�=q���{
|
|
3
|
+
��"�n��)��)7>����rf��D��\3�O~�'�rf.�����Xa{�x�k�mB���]�n�eC
|
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.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Peter H. Boling
|
|
@@ -64,6 +64,9 @@ dependencies:
|
|
|
64
64
|
- - "~>"
|
|
65
65
|
- !ruby/object:Gem::Version
|
|
66
66
|
version: '2.0'
|
|
67
|
+
- - ">="
|
|
68
|
+
- !ruby/object:Gem::Version
|
|
69
|
+
version: 2.0.8
|
|
67
70
|
type: :development
|
|
68
71
|
prerelease: false
|
|
69
72
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -71,6 +74,9 @@ dependencies:
|
|
|
71
74
|
- - "~>"
|
|
72
75
|
- !ruby/object:Gem::Version
|
|
73
76
|
version: '2.0'
|
|
77
|
+
- - ">="
|
|
78
|
+
- !ruby/object:Gem::Version
|
|
79
|
+
version: 2.0.8
|
|
74
80
|
- !ruby/object:Gem::Dependency
|
|
75
81
|
name: bundler-audit
|
|
76
82
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -148,7 +154,7 @@ dependencies:
|
|
|
148
154
|
version: '2.0'
|
|
149
155
|
- - ">="
|
|
150
156
|
- !ruby/object:Gem::Version
|
|
151
|
-
version: 2.0.
|
|
157
|
+
version: 2.0.3
|
|
152
158
|
type: :development
|
|
153
159
|
prerelease: false
|
|
154
160
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -158,7 +164,27 @@ dependencies:
|
|
|
158
164
|
version: '2.0'
|
|
159
165
|
- - ">="
|
|
160
166
|
- !ruby/object:Gem::Version
|
|
161
|
-
version: 2.0.
|
|
167
|
+
version: 2.0.3
|
|
168
|
+
- !ruby/object:Gem::Dependency
|
|
169
|
+
name: turbo_tests2
|
|
170
|
+
requirement: !ruby/object:Gem::Requirement
|
|
171
|
+
requirements:
|
|
172
|
+
- - "~>"
|
|
173
|
+
- !ruby/object:Gem::Version
|
|
174
|
+
version: '3.1'
|
|
175
|
+
- - ">="
|
|
176
|
+
- !ruby/object:Gem::Version
|
|
177
|
+
version: 3.1.1
|
|
178
|
+
type: :development
|
|
179
|
+
prerelease: false
|
|
180
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
181
|
+
requirements:
|
|
182
|
+
- - "~>"
|
|
183
|
+
- !ruby/object:Gem::Version
|
|
184
|
+
version: '3.1'
|
|
185
|
+
- - ">="
|
|
186
|
+
- !ruby/object:Gem::Version
|
|
187
|
+
version: 3.1.1
|
|
162
188
|
- !ruby/object:Gem::Dependency
|
|
163
189
|
name: ruby-progressbar
|
|
164
190
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -199,21 +225,21 @@ dependencies:
|
|
|
199
225
|
requirements:
|
|
200
226
|
- - "~>"
|
|
201
227
|
- !ruby/object:Gem::Version
|
|
202
|
-
version: '
|
|
228
|
+
version: '2.0'
|
|
203
229
|
- - ">="
|
|
204
230
|
- !ruby/object:Gem::Version
|
|
205
|
-
version:
|
|
231
|
+
version: 2.0.1
|
|
206
232
|
type: :development
|
|
207
233
|
prerelease: false
|
|
208
234
|
version_requirements: !ruby/object:Gem::Requirement
|
|
209
235
|
requirements:
|
|
210
236
|
- - "~>"
|
|
211
237
|
- !ruby/object:Gem::Version
|
|
212
|
-
version: '
|
|
238
|
+
version: '2.0'
|
|
213
239
|
- - ">="
|
|
214
240
|
- !ruby/object:Gem::Version
|
|
215
|
-
version:
|
|
216
|
-
description: "\
|
|
241
|
+
version: 2.0.1
|
|
242
|
+
description: "\U0001F372 Kettle::Drift tracks repeated adjacent-line chunks that usually
|
|
217
243
|
signal template drift or copy/paste corruption."
|
|
218
244
|
email:
|
|
219
245
|
- peter.boling@gmail.com
|
|
@@ -263,10 +289,10 @@ licenses:
|
|
|
263
289
|
- AGPL-3.0-only
|
|
264
290
|
metadata:
|
|
265
291
|
homepage_uri: https://structuredmerge.org
|
|
266
|
-
source_code_uri: https://github.com/kettle-rb/kettle-drift/tree/v1.0.
|
|
267
|
-
changelog_uri: https://github.com/kettle-rb/kettle-drift/blob/v1.0.
|
|
292
|
+
source_code_uri: https://github.com/kettle-rb/kettle-drift/tree/v1.0.2
|
|
293
|
+
changelog_uri: https://github.com/kettle-rb/kettle-drift/blob/v1.0.2/CHANGELOG.md
|
|
268
294
|
bug_tracker_uri: https://github.com/kettle-rb/kettle-drift/issues
|
|
269
|
-
documentation_uri: https://www.rubydoc.info/gems/kettle-drift/1.0.
|
|
295
|
+
documentation_uri: https://www.rubydoc.info/gems/kettle-drift/1.0.2
|
|
270
296
|
funding_uri: https://github.com/sponsors/pboling
|
|
271
297
|
wiki_uri: https://github.com/kettle-rb/kettle-drift/wiki
|
|
272
298
|
news_uri: https://www.railsbling.com/tags/kettle-drift
|
|
@@ -274,7 +300,7 @@ metadata:
|
|
|
274
300
|
rubygems_mfa_required: 'true'
|
|
275
301
|
rdoc_options:
|
|
276
302
|
- "--title"
|
|
277
|
-
- "kettle-drift - \
|
|
303
|
+
- "kettle-drift - \U0001F372 Detect duplicated adjacent lines introduced by template
|
|
278
304
|
drift."
|
|
279
305
|
- "--main"
|
|
280
306
|
- README.md
|
|
@@ -298,5 +324,5 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
298
324
|
requirements: []
|
|
299
325
|
rubygems_version: 4.0.10
|
|
300
326
|
specification_version: 4
|
|
301
|
-
summary: "\
|
|
327
|
+
summary: "\U0001F372 Detect duplicated adjacent lines introduced by template drift."
|
|
302
328
|
test_files: []
|
metadata.gz.sig
CHANGED
|
Binary file
|