git 5.2.0 → 5.4.0

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: 0046556c3068d7b41423d2f0ce69631d5f5818ce279e410797c44c46c6df0311
4
- data.tar.gz: 59c5cc50b9a8ad522feac1360610f87932ee8624ed4119e1780a39eab29c9e43
3
+ metadata.gz: 1b0ec11636ea561f0c879744f4c7b94fd12f2a2fae29da23ac22f338edefe9fe
4
+ data.tar.gz: b70d5290d89c34293b3dd47b839b1a6d091f7d081236623b844160269e07e2ae
5
5
  SHA512:
6
- metadata.gz: 5e2fd4a85f9bfac64f8255aab6442b03384f69fc8376e6cd280dd2f4f93cbaac1cd15fce9169bb3d441a6ddcf12b901cb4e2d9fafa8efea06906f0bd55181d76
7
- data.tar.gz: d87911a2437fd057da4caf47ee893df61a4e872eaa43d1fc470ea15ce8a3e546e4f083922df1eb38b0e44cd18d501cc1ba30e8333ba550eb8583cfb7ee13c218
6
+ metadata.gz: 449e637646f9faba003af92629c11dbf3a42703f4331a331c3bf03f218659335fd1abd17344bc74f91ffd78a9e4823c3f4dd6cb1ac9a2546a5884cd673dd2a47
7
+ data.tar.gz: f2a797c6f9a56ae2c877c01a3b7f3da3db46f5d82b5b930de44998035404255692a44c012efb610d4032e5b8d72231f782cf7e5ba921de344c94dde4c5c7b52a
data/CHANGELOG.md CHANGED
@@ -5,6 +5,55 @@
5
5
 
6
6
  # Change Log
7
7
 
