yard-timekeeper 0.2.0 → 0.2.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 +33 -1
- data/CONTRIBUTING.md +2 -2
- data/FUNDING.md +1 -5
- data/LICENSE.md +1 -1
- data/README.md +58 -24
- data/lib/yard/timekeeper/version.rb +1 -1
- data/lib/yard/timekeeper.rb +29 -4
- data/sig/yard/timekeeper.rbs +0 -1
- data.tar.gz.sig +0 -0
- metadata +21 -21
- 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: 58cda717ce6001bb0d01d68fc8136637a40ebdf384e0bf28f5db9459519bcefe
|
|
4
|
+
data.tar.gz: 486cabfb033c18ca19e5c8b4c25cffe356e709f26f4bb69816d32f1f7cc2d16b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: '008dfade3557341d87157c71643150a5600436c3995893418fca4abd4af04e9fba764810cd3ace5024b3f5f70954a8fbea6d447c3c607a7de9ab0d0930b04515'
|
|
7
|
+
data.tar.gz: ad2e182f949adea88d739b17c9fbace1fd85d4e567f5bd91110ab2c6a1a02d2bed7866b42b9e1c31f4f62d8c06e913e2a47e1accd2b7533b88d671f3da0ce0cd
|
checksums.yaml.gz.sig
CHANGED
|
Binary file
|
data/CHANGELOG.md
CHANGED
|
@@ -30,6 +30,34 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
30
30
|
|
|
31
31
|
### Security
|
|
32
32
|
|
|
33
|
+
## [0.2.2] - 2026-06-22
|
|
34
|
+
|
|
35
|
+
- TAG: [v0.2.2][0.2.2t]
|
|
36
|
+
- COVERAGE: 97.62% -- 82/84 lines in 3 files
|
|
37
|
+
- BRANCH COVERAGE: 93.33% -- 28/30 branches in 3 files
|
|
38
|
+
- 20.83% documented
|
|
39
|
+
|
|
40
|
+
### Added
|
|
41
|
+
|
|
42
|
+
- Added support for JRuby 10.1 and TruffleRuby 34.0.
|
|
43
|
+
|
|
44
|
+
### Changed
|
|
45
|
+
|
|
46
|
+
- Retemplated project metadata and CI/development automation with `kettle-jem` v7.0.0.
|
|
47
|
+
|
|
48
|
+
## [0.2.1] - 2026-06-04
|
|
49
|
+
|
|
50
|
+
- TAG: [v0.2.1][0.2.1t]
|
|
51
|
+
- COVERAGE: 98.80% -- 82/83 lines in 2 files
|
|
52
|
+
- BRANCH COVERAGE: 93.33% -- 28/30 branches in 2 files
|
|
53
|
+
- 20.83% documented
|
|
54
|
+
|
|
55
|
+
### Fixed
|
|
56
|
+
|
|
57
|
+
- Treated YARD generator version and Ruby version footer changes as generated
|
|
58
|
+
documentation churn, so footer-only docs diffs are restored even when the
|
|
59
|
+
toolchain version changes.
|
|
60
|
+
|
|
33
61
|
## [0.2.0] - 2026-06-03
|
|
34
62
|
|
|
35
63
|
- TAG: [v0.2.0][0.2.0t]
|
|
@@ -80,7 +108,11 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
80
108
|
|
|
81
109
|
- Initial release
|
|
82
110
|
|
|
83
|
-
[Unreleased]: https://github.com/galtzo-floss/yard-timekeeper/compare/v0.2.
|
|
111
|
+
[Unreleased]: https://github.com/galtzo-floss/yard-timekeeper/compare/v0.2.2...HEAD
|
|
112
|
+
[0.2.2]: https://github.com/galtzo-floss/yard-timekeeper/compare/v0.2.1...v0.2.2
|
|
113
|
+
[0.2.2t]: https://github.com/galtzo-floss/yard-timekeeper/releases/tag/v0.2.2
|
|
114
|
+
[0.2.1]: https://github.com/galtzo-floss/yard-timekeeper/compare/v0.2.0...v0.2.1
|
|
115
|
+
[0.2.1t]: https://github.com/galtzo-floss/yard-timekeeper/releases/tag/v0.2.1
|
|
84
116
|
[0.2.0]: https://github.com/galtzo-floss/yard-timekeeper/compare/v0.1.0...v0.2.0
|
|
85
117
|
[0.2.0t]: https://github.com/galtzo-floss/yard-timekeeper/releases/tag/v0.2.0
|
|
86
118
|
[0.1.0]: https://github.com/galtzo-floss/yard-timekeeper/compare/bffde1dbf4ceb71a29a72b5b2dfb79622a14417b...v0.1.0
|
data/CONTRIBUTING.md
CHANGED
|
@@ -109,14 +109,14 @@ Git diff driver setup
|
|
|
109
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
110
|
|
|
111
111
|
```console
|
|
112
|
-
K_JEM_TEMPLATING=true
|
|
112
|
+
K_JEM_TEMPLATING=true kettle-jem install
|
|
113
113
|
```
|
|
114
114
|
|
|
115
115
|
Troubleshooting Git diffs
|
|
116
116
|
- Use `git diff --no-ext-diff` to compare against Git's built-in diff output.
|
|
117
117
|
- Use `git diff --no-textconv` when a textconv projection obscures the raw file bytes you need to inspect.
|
|
118
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
|
|
119
|
+
- To remove managed local entries, run `K_JEM_TEMPLATING=true kettle-jem install --undo`; remove global command registrations with `git config --global --unset-all diff.smorg-ruby.command`.
|
|
120
120
|
|
|
121
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 -- ...`.
|
|
122
122
|
|
data/FUNDING.md
CHANGED
|
@@ -6,7 +6,7 @@ Many paths lead to being a sponsor or a backer of this project. Are you on such
|
|
|
6
6
|
|
|
7
7
|
[![OpenCollective Backers][🖇osc-backers-i]][🖇osc-backers] [![OpenCollective Sponsors][🖇osc-sponsors-i]][🖇osc-sponsors] [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor] [![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay] [![Donate on PayPal][🖇paypal-img]][🖇paypal]
|
|
8
8
|
|
|
9
|
-
[![Buy me a coffee][🖇buyme-small-img]][🖇buyme] [![Donate
|
|
9
|
+
[![Buy me a coffee][🖇buyme-small-img]][🖇buyme] [![Donate to my FLOSS efforts at ko-fi.com][🖇kofi-img]][🖇kofi]
|
|
10
10
|
|
|
11
11
|
[⛳liberapay-img]: https://img.shields.io/liberapay/goal/pboling.svg?logo=liberapay&color=a51611&style=flat
|
|
12
12
|
[⛳liberapay]: https://liberapay.com/pboling/donate
|
|
@@ -16,12 +16,8 @@ Many paths lead to being a sponsor or a backer of this project. Are you on such
|
|
|
16
16
|
[🖇osc-sponsors-i]: https://opencollective.com/galtzo-floss/sponsors/badge.svg?style=flat
|
|
17
17
|
[🖇sponsor-img]: https://img.shields.io/badge/Sponsor_Me!-pboling.svg?style=social&logo=github
|
|
18
18
|
[🖇sponsor]: https://github.com/sponsors/pboling
|
|
19
|
-
[🖇polar-img]: https://img.shields.io/badge/polar-donate-a51611.svg?style=flat
|
|
20
|
-
[🖇polar]: https://polar.sh/pboling
|
|
21
19
|
[🖇kofi-img]: https://img.shields.io/badge/ko--fi-%E2%9C%93-a51611.svg?style=flat
|
|
22
20
|
[🖇kofi]: https://ko-fi.com/pboling
|
|
23
|
-
[🖇patreon-img]: https://img.shields.io/badge/patreon-donate-a51611.svg?style=flat
|
|
24
|
-
[🖇patreon]: https://patreon.com/galtzo
|
|
25
21
|
[🖇buyme-small-img]: https://img.shields.io/badge/buy_me_a_coffee-%E2%9C%93-a51611.svg?style=flat
|
|
26
22
|
[🖇buyme]: https://www.buymeacoffee.com/pboling
|
|
27
23
|
[🖇paypal-img]: https://img.shields.io/badge/donate-paypal-a51611.svg?style=flat&logo=paypal
|
data/LICENSE.md
CHANGED
data/README.md
CHANGED
|
@@ -10,9 +10,9 @@
|
|
|
10
10
|
|
|
11
11
|
`if ci_badges.map(&:color).all? { it == "green"}` 👇️ send money so I can do more of this. FLOSS maintenance is now my full-time job.
|
|
12
12
|
|
|
13
|
-
[![OpenCollective Backers][🖇osc-backers-i]][🖇osc-backers] [![OpenCollective Sponsors][🖇osc-sponsors-i]][🖇osc-sponsors] [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor] [![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay] [![Donate on PayPal][🖇paypal-img]][🖇paypal] [![Buy me a coffee][🖇buyme-small-img]][🖇buyme] [![Donate
|
|
13
|
+
[![OpenCollective Backers][🖇osc-backers-i]][🖇osc-backers] [![OpenCollective Sponsors][🖇osc-sponsors-i]][🖇osc-sponsors] [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor] [![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay] [![Donate on PayPal][🖇paypal-img]][🖇paypal] [![Buy me a coffee][🖇buyme-small-img]][🖇buyme] [![Donate at ko-fi.com][🖇kofi-img]][🖇kofi]
|
|
14
14
|
|
|
15
|
-
<details>
|
|
15
|
+
<details markdown="1">
|
|
16
16
|
<summary>👣 How will this project approach the September 2025 hostile takeover of RubyGems? 🚑️</summary>
|
|
17
17
|
|
|
18
18
|
I've summarized my thoughts in [this blog post](https://dev.to/galtzo/hostile-takeover-of-rubygems-my-thoughts-5hlo).
|
|
@@ -22,13 +22,15 @@ I've summarized my thoughts in [this blog post](https://dev.to/galtzo/hostile-ta
|
|
|
22
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>
|
|
23
23
|
|
|
24
24
|
`yard-timekeeper` keeps checked-in YARD HTML stable by restoring files whose
|
|
25
|
-
only
|
|
25
|
+
only changes are generated footer churn.
|
|
26
26
|
|
|
27
27
|
Just the important bits:
|
|
28
28
|
|
|
29
29
|
- It postprocesses generated `docs/**/*.html` files after YARD finishes.
|
|
30
30
|
- It only restores files that are already tracked in git and only when the diff
|
|
31
|
-
is
|
|
31
|
+
is limited to generated footer metadata.
|
|
32
|
+
- It treats YARD footer timestamp, YARD version, and Ruby version changes as
|
|
33
|
+
generated churn, because those do not represent documentation content changes.
|
|
32
34
|
- Real content changes are preserved.
|
|
33
35
|
- The supported workflow is `rake yard`; raw `yard` / `bin/yard` does not run
|
|
34
36
|
the explicit postprocess hook.
|
|
@@ -37,9 +39,9 @@ Just the important bits:
|
|
|
37
39
|
|
|
38
40
|
| Tokens to Remember | [![Gem name][⛳️name-img]][⛳️gem-name] [![Gem namespace][⛳️namespace-img]][⛳️gem-namespace] |
|
|
39
41
|
|-------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|
40
|
-
| Works with JRuby | [![JRuby current Compat][💎jruby-c-i]][🚎10-j-wf] [![JRuby HEAD Compat][💎jruby-headi]][🚎3-hd-wf]|
|
|
41
|
-
| Works with Truffle Ruby | [![Truffle Ruby 24.2 Compat][💎truby-24.2i]][🚎truby-24.2-wf] [![Truffle Ruby 25.0 Compat][💎truby-25.0i]][🚎truby-25.0-wf] [![Truffle Ruby current Compat][💎truby-c-i]][🚎9-t-wf]|
|
|
42
|
-
| Works with MRI Ruby 4 | [![Ruby
|
|
42
|
+
| Works with JRuby | [![JRuby 10.0 Compat][💎jruby-10.0i]][🚎jruby-10.0-wf] [![JRuby current Compat][💎jruby-c-i]][🚎10-j-wf] [![JRuby HEAD Compat][💎jruby-headi]][🚎3-hd-wf]|
|
|
43
|
+
| Works with Truffle Ruby | [![Truffle Ruby 24.2 Compat][💎truby-24.2i]][🚎truby-24.2-wf] [![Truffle Ruby 25.0 Compat][💎truby-25.0i]][🚎truby-25.0-wf] [![Truffle Ruby 33.0 Compat][💎truby-33.0i]][🚎truby-33.0-wf] [![Truffle Ruby current Compat][💎truby-c-i]][🚎9-t-wf] [![Truffle Ruby HEAD Compat][💎truby-headi]][🚎3-hd-wf]|
|
|
44
|
+
| Works with MRI Ruby 4 | [![Ruby current Compat][💎ruby-c-i]][🚎11-c-wf] [![Ruby HEAD Compat][💎ruby-headi]][🚎3-hd-wf]|
|
|
43
45
|
| Works with MRI Ruby 3 | [![Ruby 3.2 Compat][💎ruby-3.2i]][🚎ruby-3.2-wf] [![Ruby 3.3 Compat][💎ruby-3.3i]][🚎ruby-3.3-wf] [![Ruby 3.4 Compat][💎ruby-3.4i]][🚎ruby-3.4-wf]|
|
|
44
46
|
| Support & Community | [![Join Me on Daily.dev's RubyFriends][✉️ruby-friends-img]][✉️ruby-friends] [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] [![Get help from me on Upwork][👨🏼🏫expsup-upwork-img]][👨🏼🏫expsup-upwork] [![Get help from me on Codementor][👨🏼🏫expsup-codementor-img]][👨🏼🏫expsup-codementor] |
|
|
45
47
|
| Source | [![Source on GitLab.com][📜src-gl-img]][📜src-gl] [![Source on CodeBerg.org][📜src-cb-img]][📜src-cb] [![Source on Github.com][📜src-gh-img]][📜src-gh] [![The best SHA: dQw4w9WgXcQ!][🧮kloc-img]][🧮kloc] |
|
|
@@ -57,9 +59,25 @@ This test floor is configured by `ruby.test_minimum` in `.kettle-jem.yml` and
|
|
|
57
59
|
may be higher than the gem's runtime compatibility floor when legacy Rubies are
|
|
58
60
|
not practical for the current toolchain.
|
|
59
61
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
62
|
+
<a href="https://github.com/kettle-dev"><img alt="kettle-dev Logo by Aboling0, CC BY-SA 4.0" src="https://logos.galtzo.com/assets/images/kettle-dev/avatar-128px.svg" width="14%" align="right"/></a>
|
|
63
|
+
|
|
64
|
+
The _amazing_ test matrix is powered by the kettle-dev stack.
|
|
65
|
+
|
|
66
|
+
<details markdown="1">
|
|
67
|
+
<summary>How kettle-dev manages complexity in tests</summary>
|
|
68
|
+
|
|
69
|
+
| Gem | Source | Role | Daily download rank |
|
|
70
|
+
|-----|--------|------|---------------------|
|
|
71
|
+
| [appraisal2](https://bestgems.org/gems/appraisal2) | [GitHub](https://github.com/appraisal-rb/appraisal2) | multi-dependency Appraisal matrix generation | [](https://bestgems.org/gems/appraisal2) |
|
|
72
|
+
| [appraisal2-rubocop](https://bestgems.org/gems/appraisal2-rubocop) | [GitHub](https://github.com/appraisal-rb/appraisal2-rubocop) | RuboCop Appraisal generator integration | [](https://bestgems.org/gems/appraisal2-rubocop) |
|
|
73
|
+
| [kettle-dev](https://bestgems.org/gems/kettle-dev) | [GitHub](https://github.com/kettle-dev/kettle-dev) | development, release, and CI workflow tooling | [](https://bestgems.org/gems/kettle-dev) |
|
|
74
|
+
| [kettle-jem](https://bestgems.org/gems/kettle-jem) | [GitHub](https://github.com/kettle-dev/kettle-jem) | Appraisals & CI workflow templates | [](https://bestgems.org/gems/kettle-jem) |
|
|
75
|
+
| [kettle-soup-cover](https://bestgems.org/gems/kettle-soup-cover) | [GitHub](https://github.com/kettle-dev/kettle-soup-cover) | SimpleCov coverage policy and reporting | [](https://bestgems.org/gems/kettle-soup-cover) |
|
|
76
|
+
| [kettle-test](https://bestgems.org/gems/kettle-test) | [GitHub](https://github.com/kettle-dev/kettle-test) | standard test runner and coverage harness | [](https://bestgems.org/gems/kettle-test) |
|
|
77
|
+
| [rubocop-lts](https://bestgems.org/gems/rubocop-lts) | [GitHub](https://github.com/rubocop-lts/rubocop-lts) | Ruby-version-aware linting | [](https://bestgems.org/gems/rubocop-lts) |
|
|
78
|
+
| [turbo_tests2](https://bestgems.org/gems/turbo_tests2) | [GitHub](https://github.com/galtzo-floss/turbo_tests2) | parallel test execution | [](https://bestgems.org/gems/turbo_tests2) |
|
|
79
|
+
|
|
80
|
+
</details>
|
|
63
81
|
|
|
64
82
|
### Federated DVCS
|
|
65
83
|
|
|
@@ -127,20 +145,32 @@ Yard::Timekeeper.install_rake_tasks!(:yard)
|
|
|
127
145
|
```
|
|
128
146
|
|
|
129
147
|
`yard-timekeeper` runs after YARD generates HTML and checks git diffs for tracked
|
|
130
|
-
files under `docs/`. If a file's only
|
|
148
|
+
files under `docs/`. If a file's only changes are generated footer metadata:
|
|
131
149
|
|
|
132
150
|
```text
|
|
133
151
|
Generated on ...
|
|
152
|
+
0.9.44 (ruby-4.0.5).
|
|
134
153
|
```
|
|
135
154
|
|
|
136
155
|
then the plugin restores that file from git so the docs site does not churn for
|
|
137
|
-
|
|
156
|
+
toolchain-only changes.
|
|
157
|
+
|
|
158
|
+
This protects against the common case where rebuilding docs changes only:
|
|
159
|
+
|
|
160
|
+
- the generation timestamp
|
|
161
|
+
- the YARD generator version
|
|
162
|
+
- the Ruby version in the YARD footer
|
|
163
|
+
|
|
164
|
+
Those values are useful when the page content changes, but they are not useful
|
|
165
|
+
as standalone repository diffs.
|
|
138
166
|
|
|
139
167
|
Notes:
|
|
140
168
|
|
|
141
169
|
- It only affects files already tracked in git.
|
|
142
170
|
- It is most useful for checked-in `docs/` sites.
|
|
143
171
|
- Files with any real content changes keep their fresh timestamp.
|
|
172
|
+
- Files with source, README, changelog, API, or rendered markup changes are not
|
|
173
|
+
restored just because their footer also changed.
|
|
144
174
|
|
|
145
175
|
Environment toggles:
|
|
146
176
|
|
|
@@ -154,6 +184,10 @@ Generate docs through rake so the postprocess runs after YARD finishes:
|
|
|
154
184
|
bin/rake yard
|
|
155
185
|
```
|
|
156
186
|
|
|
187
|
+
After generation, `yard-timekeeper` examines each changed tracked HTML file
|
|
188
|
+
under `docs/`. Footer-only churn is restored from git automatically. Pages with
|
|
189
|
+
real rendered content changes remain modified, including their fresh footer.
|
|
190
|
+
|
|
157
191
|
If your project also exposes `bin/yard`, do not rely on it for the full docs
|
|
158
192
|
workflow. It runs YARD, but it does not run
|
|
159
193
|
`Yard::Timekeeper.install_rake_tasks!(:yard)`.
|
|
@@ -208,7 +242,7 @@ NOTE: [kettle-readme-backers][kettle-readme-backers] updates this list every day
|
|
|
208
242
|
No sponsors yet. Be the first!
|
|
209
243
|
<!-- OPENCOLLECTIVE-ORGANIZATIONS:END -->
|
|
210
244
|
|
|
211
|
-
[kettle-readme-backers]: https://github.com/galtzo-floss/yard-timekeeper/blob/main/
|
|
245
|
+
[kettle-readme-backers]: https://github.com/galtzo-floss/yard-timekeeper/blob/main/bin/kettle-readme-backers
|
|
212
246
|
|
|
213
247
|
### Another way to support open-source
|
|
214
248
|
|
|
@@ -220,7 +254,7 @@ I’m developing a new library, [floss_funding][🖇floss-funding-gem], designed
|
|
|
220
254
|
|
|
221
255
|
**[Floss-Funding.dev][🖇floss-funding.dev]: 👉️ No network calls. 👉️ No tracking. 👉️ No oversight. 👉️ Minimal crypto hashing. 💡 Easily disabled nags**
|
|
222
256
|
|
|
223
|
-
[![OpenCollective Backers][🖇osc-backers-i]][🖇osc-backers] [![OpenCollective Sponsors][🖇osc-sponsors-i]][🖇osc-sponsors] [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor] [![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay] [![Donate on PayPal][🖇paypal-img]][🖇paypal] [![Buy me a coffee][🖇buyme-small-img]][🖇buyme] [![Donate
|
|
257
|
+
[![OpenCollective Backers][🖇osc-backers-i]][🖇osc-backers] [![OpenCollective Sponsors][🖇osc-sponsors-i]][🖇osc-sponsors] [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor] [![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay] [![Donate on PayPal][🖇paypal-img]][🖇paypal] [![Buy me a coffee][🖇buyme-small-img]][🖇buyme] [![Donate to my FLOSS efforts at ko-fi.com][🖇kofi-img]][🖇kofi]
|
|
224
258
|
|
|
225
259
|
## 🔐 Security
|
|
226
260
|
|
|
@@ -266,7 +300,7 @@ Made with [contributors-img][🖐contrib-rocks].
|
|
|
266
300
|
|
|
267
301
|
Also see GitLab Contributors: [https://gitlab.com/galtzo-floss/yard-timekeeper/-/graphs/main][🚎contributors-gl]
|
|
268
302
|
|
|
269
|
-
<details>
|
|
303
|
+
<details markdown="1">
|
|
270
304
|
<summary>⭐️ Star History</summary>
|
|
271
305
|
|
|
272
306
|
<a href="https://star-history.com/galtzo-floss/yard-timekeeper&Date">
|
|
@@ -361,12 +395,8 @@ Thanks for RTFM. ☺️
|
|
|
361
395
|
[🖇sponsor-img]: https://img.shields.io/badge/Sponsor_Me!-pboling.svg?style=social&logo=github
|
|
362
396
|
[🖇sponsor-bottom-img]: https://img.shields.io/badge/Sponsor_Me!-pboling-blue?style=for-the-badge&logo=github
|
|
363
397
|
[🖇sponsor]: https://github.com/sponsors/pboling
|
|
364
|
-
[🖇polar-img]: https://img.shields.io/badge/polar-donate-a51611.svg?style=flat
|
|
365
|
-
[🖇polar]: https://polar.sh/pboling
|
|
366
398
|
[🖇kofi-img]: https://img.shields.io/badge/ko--fi-%E2%9C%93-a51611.svg?style=flat
|
|
367
399
|
[🖇kofi]: https://ko-fi.com/pboling
|
|
368
|
-
[🖇patreon-img]: https://img.shields.io/badge/patreon-donate-a51611.svg?style=flat
|
|
369
|
-
[🖇patreon]: https://patreon.com/galtzo
|
|
370
400
|
[🖇buyme-small-img]: https://img.shields.io/badge/buy_me_a_coffee-%E2%9C%93-a51611.svg?style=flat
|
|
371
401
|
[🖇buyme-img]: https://img.buymeacoffee.com/button-api/?text=Buy%20me%20a%20latte&emoji=&slug=pboling&button_colour=FFDD00&font_colour=000000&font_family=Cookie&outline_colour=000000&coffee_colour=ffffff
|
|
372
402
|
[🖇buyme]: https://www.buymeacoffee.com/pboling
|
|
@@ -447,8 +477,10 @@ Thanks for RTFM. ☺️
|
|
|
447
477
|
[🚎ruby-3.2-wf]: https://github.com/galtzo-floss/yard-timekeeper/actions/workflows/ruby-3.2.yml
|
|
448
478
|
[🚎ruby-3.3-wf]: https://github.com/galtzo-floss/yard-timekeeper/actions/workflows/ruby-3.3.yml
|
|
449
479
|
[🚎ruby-3.4-wf]: https://github.com/galtzo-floss/yard-timekeeper/actions/workflows/ruby-3.4.yml
|
|
480
|
+
[🚎jruby-10.0-wf]: https://github.com/galtzo-floss/yard-timekeeper/actions/workflows/jruby-10.0.yml
|
|
450
481
|
[🚎truby-24.2-wf]: https://github.com/galtzo-floss/yard-timekeeper/actions/workflows/truffleruby-24.2.yml
|
|
451
482
|
[🚎truby-25.0-wf]: https://github.com/galtzo-floss/yard-timekeeper/actions/workflows/truffleruby-25.0.yml
|
|
483
|
+
[🚎truby-33.0-wf]: https://github.com/galtzo-floss/yard-timekeeper/actions/workflows/truffleruby-33.0.yml
|
|
452
484
|
[🚎2-cov-wf]: https://github.com/galtzo-floss/yard-timekeeper/actions/workflows/coverage.yml
|
|
453
485
|
[🚎2-cov-wfi]: https://github.com/galtzo-floss/yard-timekeeper/actions/workflows/coverage.yml/badge.svg
|
|
454
486
|
[🚎3-hd-wf]: https://github.com/galtzo-floss/yard-timekeeper/actions/workflows/heads.yml
|
|
@@ -472,12 +504,14 @@ Thanks for RTFM. ☺️
|
|
|
472
504
|
[💎ruby-3.2i]: https://img.shields.io/badge/Ruby-3.2-CC342D?style=for-the-badge&logo=ruby&logoColor=white
|
|
473
505
|
[💎ruby-3.3i]: https://img.shields.io/badge/Ruby-3.3-CC342D?style=for-the-badge&logo=ruby&logoColor=white
|
|
474
506
|
[💎ruby-3.4i]: https://img.shields.io/badge/Ruby-3.4-CC342D?style=for-the-badge&logo=ruby&logoColor=white
|
|
475
|
-
[💎ruby-4.0i]: https://img.shields.io/badge/Ruby-4.0-CC342D?style=for-the-badge&logo=ruby&logoColor=white
|
|
476
507
|
[💎ruby-c-i]: https://img.shields.io/badge/Ruby-current-CC342D?style=for-the-badge&logo=ruby&logoColor=green
|
|
477
508
|
[💎ruby-headi]: https://img.shields.io/badge/Ruby-HEAD-CC342D?style=for-the-badge&logo=ruby&logoColor=blue
|
|
478
509
|
[💎truby-24.2i]: https://img.shields.io/badge/Truffle_Ruby-24.2-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
|
|
479
510
|
[💎truby-25.0i]: https://img.shields.io/badge/Truffle_Ruby-25.0-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
|
|
511
|
+
[💎truby-33.0i]: https://img.shields.io/badge/Truffle_Ruby-33.0-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
|
|
480
512
|
[💎truby-c-i]: https://img.shields.io/badge/Truffle_Ruby-current-34BCB1?style=for-the-badge&logo=ruby&logoColor=green
|
|
513
|
+
[💎truby-headi]: https://img.shields.io/badge/Truffle_Ruby-HEAD-34BCB1?style=for-the-badge&logo=ruby&logoColor=blue
|
|
514
|
+
[💎jruby-10.0i]: https://img.shields.io/badge/JRuby-10.0-FBE742?style=for-the-badge&logo=ruby&logoColor=red
|
|
481
515
|
[💎jruby-c-i]: https://img.shields.io/badge/JRuby-current-FBE742?style=for-the-badge&logo=ruby&logoColor=green
|
|
482
516
|
[💎jruby-headi]: https://img.shields.io/badge/JRuby-HEAD-FBE742?style=for-the-badge&logo=ruby&logoColor=blue
|
|
483
517
|
[🤝gh-issues]: https://github.com/galtzo-floss/yard-timekeeper/issues
|
|
@@ -506,7 +540,7 @@ Thanks for RTFM. ☺️
|
|
|
506
540
|
[📌gitmoji]: https://gitmoji.dev
|
|
507
541
|
[📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
|
|
508
542
|
[🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
|
|
509
|
-
[🧮kloc-img]: https://img.shields.io/badge/KLOC-0.
|
|
543
|
+
[🧮kloc-img]: https://img.shields.io/badge/KLOC-0.084-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
|
|
510
544
|
[🔐security]: https://github.com/galtzo-floss/yard-timekeeper/blob/main/SECURITY.md
|
|
511
545
|
[🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
|
|
512
546
|
[📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
|
|
@@ -514,7 +548,7 @@ Thanks for RTFM. ☺️
|
|
|
514
548
|
[📄license-ref]: MIT.md
|
|
515
549
|
[📄license-img]: https://img.shields.io/badge/License-MIT-259D6C.svg
|
|
516
550
|
[📄license-compat]: https://www.apache.org/legal/resolved.html#category-a
|
|
517
|
-
[📄license-compat-img]: https://img.shields.io/badge/Apache_Compatible:_Category_A
|
|
551
|
+
[📄license-compat-img]: https://img.shields.io/badge/Apache_Compatible:_Category_A-%E2%9C%93-259D6C.svg?style=flat&logo=Apache
|
|
518
552
|
|
|
519
553
|
[📄ilo-declaration]: https://www.ilo.org/declaration/lang--en/index.htm
|
|
520
554
|
[📄ilo-declaration-img]: https://img.shields.io/badge/ILO_Fundamental_Principles-✓-259D6C.svg?style=flat
|
|
@@ -534,7 +568,7 @@ Thanks for RTFM. ☺️
|
|
|
534
568
|
| Package | yard-timekeeper |
|
|
535
569
|
| Description | 🕰️ A YARD plugin that post-processes generated docs, detects timestamp-only diffs in tracked HTML files under docs/, and restores those files from git to prevent pointless churn while keeping the footer timestamp on genuinely changed pages. |
|
|
536
570
|
| Homepage | https://github.com/galtzo-floss/yard-timekeeper |
|
|
537
|
-
| Source | https://github.com/galtzo-floss/yard-timekeeper
|
|
571
|
+
| Source | https://github.com/galtzo-floss/yard-timekeeper |
|
|
538
572
|
| License | `MIT` |
|
|
539
|
-
| Funding | https://github.com/sponsors/pboling, https://
|
|
573
|
+
| Funding | https://github.com/sponsors/pboling, https://ko-fi.com/pboling, https://liberapay.com/pboling/donate, https://opencollective.com/galtzo-floss, https://thanks.dev/u/gh/pboling, https://tidelift.com/funding/github/rubygems/yard-timekeeper, https://www.buymeacoffee.com/pboling |
|
|
540
574
|
<!-- kettle-jem:metadata:end -->
|
data/lib/yard/timekeeper.rb
CHANGED
|
@@ -15,6 +15,12 @@ module Yard
|
|
|
15
15
|
RAKE_INTEGRATIONS_MUTEX = Mutex.new
|
|
16
16
|
|
|
17
17
|
TIMESTAMP_DIFF_LINE_RE = /\A[+-]\s{2}Generated on .+ by\s*\z/
|
|
18
|
+
GENERATOR_VERSION_DIFF_LINE_RE = /
|
|
19
|
+
\A[+-]\s{2}
|
|
20
|
+
\d+(?:\.\d+)+(?:[.\w-][.\w-]*)?
|
|
21
|
+
\s\(ruby-[^)]+\)\.\s*
|
|
22
|
+
\z
|
|
23
|
+
/x
|
|
18
24
|
DIFF_METADATA_PREFIXES = [
|
|
19
25
|
"diff --git ",
|
|
20
26
|
"index ",
|
|
@@ -111,14 +117,33 @@ module Yard
|
|
|
111
117
|
next if DIFF_METADATA_PREFIXES.any? { |prefix| line.start_with?(prefix) }
|
|
112
118
|
next if line.strip.empty?
|
|
113
119
|
|
|
114
|
-
return false unless
|
|
120
|
+
return false unless footer_churn_line?(line)
|
|
115
121
|
|
|
116
122
|
change_lines << line
|
|
117
123
|
end
|
|
118
124
|
|
|
119
|
-
change_lines
|
|
120
|
-
|
|
121
|
-
|
|
125
|
+
balanced_footer_churn?(change_lines)
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
def footer_churn_line?(line)
|
|
129
|
+
line.match?(TIMESTAMP_DIFF_LINE_RE) || line.match?(GENERATOR_VERSION_DIFF_LINE_RE)
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
def balanced_footer_churn?(change_lines)
|
|
133
|
+
removed_lines = change_lines.select { |line| line.start_with?("-") }
|
|
134
|
+
added_lines = change_lines.select { |line| line.start_with?("+") }
|
|
135
|
+
|
|
136
|
+
removed_lines.size == added_lines.size &&
|
|
137
|
+
removed_lines.size.between?(1, 2) &&
|
|
138
|
+
removed_lines.map { |line| footer_churn_kind(line) }.sort ==
|
|
139
|
+
added_lines.map { |line| footer_churn_kind(line) }.sort
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
def footer_churn_kind(line)
|
|
143
|
+
return :timestamp if line.match?(TIMESTAMP_DIFF_LINE_RE)
|
|
144
|
+
return :generator_version if line.match?(GENERATOR_VERSION_DIFF_LINE_RE)
|
|
145
|
+
|
|
146
|
+
:unknown
|
|
122
147
|
end
|
|
123
148
|
|
|
124
149
|
def restore_file(path, root)
|
data/sig/yard/timekeeper.rbs
CHANGED
data.tar.gz.sig
CHANGED
|
Binary file
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: yard-timekeeper
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.2.
|
|
4
|
+
version: 0.2.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Peter H. Boling
|
|
@@ -46,7 +46,7 @@ dependencies:
|
|
|
46
46
|
version: '1.1'
|
|
47
47
|
- - ">="
|
|
48
48
|
- !ruby/object:Gem::Version
|
|
49
|
-
version: 1.1.
|
|
49
|
+
version: 1.1.13
|
|
50
50
|
type: :runtime
|
|
51
51
|
prerelease: false
|
|
52
52
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -56,27 +56,27 @@ dependencies:
|
|
|
56
56
|
version: '1.1'
|
|
57
57
|
- - ">="
|
|
58
58
|
- !ruby/object:Gem::Version
|
|
59
|
-
version: 1.1.
|
|
59
|
+
version: 1.1.13
|
|
60
60
|
- !ruby/object:Gem::Dependency
|
|
61
61
|
name: kettle-dev
|
|
62
62
|
requirement: !ruby/object:Gem::Requirement
|
|
63
63
|
requirements:
|
|
64
64
|
- - "~>"
|
|
65
65
|
- !ruby/object:Gem::Version
|
|
66
|
-
version: '2.
|
|
66
|
+
version: '2.2'
|
|
67
67
|
- - ">="
|
|
68
68
|
- !ruby/object:Gem::Version
|
|
69
|
-
version: 2.
|
|
69
|
+
version: 2.2.15
|
|
70
70
|
type: :development
|
|
71
71
|
prerelease: false
|
|
72
72
|
version_requirements: !ruby/object:Gem::Requirement
|
|
73
73
|
requirements:
|
|
74
74
|
- - "~>"
|
|
75
75
|
- !ruby/object:Gem::Version
|
|
76
|
-
version: '2.
|
|
76
|
+
version: '2.2'
|
|
77
77
|
- - ">="
|
|
78
78
|
- !ruby/object:Gem::Version
|
|
79
|
-
version: 2.
|
|
79
|
+
version: 2.2.15
|
|
80
80
|
- !ruby/object:Gem::Dependency
|
|
81
81
|
name: bundler-audit
|
|
82
82
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -131,20 +131,20 @@ dependencies:
|
|
|
131
131
|
requirements:
|
|
132
132
|
- - "~>"
|
|
133
133
|
- !ruby/object:Gem::Version
|
|
134
|
-
version: '3.
|
|
134
|
+
version: '3.1'
|
|
135
135
|
- - ">="
|
|
136
136
|
- !ruby/object:Gem::Version
|
|
137
|
-
version: 3.
|
|
137
|
+
version: 3.1.2
|
|
138
138
|
type: :development
|
|
139
139
|
prerelease: false
|
|
140
140
|
version_requirements: !ruby/object:Gem::Requirement
|
|
141
141
|
requirements:
|
|
142
142
|
- - "~>"
|
|
143
143
|
- !ruby/object:Gem::Version
|
|
144
|
-
version: '3.
|
|
144
|
+
version: '3.1'
|
|
145
145
|
- - ">="
|
|
146
146
|
- !ruby/object:Gem::Version
|
|
147
|
-
version: 3.
|
|
147
|
+
version: 3.1.2
|
|
148
148
|
- !ruby/object:Gem::Dependency
|
|
149
149
|
name: kettle-test
|
|
150
150
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -154,7 +154,7 @@ dependencies:
|
|
|
154
154
|
version: '2.0'
|
|
155
155
|
- - ">="
|
|
156
156
|
- !ruby/object:Gem::Version
|
|
157
|
-
version: 2.0.
|
|
157
|
+
version: 2.0.6
|
|
158
158
|
type: :development
|
|
159
159
|
prerelease: false
|
|
160
160
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -164,7 +164,7 @@ dependencies:
|
|
|
164
164
|
version: '2.0'
|
|
165
165
|
- - ">="
|
|
166
166
|
- !ruby/object:Gem::Version
|
|
167
|
-
version: 2.0.
|
|
167
|
+
version: 2.0.6
|
|
168
168
|
- !ruby/object:Gem::Dependency
|
|
169
169
|
name: turbo_tests2
|
|
170
170
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -174,7 +174,7 @@ dependencies:
|
|
|
174
174
|
version: '3.1'
|
|
175
175
|
- - ">="
|
|
176
176
|
- !ruby/object:Gem::Version
|
|
177
|
-
version: 3.1.
|
|
177
|
+
version: 3.1.4
|
|
178
178
|
type: :development
|
|
179
179
|
prerelease: false
|
|
180
180
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -184,7 +184,7 @@ dependencies:
|
|
|
184
184
|
version: '3.1'
|
|
185
185
|
- - ">="
|
|
186
186
|
- !ruby/object:Gem::Version
|
|
187
|
-
version: 3.1.
|
|
187
|
+
version: 3.1.4
|
|
188
188
|
- !ruby/object:Gem::Dependency
|
|
189
189
|
name: ruby-progressbar
|
|
190
190
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -228,7 +228,7 @@ dependencies:
|
|
|
228
228
|
version: '2.0'
|
|
229
229
|
- - ">="
|
|
230
230
|
- !ruby/object:Gem::Version
|
|
231
|
-
version: 2.0.
|
|
231
|
+
version: 2.0.3
|
|
232
232
|
type: :development
|
|
233
233
|
prerelease: false
|
|
234
234
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -238,13 +238,13 @@ dependencies:
|
|
|
238
238
|
version: '2.0'
|
|
239
239
|
- - ">="
|
|
240
240
|
- !ruby/object:Gem::Version
|
|
241
|
-
version: 2.0.
|
|
241
|
+
version: 2.0.3
|
|
242
242
|
description: "\U0001F570️ A YARD plugin that post-processes generated docs, detects
|
|
243
243
|
timestamp-only diffs in tracked HTML files under docs/, and restores those files
|
|
244
244
|
from git to prevent pointless churn while keeping the footer timestamp on genuinely
|
|
245
245
|
changed pages."
|
|
246
246
|
email:
|
|
247
|
-
-
|
|
247
|
+
- floss@galtzo.com
|
|
248
248
|
executables: []
|
|
249
249
|
extensions: []
|
|
250
250
|
extra_rdoc_files:
|
|
@@ -278,10 +278,10 @@ licenses:
|
|
|
278
278
|
- MIT
|
|
279
279
|
metadata:
|
|
280
280
|
homepage_uri: https://yard-timekeeper.galtzo.com
|
|
281
|
-
source_code_uri: https://github.com/galtzo-floss/yard-timekeeper/tree/v0.2.
|
|
282
|
-
changelog_uri: https://github.com/galtzo-floss/yard-timekeeper/blob/v0.2.
|
|
281
|
+
source_code_uri: https://github.com/galtzo-floss/yard-timekeeper/tree/v0.2.2
|
|
282
|
+
changelog_uri: https://github.com/galtzo-floss/yard-timekeeper/blob/v0.2.2/CHANGELOG.md
|
|
283
283
|
bug_tracker_uri: https://github.com/galtzo-floss/yard-timekeeper/issues
|
|
284
|
-
documentation_uri: https://www.rubydoc.info/gems/yard-timekeeper/0.2.
|
|
284
|
+
documentation_uri: https://www.rubydoc.info/gems/yard-timekeeper/0.2.2
|
|
285
285
|
funding_uri: https://github.com/sponsors/pboling
|
|
286
286
|
wiki_uri: https://github.com/galtzo-floss/yard-timekeeper/wiki
|
|
287
287
|
news_uri: https://www.railsbling.com/tags/yard-timekeeper
|
metadata.gz.sig
CHANGED
|
Binary file
|