gitattributes 2.1.0 → 2.2.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
  SHA1:
3
- metadata.gz: 1dc92733e0082ca268d4b9f6abc03e5c8f33cd14
4
- data.tar.gz: e2c35f9ec4cebfb13a27d53c56ee2790093bdd91
3
+ metadata.gz: f2759e748dc351ded9388399184c90221e585fa4
4
+ data.tar.gz: e0806187ce98ed16a53d968ab396509c0d4b796c
5
5
  SHA512:
6
- metadata.gz: c9cc69a1152dc647d27a5717ba1bc025a1c954e4d557b93b43200b08d6a9f31480af96ca8361a1fc93a4e437353cf9c95a9ddf1c869cf602c9381ec3328a7808
7
- data.tar.gz: b32cc7ac4ab3d2c7cfd3ac508df6f497e7c5cb2bb7a05f4924b58abcaefbf2a8a1e6d3311a430c6f8827449e05b25b485fd82205d0adf8bd0b35c0d11728fc17
6
+ metadata.gz: c97e8f630ef87a46056c906f655004c3ac15bbf5dd93e4e51eb3a2eb1f07ee8714935e881d7ff805e2b9f5ac8c7ed124af08e73229afa844f30ca6862fdedc36
7
+ data.tar.gz: a7163bb1a24119ebe960bbd902146b922da59bee50417259a139f8175d188e518f4cfa654bea741bdd8da4aea245a7115194b2b552336ede42cb2497e16834bf
data/README.md CHANGED
@@ -6,7 +6,62 @@ Classes to parse `.gitattributes` files.
6
6
 
7
7
  A simple example of it's usage:
8
8
 
9
+ ### Read an existing .gitattributes
10
+
11
+ Read an existing file that looks like
12
+
13
+ ```
14
+ README.md text eol=lf
15
+ *.jpg binary
16
+ ```
17
+
18
+ With code that looks like
19
+
9
20
  ```ruby
10
- attributes = Reality::Git::Attributes.parse('/home/user/myrepo')
11
- attributes.attributes('README.md') # => { "eol" => "lf }
21
+ require 'reality/gitattributes'
22
+
23
+ attributes = Reality::Git::Attributes.parse('/home/user/myrepo')
24
+ attributes.attributes('README.md') # => { "text" => true, "eol" => "lf }
25
+ attributes.attributes('*.jpg') # => { "binary" => true }
26
+ ```
27
+
28
+ ### Write .gitattributes
29
+
30
+ ```ruby
31
+ require 'reality/gitattributes'
32
+
33
+ attributes = Reality::Git::Attributes.new('/home/user/myrepo')
34
+ attributes.dos_text_rule('*.cmd')
35
+ attributes.dos_text_rule('*.rdl', :eofnl => false)
36
+ attributes.unix_text_rule('*.sh')
37
+ attributes.text_rule('*.md')
38
+ attributes.binary_rule('*.jpg')
39
+
40
+ attributes.write_to('/home/user/myrepo/.gitattributes')
41
+ ```
42
+
43
+ produces a file that looks like
44
+
45
+ ```
46
+ *.cmd text eol=crlf
47
+ *.rdl text eol=crlf -eofnl
48
+ *.sh text eol=lf
49
+ *.md text
50
+ *.jpg binary
51
+ ```
52
+
53
+ You could also pass `:prefix` and `:normalize` options to write_to method like
54
+
55
+ ```ruby
56
+ attributes.write_to('/home/user/myrepo/.gitattributes', :normalize => true, :prefix => '# DO NOT EDIT: File is auto-generated')
57
+ ```
58
+
59
+ to produce a file that looks like:
60
+
61
+ ```
62
+ # DO NOT EDIT: File is auto-generated
63
+ *.cmd text eol=crlf
64
+ *.md text
65
+ *.rdl text eol=crlf -eofnl
66
+ *.sh text eol=lf
12
67
  ```
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{gitattributes}
5
- s.version = '2.1.0'
5
+ s.version = '2.2.0'
6
6
  s.platform = Gem::Platform::RUBY
7
7
 
8
8
  s.authors = ['Peter Donald']
@@ -16,7 +16,7 @@ module Reality #nodoc
16
16
  module Git
17
17
  # Represents a rule within the attributes file
18
18
  class AttributeRule
19
- ATTR_ORDER = %w(text crlf binary eofnl)
19
+ ATTR_ORDER = %w(text binary eol encoding eofnl)
20
20
 
21
21
  def initialize(pattern, attributes)
22
22
  @pattern = pattern
@@ -61,12 +61,24 @@ module Reality #nodoc
61
61
  @rules << AttributeRule.new(pattern, attributes)
62
62
  end
63
63
 
64
+ # Adds a rule for pattern that sets the text attribute.
65
+ # This means that the file will be stored in the repository with line endings converted to LF
64
66
  def text_rule(pattern, attributes = {})
65
- rule(pattern, { :text => true, :crlf => false, :binary => false }.merge(attributes))
67
+ rule(pattern, { :text => true }.merge(attributes))
66
68
  end