8
+ ## [5.4.0](https://github.com/ruby-git/ruby-git/compare/v5.3.0...v5.4.0) (2026-09-04)
9
+
10
+
11
+ ### Features
12
+
13
+ * **stash:** Add the StashInfo facade surface and deprecate the legacy stash API ([3cc4c6b](https://github.com/ruby-git/ruby-git/commit/3cc4c6bdc58203eedf7f3207f8b915e52ebc6eee)), closes [#1730](https://github.com/ruby-git/ruby-git/issues/1730)
14
+ * **status:** Add Git::StatusInfo and Git::StatusFileInfo and deprecate Git::Status ([b0a376b](https://github.com/ruby-git/ruby-git/commit/b0a376b19fb3ac100a11b8fa5f07b0700a6f4ce6)), closes [#1720](https://github.com/ruby-git/ruby-git/issues/1720)
15
+ * **tag:** Add tag_list and tag_create and deprecate the Git::Object::Tag returns ([6f9c55c](https://github.com/ruby-git/ruby-git/commit/6f9c55c7d2e845c7ec595b9db5ad8117b28e90f8)), closes [#1719](https://github.com/ruby-git/ruby-git/issues/1719)
16
+ * **worktree:** Add WorktreeInfo, cover every subcommand, and deprecate the legacy API ([581d6ad](https://github.com/ruby-git/ruby-git/commit/581d6ad908fb746a3b5e1726157da3d33a04bae4)), closes [#1731](https://github.com/ruby-git/ruby-git/issues/1731)
17
+
18
+
19
+ ### Other Changes
20
+
21
+ * **release:** Move the workflow description into comments ([a5d90bd](https://github.com/ruby-git/ruby-git/commit/a5d90bdd7b9e07859007942eb07f9b153e9c9e0a)), closes [#1734](https://github.com/ruby-git/ruby-git/issues/1734)
22
+ * **tag:** Add failing specs for TagInfo facade methods and Object::Tag deprecation ([749c327](https://github.com/ruby-git/ruby-git/commit/749c327bf793fd8f4b06b7a2dd1740aa977e9b57)), closes [#1719](https://github.com/ruby-git/ruby-git/issues/1719)
23
+
24
+ ## [5.3.0](https://github.com/ruby-git/ruby-git/compare/v5.2.0...v5.3.0) (2026-09-03)
25
+
26
+
27
+ ### Features
28
+
29
+ * **author:** Add immutable Git::AuthorInfo and deprecate Git::Author ([c08b04b](https://github.com/ruby-git/ruby-git/commit/c08b04bf25142140c626fd16354355aae26b4fba)), closes [#1721](https://github.com/ruby-git/ruby-git/issues/1721)
30
+ * **branch:** Deprecate Git::Branch and Git::Branches in favor of Git::Repository#branch_list ([1581aa0](https://github.com/ruby-git/ruby-git/commit/1581aa00b3fc7984a2024b290b83f6f6f5e97838)), closes [#1639](https://github.com/ruby-git/ruby-git/issues/1639)
31
+ * **branch:** Deprecate Git::Branch#stashes in favor of Git::Repository#stashes_all ([dcee889](https://github.com/ruby-git/ruby-git/commit/dcee889a63bfd38cc3073577b55e2112721c5e33)), closes [#1637](https://github.com/ruby-git/ruby-git/issues/1637)
32
+ * **cat-file:** Deprecate the allow_unknown_type option of Git::Commands::CatFile::Raw ([95769ea](https://github.com/ruby-git/ruby-git/commit/95769ea683349c445a7a7ea7b839fc990d2d8c4b)), closes [#1709](https://github.com/ruby-git/ruby-git/issues/1709)
33
+ * **info:** Nest Git::AuthorInfo in Git::TagInfo and Git::StashInfo ([2f44f96](https://github.com/ruby-git/ruby-git/commit/2f44f9617122c3719625cf3a56f4b263b0de4c3c)), closes [#1745](https://github.com/ruby-git/ruby-git/issues/1745)
34
+ * **remote:** Deprecate Git::Remote and Git::Repository#remote in favor of #remote_list ([1abb585](https://github.com/ruby-git/ruby-git/commit/1abb585339c0d003622719aa5930b5bde2262502)), closes [#1643](https://github.com/ruby-git/ruby-git/issues/1643)
35
+ * **remote:** Freeze Git::RemoteInfo array-valued members ([4d44a3d](https://github.com/ruby-git/ruby-git/commit/4d44a3dc8fed77b39c7146675eaa9d46eb12e34d))
36
+ * **repository:** Add in_branch and merge_into facade methods ([59b58d0](https://github.com/ruby-git/ruby-git/commit/59b58d0389656051e8cd61bd856dc116139c2507)), closes [#1641](https://github.com/ruby-git/ruby-git/issues/1641)
37
+ * **repository:** Deprecate Git::Repository#remotes in favor of #remote_list ([410095c](https://github.com/ruby-git/ruby-git/commit/410095c4d2a3065c222f9cc750a05143230801d7)), closes [#1640](https://github.com/ruby-git/ruby-git/issues/1640)
38
+
39
+
40
+ ### Bug Fixes
41
+
42
+ * **branching:** Verify refs/heads when classifying the HEAD state ([bfc4d8a](https://github.com/ruby-git/ruby-git/commit/bfc4d8a2b82000906d1a398c69125fcfdc22c276)), closes [#1641](https://github.com/ruby-git/ruby-git/issues/1641)
43
+
44
+
45
+ ### Other Changes
46
+
47
+ * **adr:** Supersede ADR-0006 with a release-based deprecation period ([b3b32e3](https://github.com/ruby-git/ruby-git/commit/b3b32e339f3804d022ea83cec03977039ecdcace))
48
+ * **author:** Add failing tests for Git::AuthorInfo and Git::Author deprecation ([e0d3123](https://github.com/ruby-git/ruby-git/commit/e0d3123fadd836e301160f492e0a1303f43267b8)), closes [#1721](https://github.com/ruby-git/ruby-git/issues/1721)
49
+ * **branch:** Add failing test for the Git::Branch#stashes deprecation ([a806808](https://github.com/ruby-git/ruby-git/commit/a806808f3e5a5a38a92646c1ab64c8906b3dc525))
50
+ * **contributing:** Describe the release line and maintenance branch rules ([fd78c9c](https://github.com/ruby-git/ruby-git/commit/fd78c9ccd262470c9e33166ba63dc095b2060a5d))
51
+ * **info:** Add failing tests for nested Git::AuthorInfo on TagInfo and StashInfo ([a7f5e69](https://github.com/ruby-git/ruby-git/commit/a7f5e6988beaa85bce68e6295ad23a2754338d5b)), closes [#1745](https://github.com/ruby-git/ruby-git/issues/1745)
52
+ * **readme:** Add the deprecation and release support policies ([50ac2e2](https://github.com/ruby-git/ruby-git/commit/50ac2e28bdd6ddb9349b8980e457441a0d39f6c9))
53
+ * **remote:** Add failing tests for the Git::Remote and Git::Repository#remote deprecations ([36af404](https://github.com/ruby-git/ruby-git/commit/36af40419603f9c0a03f424e3839a1d7337b517b))
54
+ * **skills:** State the deprecation policy and the major release checklists ([a246cf8](https://github.com/ruby-git/ruby-git/commit/a246cf8fee93a96132f2bd1b0796899204b830a1))
55
+ * **upgrading:** Add the v6.0.0 upgrade procedure ([4d7c58c](https://github.com/ruby-git/ruby-git/commit/4d7c58c7a0e963da6146608093e9373dade1efe4))
56
+
8
57
  ## [5.2.0](https://github.com/ruby-git/ruby-git/compare/v5.1.0...v5.2.0) (2026-08-30)
9
58
 
10
59
 
data/CONTRIBUTING.md CHANGED
@@ -221,10 +221,14 @@ first keeps the review cycle short.
221
221
 
222
222
  This project maintains two active branches:
223
223
 
224
- - **`main`**: Active development for the next major version (v5.0.0+). This branch
225
- may contain breaking changes.
226
- - **`4.x`**: Maintenance branch for the v4.x release series. This branch receives bug
227
- fixes and backward-compatible improvements only.
224
+ - **`main`**: All development. It releases the next version of the gem, including
225
+ the next major version.
226
+ - **`4.x`**: The maintenance branch for the most recent previous major series. It
227
+ receives bug fixes and security fixes, and backward-compatible features at the
228
+ maintainers' discretion.
229
+
230
+ The README's [Release support policy](README.md#release-support-policy) says how long
231
+ each major series is supported.
228
232
 
229
233
  When submitting a pull request:
230
234
 
@@ -232,6 +236,15 @@ When submitting a pull request:
232
236
  - **Bug fixes**: Target `main`, and maintainers will backport to `4.x` if applicable
233
237
  - **Security fixes**: Target both branches or `4.x` if the issue only affects v4.x
234
238
 
239
+ Removing a deprecated API follows the
240
+ [deprecation policy](.github/skills/breaking-change-analysis/SKILL.md#step-4-deprecation-policy):
241
+
242
+ A removal PR merges to main only when its deprecation warning and `UPGRADING.md` entry
243
+ are contained in a previous normal release. Once any removal has merged to main, main
244
+ becomes the release line for the next major version. If another release of the
245
+ previous major is needed, it is cut from a branch created for that major (e.g. `4.x`
246
+ or `5.x`).
247
+
235
248
  ## AI-assisted contributions
236
249
 
237
250
  AI-assisted contributions are welcome. Please review and apply our [AI
data/README.md CHANGED
@@ -35,6 +35,8 @@ Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-%23FE5196?log
35
35
  - [Project policies](#project-policies)
36
36
  - [Ruby version support policy](#ruby-version-support-policy)
37
37
  - [Git version support policy](#git-version-support-policy)
38
+ - [Deprecation policy](#deprecation-policy)
39
+ - [Release support policy](#release-support-policy)
38
40
  - [Project announcements](#project-announcements)
39
41
  - [2026-08-23: v5.x deprecations and the v6.0.0 roadmap](#2026-08-23-v5x-deprecations-and-the-v600-roadmap)
40
42
  - [2026-07-28: v5.0.0 released](#2026-07-28-v500-released)
@@ -96,7 +98,7 @@ Clone, read status, and log:
96
98
  require 'git'
97
99
 
98
100
  repo = Git.clone('https://github.com/ruby-git/ruby-git.git', 'ruby-git')
99
- repo.status.changed.each { |f| puts "changed: #{f.path}" }
101
+ repo.status_info.changed.each_key { |path| puts "changed: #{path}" }
100
102
  repo.log(5).execute.each { |c| puts c.message }
101
103
  ```
102
104
 
@@ -296,9 +298,9 @@ See [the Active Support Deprecation
296
298
  documentation](https://api.rubyonrails.org/classes/ActiveSupport/Deprecation.html)
297
299
  for more details.
298
300
 
299
- If you silence deprecation warnings, reenable them before upgrading the git gem to
300
- the next major version. This makes it easier to identify changes needed for the
301
- upgrade.
301
+ Before upgrading the git gem to the next major version, follow the upgrade procedure
302
+ in [UPGRADING.md](UPGRADING.md#upgrading-to-v600). It turns the warnings into errors so
303
+ that you cannot miss one.
302
304
 
303
305
  For the full list of deprecated methods and their replacements, see
304
306
  [UPGRADING.md](UPGRADING.md).
@@ -382,6 +384,8 @@ opening issues or pull requests.
382
384
  | [AI_POLICY](AI_POLICY.md) | AI-assisted contributions are welcome. Contributors are expected to read and apply the AI Policy, and ensure any AI-assisted work meets our quality, security, and licensing standards. |
383
385
  | [Ruby version support policy](#ruby-version-support-policy) | Supported Ruby runtimes and platforms; bump decisions and CI coverage expectations. |
384
386
  | [Git version support policy](#git-version-support-policy) | Minimum supported git version and how version bumps are communicated and enforced. |
387
+ | [Deprecation policy](#deprecation-policy) | When an API may be removed, what a deprecation warning says, and how to upgrade across a major version. |
388
+ | [Release support policy](#release-support-policy) | Which branch releases what, and how long each major series is supported. |
385
389
  | [GOVERNANCE](GOVERNANCE.md) | Principles-first governance defining maintainer/project lead roles, least-privilege access, consensus/majority decisions, and nomination/emeritus steps. |
386
390
  | [MAINTAINERS](MAINTAINERS.md) | Lists active maintainers (Project Lead noted) and emeritus alumni with links; see governance for role scope. |
387
391
  | [LICENSE](LICENSE) | MIT License terms for using, modifying, and redistributing this project. |
@@ -418,6 +422,42 @@ The supported git version may be increased in future major or minor releases of
418
422
  gem as new git features are adopted or as maintaining backward compatibility becomes
419
423
  impractical. Such changes will be documented in the CHANGELOG and release notes.
420
424
 
425
+ ### Deprecation policy
426
+
427
+ This gem removes an API only in a major release, and only after a normal release
428
+ deprecated it with a runtime warning and documented its replacement in
429
+ [UPGRADING.md](UPGRADING.md). A normal release is one that is not a pre-release. The
430
+ warning names the major release that removes the API once that is decided. Until then
431
+ it says the API will be removed in a future major release.
432
+
433
+ The recommended way to upgrade across a major version:
434
+
435
+ 1. Upgrade to the latest release of the major series you are on.
436
+ 2. Set `GIT_DEPRECATION_BEHAVIOR=raise` (or `Git::Deprecation.behavior = :raise`) in
437
+ your test suite and, if possible, staging.
438
+ 3. Fix each deprecation using the entries in [UPGRADING.md](UPGRADING.md) until the
439
+ suite is clean.
440
+ 4. Upgrade to the next major release.
441
+
442
+ Because every deprecation warning is present in the last release of a major series,
443
+ this procedure finds every change the next major requires. The version-specific steps
444
+ are in [UPGRADING.md](UPGRADING.md#upgrading-to-v600). See
445
+ [Deprecations](#deprecations) for how to configure the warnings.
446
+
447
+ ### Release support policy
448
+
449
+ All development happens on `main`, which releases the next version of the gem,
450
+ including the next major version.
451
+
452
+ The most recent previous major series is maintained on a branch named for that
453
+ series, currently `4.x`. It receives bug fixes and security fixes, and
454
+ backward-compatible features at the maintainers' discretion. Fixes land on `main`
455
+ first and are backported, except a fix for a problem that exists only in the
456
+ maintenance branch, which targets that branch directly.
457
+
458
+ Support for a major series ends when the second major after it is released. v4.x is
459
+ supported until v6.0.0 ships, and v5.x until v7.0.0.
460
+
421
461
  ## Project announcements
422
462
 
423
463
  ### 2026-08-23: v5.x deprecations and the v6.0.0 roadmap
@@ -426,10 +466,11 @@ The road to v6.0.0 is now planned and public. The remaining ActiveRecord-style
426
466
  classes (`Git::Branch`, `Git::Remote`, `Git::Stash`, `Git::Worktree`,
427
467
  `Git::Object::Tag`, `Git::Status`, `Git::Author`, and their collections) will be
428
468
  deprecated during the v5.x series in favor of the immutable `*Info` value-object
429
- APIs. v6.0.0 will remove each deprecated class that passes the project's removal
430
- gate: a mandated deprecation soak period plus a proven-safe check. Any class that
431
- does not pass carries forward, still deprecated. v6.0.0 also raises the version
432
- floors: git ≥ 2.42.0, Ruby ≥ 3.4.
469
+ APIs. v6.0.0 will remove each deprecated class once a normal v5.x release has carried
470
+ its deprecation warning and UPGRADING.md entry, per the
471
+ [Deprecation policy](#deprecation-policy). v6.0.0 will not ship until every planned
472
+ deprecation has shipped that way. v6.0.0 also raises the version floors: git ≥ 2.42.0,
473
+ Ruby ≥ 3.4.
433
474
 
434
475
  [Issue #1717](https://github.com/ruby-git/ruby-git/issues/1717) is the living
435
476
  roadmap, tracking scope, sequencing, and status. If your code uses the classes