fast_ignore 0.15.0 → 0.16.1
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 +14 -0
- data/README.md +3 -2
- data/lib/fast_ignore/gitconfig_parser.rb +207 -0
- data/lib/fast_ignore/gitignore_rule_builder.rb +1 -1
- data/lib/fast_ignore/global_gitignore.rb +55 -17
- data/lib/fast_ignore/rule.rb +1 -1
- data/lib/fast_ignore/rule_sets.rb +1 -1
- data/lib/fast_ignore/shebang_rule.rb +2 -2
- data/lib/fast_ignore/unmatchable_rule.rb +1 -1
- data/lib/fast_ignore/version.rb +1 -1
- data/lib/fast_ignore.rb +15 -13
- metadata +53 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7952045a743c12fa1963ffba7aa81a8ca3cc81aec40b0bfc9c0e6bb6424e9433
|
4
|
+
data.tar.gz: dcacd0bdd1873638156c9b2323263cf1ee7fc349b012f40c28caa4fe10d82f91
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 35c9fedb895b3e30632b29aab2eba3369ec6512bd6c5b9cfa563156c4c0c291b5c7854877aa4c8da063b54ed97a6f132c5d903622d2a6e2fc69c57c708150c33
|
7
|
+
data.tar.gz: ca894c9a8e11471d3c1f81f959862cd16a60db784898ef0d0e4da880e063257334fdf6aad061d95c23850c726ffde781076e6c248ebecfa808701d0731fbb125
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,17 @@
|
|
1
|
+
# v0.16.1
|
2
|
+
- respect GIT_CONFIG_SYSTEM, GIT_CONFIG_NOSYSTEM and GIT_CONFIG_GLOBAL env vars the same way git does
|
3
|
+
- make the tests more resilient to whatever global config is going on.
|
4
|
+
|
5
|
+
# v0.16.0
|
6
|
+
- Entirely rewrite the way that git config files are read. previously it was just a regexp. now we actually parse git config files according to the same rules as git.
|
7
|
+
- Add ruby 3 to the test matrix
|
8
|
+
|
9
|
+
# v0.15.2
|
10
|
+
- Updated methods with multiple `_` arguments to have different names to make sorbet happy
|
11
|
+
|
12
|
+
# v0.15.1
|
13
|
+
- Updated dependencies to allow running on ruby 3.0.0.preview1
|
14
|
+
|
1
15
|
# v0.15.0
|
2
16
|
- fixed a handful of character class edge cases to match git behavior
|
3
17
|
- mostly ranges with - or / as one end of the range
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# FastIgnore
|
2
2
|
|
3
|
-
[](https://travis-ci.com/robotdana/fast_ignore)
|
4
4
|
[](https://rubygems.org/gems/fast_ignore)
|
5
5
|
|
6
6
|
This started as a way to quickly and natively ruby-ly parse gitignore files and find matching files.
|
@@ -15,7 +15,7 @@ FastIgnore.new(relative: true).sort == `git ls-files`.split("\n").sort
|
|
15
15
|
## Features
|
16
16
|
|
17
17
|
- Fast (faster than using `` `git ls-files`.split("\n") `` for small repos (because it avoids the overhead of ``` `` ```))
|
18
|
-
- Supports ruby 2.4-
|
18
|
+
- Supports ruby 2.4-3.0.x & jruby
|
19
19
|
- supports all [gitignore rule patterns](https://git-scm.com/docs/gitignore#_pattern_format)
|
20
20
|
- doesn't require git to be installed
|
21
21
|
- supports a gitignore-esque "include" patterns. ([`include_rules:`](#include_rules)/[`include_files:`](#include_files))
|
@@ -309,6 +309,7 @@ This is not required, and if FastIgnore does have to go to the filesystem for th
|
|
309
309
|
(It does handle changing the current working directory between [`FastIgnore#allowed?`](#allowed) calls)
|
310
310
|
- FastIgnore always matches patterns case-insensitively. (git varies by filesystem).
|
311
311
|
- FastIgnore always outputs paths as literal UTF-8 characters. (git depends on your core.quotepath setting but by default outputs non ascii paths with octal escapes surrounded by quotes).
|
312
|
+
- git has a system-wide config file installed at `$(prefix)/etc/gitconfig`, where `prefix` is defined for git at install time. FastIgnore assumes that it will always be `/usr/local/etc/gitconfig`. if it's important your system config file is looked at, as that's where you have the core.excludesfile defined, use git's built-in way to override this by adding `export GIT_CONFIG_SYSTEM='/the/actual/location'` to your shell profile.
|
312
313
|
- Because git looks at its own index objects and FastIgnore looks at the file system there may be some differences between FastIgnore and `git ls-files`. To avoid these differences you may want to use the [`git_ls`](https://github.com/robotdana/git_ls) gem instead
|
313
314
|
- Tracked files that were committed before the matching ignore rule was committed will be returned by `git ls-files`, but not by FastIgnore.
|
314
315
|
- Untracked files will be returned by FastIgnore, but not by `git ls-files`
|
@@ -0,0 +1,207 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'strscan'
|
4
|
+
class FastIgnore
|
5
|
+
class GitconfigParseError < FastIgnore::Error; end
|
6
|
+
|
7
|
+
class GitconfigParser # rubocop:disable Metrics/ClassLength
|
8
|
+
def self.parse(file, root: Dir.pwd, nesting: 1)
|
9
|
+
new(file, root: root, nesting: nesting).parse
|
10
|
+
end
|
11
|
+
|
12
|
+
def initialize(path, root: Dir.pwd, nesting: 1)
|
13
|
+
@path = path
|
14
|
+
@root = root
|
15
|
+
@nesting = nesting
|
16
|
+
end
|
17
|
+
|
18
|
+
def parse
|
19
|
+
raise ::FastIgnore::GitconfigParseError if nesting >= 10
|
20
|
+
|
21
|
+
read_file(path)
|
22
|
+
return unless value
|
23
|
+
|
24
|
+
value
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
attr_reader :nesting
|
30
|
+
attr_reader :path
|
31
|
+
attr_reader :root
|
32
|
+
attr_accessor :value
|
33
|
+
attr_accessor :within_quotes
|
34
|
+
attr_accessor :section
|
35
|
+
|
36
|
+
def read_file(path) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
37
|
+
return unless ::File.readable?(path)
|
38
|
+
|
39
|
+
file = StringScanner.new(::File.read(path))
|
40
|
+
|
41
|
+
until file.eos?
|
42
|
+
if file.skip(/(\s+|[#;].*\n)/)
|
43
|
+
# skip
|
44
|
+
elsif file.skip(/\[core\]/i)
|
45
|
+
self.section = :core
|
46
|
+
elsif file.skip(/\[include\]/i)
|
47
|
+
self.section = :include
|
48
|
+
elsif file.skip(/\[(?i:includeif) +"/)
|
49
|
+
self.section = include_if(file) ? :include : :not_include
|
50
|
+
elsif file.skip(/\[[\w.]+( "([^\0\\"]|\\(\\{2})*"|\\{2}*)+")?\]/)
|
51
|
+
self.section = :other
|
52
|
+
elsif section == :core && file.skip(/excludesfile\s*=(\s|\\\n)*/i)
|
53
|
+
self.value = scan_value(file)
|
54
|
+
elsif section == :include && file.skip(/path\s*=(\s|\\\n)*/)
|
55
|
+
include_path = scan_value(file)
|
56
|
+
|
57
|
+
value = ::FastIgnore::GitconfigParser.parse(
|
58
|
+
::File.expand_path(include_path, ::File.dirname(path)),
|
59
|
+
root: root,
|
60
|
+
nesting: nesting + 1
|
61
|
+
)
|
62
|
+
self.value = value if value
|
63
|
+
self.section = :include
|
64
|
+
elsif file.skip(/[a-zA-Z0-9]\w*\s*([#;].*)?\n/)
|
65
|
+
nil
|
66
|
+
elsif file.skip(/[a-zA-Z0-9]\w*\s*=(\s|\\\n)*/)
|
67
|
+
skip_value(file)
|
68
|
+
else
|
69
|
+
raise ::FastIgnore::GitconfigParseError
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def scan_condition_value(file)
|
75
|
+
if file.scan(/([^\0\\\n"]|\\(\\{2})*"|\\{2}*)+(?="\])/)
|
76
|
+
value = file.matched
|
77
|
+
file.skip(/"\]/)
|
78
|
+
value
|
79
|
+
else
|
80
|
+
raise ::FastIgnore::GitconfigParseError
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def skip_condition_value(file)
|
85
|
+
raise ::FastIgnore::GitconfigParseError unless file.skip(/([^\0\\\n"]|\\(\\{2})*"|\\{2}*)+"\]/)
|
86
|
+
end
|
87
|
+
|
88
|
+
def include_if(file)
|
89
|
+
if file.skip(/onbranch:/)
|
90
|
+
on_branch?(scan_condition_value(file))
|
91
|
+
elsif file.skip(/gitdir:/)
|
92
|
+
gitdir?(scan_condition_value(file), path: path)
|
93
|
+
elsif file.skip(%r{gitdir/i:})
|
94
|
+
gitdir?(scan_condition_value(file), case_insensitive: true, path: path)
|
95
|
+
else
|
96
|
+
skip_condition_value(file)
|
97
|
+
false
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
def on_branch?(branch_pattern)
|
102
|
+
branch_pattern += '**' if branch_pattern.end_with?('/')
|
103
|
+
current_branch = ::File.readable?("#{root}/.git/HEAD") && ::File.read("#{root}/.git/HEAD").sub!(
|
104
|
+
%r{\Aref: refs/heads/}, ''
|
105
|
+
)
|
106
|
+
return unless current_branch
|
107
|
+
|
108
|
+
# goddamit git what does 'a pattern with standard globbing wildcards' mean
|
109
|
+
::File.fnmatch(branch_pattern, current_branch, ::File::FNM_PATHNAME | ::File::FNM_DOTMATCH)
|
110
|
+
end
|
111
|
+
|
112
|
+
def gitdir?(gitdir, path:, case_insensitive: false)
|
113
|
+
gitdir += '**' if gitdir.end_with?('/')
|
114
|
+
gitdir.sub!(%r{\A~/}, ENV['HOME'] + '/')
|
115
|
+
gitdir.sub!(/\A\./, path + '/')
|
116
|
+
gitdir = "**/#{gitdir}" unless gitdir.start_with?('/')
|
117
|
+
options = ::File::FNM_PATHNAME | ::File::FNM_DOTMATCH
|
118
|
+
options |= ::File::FNM_CASEFOLD if case_insensitive
|
119
|
+
::File.fnmatch(gitdir, ::File.join(root, '.git'), options)
|
120
|
+
end
|
121
|
+
|
122
|
+
def scan_value(file) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
123
|
+
value = +''
|
124
|
+
until file.eos?
|
125
|
+
if file.skip(/\\\n/)
|
126
|
+
# continue
|
127
|
+
elsif file.skip(/\\\\/)
|
128
|
+
value << '\\'
|
129
|
+
elsif file.skip(/\\n/)
|
130
|
+
value << "\n"
|
131
|
+
elsif file.skip(/\\t/)
|
132
|
+
value << "\t"
|
133
|
+
elsif file.skip(/\\b/)
|
134
|
+
value.chop!
|
135
|
+
elsif file.skip(/\\"/)
|
136
|
+
value << '"'
|
137
|
+
elsif file.skip(/\\/)
|
138
|
+
raise ::FastIgnore::GitconfigParseError
|
139
|
+
elsif within_quotes
|
140
|
+
if file.skip(/"/)
|
141
|
+
self.within_quotes = false
|
142
|
+
elsif file.scan(/[^"\\\n]+/)
|
143
|
+
value << file.matched
|
144
|
+
elsif file.skip(/\n/)
|
145
|
+
raise ::FastIgnore::GitconfigParseError
|
146
|
+
# :nocov:
|
147
|
+
else
|
148
|
+
raise "Unmatched #{file.rest}"
|
149
|
+
# :nocov:
|
150
|
+
end
|
151
|
+
elsif file.skip(/"/)
|
152
|
+
self.within_quotes = true
|
153
|
+
elsif file.scan(/[^;#"\s\\]+/)
|
154
|
+
value << file.matched
|
155
|
+
elsif file.skip(/\s*[;#\n]/)
|
156
|
+
break
|
157
|
+
elsif file.scan(/\s+/) # rubocop:disable Lint/DuplicateBranch
|
158
|
+
value << file.matched
|
159
|
+
# :nocov:
|
160
|
+
else
|
161
|
+
raise "Unmatched #{file.rest}"
|
162
|
+
# :nocov:
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
raise ::FastIgnore::GitconfigParseError if within_quotes
|
167
|
+
|
168
|
+
value
|
169
|
+
end
|
170
|
+
|
171
|
+
def skip_value(file) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
172
|
+
until file.eos?
|
173
|
+
if file.skip(/\\(?:\n|\\|n|t|b|")/)
|
174
|
+
nil
|
175
|
+
elsif file.skip(/\\/)
|
176
|
+
raise ::FastIgnore::GitconfigParseError
|
177
|
+
elsif within_quotes
|
178
|
+
if file.skip(/"/)
|
179
|
+
self.within_quotes = false
|
180
|
+
elsif file.skip(/[^"\\\n]+/)
|
181
|
+
nil
|
182
|
+
elsif file.scan(/\n/)
|
183
|
+
raise ::FastIgnore::GitconfigParseError
|
184
|
+
# :nocov:
|
185
|
+
else
|
186
|
+
raise "Unmatched #{file.rest}"
|
187
|
+
# :nocov:
|
188
|
+
end
|
189
|
+
elsif file.skip(/"/)
|
190
|
+
self.within_quotes = true
|
191
|
+
elsif file.skip(/[^;#"\s\\]+/) # rubocop:disable Lint/DuplicateBranch
|
192
|
+
nil
|
193
|
+
elsif file.skip(/\s*[;#\n]/)
|
194
|
+
break
|
195
|
+
elsif file.skip(/\s+/) # rubocop:disable Lint/DuplicateBranch
|
196
|
+
nil
|
197
|
+
# :nocov:
|
198
|
+
else
|
199
|
+
raise "Unmatched #{file.rest}"
|
200
|
+
# :nocov:
|
201
|
+
end
|
202
|
+
end
|
203
|
+
|
204
|
+
raise ::FastIgnore::GitconfigParseError if within_quotes
|
205
|
+
end
|
206
|
+
end
|
207
|
+
end
|
@@ -100,7 +100,7 @@ class FastIgnore
|
|
100
100
|
end
|
101
101
|
end
|
102
102
|
|
103
|
-
def process_character_class # rubocop:disable Metrics/MethodLength
|
103
|
+
def process_character_class # rubocop:disable Metrics/MethodLength
|
104
104
|
return unless @s.character_class_start?
|
105
105
|
|
106
106
|
@re.append_character_class_open
|
@@ -4,46 +4,84 @@ class FastIgnore
|
|
4
4
|
module GlobalGitignore
|
5
5
|
class << self
|
6
6
|
def path(root:)
|
7
|
-
|
8
|
-
gitconfig_gitignore_path(::File.expand_path('~/.gitconfig')) ||
|
9
|
-
gitconfig_gitignore_path(xdg_config_path) ||
|
10
|
-
gitconfig_gitignore_path('/etc/gitconfig') ||
|
7
|
+
ignore_path = gitconfigs_gitignore_path(root) ||
|
11
8
|
default_global_gitignore_path
|
9
|
+
|
10
|
+
ignore_path unless ignore_path.empty?
|
12
11
|
end
|
13
12
|
|
14
13
|
private
|
15
14
|
|
15
|
+
def gitconfigs_gitignore_path(root)
|
16
|
+
gitconfig_gitignore_path(repo_config_path(root)) ||
|
17
|
+
gitconfig_gitignore_path(global_config_path) ||
|
18
|
+
gitconfig_gitignore_path(default_user_config_path) ||
|
19
|
+
gitconfig_gitignore_path(system_config_path)
|
20
|
+
rescue ::FastIgnore::GitconfigParseError
|
21
|
+
''
|
22
|
+
end
|
23
|
+
|
16
24
|
def gitconfig_gitignore_path(config_path)
|
17
25
|
return unless config_path
|
18
|
-
return unless ::File.
|
26
|
+
return unless ::File.readable?(config_path)
|
19
27
|
|
20
|
-
ignore_path = ::
|
28
|
+
ignore_path = ::FastIgnore::GitconfigParser.parse(config_path)
|
21
29
|
return unless ignore_path
|
22
30
|
|
23
31
|
ignore_path.strip!
|
24
|
-
return
|
32
|
+
return '' if ignore_path.empty? # don't expand path in this case
|
25
33
|
|
26
34
|
::File.expand_path(ignore_path)
|
27
35
|
end
|
28
36
|
|
29
|
-
def
|
30
|
-
|
37
|
+
def default_user_config_path
|
38
|
+
return if env('GIT_CONFIG_GLOBAL')
|
39
|
+
|
40
|
+
::File.expand_path('git/config', default_config_home)
|
31
41
|
end
|
32
42
|
|
33
43
|
def default_global_gitignore_path
|
34
|
-
|
35
|
-
|
44
|
+
::File.expand_path('git/ignore', default_config_home)
|
45
|
+
end
|
46
|
+
|
47
|
+
def repo_config_path(root)
|
48
|
+
::File.expand_path('.git/config', root)
|
49
|
+
end
|
50
|
+
|
51
|
+
def global_config_path
|
52
|
+
::File.expand_path(env('GIT_CONFIG_GLOBAL', '~/.gitconfig'))
|
53
|
+
end
|
54
|
+
|
55
|
+
def system_config_path
|
56
|
+
return if env?('GIT_CONFIG_NOSYSTEM')
|
57
|
+
|
58
|
+
::File.expand_path(env('GIT_CONFIG_SYSTEM', '/usr/local/etc/gitconfig'))
|
59
|
+
end
|
60
|
+
|
61
|
+
def default_config_home
|
62
|
+
env('XDG_CONFIG_HOME', '~/.config')
|
63
|
+
end
|
64
|
+
|
65
|
+
def env(env_var, default = nil)
|
66
|
+
value = ::ENV[env_var]
|
67
|
+
|
68
|
+
if value && (not value.empty?)
|
69
|
+
value
|
36
70
|
else
|
37
|
-
|
71
|
+
default
|
38
72
|
end
|
39
73
|
end
|
40
74
|
|
41
|
-
def
|
42
|
-
::ENV[
|
43
|
-
end
|
75
|
+
def env?(env_var)
|
76
|
+
value = ::ENV[env_var]
|
44
77
|
|
45
|
-
|
46
|
-
|
78
|
+
if value&.match?(/\A(yes|on|true|1)\z/i)
|
79
|
+
true
|
80
|
+
elsif !value || value.match?(/\A(no|off|false|0|)\z/i)
|
81
|
+
false
|
82
|
+
else
|
83
|
+
raise ::FastIgnore::GitconfigParseError
|
84
|
+
end
|
47
85
|
end
|
48
86
|
end
|
49
87
|
end
|
data/lib/fast_ignore/rule.rb
CHANGED
@@ -46,9 +46,9 @@ class FastIgnore
|
|
46
46
|
end
|
47
47
|
# :nocov:
|
48
48
|
|
49
|
-
def match?(
|
49
|
+
def match?(relative_path, full_path, filename, content)
|
50
50
|
return false if filename.include?('.')
|
51
|
-
return false unless (not @file_path_pattern) || @file_path_pattern.match?(
|
51
|
+
return false unless (not @file_path_pattern) || @file_path_pattern.match?(relative_path)
|
52
52
|
|
53
53
|
(content || first_line(full_path))&.match?(@rule)
|
54
54
|
end
|
data/lib/fast_ignore/version.rb
CHANGED
data/lib/fast_ignore.rb
CHANGED
@@ -4,22 +4,24 @@ require_relative './fast_ignore/backports'
|
|
4
4
|
|
5
5
|
require 'set'
|
6
6
|
require 'strscan'
|
7
|
-
require_relative './fast_ignore/rule_sets'
|
8
|
-
require_relative './fast_ignore/rule_set'
|
9
|
-
require_relative './fast_ignore/global_gitignore'
|
10
|
-
require_relative './fast_ignore/rule_builder'
|
11
|
-
require_relative './fast_ignore/gitignore_rule_builder'
|
12
|
-
require_relative './fast_ignore/gitignore_include_rule_builder'
|
13
|
-
require_relative './fast_ignore/gitignore_rule_regexp_builder'
|
14
|
-
require_relative './fast_ignore/gitignore_rule_scanner'
|
15
|
-
require_relative './fast_ignore/file_root'
|
16
|
-
require_relative './fast_ignore/rule'
|
17
|
-
require_relative './fast_ignore/unmatchable_rule'
|
18
|
-
require_relative './fast_ignore/shebang_rule'
|
19
7
|
|
20
8
|
class FastIgnore
|
21
9
|
class Error < StandardError; end
|
22
10
|
|
11
|
+
require_relative './fast_ignore/rule_sets'
|
12
|
+
require_relative './fast_ignore/rule_set'
|
13
|
+
require_relative './fast_ignore/global_gitignore'
|
14
|
+
require_relative './fast_ignore/rule_builder'
|
15
|
+
require_relative './fast_ignore/gitignore_rule_builder'
|
16
|
+
require_relative './fast_ignore/gitignore_include_rule_builder'
|
17
|
+
require_relative './fast_ignore/gitignore_rule_regexp_builder'
|
18
|
+
require_relative './fast_ignore/gitignore_rule_scanner'
|
19
|
+
require_relative './fast_ignore/file_root'
|
20
|
+
require_relative './fast_ignore/rule'
|
21
|
+
require_relative './fast_ignore/unmatchable_rule'
|
22
|
+
require_relative './fast_ignore/shebang_rule'
|
23
|
+
require_relative './fast_ignore/gitconfig_parser'
|
24
|
+
|
23
25
|
include ::Enumerable
|
24
26
|
|
25
27
|
# :nocov:
|
@@ -86,7 +88,7 @@ class FastIgnore
|
|
86
88
|
@loaded_gitignore_files << parent_path
|
87
89
|
end
|
88
90
|
|
89
|
-
def each_recursive(parent_full_path, parent_relative_path, &block) # rubocop:disable Metrics/MethodLength
|
91
|
+
def each_recursive(parent_full_path, parent_relative_path, &block) # rubocop:disable Metrics/MethodLength
|
90
92
|
children = ::Dir.children(parent_full_path)
|
91
93
|
load_gitignore(parent_relative_path, check_exists: false) if @gitignore_enabled && children.include?('.gitignore')
|
92
94
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fast_ignore
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.16.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dana Sherson
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-12-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.
|
33
|
+
version: 0.4.0
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 0.
|
40
|
+
version: 0.4.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: pry
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -86,28 +86,48 @@ dependencies:
|
|
86
86
|
requirements:
|
87
87
|
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: 0.
|
89
|
+
version: 0.93.1
|
90
|
+
- - "<"
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: '1.12'
|
90
93
|
type: :development
|
91
94
|
prerelease: false
|
92
95
|
version_requirements: !ruby/object:Gem::Requirement
|
93
96
|
requirements:
|
94
97
|
- - ">="
|
95
98
|
- !ruby/object:Gem::Version
|
96
|
-
version: 0.
|
99
|
+
version: 0.93.1
|
100
|
+
- - "<"
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '1.12'
|
103
|
+
- !ruby/object:Gem::Dependency
|
104
|
+
name: rubocop-rake
|
105
|
+
requirement: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - ">="
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
type: :development
|
111
|
+
prerelease: false
|
112
|
+
version_requirements: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - ">="
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: '0'
|
97
117
|
- !ruby/object:Gem::Dependency
|
98
118
|
name: rubocop-rspec
|
99
119
|
requirement: !ruby/object:Gem::Requirement
|
100
120
|
requirements:
|
101
|
-
- - "
|
121
|
+
- - ">="
|
102
122
|
- !ruby/object:Gem::Version
|
103
|
-
version:
|
123
|
+
version: 1.44.1
|
104
124
|
type: :development
|
105
125
|
prerelease: false
|
106
126
|
version_requirements: !ruby/object:Gem::Requirement
|
107
127
|
requirements:
|
108
|
-
- - "
|
128
|
+
- - ">="
|
109
129
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
130
|
+
version: 1.44.1
|
111
131
|
- !ruby/object:Gem::Dependency
|
112
132
|
name: simplecov
|
113
133
|
requirement: !ruby/object:Gem::Requirement
|
@@ -122,6 +142,20 @@ dependencies:
|
|
122
142
|
- - "~>"
|
123
143
|
- !ruby/object:Gem::Version
|
124
144
|
version: 0.18.5
|
145
|
+
- !ruby/object:Gem::Dependency
|
146
|
+
name: simplecov-console
|
147
|
+
requirement: !ruby/object:Gem::Requirement
|
148
|
+
requirements:
|
149
|
+
- - ">="
|
150
|
+
- !ruby/object:Gem::Version
|
151
|
+
version: '0'
|
152
|
+
type: :development
|
153
|
+
prerelease: false
|
154
|
+
version_requirements: !ruby/object:Gem::Requirement
|
155
|
+
requirements:
|
156
|
+
- - ">="
|
157
|
+
- !ruby/object:Gem::Version
|
158
|
+
version: '0'
|
125
159
|
- !ruby/object:Gem::Dependency
|
126
160
|
name: spellr
|
127
161
|
requirement: !ruby/object:Gem::Requirement
|
@@ -136,7 +170,7 @@ dependencies:
|
|
136
170
|
- - ">="
|
137
171
|
- !ruby/object:Gem::Version
|
138
172
|
version: 0.8.3
|
139
|
-
description:
|
173
|
+
description:
|
140
174
|
email:
|
141
175
|
- robot@dana.sh
|
142
176
|
executables: []
|
@@ -149,6 +183,7 @@ files:
|
|
149
183
|
- lib/fast_ignore.rb
|
150
184
|
- lib/fast_ignore/backports.rb
|
151
185
|
- lib/fast_ignore/file_root.rb
|
186
|
+
- lib/fast_ignore/gitconfig_parser.rb
|
152
187
|
- lib/fast_ignore/gitignore_include_rule_builder.rb
|
153
188
|
- lib/fast_ignore/gitignore_rule_builder.rb
|
154
189
|
- lib/fast_ignore/gitignore_rule_regexp_builder.rb
|
@@ -167,24 +202,24 @@ licenses:
|
|
167
202
|
metadata:
|
168
203
|
homepage_uri: https://github.com/robotdana/fast_ignore
|
169
204
|
source_code_uri: https://github.com/robotdana/fast_ignore
|
170
|
-
changelog_uri: https://github.com/robotdana/fast_ignore/blob/
|
171
|
-
post_install_message:
|
205
|
+
changelog_uri: https://github.com/robotdana/fast_ignore/blob/main/CHANGELOG.md
|
206
|
+
post_install_message:
|
172
207
|
rdoc_options: []
|
173
208
|
require_paths:
|
174
209
|
- lib
|
175
210
|
required_ruby_version: !ruby/object:Gem::Requirement
|
176
211
|
requirements:
|
177
|
-
- - "
|
212
|
+
- - ">="
|
178
213
|
- !ruby/object:Gem::Version
|
179
|
-
version:
|
214
|
+
version: 2.4.0
|
180
215
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
181
216
|
requirements:
|
182
217
|
- - ">="
|
183
218
|
- !ruby/object:Gem::Version
|
184
219
|
version: '0'
|
185
220
|
requirements: []
|
186
|
-
rubygems_version: 3.
|
187
|
-
signing_key:
|
221
|
+
rubygems_version: 3.2.15
|
222
|
+
signing_key:
|
188
223
|
specification_version: 4
|
189
224
|
summary: Parse gitignore files, quickly
|
190
225
|
test_files: []
|