67
69
 
70
+ # Adds a rule for pattern that sets the text attribute and eol=lf.
71
+ # This means that the file will be stored in the repository with line endings converted to LF
72
+ # *and* the local checkout will have line endings converted to LF
73
+ def unix_text_rule(pattern, attributes = {})
74
+ text_rule(pattern, { :eol => 'lf' }.merge(attributes))
75
+ end
76
+
77
+ # Adds a rule for pattern that sets the text attribute and eol=crlf.
78
+ # This means that the file will be stored in the repository with line endings converted to LF
79
+ # *and* the local checkout will have line endings converted to CRLF
68
80
  def dos_text_rule(pattern, attributes = {})
69
- text_rule(pattern, { :crlf => true }.merge(attributes))
81
+ text_rule(pattern, { :eol => 'crlf' }.merge(attributes))
70
82
  end
71
83
 
72
84
  def binary_rule(pattern, attributes = {})
@@ -32,7 +32,7 @@ class Reality::Git::TestAttributeRule < Reality::TestCase
32
32
  def test_many_attributes
33
33
  rule = Reality::Git::AttributeRule.new('*.rdl', 'eofnl' => false, 'text' => true, 'crlf' => true, 'binary' => false, 'ms-file' => 'RPT', 'age' => '22')
34
34
  assert_equal({ 'eofnl' => false, 'text' => true, 'crlf' => true, 'binary' => false, 'ms-file' => 'RPT', 'age' => '22' }, rule.attributes)
35
- assert_equal('*.rdl text crlf -binary -eofnl age=22 ms-file=RPT', rule.to_s)
35
+ assert_equal('*.rdl text -binary -eofnl age=22 crlf ms-file=RPT', rule.to_s)
36
36
  end
37
37
 
38
38
  def test_sorting
@@ -53,7 +53,7 @@ TEXT
53
53
  write_standard_file(dir, content)
54
54
 
55
55
  attributes = Reality::Git::Attributes.parse(dir)
56
- assert_equal(['*.textile text -crlf -binary'], attributes.rules.collect {|p| p.to_s})
56
+ assert_equal(['*.textile text -binary -crlf'], attributes.rules.collect {|p| p.to_s})
57
57
 
58
58
  assert_equal({}, attributes.attributes('README.md'))
59
59
  assert_equal({ 'text' => true, 'crlf' => false, 'binary' => false }, attributes.attributes('README.textile'))
@@ -69,7 +69,7 @@ TEXT
69
69
  write_standard_file(dir, content)
70
70
 
71
71
  attributes = Reality::Git::Attributes.parse(dir)
72
- assert_equal(['* -text', '*.textile text -crlf -binary'], attributes.rules.collect {|p| p.to_s})
72
+ assert_equal(['* -text', '*.textile text -binary -crlf'], attributes.rules.collect {|p| p.to_s})
73
73
 
74
74
  assert_equal({ 'text' => false }, attributes.attributes('README.md'))
75
75
  assert_equal({ 'text' => true, 'crlf' => false, 'binary' => false }, attributes.attributes('doc/X.textile'))
@@ -241,7 +241,20 @@ TEXT
241
241
  attributes.text_rule('*.md')
242
242
  attributes.text_rule('*.rake', :eofnl => false)
243
243
 
244
- assert_equal(['*.md text -crlf -binary', '*.rake text -crlf -binary -eofnl'], attributes.rules.collect {|p| p.to_s})
244
+ assert_equal(['*.md text', '*.rake text -eofnl'], attributes.rules.collect {|p| p.to_s})
245
+ end
246
+
247
+ def test_add_unix_text_rule
248
+ dir = "#{working_dir}/#{::SecureRandom.hex}"
249
+
250
+ attributes = Reality::Git::Attributes.new(dir)
251
+
252
+ assert_equal([], attributes.rules.collect {|p| p.to_s})
253
+
254
+ attributes.unix_text_rule('*.sh')
255
+ attributes.unix_text_rule('*.init', :eofnl => false)
256
+
257
+ assert_equal(['*.sh text eol=lf', '*.init text eol=lf -eofnl'], attributes.rules.collect {|p| p.to_s})
245
258
  end
246
259
 
247
260
  def test_add_dos_text_rule
@@ -254,7 +267,7 @@ TEXT
254
267
  attributes.dos_text_rule('*.cmd')
255
268
  attributes.dos_text_rule('*.rdl', :eofnl => false)
256
269
 
257
- assert_equal(['*.cmd text crlf -binary', '*.rdl text crlf -binary -eofnl'], attributes.rules.collect {|p| p.to_s})
270
+ assert_equal(['*.cmd text eol=crlf', '*.rdl text eol=crlf -eofnl'], attributes.rules.collect {|p| p.to_s})
258
271
  end
259
272
 
260
273
  def test_add_binary_rule
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.1.0
4
+ version: 2.2.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-04 00:00:00.000000000 Z
11
+ date: 2017-08-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest