git 2.1.0 → 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/CHANGELOG.md +14 -0
- data/lib/git/base.rb +7 -0
- data/lib/git/escaped_path.rb +1 -1
- data/lib/git/lib.rb +51 -9
- data/lib/git/status.rb +46 -8
- 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: 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
|
data/CHANGELOG.md
CHANGED
@@ -5,6 +5,20 @@
|
|
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
|
+
|
8
22
|
## v2.1.0 (2024-05-31)
|
9
23
|
|
10
24
|
[Full Changelog](https://github.com/ruby-git/ruby-git/compare/v2.0.1..v2.1.0)
|
data/lib/git/base.rb
CHANGED
@@ -309,6 +309,13 @@ module Git
|
|
309
309
|
self.object('HEAD').grep(string, path_limiter, opts)
|
310
310
|
end
|
311
311
|
|
312
|
+
# List the files in the worktree that are ignored by git
|
313
|
+
# @return [Array<String>] the list of ignored files relative to teh root of the worktree
|
314
|
+
#
|
315
|
+
def ignored_files
|
316
|
+
self.lib.ignored_files
|
317
|
+
end
|
318
|
+
|
312
319
|
# removes file(s) from the git repository
|
313
320
|
def rm(path = '.', opts = {})
|
314
321
|
self.lib.rm(path, opts)
|
data/lib/git/escaped_path.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
module Git
|
4
4
|
# Represents an escaped Git path string
|
5
5
|
#
|
6
|
-
# Git commands that output paths (e.g. ls-files, diff), will escape
|
6
|
+
# Git commands that output paths (e.g. ls-files, diff), will escape unusual
|
7
7
|
# characters in the path with backslashes in the same way C escapes control
|
8
8
|
# characters (e.g. \t for TAB, \n for LF, \\ for backslash) or bytes with values
|
9
9
|
# larger than 0x80 (e.g. octal \302\265 for "micro" in UTF-8).
|
data/lib/git/lib.rb
CHANGED
@@ -574,18 +574,52 @@ module Git
|
|
574
574
|
diff_as_hash('diff-index', treeish)
|
575
575
|
end
|
576
576
|
|
577
|
+
# List all files that are in the index
|
578
|
+
#
|
579
|
+
# @param location [String] the location to list the files from
|
580
|
+
#
|
581
|
+
# @return [Hash<String, Hash>] a hash of files in the index
|
582
|
+
# * key: file [String] the file path
|
583
|
+
# * value: file_info [Hash] the file information containing the following keys:
|
584
|
+
# * :path [String] the file path
|
585
|
+
# * :mode_index [String] the file mode
|
586
|
+
# * :sha_index [String] the file sha
|
587
|
+
# * :stage [String] the file stage
|
588
|
+
#
|
577
589
|
def ls_files(location=nil)
|
578
590
|
location ||= '.'
|
579
|
-
|
580
|
-
|
581
|
-
|
582
|
-
|
583
|
-
|
584
|
-
|
591
|
+
{}.tap do |files|
|
592
|
+
command_lines('ls-files', '--stage', location).each do |line|
|
593
|
+
(info, file) = line.split("\t")
|
594
|
+
(mode, sha, stage) = info.split
|
595
|
+
files[unescape_quoted_path(file)] = {
|
596
|
+
:path => file, :mode_index => mode, :sha_index => sha, :stage => stage
|
597
|
+
}
|
585
598
|
end
|
586
|
-
hsh[file] = {:path => file, :mode_index => mode, :sha_index => sha, :stage => stage}
|
587
599
|
end
|
588
|
-
|
600
|
+
end
|
601
|
+
|
602
|
+
# Unescape a path if it is quoted
|
603
|
+
#
|
604
|
+
# Git commands that output paths (e.g. ls-files, diff), will escape unusual
|
605
|
+
# characters.
|
606
|
+
#
|
607
|
+
# @example
|
608
|
+
# lib.unescape_if_quoted('"quoted_file_\\342\\230\\240"') # => 'quoted_file_☠'
|
609
|
+
# lib.unescape_if_quoted('unquoted_file') # => 'unquoted_file'
|
610
|
+
#
|
611
|
+
# @param path [String] the path to unescape if quoted
|
612
|
+
#
|
613
|
+
# @return [String] the unescaped path if quoted otherwise the original path
|
614
|
+
#
|
615
|
+
# @api private
|
616
|
+
#
|
617
|
+
def unescape_quoted_path(path)
|
618
|
+
if path.start_with?('"') && path.end_with?('"')
|
619
|
+
Git::EscapedPath.new(path[1..-2]).unescape
|
620
|
+
else
|
621
|
+
path
|
622
|
+
end
|
589
623
|
end
|
590
624
|
|
591
625
|
def ls_remote(location=nil, opts={})
|
@@ -606,7 +640,7 @@ module Git
|
|
606
640
|
end
|
607
641
|
|
608
642
|
def ignored_files
|
609
|
-
command_lines('ls-files', '--others', '-i', '--exclude-standard')
|
643
|
+
command_lines('ls-files', '--others', '-i', '--exclude-standard').map { |f| unescape_quoted_path(f) }
|
610
644
|
end
|
611
645
|
|
612
646
|
def untracked_files
|
@@ -1223,6 +1257,14 @@ module Git
|
|
1223
1257
|
global_opts << "--work-tree=#{@git_work_dir}" if !@git_work_dir.nil?
|
1224
1258
|
global_opts << '-c' << 'core.quotePath=true'
|
1225
1259
|
global_opts << '-c' << 'color.ui=false'
|
1260
|
+
global_opts << '-c' << 'color.advice=false'
|
1261
|
+
global_opts << '-c' << 'color.diff=false'
|
1262
|
+
global_opts << '-c' << 'color.grep=false'
|
1263
|
+
global_opts << '-c' << 'color.push=false'
|
1264
|
+
global_opts << '-c' << 'color.remote=false'
|
1265
|
+
global_opts << '-c' << 'color.showBranch=false'
|
1266
|
+
global_opts << '-c' << 'color.status=false'
|
1267
|
+
global_opts << '-c' << 'color.transport=false'
|
1226
1268
|
end
|
1227
1269
|
end
|
1228
1270
|
|
data/lib/git/status.rb
CHANGED
@@ -22,7 +22,7 @@ module Git
|
|
22
22
|
#
|
23
23
|
# @return [Enumerable]
|
24
24
|
def changed
|
25
|
-
@files.select { |_k, f| f.type == 'M' }
|
25
|
+
@_changed ||= @files.select { |_k, f| f.type == 'M' }
|
26
26
|
end
|
27
27
|
|
28
28
|
#
|
@@ -34,7 +34,7 @@ module Git
|
|
34
34
|
# changed?('lib/git.rb')
|
35
35
|
# @return [Boolean]
|
36
36
|
def changed?(file)
|
37
|
-
|
37
|
+
case_aware_include?(:changed, :lc_changed, file)
|
38
38
|
end
|
39
39
|
|
40
40
|
# Returns an Enumerable containing files that have been added.
|
@@ -42,7 +42,7 @@ module Git
|
|
42
42
|
#
|
43
43
|
# @return [Enumerable]
|
44
44
|
def added
|
45
|
-
@files.select { |_k, f| f.type == 'A' }
|
45
|
+
@_added ||= @files.select { |_k, f| f.type == 'A' }
|
46
46
|
end
|
47
47
|
|
48
48
|
# Determines whether the given file has been added to the repository
|
@@ -54,7 +54,7 @@ module Git
|
|
54
54
|
# added?('lib/git.rb')
|
55
55
|
# @return [Boolean]
|
56
56
|
def added?(file)
|
57
|
-
|
57
|
+
case_aware_include?(:added, :lc_added, file)
|
58
58
|
end
|
59
59
|
|
60
60
|
#
|
@@ -63,7 +63,7 @@ module Git
|
|
63
63
|
#
|
64
64
|
# @return [Enumerable]
|
65
65
|
def deleted
|
66
|
-
@files.select { |_k, f| f.type == 'D' }
|
66
|
+
@_deleted ||= @files.select { |_k, f| f.type == 'D' }
|
67
67
|
end
|
68
68
|
|
69
69
|
#
|
@@ -75,7 +75,7 @@ module Git
|
|
75
75
|
# deleted?('lib/git.rb')
|
76
76
|
# @return [Boolean]
|
77
77
|
def deleted?(file)
|
78
|
-
|
78
|
+
case_aware_include?(:deleted, :lc_deleted, file)
|
79
79
|
end
|
80
80
|
|
81
81
|
#
|
@@ -84,7 +84,7 @@ module Git
|
|
84
84
|
#
|
85
85
|
# @return [Enumerable]
|
86
86
|
def untracked
|
87
|
-
@files.select { |_k, f| f.untracked }
|
87
|
+
@_untracked ||= @files.select { |_k, f| f.untracked }
|
88
88
|
end
|
89
89
|
|
90
90
|
#
|
@@ -96,7 +96,7 @@ module Git
|
|
96
96
|
# untracked?('lib/git.rb')
|
97
97
|
# @return [Boolean]
|
98
98
|
def untracked?(file)
|
99
|
-
|
99
|
+
case_aware_include?(:untracked, :lc_untracked, file)
|
100
100
|
end
|
101
101
|
|
102
102
|
def pretty
|
@@ -264,5 +264,43 @@ module Git
|
|
264
264
|
end
|
265
265
|
end
|
266
266
|
end
|
267
|
+
|
268
|
+
# It's worth noting that (like git itself) this gem will not behave well if
|
269
|
+
# ignoreCase is set inconsistently with the file-system itself. For details:
|
270
|
+
# https://git-scm.com/docs/git-config#Documentation/git-config.txt-coreignoreCase
|
271
|
+
def ignore_case?
|
272
|
+
return @_ignore_case if defined?(@_ignore_case)
|
273
|
+
@_ignore_case = @base.config('core.ignoreCase') == 'true'
|
274
|
+
rescue Git::FailedError
|
275
|
+
@_ignore_case = false
|
276
|
+
end
|
277
|
+
|
278
|
+
def downcase_keys(hash)
|
279
|
+
hash.map { |k, v| [k.downcase, v] }.to_h
|
280
|
+
end
|
281
|
+
|
282
|
+
def lc_changed
|
283
|
+
@_lc_changed ||= changed.transform_keys(&:downcase)
|
284
|
+
end
|
285
|
+
|
286
|
+
def lc_added
|
287
|
+
@_lc_added ||= added.transform_keys(&:downcase)
|
288
|
+
end
|
289
|
+
|
290
|
+
def lc_deleted
|
291
|
+
@_lc_deleted ||= deleted.transform_keys(&:downcase)
|
292
|
+
end
|
293
|
+
|
294
|
+
def lc_untracked
|
295
|
+
@_lc_untracked ||= untracked.transform_keys(&:downcase)
|
296
|
+
end
|
297
|
+
|
298
|
+
def case_aware_include?(cased_hash, downcased_hash, file)
|
299
|
+
if ignore_case?
|
300
|
+
send(downcased_hash).include?(file.downcase)
|
301
|
+
else
|
302
|
+
send(cased_hash).include?(file)
|
303
|
+
end
|
304
|
+
end
|
267
305
|
end
|
268
306
|
end
|
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.1.
|
4
|
+
version: 2.1.1
|
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-
|
11
|
+
date: 2024-06-01 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.1.
|
247
|
-
documentation_uri: https://rubydoc.info/gems/git/2.1.
|
246
|
+
changelog_uri: https://rubydoc.info/gems/git/2.1.1/file/CHANGELOG.md
|
247
|
+
documentation_uri: https://rubydoc.info/gems/git/2.1.1
|
248
248
|
post_install_message:
|
249
249
|
rdoc_options: []
|
250
250
|
require_paths:
|