git 2.0.1 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +9 -0
- data/README.md +18 -6
- data/lib/git/base.rb +60 -41
- data/lib/git/lib.rb +26 -15
- data/lib/git/log.rb +65 -4
- data/lib/git/version.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cf601afe6ddef5cc504f0a350bd9595feb76cc95822bd65716d6b5cecf2d324d
|
4
|
+
data.tar.gz: 5f334a391220774ab0fea9c789a87fe3a45d9de55e0745d87f59c0bc9a52e5a9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 20133b00f0f50ccc00dc1bd4bb88107911ff5f438e127b804270752c43029e2447b15a5212c701a24a49a6f98d7b12359cb3326924ea3dadf631408b316e626e
|
7
|
+
data.tar.gz: 11ca7ae94de18e0b3d4aad99d315c2b973a8e2521ee24a935e5236fdc91eace943074ad388889a09ef4d8e33e2a4b1355d2590fe16fe0a1eda05357e1a315290
|
data/CHANGELOG.md
CHANGED
@@ -5,6 +5,15 @@
|
|
5
5
|
|
6
6
|
# Change Log
|
7
7
|
|
8
|
+
## v2.1.0 (2024-05-31)
|
9
|
+
|
10
|
+
[Full Changelog](https://github.com/ruby-git/ruby-git/compare/v2.0.1..v2.1.0)
|
11
|
+
|
12
|
+
Changes since v2.0.1:
|
13
|
+
|
14
|
+
* 93c8210 Add Git::Log#max_count
|
15
|
+
* d84097b Update YARDoc for a few a few method
|
16
|
+
|
8
17
|
## v2.0.1 (2024-05-21)
|
9
18
|
|
10
19
|
[Full Changelog](https://github.com/ruby-git/ruby-git/compare/v2.0.0..v2.0.1)
|
data/README.md
CHANGED
@@ -101,16 +101,28 @@ directory, in the index and in the repository. Similar to running 'git status'
|
|
101
101
|
|
102
102
|
**Git::Remote**- A reference to a remote repository that is tracked by this repository.
|
103
103
|
|
104
|
-
**Git::Log** - An Enumerable object that references all the `Git::Object::Commit`
|
105
|
-
|
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:
|
106
107
|
|
107
|
-
|
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
|
+
```
|
108
116
|
|
109
|
-
|
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)`.
|
110
119
|
|
111
|
-
|
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`.
|
112
124
|
|
113
|
-
|
125
|
+
**Git::Worktrees** - Enumerable object that holds `Git::Worktree objects`.
|
114
126
|
|
115
127
|
## Errors Raised By This Gem
|
116
128
|
|
data/lib/git/base.rb
CHANGED
@@ -2,12 +2,14 @@ require 'logger'
|
|
2
2
|
require 'open3'
|
3
3
|
|
4
4
|
module Git
|
5
|
-
#
|
5
|
+
# The main public interface for interacting with Git commands
|
6
6
|
#
|
7
7
|
# Instead of creating a Git::Base directly, obtain a Git::Base instance by
|
8
8
|
# calling one of the follow {Git} class methods: {Git.open}, {Git.init},
|
9
9
|
# {Git.clone}, or {Git.bare}.
|
10
10
|
#
|
11
|
+
# @api public
|
12
|
+
#
|
11
13
|
class Base
|
12
14
|
# (see Git.bare)
|
13
15
|
def self.bare(git_dir, options = {})
|
@@ -119,6 +121,62 @@ module Git
|
|
119
121
|
@index = options[:index] ? Git::Index.new(options[:index], false) : nil
|
120
122
|
end
|
121
123
|
|
124
|
+
# Update the index from the current worktree to prepare the for the next commit
|
125
|
+
#
|
126
|
+
# @example
|
127
|
+
# lib.add('path/to/file')
|
128
|
+
# lib.add(['path/to/file1','path/to/file2'])
|
129
|
+
# lib.add(all: true)
|
130
|
+
#
|
131
|
+
# @param [String, Array<String>] paths a file or files to be added to the repository (relative to the worktree root)
|
132
|
+
# @param [Hash] options
|
133
|
+
#
|
134
|
+
# @option options [Boolean] :all Add, modify, and remove index entries to match the worktree
|
135
|
+
# @option options [Boolean] :force Allow adding otherwise ignored files
|
136
|
+
#
|
137
|
+
def add(paths = '.', **options)
|
138
|
+
self.lib.add(paths, options)
|
139
|
+
end
|
140
|
+
|
141
|
+
# adds a new remote to this repository
|
142
|
+
# url can be a git url or a Git::Base object if it's a local reference
|
143
|
+
#
|
144
|
+
# @git.add_remote('scotts_git', 'git://repo.or.cz/rubygit.git')
|
145
|
+
# @git.fetch('scotts_git')
|
146
|
+
# @git.merge('scotts_git/master')
|
147
|
+
#
|
148
|
+
# Options:
|
149
|
+
# :fetch => true
|
150
|
+
# :track => <branch_name>
|
151
|
+
def add_remote(name, url, opts = {})
|
152
|
+
url = url.repo.path if url.is_a?(Git::Base)
|
153
|
+
self.lib.remote_add(name, url, opts)
|
154
|
+
Git::Remote.new(self, name)
|
155
|
+
end
|
156
|
+
|
157
|
+
# Create a new git tag
|
158
|
+
#
|
159
|
+
# @example
|
160
|
+
# repo.add_tag('tag_name', object_reference)
|
161
|
+
# repo.add_tag('tag_name', object_reference, {:options => 'here'})
|
162
|
+
# repo.add_tag('tag_name', {:options => 'here'})
|
163
|
+
#
|
164
|
+
# @param [String] name The name of the tag to add
|
165
|
+
# @param [Hash] options Opstions to pass to `git tag`.
|
166
|
+
# See [git-tag](https://git-scm.com/docs/git-tag) for more details.
|
167
|
+
# @option options [boolean] :annotate Make an unsigned, annotated tag object
|
168
|
+
# @option options [boolean] :a An alias for the `:annotate` option
|
169
|
+
# @option options [boolean] :d Delete existing tag with the given names.
|
170
|
+
# @option options [boolean] :f Replace an existing tag with the given name (instead of failing)
|
171
|
+
# @option options [String] :message Use the given tag message
|
172
|
+
# @option options [String] :m An alias for the `:message` option
|
173
|
+
# @option options [boolean] :s Make a GPG-signed tag.
|
174
|
+
#
|
175
|
+
def add_tag(name, *options)
|
176
|
+
self.lib.tag(name, *options)
|
177
|
+
self.tag(name)
|
178
|
+
end
|
179
|
+
|
122
180
|
# changes current working directory for a block
|
123
181
|
# to the git working directory
|
124
182
|
#
|
@@ -251,29 +309,6 @@ module Git
|
|
251
309
|
self.object('HEAD').grep(string, path_limiter, opts)
|
252
310
|
end
|
253
311
|
|
254
|
-
# updates the repository index using the working directory content
|
255
|
-
#
|
256
|
-
# @example
|
257
|
-
# git.add
|
258
|
-
# git.add('path/to/file')
|
259
|
-
# git.add(['path/to/file1','path/to/file2'])
|
260
|
-
# git.add(:all => true)
|
261
|
-
#
|
262
|
-
# options:
|
263
|
-
# :all => true
|
264
|
-
#
|
265
|
-
# @param [String,Array] paths files paths to be added (optional, default='.')
|
266
|
-
# @param [Hash] options
|
267
|
-
# @option options [boolean] :all
|
268
|
-
# Update the index not only where the working tree has a file matching
|
269
|
-
# <pathspec> but also where the index already has an entry.
|
270
|
-
# See [the --all option to git-add](https://git-scm.com/docs/git-add#Documentation/git-add.txt--A)
|
271
|
-
# for more details.
|
272
|
-
#
|
273
|
-
def add(paths = '.', **options)
|
274
|
-
self.lib.add(paths, options)
|
275
|
-
end
|
276
|
-
|
277
312
|
# removes file(s) from the git repository
|
278
313
|
def rm(path = '.', opts = {})
|
279
314
|
self.lib.rm(path, opts)
|
@@ -434,22 +469,6 @@ module Git
|
|
434
469
|
self.lib.remotes.map { |r| Git::Remote.new(self, r) }
|
435
470
|
end
|
436
471
|
|
437
|
-
# adds a new remote to this repository
|
438
|
-
# url can be a git url or a Git::Base object if it's a local reference
|
439
|
-
#
|
440
|
-
# @git.add_remote('scotts_git', 'git://repo.or.cz/rubygit.git')
|
441
|
-
# @git.fetch('scotts_git')
|
442
|
-
# @git.merge('scotts_git/master')
|
443
|
-
#
|
444
|
-
# Options:
|
445
|
-
# :fetch => true
|
446
|
-
# :track => <branch_name>
|
447
|
-
def add_remote(name, url, opts = {})
|
448
|
-
url = url.repo.path if url.is_a?(Git::Base)
|
449
|
-
self.lib.remote_add(name, url, opts)
|
450
|
-
Git::Remote.new(self, name)
|
451
|
-
end
|
452
|
-
|
453
472
|
# sets the url for a remote
|
454
473
|
# url can be a git url or a Git::Base object if it's a local reference
|
455
474
|
#
|
@@ -473,7 +492,7 @@ module Git
|
|
473
492
|
self.lib.tags.map { |r| tag(r) }
|
474
493
|
end
|
475
494
|
|
476
|
-
#
|
495
|
+
# Create a new git tag
|
477
496
|
#
|
478
497
|
# @example
|
479
498
|
# repo.add_tag('tag_name', object_reference)
|
data/lib/git/lib.rb
CHANGED
@@ -38,14 +38,23 @@ module Git
|
|
38
38
|
|
39
39
|
# Create a new Git::Lib object
|
40
40
|
#
|
41
|
-
# @
|
42
|
-
# @git_work_dir, @git_dir, and @git_index_file
|
41
|
+
# @overload initialize(base, logger)
|
43
42
|
#
|
44
|
-
#
|
43
|
+
# @param base [Hash] the hash containing paths to the Git working copy,
|
44
|
+
# the Git repository directory, and the Git index file.
|
45
45
|
#
|
46
|
-
#
|
47
|
-
#
|
48
|
-
#
|
46
|
+
# @option base [Pathname] :working_directory
|
47
|
+
# @option base [Pathname] :repository
|
48
|
+
# @option base [Pathname] :index
|
49
|
+
#
|
50
|
+
# @param [Logger] logger
|
51
|
+
#
|
52
|
+
# @overload initialize(base, logger)
|
53
|
+
#
|
54
|
+
# @param base [#dir, #repo, #index] an object with methods to get the Git worktree (#dir),
|
55
|
+
# the Git repository directory (#repo), and the Git index file (#index).
|
56
|
+
#
|
57
|
+
# @param [Logger] logger
|
49
58
|
#
|
50
59
|
def initialize(base = nil, logger = nil)
|
51
60
|
@git_dir = nil
|
@@ -670,18 +679,20 @@ module Git
|
|
670
679
|
command('config', '--global', name, value)
|
671
680
|
end
|
672
681
|
|
673
|
-
|
674
|
-
#
|
675
|
-
# lib.add('path/to/file')
|
676
|
-
# lib.add(['path/to/file1','path/to/file2'])
|
677
|
-
# lib.add(:all => true)
|
682
|
+
|
683
|
+
# Update the index from the current worktree to prepare the for the next commit
|
678
684
|
#
|
679
|
-
#
|
680
|
-
#
|
681
|
-
#
|
685
|
+
# @example
|
686
|
+
# lib.add('path/to/file')
|
687
|
+
# lib.add(['path/to/file1','path/to/file2'])
|
688
|
+
# lib.add(:all => true)
|
682
689
|
#
|
683
|
-
# @param [String,Array] paths files
|
690
|
+
# @param [String, Array<String>] paths files to be added to the repository (relative to the worktree root)
|
684
691
|
# @param [Hash] options
|
692
|
+
#
|
693
|
+
# @option options [Boolean] :all Add, modify, and remove index entries to match the worktree
|
694
|
+
# @option options [Boolean] :force Allow adding otherwise ignored files
|
695
|
+
#
|
685
696
|
def add(paths='.',options={})
|
686
697
|
arr_opts = []
|
687
698
|
|
data/lib/git/log.rb
CHANGED
@@ -1,15 +1,76 @@
|
|
1
1
|
module Git
|
2
2
|
|
3
|
-
#
|
3
|
+
# Return the last n commits that match the specified criteria
|
4
|
+
#
|
5
|
+
# @example The last (default number) of commits
|
6
|
+
# git = Git.open('.')
|
7
|
+
# Git::Log.new(git) #=> Enumerable of the last 30 commits
|
8
|
+
#
|
9
|
+
# @example The last n commits
|
10
|
+
# Git::Log.new(git).max_commits(50) #=> Enumerable of last 50 commits
|
11
|
+
#
|
12
|
+
# @example All commits returned by `git log`
|
13
|
+
# Git::Log.new(git).max_count(:all) #=> Enumerable of all commits
|
14
|
+
#
|
15
|
+
# @example All commits that match complex criteria
|
16
|
+
# Git::Log.new(git)
|
17
|
+
# .max_count(:all)
|
18
|
+
# .object('README.md')
|
19
|
+
# .since('10 years ago')
|
20
|
+
# .between('v1.0.7', 'HEAD')
|
21
|
+
#
|
22
|
+
# @api public
|
23
|
+
#
|
4
24
|
class Log
|
5
25
|
include Enumerable
|
6
26
|
|
7
|
-
|
27
|
+
# Create a new Git::Log object
|
28
|
+
#
|
29
|
+
# @example
|
30
|
+
# git = Git.open('.')
|
31
|
+
# Git::Log.new(git)
|
32
|
+
#
|
33
|
+
# @param base [Git::Base] the git repository object
|
34
|
+
# @param max_count [Integer, Symbol, nil] the number of commits to return, or
|
35
|
+
# `:all` or `nil` to return all
|
36
|
+
#
|
37
|
+
# Passing max_count to {#initialize} is equivalent to calling {#max_count} on the object.
|
38
|
+
#
|
39
|
+
def initialize(base, max_count = 30)
|
8
40
|
dirty_log
|
9
41
|
@base = base
|
10
|
-
|
42
|
+
max_count(max_count)
|
43
|
+
end
|
44
|
+
|
45
|
+
# The maximum number of commits to return
|
46
|
+
#
|
47
|
+
# @example All commits returned by `git log`
|
48
|
+
# git = Git.open('.')
|
49
|
+
# Git::Log.new(git).max_count(:all)
|
50
|
+
#
|
51
|
+
# @param num_or_all [Integer, Symbol, nil] the number of commits to return, or
|
52
|
+
# `:all` or `nil` to return all
|
53
|
+
#
|
54
|
+
# @return [self]
|
55
|
+
#
|
56
|
+
def max_count(num_or_all)
|
57
|
+
dirty_log
|
58
|
+
@max_count = (num_or_all == :all) ? nil : num_or_all
|
59
|
+
self
|
11
60
|
end
|
12
61
|
|
62
|
+
# Adds the --all flag to the git log command
|
63
|
+
#
|
64
|
+
# This asks for the logs of all refs (basically all commits reachable by HEAD,
|
65
|
+
# branches, and tags). This does not control the maximum number of commits
|
66
|
+
# returned. To control how many commits are returned, call {#max_count}.
|
67
|
+
#
|
68
|
+
# @example Return the last 50 commits reachable by all refs
|
69
|
+
# git = Git.open('.')
|
70
|
+
# Git::Log.new(git).max_count(50).all
|
71
|
+
#
|
72
|
+
# @return [self]
|
73
|
+
#
|
13
74
|
def all
|
14
75
|
dirty_log
|
15
76
|
@all = true
|
@@ -119,7 +180,7 @@ module Git
|
|
119
180
|
# actually run the 'git log' command
|
120
181
|
def run_log
|
121
182
|
log = @base.lib.full_log_commits(
|
122
|
-
count: @
|
183
|
+
count: @max_count, all: @all, object: @object, path_limiter: @path, since: @since,
|
123
184
|
author: @author, grep: @grep, skip: @skip, until: @until, between: @between,
|
124
185
|
cherry: @cherry
|
125
186
|
)
|
data/lib/git/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: git
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Scott Chacon and others
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-05-
|
11
|
+
date: 2024-05-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -243,8 +243,8 @@ licenses:
|
|
243
243
|
metadata:
|
244
244
|
homepage_uri: http://github.com/ruby-git/ruby-git
|
245
245
|
source_code_uri: http://github.com/ruby-git/ruby-git
|
246
|
-
changelog_uri: https://rubydoc.info/gems/git/2.0
|
247
|
-
documentation_uri: https://rubydoc.info/gems/git/2.0
|
246
|
+
changelog_uri: https://rubydoc.info/gems/git/2.1.0/file/CHANGELOG.md
|
247
|
+
documentation_uri: https://rubydoc.info/gems/git/2.1.0
|
248
248
|
post_install_message:
|
249
249
|
rdoc_options: []
|
250
250
|
require_paths:
|