git 2.0.0.pre2 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 23b5fa33a9a0cb112334c8b243abd6b388984d5f63aa2ee57f83e67d66e68f4b
4
- data.tar.gz: 292e0d1c9aa4ce4671206abcdb1a547ab606090ecd7b8f2d182def4721347c03
3
+ metadata.gz: 9ebad290719cdefc27125cf9a2ebb0d3544334c2d49a079220c0714a701ce141
4
+ data.tar.gz: 293499cbb61ca9b4d374e86d0bd4357ed3f3b1254a46aa57c095cf0816afd7f6
5
5
  SHA512:
6
- metadata.gz: 2332e16fc52d5ff5fd67cea38a1e4196bb98c06256746e81d13b0572ac78957743559eb27b8de752ba8c960e72f912cb5077fce625b6233ed6e63e1c2ef67890
7
- data.tar.gz: bf769b8943941cec7efa01bae6152302023045d01a69c6aaddf9c04f8815eb18828a2e81b8133d0c7ab873235f08acfecce528d3e7f8659fb032baa73e44c6a1
6
+ metadata.gz: 8fc0929f6ff79eea57f5dbd5f05da813bb55f6c44f925ce45f4ad4f3a011c99e3cfa2d00c4a18824e1521ab975fa70057127b143d77e301f0d5d2382cd4d7480
7
+ data.tar.gz: 5ef0e326223cc983605c8afc002e3fe77808d337a3a3dcfd1b25588adf58b5c697a3451fd8baae777f727a5f2ba3cb92f2c3e811c79bc9f5da836b24ad5a8a6b
@@ -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
+
@@ -22,20 +22,10 @@ jobs:
22
22
  operating-system: [ubuntu-latest]
23
23
  experimental: [No]
24
24
  include:
25
- - # Building against head version of Ruby is considered experimental
26
- ruby: head
27
- operating-system: ubuntu-latest
28
- experimental: Yes
29
-
30
25
  - # Only test with minimal Ruby version on Windows
31
26
  ruby: 3.0
32
27
  operating-system: windows-latest
33
28
 
34
- - # Since JRuby on Windows is known to not work, consider this experimental
35
- ruby: jruby-9.4.5.0
36
- operating-system: windows-latest
37
- experimental: Yes
38
-
39
29
  steps:
40
30
  - name: Checkout Code
41
31
  uses: actions/checkout@v4
@@ -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,41 @@
5
5
 
6
6
  # Change Log
7
7
 
