git 1.19.1 → 2.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/pull_request_template.md +8 -0
- data/.github/workflows/continuous_integration.yml +14 -20
- data/.github/workflows/experimental_continuous_integration.yml +43 -0
- data/CHANGELOG.md +88 -0
- data/CONTRIBUTING.md +22 -67
- data/README.md +166 -52
- data/RELEASING.md +49 -34
- data/git.gemspec +8 -8
- data/lib/git/base.rb +173 -47
- data/lib/git/command_line.rb +377 -0
- data/lib/git/config.rb +5 -1
- data/lib/git/errors.rb +206 -0
- data/lib/git/escaped_path.rb +1 -1
- data/lib/git/lib.rb +244 -177
- data/lib/git/log.rb +65 -4
- data/lib/git/object.rb +69 -67
- data/lib/git/status.rb +132 -24
- data/lib/git/version.rb +1 -1
- data/lib/git.rb +8 -7
- metadata +41 -30
- data/.github/stale.yml +0 -25
- data/Dockerfile.changelog-rs +0 -12
- data/PULL_REQUEST_TEMPLATE.md +0 -9
- data/lib/git/base/factory.rb +0 -99
- data/lib/git/failed_error.rb +0 -53
- data/lib/git/git_execute_error.rb +0 -7
- data/lib/git/signaled_error.rb +0 -50
- /data/{ISSUE_TEMPLATE.md → .github/issue_template.md} +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b171ab737c87e925d5752b52f2f05bdd2361592624d88b8db8db380dde051019
|
4
|
+
data.tar.gz: d7b3b7cdaba4996288c4c0e8fffe7819da6c0933ade68ca810d9fb3519d5cda0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '08dd5a4ea7b07230642e2dd87fca85ea634890f4700b77a996b3ff4443fc62d3c11a230c082c4d5b2c45c6c7d6916d9b98ce7362676e72d1a4bdd6f0fe2043e6'
|
7
|
+
data.tar.gz: 568111f5579b6b1728974dbfa12dc4d742f3715e951645dbed9a54d91399492157b77659b2e956ee995c142c8dbb01f3ee07357fb4db2a9c2bd0e1870e83dc79
|
@@ -0,0 +1,8 @@
|
|
1
|
+
Review our [guidelines for contributing](https://github.com/ruby-git/ruby-git/blob/master/CONTRIBUTING.md) to this repository. A good start is to:
|
2
|
+
|
3
|
+
* Write tests for your changes
|
4
|
+
* Run `rake` before pushing
|
5
|
+
* Include / update docs in the README.md and in YARD documentation
|
6
|
+
|
7
|
+
# Description
|
8
|
+
|
@@ -2,39 +2,33 @@ name: CI
|
|
2
2
|
|
3
3
|
on:
|
4
4
|
push:
|
5
|
-
branches: [master]
|
5
|
+
branches: [master,v1]
|
6
6
|
pull_request:
|
7
|
-
branches: [master]
|
7
|
+
branches: [master,v1]
|
8
8
|
workflow_dispatch:
|
9
9
|
|
10
10
|
jobs:
|
11
|
-
|
12
|
-
|
11
|
+
build:
|
12
|
+
name: Ruby ${{ matrix.ruby }} on ${{ matrix.operating-system }}
|
13
|
+
runs-on: ${{ matrix.operating-system }}
|
14
|
+
continue-on-error: ${{ matrix.experimental == 'Yes' }}
|
15
|
+
env: { JAVA_OPTS: -Djdk.io.File.enableADS=true }
|
16
|
+
|
13
17
|
strategy:
|
14
18
|
fail-fast: false
|
15
19
|
matrix:
|
16
|
-
|
20
|
+
# Only the latest versions of JRuby and TruffleRuby are tested
|
21
|
+
ruby: ["3.0", "3.1", "3.2", "3.3", "truffleruby-24.0.0", "jruby-9.4.5.0"]
|
17
22
|
operating-system: [ubuntu-latest]
|
23
|
+
experimental: [No]
|
18
24
|
include:
|
19
|
-
-
|
20
|
-
|
21
|
-
- ruby: truffleruby-head
|
22
|
-
operating-system: ubuntu-latest
|
23
|
-
- ruby: 2.7
|
25
|
+
- # Only test with minimal Ruby version on Windows
|
26
|
+
ruby: 3.0
|
24
27
|
operating-system: windows-latest
|
25
|
-
- ruby: jruby-head
|
26
|
-
operating-system: windows-latest
|
27
|
-
|
28
|
-
name: Ruby ${{ matrix.ruby }} on ${{ matrix.operating-system }}
|
29
|
-
|
30
|
-
runs-on: ${{ matrix.operating-system }}
|
31
|
-
|
32
|
-
env:
|
33
|
-
JAVA_OPTS: -Djdk.io.File.enableADS=true
|
34
28
|
|
35
29
|
steps:
|
36
30
|
- name: Checkout Code
|
37
|
-
uses: actions/checkout@
|
31
|
+
uses: actions/checkout@v4
|
38
32
|
|
39
33
|
- name: Setup Ruby
|
40
34
|
uses: ruby/setup-ruby@v1
|
@@ -0,0 +1,43 @@
|
|
1
|
+
name: CI Experimental
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches: [master,v1]
|
6
|
+
workflow_dispatch:
|
7
|
+
|
8
|
+
jobs:
|
9
|
+
build:
|
10
|
+
name: Ruby ${{ matrix.ruby }} on ${{ matrix.operating-system }}
|
11
|
+
runs-on: ${{ matrix.operating-system }}
|
12
|
+
continue-on-error: true
|
13
|
+
env: { JAVA_OPTS: -Djdk.io.File.enableADS=true }
|
14
|
+
|
15
|
+
strategy:
|
16
|
+
fail-fast: false
|
17
|
+
matrix:
|
18
|
+
include:
|
19
|
+
- # Building against head version of Ruby is considered experimental
|
20
|
+
ruby: head
|
21
|
+
operating-system: ubuntu-latest
|
22
|
+
experimental: Yes
|
23
|
+
|
24
|
+
- # Since JRuby on Windows is known to not work, consider this experimental
|
25
|
+
ruby: jruby-head
|
26
|
+
operating-system: windows-latest
|
27
|
+
experimental: Yes
|
28
|
+
|
29
|
+
steps:
|
30
|
+
- name: Checkout Code
|
31
|
+
uses: actions/checkout@v4
|
32
|
+
|
33
|
+
- name: Setup Ruby
|
34
|
+
uses: ruby/setup-ruby@v1
|
35
|
+
with:
|
36
|
+
ruby-version: ${{ matrix.ruby }}
|
37
|
+
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
|
38
|
+
|
39
|
+
- name: Run Build
|
40
|
+
run: bundle exec rake default
|
41
|
+
|
42
|
+
- name: Test Gem
|
43
|
+
run: bundle exec rake test:gem
|
data/CHANGELOG.md
CHANGED
@@ -5,6 +5,94 @@
|
|
5
5
|
|
6
6
|
# Change Log
|
7
7
|
|
8
|
+
## v2.1.1 (2024-06-01)
|
9
|
+
|
10
|
+
[Full Changelog](https://github.com/ruby-git/ruby-git/compare/v2.1.0..v2.1.1)
|
11
|
+
|
12
|
+
Changes since v2.1.0:
|
13
|
+
|
14
|
+
* 6ce3d4d Handle ignored files with quoted (non-ASCII) filenames
|
15
|
+
* dd8e8d4 Supply all of the _specific_ color options too
|
16
|
+
* 749a72d Memoize all of the significant calls in Git::Status
|
17
|
+
* 2bacccc When core.ignoreCase, check for untracked files case-insensitively
|
18
|
+
* 7758ee4 When core.ignoreCase, check for deleted files case-insensitively
|
19
|
+
* 993eb78 When core.ignoreCase, check for added files case-insensitively
|
20
|
+
* d943bf4 When core.ignoreCase, check for changed files case-insensitively
|
21
|
+
|
22
|
+
## v2.1.0 (2024-05-31)
|
23
|
+
|
24
|
+
[Full Changelog](https://github.com/ruby-git/ruby-git/compare/v2.0.1..v2.1.0)
|
25
|
+
|
26
|
+
Changes since v2.0.1:
|
27
|
+
|
28
|
+
* 93c8210 Add Git::Log#max_count
|
29
|
+
* d84097b Update YARDoc for a few a few method
|
30
|
+
|
31
|
+
## v2.0.1 (2024-05-21)
|
32
|
+
|
33
|
+
[Full Changelog](https://github.com/ruby-git/ruby-git/compare/v2.0.0..v2.0.1)
|
34
|
+
|
35
|
+
Changes since v2.0.0:
|
36
|
+
|
37
|
+
* da435b1 Document and add tests for Git::Status
|
38
|
+
* c8a77db Fix Git::Base#status on an empty repo
|
39
|
+
* 712fdad Fix Git::Status#untracked when run from worktree subdir
|
40
|
+
* 6a59bc8 Remove the Git::Base::Factory module
|
41
|
+
|
42
|
+
## v2.0.0 (2024-05-10)
|
43
|
+
|
44
|
+
[Full Changelog](https://github.com/ruby-git/ruby-git/compare/v2.0.0.pre4..v2.0.0)
|
45
|
+
|
46
|
+
Changes since v2.0.0.pre4:
|
47
|
+
|
48
|
+
* 1afc4c6 Update 2.x release line description
|
49
|
+
* ed52420 Make the pull request template more concise
|
50
|
+
* 299ae6b Remove stale bot integration
|
51
|
+
* efb724b Remove the DCO requirement for commits
|
52
|
+
|
53
|
+
## v2.0.0.pre4 (2024-05-10)
|
54
|
+
|
55
|
+
[Full Changelog](https://jcouball@github.com/ruby-git/ruby-git/compare/v2.0.0.pre3..v2.0.0.pre4)
|
56
|
+
|
57
|
+
Changes since v2.0.0.pre3:
|
58
|
+
|
59
|
+
* 56783e7 Update create_github_release dependency so pre-releases can be made
|
60
|
+
* 8566929 Add dependency on create_github_release gem used for releasing the git gem
|
61
|
+
* 7376d76 Refactor errors that are raised by this gem
|
62
|
+
* 7e99b17 Update documentation for new timeout functionality
|
63
|
+
* 705e983 Move experimental builds to a separate workflow that only runs when pushed to master
|
64
|
+
* e056d64 Build with jruby-head on Windows until jruby/jruby#7515 is fixed
|
65
|
+
* ec7c257 Remove unneeded scripts to create a new release
|
66
|
+
* d9570ab Move issue and pull request templates to the .github directory
|
67
|
+
* e4d6a77 Show log(x).since combination in README
|
68
|
+
|
69
|
+
## v2.0.0.pre3 (2024-03-15)
|
70
|
+
|
71
|
+
[Full Changelog](https://github.com/ruby-git/ruby-git/compare/v2.0.0.pre2..v2.0.0.pre3)
|
72
|
+
|
73
|
+
Changes since v2.0.0.pre2:
|
74
|
+
|
75
|
+
* 5d4b34e Allow allow_unrelated_histories option for Base#pull
|
76
|
+
|
77
|
+
## v2.0.0.pre2 (2024-02-24)
|
78
|
+
|
79
|
+
[Full Changelog](https://github.com/ruby-git/ruby-git/compare/v2.0.0.pre1..v2.0.0.pre2)
|
80
|
+
|
81
|
+
Changes since v2.0.0.pre1:
|
82
|
+
|
83
|
+
* 023017b Add a timeout for git commands (#692)
|
84
|
+
* 8286ceb Refactor the Error heriarchy (#693)
|
85
|
+
|
86
|
+
## v2.0.0.pre1 (2024-01-15)
|
87
|
+
|
88
|
+
[Full Changelog](https://github.com/ruby-git/ruby-git/compare/v1.19.1..v2.0.0.pre1)
|
89
|
+
|
90
|
+
Changes since v1.19.1:
|
91
|
+
|
92
|
+
* 7585c39 Change how the git CLI subprocess is executed (#684)
|
93
|
+
* f93e042 Update instructions for releasing a new version of the git gem (#686)
|
94
|
+
* f48930d Update minimum required version of Ruby and Git (#685)
|
95
|
+
|
8
96
|
## v1.19.1 (2024-01-13)
|
9
97
|
|
10
98
|
[Full Changelog](https://github.com/ruby-git/ruby-git/compare/v1.19.0..v1.19.1)
|
data/CONTRIBUTING.md
CHANGED
@@ -40,10 +40,6 @@ There is three step process for code or documentation changes:
|
|
40
40
|
|
41
41
|
Make your changes in a fork of the ruby-git repository.
|
42
42
|
|
43
|
-
Each commit must include a [DCO sign-off](#developer-certificate-of-origin-dco)
|
44
|
-
by adding the line `Signed-off-by: Name <email>` to the end of the commit
|
45
|
-
message.
|
46
|
-
|
47
43
|
### Create a pull request
|
48
44
|
|
49
45
|
See [this article](https://help.github.com/articles/about-pull-requests/) if you
|
@@ -71,15 +67,18 @@ request meets [the project's coding standards](#coding-standards).
|
|
71
67
|
In order to ensure high quality, all pull requests must meet these requirements:
|
72
68
|
|
73
69
|
### 1 PR = 1 Commit
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
70
|
+
|
71
|
+
* All commits for a PR must be squashed into one commit
|
72
|
+
* To avoid an extra merge commit, the PR must be able to be merged as [a fast forward
|
73
|
+
merge](https://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging)
|
74
|
+
* The easiest way to ensure a fast forward merge is to rebase your local branch to
|
75
|
+
the ruby-git master branch
|
78
76
|
|
79
77
|
### Unit tests
|
80
|
-
|
81
|
-
|
82
|
-
|
78
|
+
|
79
|
+
* All changes must be accompanied by new or modified unit tests
|
80
|
+
* The entire test suite must pass when `bundle exec rake default` is run from the
|
81
|
+
project's local working copy.
|
83
82
|
|
84
83
|
While working on specific features you can run individual test files or
|
85
84
|
a group of tests using `bin/test`:
|
@@ -94,20 +93,21 @@ a group of tests using `bin/test`:
|
|
94
93
|
$ bin/test
|
95
94
|
|
96
95
|
### Continuous integration
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
96
|
+
|
97
|
+
* All tests must pass in the project's [GitHub Continuous Integration
|
98
|
+
build](https://github.com/ruby-git/ruby-git/actions?query=workflow%3ACI) before the
|
99
|
+
pull request will be merged.
|
100
|
+
* The [Continuous Integration
|
101
|
+
workflow](https://github.com/ruby-git/ruby-git/blob/master/.github/workflows/continuous_integration.yml)
|
102
|
+
runs both `bundle exec rake default` and `bundle exec rake test:gem` from the
|
103
|
+
project's [Rakefile](https://github.com/ruby-git/ruby-git/blob/master/Rakefile).
|
101
104
|
|
102
105
|
### Documentation
|
103
|
-
* New and updated public methods must have [YARD](https://yardoc.org/)
|
104
|
-
documentation added to them
|
105
|
-
* New and updated public facing features should be documented in the project's
|
106
|
-
[README.md](README.md)
|
107
106
|
|
108
|
-
|
109
|
-
|
110
|
-
|
107
|
+
* New and updated public methods must have [YARD](https://yardoc.org/) documentation
|
108
|
+
added to them
|
109
|
+
* New and updated public facing features should be documented in the project's
|
110
|
+
[README.md](README.md)
|
111
111
|
|
112
112
|
## Licensing
|
113
113
|
|
@@ -116,48 +116,3 @@ declared in the [LICENSE](LICENSE) file.
|
|
116
116
|
|
117
117
|
Licensing is very important to open source projects. It helps ensure the
|
118
118
|
software continues to be available under the terms that the author desired.
|
119
|
-
|
120
|
-
### Developer Certificate of Origin (DCO)
|
121
|
-
|
122
|
-
This project requires that authors have permission to submit their contributions
|
123
|
-
under the MIT license. To make a good faith effort to ensure this, ruby-git
|
124
|
-
requires the [Developer Certificate of Origin (DCO)](https://elinux.org/Developer_Certificate_Of_Origin)
|
125
|
-
process be followed.
|
126
|
-
|
127
|
-
This process requires that each commit include a `Signed-off-by` line that
|
128
|
-
indicates the author accepts the DCO. Here is an example DCO sign-off line:
|
129
|
-
|
130
|
-
```
|
131
|
-
Signed-off-by: John Doe <john.doe@hisdomain.com>
|
132
|
-
```
|
133
|
-
|
134
|
-
The full text of the DCO version 1.1 is below or at <http://developercertificate.org/>.
|
135
|
-
|
136
|
-
```
|
137
|
-
Developer's Certificate of Origin 1.1
|
138
|
-
|
139
|
-
By making a contribution to this project, I certify that:
|
140
|
-
|
141
|
-
(a) The contribution was created in whole or in part by me and I
|
142
|
-
have the right to submit it under the open source license
|
143
|
-
indicated in the file; or
|
144
|
-
|
145
|
-
(b) The contribution is based upon previous work that, to the
|
146
|
-
best of my knowledge, is covered under an appropriate open
|
147
|
-
source license and I have the right under that license to
|
148
|
-
submit that work with modifications, whether created in whole
|
149
|
-
or in part by me, under the same open source license (unless
|
150
|
-
I am permitted to submit under a different license), as
|
151
|
-
Indicated in the file; or
|
152
|
-
|
153
|
-
(c) The contribution was provided directly to me by some other
|
154
|
-
person who certified (a), (b) or (c) and I have not modified
|
155
|
-
it.
|
156
|
-
|
157
|
-
(d) I understand and agree that this project and the contribution
|
158
|
-
are public and that a record of the contribution (including
|
159
|
-
all personal information I submit with it, including my
|
160
|
-
sign-off) is maintained indefinitely and may be redistributed
|
161
|
-
consistent with this project or the open source license(s)
|
162
|
-
involved.
|
163
|
-
```
|
data/README.md
CHANGED
@@ -11,66 +11,79 @@
|
|
11
11
|
[![Build Status](https://github.com/ruby-git/ruby-git/workflows/CI/badge.svg?branch=master)](https://github.com/ruby-git/ruby-git/actions?query=workflow%3ACI)
|
12
12
|
[![Code Climate](https://codeclimate.com/github/ruby-git/ruby-git.png)](https://codeclimate.com/github/ruby-git/ruby-git)
|
13
13
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
14
|
+
* [Summary](#summary)
|
15
|
+
* [v2.x Release](#v2x-release)
|
16
|
+
* [Install](#install)
|
17
|
+
* [Major Objects](#major-objects)
|
18
|
+
* [Errors Raised By This Gem](#errors-raised-by-this-gem)
|
19
|
+
* [Specifying And Handling Timeouts](#specifying-and-handling-timeouts)
|
20
|
+
* [Examples](#examples)
|
21
|
+
* [Ruby version support policy](#ruby-version-support-policy)
|
22
|
+
* [License](#license)
|
19
23
|
|
20
|
-
##
|
24
|
+
## Summary
|
21
25
|
|
22
|
-
git
|
26
|
+
The [git gem](https://rubygems.org/gems/git) provides a Ruby interface to the `git`
|
27
|
+
command line.
|
28
|
+
|
29
|
+
Get started by obtaining a repository object by:
|
30
|
+
|
31
|
+
* opening an existing working copy with [Git.open](https://rubydoc.info/gems/git/Git#open-class_method)
|
32
|
+
* initializing a new repository with [Git.init](https://rubydoc.info/gems/git/Git#init-class_method)
|
33
|
+
* cloning a repository with [Git.clone](https://rubydoc.info/gems/git/Git#clone-class_method)
|
34
|
+
|
35
|
+
Methods that can be called on a repository object are documented in [Git::Base](https://rubydoc.info/gems/git/Git/Base)
|
36
|
+
|
37
|
+
## v2.x Release
|
38
|
+
|
39
|
+
git 2.0.0 has recently been released. Please give it a try.
|
40
|
+
|
41
|
+
**If you have problems with the 2.x release, open an issue and use the 1.x version
|
42
|
+
instead.** We will do our best to fix your issues in a timely fashion.
|
23
43
|
|
24
44
|
**JRuby on Windows is not yet supported by the 2.x release line. Users running JRuby
|
25
45
|
on Windows should continue to use the 1.x release line.**
|
26
46
|
|
27
|
-
The changes
|
47
|
+
The changes in this major release include:
|
28
48
|
|
49
|
+
* Added a dependency on the activesupport gem to use the deprecation functionality
|
29
50
|
* Create a policy of supported Ruby versions to support only non-EOL Ruby versions
|
30
51
|
* Create a policy of supported Git CLI versions (released 2020-12-25)
|
31
52
|
* Update the required Ruby version to at least 3.0 (released 2020-07-27)
|
32
53
|
* Update the required Git command line version to at least 2.28
|
33
54
|
* Update how CLI commands are called to use the [process_executer](https://github.com/main-branch/process_executer)
|
34
55
|
gem which is built on top of [Kernel.spawn](https://ruby-doc.org/3.3.0/Kernel.html#method-i-spawn).
|
35
|
-
See [PR #
|
56
|
+
See [PR #684](https://github.com/ruby-git/ruby-git/pull/684) for more details
|
36
57
|
on the motivation for this implementation.
|
37
58
|
|
38
|
-
The tentative plan is to release `2.0.0` near the end of March 2024 depending on
|
39
|
-
the feedback received during the pre-release period.
|
40
|
-
|
41
59
|
The `master` branch will be used for `2.x` development. If needed, fixes for `1.x`
|
42
60
|
version will be done on the `v1` branch.
|
43
61
|
|
44
|
-
##
|
45
|
-
|
46
|
-
The project source code is at:
|
47
|
-
|
48
|
-
http://github.com/ruby-git/ruby-git
|
49
|
-
|
50
|
-
## Documentation
|
51
|
-
|
52
|
-
Detailed documentation can be found at:
|
53
|
-
|
54
|
-
https://rubydoc.info/gems/git/Git.html
|
62
|
+
## Install
|
55
63
|
|
56
|
-
|
64
|
+
Install the gem and add to the application's Gemfile by executing:
|
57
65
|
|
58
|
-
|
59
|
-
|
60
|
-
|
66
|
+
```shell
|
67
|
+
bundle add git
|
68
|
+
```
|
61
69
|
|
62
|
-
|
70
|
+
to install version 1.x:
|
63
71
|
|
64
|
-
|
72
|
+
```shell
|
73
|
+
bundle add git --version "~> 1.19"
|
74
|
+
```
|
65
75
|
|
66
|
-
|
76
|
+
If bundler is not being used to manage dependencies, install the gem by executing:
|
67
77
|
|
68
|
-
```
|
69
|
-
|
78
|
+
```shell
|
79
|
+
gem install git
|
70
80
|
```
|
71
81
|
|
72
|
-
|
82
|
+
to install version 1.x:
|
73
83
|
|
84
|
+
```shell
|
85
|
+
gem install git --version "~> 1.19"
|
86
|
+
```
|
74
87
|
|
75
88
|
## Major Objects
|
76
89
|
|
@@ -88,28 +101,112 @@ directory, in the index and in the repository. Similar to running 'git status'
|
|
88
101
|
|
89
102
|
**Git::Remote**- A reference to a remote repository that is tracked by this repository.
|
90
103
|
|
91
|
-
**Git::Log** - An Enumerable object that references all the `Git::Object::Commit`
|
92
|
-
|
104
|
+
**Git::Log** - An Enumerable object that references all the `Git::Object::Commit`
|
105
|
+
objects that encompass your log query, which can be constructed through methods on
|
106
|
+
the `Git::Log object`, like:
|
93
107
|
|
94
|
-
|
108
|
+
```ruby
|
109
|
+
git.log
|
110
|
+
.max_count(:all)
|
111
|
+
.object('README.md')
|
112
|
+
.since('10 years ago')
|
113
|
+
.between('v1.0.7', 'HEAD')
|
114
|
+
.map { |commit| commit.sha }
|
115
|
+
```
|
95
116
|
|
96
|
-
|
117
|
+
A maximum of 30 commits are returned if `max_count` is not called. To get all commits
|
118
|
+
that match the log query, call `max_count(:all)`.
|
97
119
|
|
98
|
-
|
120
|
+
Note that `git.log.all` adds the `--all` option to the underlying `git log` command.
|
121
|
+
This asks for the logs of all refs (basically all commits reachable by HEAD,
|
122
|
+
branches, and tags). This does not control the maximum number of commits returned. To
|
123
|
+
control how many commits are returned, you should call `max_count`.
|
99
124
|
|
100
|
-
|
125
|
+
**Git::Worktrees** - Enumerable object that holds `Git::Worktree objects`.
|
101
126
|
|
102
|
-
##
|
127
|
+
## Errors Raised By This Gem
|
103
128
|
|
104
|
-
|
129
|
+
The git gem will only raise an `ArgumentError` or an error that is a subclass of
|
130
|
+
`Git::Error`. It does not explicitly raise any other types of errors.
|
105
131
|
|
106
|
-
|
132
|
+
It is recommended to rescue `Git::Error` to catch any runtime error raised by
|
133
|
+
this gem unless you need more specific error handling.
|
107
134
|
|
108
135
|
```ruby
|
109
|
-
|
136
|
+
begin
|
137
|
+
# some git operation
|
138
|
+
rescue Git::Error => e
|
139
|
+
puts "An error occurred: #{e.message}"
|
140
|
+
end
|
110
141
|
```
|
111
142
|
|
143
|
+
See [`Git::Error`](https://rubydoc.info/gems/git/Git/Error) for more information.
|
144
|
+
|
145
|
+
## Specifying And Handling Timeouts
|
146
|
+
|
147
|
+
The timeout feature was added in git gem version `2.0.0`.
|
148
|
+
|
149
|
+
A timeout for git command line operations can be set either globally or for specific
|
150
|
+
method calls that accept a `:timeout` parameter.
|
151
|
+
|
152
|
+
The timeout value must be a real, non-negative `Numeric` value that specifies a
|
153
|
+
number of seconds a `git` command will be given to complete before being sent a KILL
|
154
|
+
signal. This library may hang if the `git` command does not terminate after receiving
|
155
|
+
the KILL signal.
|
156
|
+
|
157
|
+
When a command times out, it is killed by sending it the `SIGKILL` signal and a
|
158
|
+
`Git::TimeoutError` is raised. This error derives from the `Git::SignaledError` and
|
159
|
+
`Git::Error`.
|
160
|
+
|
161
|
+
If the timeout value is `0` or `nil`, no timeout will be enforced.
|
162
|
+
|
163
|
+
If a method accepts a `:timeout` parameter and a receives a non-nil value, the value
|
164
|
+
of this parameter will override the global timeout value. In this context, a value of
|
165
|
+
`nil` (which is usually the default) will use the global timeout value and a value of
|
166
|
+
`0` will turn off timeout enforcement for that method call no matter what the global
|
167
|
+
value is.
|
168
|
+
|
169
|
+
To set a global timeout, use the `Git.config` object:
|
170
|
+
|
171
|
+
```ruby
|
172
|
+
Git.config.timeout = nil # a value of nil or 0 means no timeout is enforced
|
173
|
+
Git.config.timeout = 1.5 # can be any real, non-negative Numeric interpreted as number of seconds
|
174
|
+
```
|
175
|
+
|
176
|
+
The global timeout can be overridden for a specific method if the method accepts a
|
177
|
+
`:timeout` parameter:
|
178
|
+
|
179
|
+
```ruby
|
180
|
+
repo_url = 'https://github.com/ruby-git/ruby-git.git'
|
181
|
+
Git.clone(repo_url) # Use the global timeout value
|
182
|
+
Git.clone(repo_url, timeout: nil) # Also uses the global timeout value
|
183
|
+
Git.clone(repo_url, timeout: 0) # Do not enforce a timeout
|
184
|
+
Git.clone(repo_url, timeout: 10.5) # Timeout after 10.5 seconds raising Git::SignaledError
|
185
|
+
```
|
186
|
+
|
187
|
+
If the command takes too long, a `Git::TimeoutError` will be raised:
|
188
|
+
|
189
|
+
```ruby
|
190
|
+
begin
|
191
|
+
Git.clone(repo_url, timeout: 10)
|
192
|
+
rescue Git::TimeoutError => e
|
193
|
+
e.result.tap do |r|
|
194
|
+
r.class #=> Git::CommandLineResult
|
195
|
+
r.status #=> #<Process::Status: pid 62173 SIGKILL (signal 9)>
|
196
|
+
r.status.timeout? #=> true
|
197
|
+
r.git_cmd # The git command ran as an array of strings
|
198
|
+
r.stdout # The command's output to stdout until it was terminated
|
199
|
+
r.stderr # The command's output to stderr until it was terminated
|
200
|
+
end
|
201
|
+
end
|
202
|
+
```
|
203
|
+
|
204
|
+
## Examples
|
205
|
+
|
206
|
+
Here are a bunch of examples of how to use the Ruby/Git package.
|
207
|
+
|
112
208
|
Require the 'git' gem.
|
209
|
+
|
113
210
|
```ruby
|
114
211
|
require 'git'
|
115
212
|
```
|
@@ -139,9 +236,12 @@ g.index.writable?
|
|
139
236
|
g.repo
|
140
237
|
g.dir
|
141
238
|
|
142
|
-
|
143
|
-
|
144
|
-
g.log
|
239
|
+
# log - returns a Git::Log object, which is an Enumerator of Git::Commit objects
|
240
|
+
# default configuration returns a max of 30 commits
|
241
|
+
g.log
|
242
|
+
g.log(200) # 200 most recent commits
|
243
|
+
g.log.since('2 weeks ago') # default count of commits since 2 weeks ago.
|
244
|
+
g.log(200).since('2 weeks ago') # commits since 2 weeks ago, limited to 200.
|
145
245
|
g.log.between('v2.5', 'v2.6')
|
146
246
|
g.log.each {|l| puts l.sha }
|
147
247
|
g.gblob('v2.5:Makefile').log.since('2 weeks ago')
|
@@ -276,11 +376,11 @@ g.add(:all=>true) # git add --all -- "."
|
|
276
376
|
g.add('file_path') # git add -- "file_path"
|
277
377
|
g.add(['file_path_1', 'file_path_2']) # git add -- "file_path_1" "file_path_2"
|
278
378
|
|
279
|
-
g.remove()
|
280
|
-
g.remove('file.txt')
|
281
|
-
g.remove(['file.txt', 'file2.txt'])
|
282
|
-
g.remove('file.txt', :recursive => true)
|
283
|
-
g.remove('file.txt', :cached => true)
|
379
|
+
g.remove() # git rm -f -- "."
|
380
|
+
g.remove('file.txt') # git rm -f -- "file.txt"
|
381
|
+
g.remove(['file.txt', 'file2.txt']) # git rm -f -- "file.txt" "file2.txt"
|
382
|
+
g.remove('file.txt', :recursive => true) # git rm -f -r -- "file.txt"
|
383
|
+
g.remove('file.txt', :cached => true) # git rm -f --cached -- "file.txt"
|
284
384
|
|
285
385
|
g.commit('message')
|
286
386
|
g.commit_all('message')
|
@@ -422,6 +522,20 @@ g.with_temp_working(dir) do
|
|
422
522
|
end
|
423
523
|
```
|
424
524
|
|
525
|
+
## Ruby version support policy
|
526
|
+
|
527
|
+
This gem will be expected to function correctly on:
|
528
|
+
|
529
|
+
* All non-EOL versions of the MRI Ruby on Mac, Linux, and Windows
|
530
|
+
* The latest version of JRuby on Linux
|
531
|
+
* The latest version of Truffle Ruby on Linus
|
532
|
+
|
533
|
+
It is this project's intent to support the latest version of JRuby on Windows
|
534
|
+
once the following JRuby bug is fixed:
|
535
|
+
|
536
|
+
jruby/jruby#7515
|
537
|
+
|
425
538
|
## License
|
426
539
|
|
427
|
-
|
540
|
+
Licensed under MIT License Copyright (c) 2008 Scott Chacon. See LICENSE for further
|
541
|
+
details.
|