gitattributes 2.1.0 → 2.2.0

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 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