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 +4 -4
- data/CHANGELOG.md +49 -0
- data/CONTRIBUTING.md +17 -4
- data/README.md +49 -8
- data/UPGRADING.md +587 -3
- data/lib/git/author.rb +11 -0
- data/lib/git/author_info.rb +66 -0
- data/lib/git/branch.rb +216 -17
- data/lib/git/branch_info.rb +1 -1
- data/lib/git/branches.rb +35 -7
- data/lib/git/commands/cat_file/raw.rb +60 -6
- data/lib/git/object.rb +69 -15
- data/lib/git/parsers/stash.rb +50 -17
- data/lib/git/parsers/status.rb +251 -0
- data/lib/git/parsers/tag.rb +54 -8
- data/lib/git/parsers/worktree.rb +185 -0
- data/lib/git/remote.rb +37 -7
- data/lib/git/remote_info.rb +67 -10
- data/lib/git/repository/branching.rb +111 -1
- data/lib/git/repository/merging.rb +96 -2
- data/lib/git/repository/object_operations.rb +257 -20
- data/lib/git/repository/remote_operations.rb +57 -0
- data/lib/git/repository/shared_private.rb +67 -0
- data/lib/git/repository/stashing.rb +532 -52
- data/lib/git/repository/status_operations.rb +56 -8
- data/lib/git/repository/worktree_operations.rb +198 -18
- data/lib/git/stash.rb +31 -2
- data/lib/git/stash_info.rb +32 -34
- data/lib/git/stashes.rb +47 -11
- data/lib/git/status.rb +14 -0
- data/lib/git/status_file_info.rb +258 -0
- data/lib/git/status_info.rb +189 -0
- data/lib/git/tag_info.rb +23 -30
- data/lib/git/version.rb +1 -1
- data/lib/git/worktree.rb +39 -0
- data/lib/git/worktree_info.rb +128 -0
- data/lib/git/worktrees.rb +19 -1
- data/lib/git.rb +5 -0
- metadata +9 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 1b0ec11636ea561f0c879744f4c7b94fd12f2a2fae29da23ac22f338edefe9fe
|
|
4
|
+
data.tar.gz: b70d5290d89c34293b3dd47b839b1a6d091f7d081236623b844160269e07e2ae
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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`**:
|
|
225
|
-
|
|
226
|
-
- **`4.x`**:
|
|
227
|
-
fixes and backward-compatible
|
|
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.
|
|
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
|
-
|
|
300
|
-
|
|
301
|
-
|
|
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
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
floors: git ≥ 2.42.0,
|
|
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
|