gitattributes 2.4.0 → 2.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/gitattributes.gemspec +1 -1
- data/lib/reality/git/attributes.rb +24 -3
- data/test/reality/git/test_attributes.rb +24 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b782ca7bbdcc120c34494e2db3887dcf25d7a9fa
|
4
|
+
data.tar.gz: 02120c50fa900d5893c20964c6e931b228ef97e3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4b441a8a54c939961406cbb9307ce6e00ca9d7124ee003d2428a358a315257c005176f19b4f519296fb74c9875229b2d65628c67cd08c5d21a7078ca8f5cd938
|
7
|
+
data.tar.gz: ec1bd6314c6296a962fc140f6d0587da069292ba019f9280178aeae8473832e5cc6351c6ceb1d396f8e71ee77926b6151dc3a0d3499c3c7bb6b4aabd72e8fc25
|
data/gitattributes.gemspec
CHANGED
@@ -34,6 +34,10 @@ module Reality #nodoc
|
|
34
34
|
@attributes_file = attributes_file || "#{@path}/.gitattributes"
|
35
35
|
@relative_path = relative_path || File.dirname(@attributes_file)
|
36
36
|
@rules = rules
|
37
|
+
@rule_map = {}
|
38
|
+
rules.each do |rule|
|
39
|
+
cache_rule(rule)
|
40
|
+
end
|
37
41
|
end
|
38
42
|
|
39
43
|
attr_reader :attributes_file
|
@@ -42,7 +46,7 @@ module Reality #nodoc
|
|
42
46
|
def attributes(path)
|
43
47
|
full_path = File.join(@path, path)
|
44
48
|
|
45
|
-
|
49
|
+
self.rules.reverse.each do |rule|
|
46
50
|
full_pattern = rule.pattern[0] == '/' ? "#{@relative_path}#{rule.pattern}" : "#{@relative_path}/**/#{rule.pattern}"
|
47
51
|
return rule.attributes if File.fnmatch?(full_pattern, full_path, File::FNM_PATHNAME | File::FNM_DOTMATCH)
|
48
52
|
end
|
@@ -52,14 +56,17 @@ module Reality #nodoc
|
|
52
56
|
|
53
57
|
def write_to(filename, options = {})
|
54
58
|
prefix = options[:prefix].nil? ? '' : "#{options[:prefix]}\n"
|
55
|
-
rules =
|
59
|
+
rules = self.rules
|
60
|
+
rules = rules.dup.sort.uniq if options[:normalize]
|
56
61
|
content = rules.collect {|r| r.to_s}.join("\n")
|
57
62
|
content += "\n" unless content.empty?
|
58
63
|
IO.write(filename, prefix + content)
|
59
64
|
end
|
60
65
|
|
61
66
|
def rule(pattern, attributes)
|
62
|
-
|
67
|
+
rule = AttributeRule.new(pattern, attributes)
|
68
|
+
@rules << rule
|
69
|
+
cache_rule(rule)
|
63
70
|
end
|
64
71
|
|
65
72
|
# Adds a rule for pattern that sets the text attribute.
|
@@ -90,6 +97,20 @@ module Reality #nodoc
|
|
90
97
|
def rules
|
91
98
|
@rules.dup
|
92
99
|
end
|
100
|
+
|
101
|
+
def rules_by_pattern(pattern)
|
102
|
+
@rule_map[pattern].nil? ? [] : @rule_map[pattern].dup
|
103
|
+
end
|
104
|
+
|
105
|
+
def rules_by_pattern?(pattern)
|
106
|
+
!rules_by_pattern(pattern).empty?
|
107
|
+
end
|
108
|
+
|
109
|
+
private
|
110
|
+
|
111
|
+
def cache_rule(rule)
|
112
|
+
(@rule_map[rule.pattern] ||= []) << rule
|
113
|
+
end
|
93
114
|
end
|
94
115
|
end
|
95
116
|
end
|
@@ -27,6 +27,24 @@ TEXT
|
|
27
27
|
assert_equal(['* -text'], attributes.rules.collect {|p| p.to_s})
|
28
28
|
|
29
29
|
assert_equal({ 'text' => false }, attributes.attributes('README.md'))
|
30
|
+
assert_equal(['* -text'], attributes.rules_by_pattern('*').collect {|p| p.to_s})
|
31
|
+
assert_equal(true, attributes.rules_by_pattern?('*'))
|
32
|
+
assert_equal(false, attributes.rules_by_pattern?('XXX'))
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_multiple_rules_with_same_pattern
|
36
|
+
content = <<TEXT
|
37
|
+
* -text
|
38
|
+
* binary
|
39
|
+
TEXT
|
40
|
+
dir = "#{working_dir}/#{::SecureRandom.hex}"
|
41
|
+
write_standard_file(dir, content)
|
42
|
+
|
43
|
+
attributes = Reality::Git::Attributes.parse(dir)
|
44
|
+
assert_equal("#{dir}/.gitattributes", attributes.attributes_file)
|
45
|
+
assert_equal(['* -text', '* binary -diff'], attributes.rules_by_pattern('*').collect {|p| p.to_s})
|
46
|
+
assert_equal(true, attributes.rules_by_pattern?('*'))
|
47
|
+
assert_equal(false, attributes.rules_by_pattern?('XXX'))
|
30
48
|
end
|
31
49
|
|
32
50
|
def test_space_pattern_in_rule
|
@@ -41,6 +59,9 @@ TEXT
|
|
41
59
|
assert_equal(['Read[[:space:]]Me.txt text crlf'], attributes.rules.collect {|p| p.to_s})
|
42
60
|
|
43
61
|
assert_equal({ 'text' => true, 'crlf' => true }, attributes.attributes('Read Me.txt'))
|
62
|
+
assert_equal(['Read[[:space:]]Me.txt text crlf'], attributes.rules_by_pattern('Read Me.txt').collect {|p| p.to_s})
|
63
|
+
assert_equal(true, attributes.rules_by_pattern?('Read Me.txt'))
|
64
|
+
assert_equal(false, attributes.rules_by_pattern?('XXX'))
|
44
65
|
end
|
45
66
|
|
46
67
|
def test_exact_match_in_subdirectory
|
@@ -70,6 +91,9 @@ TEXT
|
|
70
91
|
|
71
92
|
assert_equal({ 'text' => true }, attributes.attributes('bin/doc/README.md'))
|
72
93
|
assert_equal({ }, attributes.attributes('not/matching/bin/doc/README.md'))
|
94
|
+
assert_equal(['/bin/doc/README.md text'], attributes.rules_by_pattern('/bin/doc/README.md').collect {|p| p.to_s})
|
95
|
+
assert_equal(true, attributes.rules_by_pattern?('/bin/doc/README.md'))
|
96
|
+
assert_equal(false, attributes.rules_by_pattern?('XXX'))
|
73
97
|
end
|
74
98
|
|
75
99
|
def test_gitattributes_in_non_standard_location
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gitattributes
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Donald
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-08-
|
11
|
+
date: 2017-08-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: minitest
|