8
+ ## v2.0.0 (2024-05-10)
9
+
10
+ [Full Changelog](https://github.com/ruby-git/ruby-git/compare/v2.0.0.pre4..v2.0.0)
11
+
12
+ Changes since v2.0.0.pre4:
13
+
14
+ * 1afc4c6 Update 2.x release line description
15
+ * ed52420 Make the pull request template more concise
16
+ * 299ae6b Remove stale bot integration
17
+ * efb724b Remove the DCO requirement for commits
18
+
19
+ ## v2.0.0.pre4 (2024-05-10)
20
+
21
+ [Full Changelog](https://jcouball@github.com/ruby-git/ruby-git/compare/v2.0.0.pre3..v2.0.0.pre4)
22
+
23
+ Changes since v2.0.0.pre3:
24
+
25
+ * 56783e7 Update create_github_release dependency so pre-releases can be made
26
+ * 8566929 Add dependency on create_github_release gem used for releasing the git gem
27
+ * 7376d76 Refactor errors that are raised by this gem
28
+ * 7e99b17 Update documentation for new timeout functionality
29
+ * 705e983 Move experimental builds to a separate workflow that only runs when pushed to master
30
+ * e056d64 Build with jruby-head on Windows until jruby/jruby#7515 is fixed
31
+ * ec7c257 Remove unneeded scripts to create a new release
32
+ * d9570ab Move issue and pull request templates to the .github directory
33
+ * e4d6a77 Show log(x).since combination in README
34
+
35
+ ## v2.0.0.pre3 (2024-03-15)
36
+
37
+ [Full Changelog](https://github.com/ruby-git/ruby-git/compare/v2.0.0.pre2..v2.0.0.pre3)
38
+
39
+ Changes since v2.0.0.pre2:
40
+
41
+ * 5d4b34e Allow allow_unrelated_histories option for Base#pull
42
+
8
43
  ## v2.0.0.pre2 (2024-02-24)
9
44
 
10
45
  [Full Changelog](https://github.com/ruby-git/ruby-git/compare/v2.0.0.pre1..v2.0.0.pre2)
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
- * All commits for a PR must be squashed into one commit
75
- * To avoid an extra merge commit, the PR must be able to be merged as [a fast forward merge](https://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging)
76
- * The easiest way to ensure a fast forward merge is to rebase your local branch
77
- to the ruby-git master branch
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
- * All changes must be accompanied by new or modified unit tests
81
- * The entire test suite must pass when `bundle exec rake default` is run from the
82
- project's local working copy.
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
- * All tests must pass in the project's [GitHub Continuous Integration build](https://github.com/ruby-git/ruby-git/actions?query=workflow%3ACI)
98
- before the pull request will be merged.
99
- * The [Continuous Integration workflow](https://github.com/ruby-git/ruby-git/blob/master/.github/workflows/continuous_integration.yml)
100
- runs both `bundle exec rake default` and `bundle exec rake test:gem` from the project's [Rakefile](https://github.com/ruby-git/ruby-git/blob/master/Rakefile).
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
- ### Licensing sign-off
109
- * Each commit must contain [the DCO sign-off](#developer-certificate-of-origin-dco)
110
- in the form: `Signed-off-by: Name <email>`
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
@@ -12,7 +12,7 @@
12
12
  [![Code Climate](https://codeclimate.com/github/ruby-git/ruby-git.png)](https://codeclimate.com/github/ruby-git/ruby-git)
13
13
 
14
14
  * [Summary](#summary)
15
- * [v2.0.0 pre-release](#v200-pre-release)
15
+ * [v2.x Release](#v2x-release)
16
16
  * [Install](#install)
17
17
  * [Major Objects](#major-objects)
18
18
  * [Errors Raised By This Gem](#errors-raised-by-this-gem)
@@ -37,15 +37,20 @@ Get started by obtaining a repository object by:
37
37
 
38
38
  Methods that can be called on a repository object are documented in [Git::Base](https://rubydoc.info/gems/git/Git/Base)
39
39
 
40
- ## v2.0.0 pre-release
40
+ ## v2.x Release
41
41
 
42
- git 2.0.0 is available as a pre-release version for testing! Please give it a try.
42
+ git 2.0.0 has recently been released. Please give it a try.
43
+
44
+
45
+ **If you have problems with the 2.x release, open an issue and use the 1.9.1 version
46
+ instead.** We will do our best to fix your issues in a timely fashion.
43
47
 
44
48
  **JRuby on Windows is not yet supported by the 2.x release line. Users running JRuby
45
49
  on Windows should continue to use the 1.x release line.**
46
50
 
47
- The changes coming in this major release include:
51
+ The changes in this major release include:
48
52
 
53
+ * Added a dependency on the activesupport gem to use the deprecation functionality
49
54
  * Create a policy of supported Ruby versions to support only non-EOL Ruby versions
50
55
  * Create a policy of supported Git CLI versions (released 2020-12-25)
51
56
  * Update the required Ruby version to at least 3.0 (released 2020-07-27)
@@ -55,9 +60,6 @@ The changes coming in this major release include:
55
60
  See [PR #684](https://github.com/ruby-git/ruby-git/pull/684) for more details
56
61
  on the motivation for this implementation.
57
62
 
58
- The tentative plan is to release `2.0.0` near the end of March 2024 depending on
59
- the feedback received during the pre-release period.
60
-
61
63
  The `master` branch will be used for `2.x` development. If needed, fixes for `1.x`
62
64
  version will be done on the `v1` branch.
63
65
 
@@ -69,12 +71,24 @@ Install the gem and add to the application's Gemfile by executing:
69
71
  bundle add git
70
72
  ```
71
73
 
74
+ to install version 1.x:
75
+
76
+ ```shell
77
+ bundle add git --version "~> 1.19"
78
+ ```
79
+
72
80
  If bundler is not being used to manage dependencies, install the gem by executing:
73
81
 
74
82
  ```shell
75
83
  gem install git
76
84
  ```
77
85
 
86
+ to install version 1.x:
87
+
88
+ ```shell
89
+ gem install git --version "~> 1.19"
90
+ ```
91
+
78
92
  ## Major Objects
79
93
 
80
94
  **Git::Base** - The object returned from a `Git.open` or `Git.clone`. Most major actions are called from this object.
@@ -104,76 +118,45 @@ Pass the `--all` option to `git log` as follows:
104
118
 
105
119
  ## Errors Raised By This Gem
106
120
 
107
- This gem raises custom errors that derive from `Git::Error`. These errors are
108
- arranged in the following class heirarchy:
109
-
110
- Error heirarchy:
121
+ The git gem will only raise an `ArgumentError` or an error that is a subclass of
122
+ `Git::Error`. It does not explicitly raise any other types of errors.
111
123
 
112
- ```text
113
- Error
114
- └── CommandLineError
115
- ├── FailedError
116
- └── SignaledError
117
- └── TimeoutError
118
- ```
119
-
120
- Other standard errors may also be raised like `ArgumentError`. Each method should
121
- document the errors it may raise.
122
-
123
- Description of each Error class:
124
-
125
- * `Error`: This catch-all error serves as the base class for other custom errors in this
126
- gem. Errors of this class are raised when no more approriate specific error to
127
- raise.
128
- * `CommandLineError`: This error is raised when there's a problem executing the git
129
- command line. This gem will raise a more specific error depending on how the
130
- command line failed.
131
- * `FailedError`: This error is raised when the git command line exits with a non-zero
132
- status code that is not expected by the git gem.
133
- * `SignaledError`: This error is raised when the git command line is terminated as a
134
- result of receiving a signal. This could happen if the process is forcibly
135
- terminated or if there is a serious system error.
136
- * `TimeoutError`: This is a specific type of `SignaledError` that is raised when the
137
- git command line operation times out and is killed via the SIGKILL signal. This
138
- happens if the operation takes longer than the timeout duration configured in
139
- `Git.config.timeout` or via the `:timeout` parameter given in git methods that
140
- support this parameter.
141
-
142
- `Git::GitExecuteError` remains as an alias for `Git::Error`. It is considered
143
- deprecated as of git-2.0.0.
144
-
145
- Here is an example of catching errors when using the git gem:
124
+ It is recommended to rescue `Git::Error` to catch any runtime error raised by
125
+ this gem unless you need more specific error handling.
146
126
 
147
127
  ```ruby
148
128
  begin
149
- timeout_duration = 0.001 # seconds
150
- repo = Git.clone('https://github.com/ruby-git/ruby-git', 'ruby-git-temp', timeout: timeout_duration)
151
- rescue Git::TimeoutError => e # Catch the more specific error first!
152
- puts "Git clone took too long and timed out #{e}"
129
+ # some git operation
153
130
  rescue Git::Error => e
154
- puts "Received the following error: #{e}"
131
+ puts "An error occurred: #{e.message}"
132
+ end
155
133
  ```
156
134
 
135
+ See [`Git::Error`](https://rubydoc.info/gems/git/Git/Error) for more information.
136
+
157
137
  ## Specifying And Handling Timeouts
158
138
 
159
139
  The timeout feature was added in git gem version `2.0.0`.
160
140
 
161
- A timeout for git operations can be set either globally or for specific method calls
162
- that accept a `:timeout` parameter.
141
+ A timeout for git command line operations can be set either globally or for specific
142
+ method calls that accept a `:timeout` parameter.
163
143
 
164
144
  The timeout value must be a real, non-negative `Numeric` value that specifies a
165
145
  number of seconds a `git` command will be given to complete before being sent a KILL
166
146
  signal. This library may hang if the `git` command does not terminate after receiving
167
147
  the KILL signal.
168
148
 
169
- When a command times out, a `Git::TimeoutError` is raised.
149
+ When a command times out, it is killed by sending it the `SIGKILL` signal and a
150
+ `Git::TimeoutError` is raised. This error derives from the `Git::SignaledError` and
151
+ `Git::Error`.
170
152
 
171
153
  If the timeout value is `0` or `nil`, no timeout will be enforced.
172
154
 
173
- If a method accepts a `:timeout` parameter and a receives a non-nil value, it will
174
- override the global timeout value. In this context, a value of `nil` (which is
175
- usually the default) will use the global timeout value and a value of `0` will turn
176
- off timeout enforcement for that method call no matter what the global value is.
155
+ If a method accepts a `:timeout` parameter and a receives a non-nil value, the value
156
+ of this parameter will override the global timeout value. In this context, a value of
157
+ `nil` (which is usually the default) will use the global timeout value and a value of
158
+ `0` will turn off timeout enforcement for that method call no matter what the global
159
+ value is.
177
160
 
178
161
  To set a global timeout, use the `Git.config` object:
179
162
 
@@ -193,19 +176,20 @@ Git.clone(repo_url, timeout: 0) # Do not enforce a timeout
193
176
  Git.clone(repo_url, timeout: 10.5) # Timeout after 10.5 seconds raising Git::SignaledError
194
177
  ```
195
178
 
196
- If the command takes too long, a `Git::SignaledError` will be raised:
179
+ If the command takes too long, a `Git::TimeoutError` will be raised:
197
180
 
198
181
  ```ruby
199
182
  begin
200
183
  Git.clone(repo_url, timeout: 10)
201
184
  rescue Git::TimeoutError => e
202
- result = e.result
203
- result.class #=> Git::CommandLineResult
204
- result.status #=> #<Process::Status: pid 62173 SIGKILL (signal 9)>
205
- result.status.timeout? #=> true
206
- result.git_cmd # The git command ran as an array of strings
207
- result.stdout # The command's output to stdout until it was terminated
208
- result.stderr # The command's output to stderr until it was terminated
185
+ e.result.tap do |r|
186
+ r.class #=> Git::CommandLineResult
187
+ r.status #=> #<Process::Status: pid 62173 SIGKILL (signal 9)>
188
+ r.status.timeout? #=> true
189
+ r.git_cmd # The git command ran as an array of strings
190
+ r.stdout # The command's output to stdout until it was terminated
191
+ r.stderr # The command's output to stderr until it was terminated
192
+ end
209
193
  end
210
194
  ```
211
195
 
@@ -244,9 +228,12 @@ g.index.writable?
244
228
  g.repo
245
229
  g.dir
246
230
 
247
- g.log # returns a Git::Log object, which is an Enumerator of Git::Commit objects
248
- g.log(200)
249
- g.log.since('2 weeks ago')
231
+ # log - returns a Git::Log object, which is an Enumerator of Git::Commit objects
232
+ # default configuration returns a max of 30 commits
233
+ g.log
234
+ g.log(200) # 200 most recent commits
235
+ g.log.since('2 weeks ago') # default count of commits since 2 weeks ago.
236
+ g.log(200).since('2 weeks ago') # commits since 2 weeks ago, limited to 200.
250
237
  g.log.between('v2.5', 'v2.6')
251
238
  g.log.each {|l| puts l.sha }
252
239
  g.gblob('v2.5:Makefile').log.since('2 weeks ago')
@@ -532,9 +519,15 @@ end
532
519
  This gem will be expected to function correctly on:
533
520
 
534
521
  * All non-EOL versions of the MRI Ruby on Mac, Linux, and Windows
535
- * The latest version of JRuby on Linux and Windows
522
+ * The latest version of JRuby on Linux
536
523
  * The latest version of Truffle Ruby on Linus
537
524
 
525
+ It is this project's intent to support the latest version of JRuby on Windows
526
+ once the following JRuby bug is fixed:
527
+
528
+ jruby/jruby#7515
529
+
538
530
  ## License
539
531
 
540
- licensed under MIT License Copyright (c) 2008 Scott Chacon. See LICENSE for further details.
532
+ Licensed under MIT License Copyright (c) 2008 Scott Chacon. See LICENSE for further
533
+ details.
data/git.gemspec CHANGED
@@ -27,10 +27,12 @@ Gem::Specification.new do |s|
27
27
  s.required_ruby_version = '>= 3.0.0'
28
28
  s.requirements = ['git 2.28.0 or greater']
29
29
 
30
+ s.add_runtime_dependency 'activesupport', '>= 5.0'
30
31
  s.add_runtime_dependency 'addressable', '~> 2.8'
31
32
  s.add_runtime_dependency 'process_executer', '~> 1.1'
32
33
  s.add_runtime_dependency 'rchardet', '~> 1.8'
33
34
 
35
+ s.add_development_dependency 'create_github_release', '~> 1.4'
34
36
  s.add_development_dependency 'minitar', '~> 0.9'
35
37
  s.add_development_dependency 'mocha', '~> 2.1'
36
38
  s.add_development_dependency 'rake', '~> 13.1'
data/lib/git/base.rb CHANGED
@@ -409,14 +409,27 @@ module Git
409
409
  self.lib.conflicts(&block)
410
410
  end
411
411
 
412
- # pulls the given branch from the given remote into the current branch
413
- #
414
- # @git.pull # pulls from origin/master
415
- # @git.pull('upstream') # pulls from upstream/master
416
- # @git.pull('upstream', 'develope') # pulls from upstream/develop
417
- #
418
- def pull(remote = nil, branch = nil)
419
- self.lib.pull(remote, branch)
412
+ # Pulls the given branch from the given remote into the current branch
413
+ #
414
+ # @param remote [String] the remote repository to pull from
415
+ # @param branch [String] the branch to pull from
416
+ # @param opts [Hash] options to pass to the pull command
417
+ #
418
+ # @option opts [Boolean] :allow_unrelated_histories (false) Merges histories of two projects that started their
419
+ # lives independently
420
+ # @example pulls from origin/master
421
+ # @git.pull
422
+ # @example pulls from upstream/master
423
+ # @git.pull('upstream')
424
+ # @example pulls from upstream/develop
425
+ # @git.pull('upstream', 'develop')
426
+ #
427
+ # @return [Void]
428
+ #
429
+ # @raise [Git::FailedError] if the pull fails
430
+ # @raise [ArgumentError] if a branch is given without a remote
431
+ def pull(remote = nil, branch = nil, opts = {})
432
+ self.lib.pull(remote, branch, opts)
420
433
  end
421
434
 
422
435
  # returns an array of Git:Remote objects
@@ -2,8 +2,7 @@
2
2
 
3
3
  require 'git/base'
4
4
  require 'git/command_line_result'
5
- require 'git/failed_error'
6
- require 'git/signaled_error'
5
+ require 'git/errors'
7
6
  require 'stringio'
8
7
 
9
8
  module Git
@@ -114,7 +113,6 @@ module Git
114
113
  # the normalize option will be ignored.
115
114
  #
116
115
  # @example Run a command and return the output
117
- #
118
116
  # cli.run('version') #=> "git version 2.39.1\n"
119
117
  #
120
118
  # @example The args array should be splatted into the parameter list
@@ -162,14 +160,18 @@ module Git
162
160
  # `stderr_writer.string` will be merged into the output returned by this method.
163
161
  #
164
162
  # @param normalize [Boolean] whether to normalize the output to a valid encoding
163
+ #
165
164
  # @param chomp [Boolean] whether to chomp the output
165
+ #
166
166
  # @param merge [Boolean] whether to merge stdout and stderr in the string returned
167
+ #
167
168
  # @param chdir [String] the directory to run the command in
168
169
  #
169
170
  # @param timeout [Numeric, nil] the maximum seconds to wait for the command to complete
170
171
  #
171
- # If timeout is zero or nil, the command will not time out. If the command
172
- # times out, it is killed via a SIGKILL signal and `Git::TimeoutError` is raised.
172
+ # If timeout is zero, the timeout will not be enforced.
173
+ #
174
+ # If the command times out, it is killed via a `SIGKILL` signal and `Git::TimeoutError` is raised.
173
175
  #
174
176
  # If the command does not respond to SIGKILL, it will hang this method.
175
177
  #
@@ -178,9 +180,13 @@ module Git
178
180
  # This result of running the command.
179
181
  #
180
182
  # @raise [ArgumentError] if `args` is not an array of strings
183
+ #
181
184
  # @raise [Git::SignaledError] if the command was terminated because of an uncaught signal
185
+ #
182
186
  # @raise [Git::FailedError] if the command returned a non-zero exitstatus
183
- # @raise [Git::GitExecuteError] if an exception was raised while collecting subprocess output
187
+ #
188
+ # @raise [Git::ProcessIOError] if an exception was raised while collecting subprocess output
189
+ #
184
190
  # @raise [Git::TimeoutError] if the command times out
185
191
  #
186
192
  def run(*args, out:, err:, normalize:, chomp:, merge:, chdir: nil, timeout: nil)
@@ -253,28 +259,28 @@ module Git
253
259
  # @param pipe_name [Symbol] the name of the pipe that raised the exception
254
260
  # @param pipe [ProcessExecuter::MonitoredPipe] the pipe that raised the exception
255
261
  #
256
- # @raise [Git::GitExecuteError]
262
+ # @raise [Git::ProcessIOError]
257
263
  #
258
264
  # @return [void] this method always raises an error
259
265
  #
260
266
  # @api private
261
267
  #
262
268
  def raise_pipe_error(git_cmd, pipe_name, pipe)
263
- raise Git::GitExecuteError.new("Pipe Exception for #{git_cmd}: #{pipe_name}"), cause: pipe.exception
269
+ raise Git::ProcessIOError.new("Pipe Exception for #{git_cmd}: #{pipe_name}"), cause: pipe.exception
264
270
  end
265
271
 
266
272
  # Execute the git command and collect the output
267
273
  #
268
274
  # @param cmd [Array<String>] the git command to execute
269
275
  # @param chdir [String] the directory to run the command in
270
- # @param timeout [Float, Integer, nil] the maximum seconds to wait for the command to complete
276
+ # @param timeout [Numeric, nil] the maximum seconds to wait for the command to complete
271
277
  #
272
278
  # If timeout is zero of nil, the command will not time out. If the command
273
279
  # times out, it is killed via a SIGKILL signal and `Git::TimeoutError` is raised.
274
280
  #
275
281
  # If the command does not respond to SIGKILL, it will hang this method.
276
282
  #
277
- # @raise [Git::GitExecuteError] if an exception was raised while collecting subprocess output
283
+ # @raise [Git::ProcessIOError] if an exception was raised while collecting subprocess output
278
284
  # @raise [Git::TimeoutError] if the command times out
279
285
  #
280
286
  # @return [ProcessExecuter::Status] the status of the completed subprocess
@@ -321,11 +327,14 @@ module Git
321
327
  # @param err [#write] the object that stderr was written to
322
328
  # @param normalize [Boolean] whether to normalize the output of each writer
323
329
  # @param chomp [Boolean] whether to chomp the output of each writer
330
+ # @param timeout [Numeric, nil] the maximum seconds to wait for the command to complete
324
331
  #
325
332
  # @return [Git::CommandLineResult] the result of the command to return to the caller
326
333
  #
327
334
  # @raise [Git::FailedError] if the command failed
328
335
  # @raise [Git::SignaledError] if the command was signaled
336
+ # @raise [Git::TimeoutError] if the command times out
337
+ # @raise [Git::ProcessIOError] if an exception was raised while collecting subprocess output
329
338
  #
330
339
  # @api private
331
340
  #
@@ -346,14 +355,14 @@ module Git
346
355
  # @param out [#write] the object to write stdout to
347
356
  # @param err [#write] the object to write stderr to
348
357
  # @param chdir [String] the directory to run the command in
349
- # @param timeout [Float, Integer, nil] the maximum seconds to wait for the command to complete
358
+ # @param timeout [Numeric, nil] the maximum seconds to wait for the command to complete
350
359
  #
351
360
  # If timeout is zero of nil, the command will not time out. If the command
352
361
  # times out, it is killed via a SIGKILL signal and `Git::TimeoutError` is raised.
353
362
  #
354
363
  # If the command does not respond to SIGKILL, it will hang this method.
355
364
  #
356
- # @raise [Git::GitExecuteError] if an exception was raised while collecting subprocess output
365
+ # @raise [Git::ProcessIOError] if an exception was raised while collecting subprocess output
357
366
  # @raise [Git::TimeoutError] if the command times out
358
367
  #
359
368
  # @return [Git::CommandLineResult] the result of the command to return to the caller