mtree 1.0.0 → 1.0.1

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
  SHA256:
3
- metadata.gz: e07ec004e1b016ffad3ce93f09d80009859db4d73afbc6aa0657514a032d1a55
4
- data.tar.gz: d33eea6de1e3fc2934d404d0d7b684f78b5c99e0ee63d4a98326429320e9d05e
3
+ metadata.gz: 314d213f66e3a73b88dfb0e2692c924ea5cec80f6332673e7612e3cc31cab7bc
4
+ data.tar.gz: 7cfcfeaf8c7aad5954825d9a35cf7e17286e43a7792378fb15ca2f3e77eaba43
5
5
  SHA512:
6
- metadata.gz: 3f26621da0b4658b23199632b7722d3b62fc5375933f82679c86092867e9bf89158f053bdae016ba4ff822c39aa182ac149a03a5a3691843f9430b84ed27c5d9
7
- data.tar.gz: 61048a3f80af78a046aac04b0ef2886c13ad9a933e8d4b5e3aee50b4027f670163777ef5d6f96380e5e67d7584aadff4a2f0521020d67bd624fb1102ac037faa
6
+ metadata.gz: cdf9ccd76bb58d262555621c76c946d84ec0895ea50c5e7dc40254d6be1e7409a1dbb2dd9afb545cb28691c880b4877dda22945792c60c994ea4b1ed950f83cc
7
+ data.tar.gz: 81c1c6b709c667ea806fa6862e2ca366efab3637918bcde43b9c8f5252d63ccae4df2266b9ad3efdbbde0c623b0323f5719f426ff56239e7a522d3528ef2b5ca
@@ -0,0 +1 @@
1
+ * @opus-codium/core
@@ -0,0 +1,50 @@
1
+ ---
2
+ name: CI
3
+
4
+ on:
5
+ push:
6
+ branches:
7
+ - main
8
+ pull_request:
9
+ branches:
10
+ - main
11
+
12
+ jobs:
13
+ rubocop:
14
+ runs-on: ubuntu-latest
15
+ steps:
16
+ - uses: actions/checkout@v2
17
+ - name: Setup ruby
18
+ uses: ruby/setup-ruby@v1
19
+ with:
20
+ ruby-version: 3.0
21
+ bundler-cache: true
22
+ - name: Run static code analysis
23
+ run: bundle exec rubocop
24
+ unit:
25
+ runs-on: ubuntu-latest
26
+ needs: rubocop
27
+ strategy:
28
+ matrix:
29
+ ruby:
30
+ - "2.7"
31
+ - "3.0"
32
+ - "3.1"
33
+ name: Ruby ${{ matrix.ruby }}
34
+ steps:
35
+ - uses: actions/checkout@v2
36
+ - name: Setup ruby
37
+ uses: ruby/setup-ruby@v1
38
+ with:
39
+ ruby-version: ${{ matrix.ruby }}
40
+ bundler-cache: true
41
+ - name: Run tests without uploading code coverage
42
+ if: ${{ matrix.ruby != '3.0' }}
43
+ run: bundle exec rake
44
+ - name: Run tests and upload coverage to Code Climate
45
+ if: ${{ matrix.ruby == '3.0' }}
46
+ uses: paambaati/codeclimate-action@v3.0.0
47
+ env:
48
+ CC_TEST_REPORTER_ID: ${{ secrets.CODECLIMATE_TOKEN }}
49
+ with:
50
+ coverageCommand: bundle exec rake
data/.gitignore CHANGED
@@ -4,6 +4,7 @@
4
4
  /coverage/
5
5
  /doc/
6
6
  /pkg/
7
+ /lib/mtree/parser.tab.rb
7
8
  /spec/reports/
8
9
  /tmp/
9
10
  /Gemfile.lock
data/.rubocop.yml CHANGED
@@ -1,16 +1,20 @@
1
1
  AllCops:
2
2
  Exclude:
3
3
  - 'lib/mtree/parser.tab.rb'
4
+ - 'vendor/bundle/**/*'
4
5
 
5
6
  Metrics/LineLength:
6
7
  Enabled: false
7
8
 
8
9
  Metrics/BlockLength:
9
- Exclude:
10
- - 'spec/**/*.rb'
10
+ Enabled: false
11
11
 
12
12
  Style/Documentation:
13
13
  Enabled: false
14
14
 
15
+ Style/TrailingCommaInArguments:
16
+ EnforcedStyleForMultiline: consistent_comma
17
+ Style/TrailingCommaInArrayLiteral:
18
+ EnforcedStyleForMultiline: consistent_comma
15
19
  Style/TrailingCommaInHashLiteral:
16
- Enabled: false
20
+ EnforcedStyleForMultiline: consistent_comma
data/CHANGELOG.md ADDED
@@ -0,0 +1,21 @@
1
+ # Changelog
2
+
3
+ ## [v1.0.1](https://github.com/opus-codium/mtree/tree/v1.0.1) (2022-10-17)
4
+
5
+ [Full Changelog](https://github.com/opus-codium/mtree/compare/v1.0.0...v1.0.1)
6
+
7
+ **Fixed bugs:**
8
+
9
+ - Fix creation of links in place of directories [\#6](https://github.com/opus-codium/mtree/pull/6) ([smortex](https://github.com/smortex))
10
+ - Fix `mtree --check` [\#4](https://github.com/opus-codium/mtree/pull/4) ([neomilium](https://github.com/neomilium))
11
+
12
+ **Merged pull requests:**
13
+
14
+ - Remove generated parser from the repo [\#7](https://github.com/opus-codium/mtree/pull/7) ([smortex](https://github.com/smortex))
15
+ - Add a CODEOWNER file [\#5](https://github.com/opus-codium/mtree/pull/5) ([smortex](https://github.com/smortex))
16
+ - Parser improvements [\#2](https://github.com/opus-codium/mtree/pull/2) ([smortex](https://github.com/smortex))
17
+ - Add CI [\#1](https://github.com/opus-codium/mtree/pull/1) ([smortex](https://github.com/smortex))
18
+
19
+
20
+
21
+ \* *This Changelog was automatically generated by [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator)*
data/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
data/Rakefile CHANGED
@@ -1,11 +1,29 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'bundler/gem_tasks'
2
4
  require 'rspec/core/rake_task'
5
+ require 'github_changelog_generator/task'
3
6
 
4
7
  RSpec::Core::RakeTask.new(:spec)
5
8
 
9
+ GitHubChangelogGenerator::RakeTask.new :changelog do |config|
10
+ config.user = 'opus-codium'
11
+ config.project = 'mtree'
12
+ config.exclude_labels = ['skip-changelog']
13
+ config.future_release = "v#{Mtree::VERSION}"
14
+ config.since_tag = 'v1.0.0'
15
+ end
16
+
6
17
  task default: :spec
7
18
 
19
+ task build: :gen_parser
20
+ task spec: :gen_parser
21
+
8
22
  desc "Generate the mtree parser's code"
9
- task :parser do
10
- sh 'racc lib/mtree/parser.y'
23
+ task gen_parser: [
24
+ 'lib/mtree/parser.tab.rb',
25
+ ]
26
+
27
+ file 'lib/mtree/parser.tab.rb' => 'lib/mtree/parser.y' do
28
+ sh 'racc -S lib/mtree/parser.y'
11
29
  end
data/bin/console CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  require 'bundler/setup'
4
5
  require 'mtree'
data/exe/mtree CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  require 'mtree'
4
5
 
@@ -82,9 +83,7 @@ options[:user_mapping].each do |from, to|
82
83
  end
83
84
  end
84
85
 
85
- if options[:symlink_to]
86
- specifications.symlink_to!(options[:symlink_to])
87
- end
86
+ specifications.symlink_to!(options[:symlink_to]) if options[:symlink_to]
88
87
 
89
88
  case options[:action]
90
89
  when :update
@@ -1,5 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'etc'
4
+
1
5
  module Mtree
2
- class FileSpecification
6
+ class FileSpecification # rubocop:disable Metrics/ClassLength
3
7
  # VALID_ATTRIBUTES = %i[cksum device flags gid gname link md5 mode nlink nochange optional rmd160 sha1 sha256 sha384 sha512 size tags time type uid uname].freeze
4
8
  VALID_ATTRIBUTES = %i[gid gname link mode nochange optional type uid uname].freeze
5
9
 
@@ -13,9 +17,7 @@ module Mtree
13
17
  end
14
18
  end
15
19
 
16
- attr_accessor :filename
17
- attr_accessor :relative_path
18
- attr_accessor :children
20
+ attr_accessor :filename, :relative_path, :children
19
21
 
20
22
  def initialize(filename, attributes = {})
21
23
  @filename = filename
@@ -23,11 +25,12 @@ module Mtree
23
25
  if (invalid_keys = attributes.keys - VALID_ATTRIBUTES) != []
24
26
  raise "Unsupported attribute: #{invalid_keys.first}"
25
27
  end
28
+
26
29
  @attributes = attributes
27
30
  @children = []
28
31
  end
29
32
 
30
- def match?(root)
33
+ def match?(root) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength
31
34
  res = true
32
35
  problems = []
33
36
 
@@ -35,9 +38,7 @@ module Mtree
35
38
  @attributes.each do |attr, expected|
36
39
  actual = send("current_#{attr}", root)
37
40
 
38
- if expected != actual
39
- problems << { attr: attr, expected: expected, actual: actual }
40
- end
41
+ problems << { attr: attr, expected: expected, actual: actual } if expected != actual
41
42
  end
42
43
  rescue Errno::ENOENT
43
44
  puts "#{relative_path} missing"
@@ -85,7 +86,9 @@ module Mtree
85
86
  case type
86
87
  when 'dir' then FileUtils.mkdir_p(full_filename(root))
87
88
  when 'file' then FileUtils.touch(full_filename(root))
88
- when 'link' then FileUtils.ln_s(link, full_filename(root), force: true)
89
+ when 'link'
90
+ FileUtils.rm_rf(full_filename(root))
91
+ FileUtils.ln_s(link, full_filename(root))
89
92
  end
90
93
  update(root)
91
94
  end
@@ -134,7 +137,7 @@ module Mtree
134
137
  "#{filename} #{attributes}\n#{descendent}..\n"
135
138
  end
136
139
 
137
- def attributes
140
+ def attributes # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/PerceivedComplexity
138
141
  parts = []
139
142
 
140
143
  parts << format('gid=%d', gid) if gid
@@ -1,7 +1,7 @@
1
1
  #
2
2
  # DO NOT MODIFY!!!!
3
- # This file is automatically generated by Racc 1.4.14
4
- # from Racc grammer file "".
3
+ # This file is automatically generated by Racc 1.6.0
4
+ # from Racc grammar file "".
5
5
  #
6
6
 
7
7
  require 'racc/parser.rb'
@@ -12,7 +12,7 @@ require 'strscan'
12
12
  module Mtree
13
13
  class Parser < Racc::Parser
14
14
 
15
- module_eval(<<'...end parser.y/module_eval...', 'parser.y', 33)
15
+ module_eval(<<'...end parser.y/module_eval...', 'parser.y', 38)
16
16
 
17
17
  attr_accessor :yydebug
18
18
  attr_accessor :defaults
@@ -69,17 +69,17 @@ end
69
69
  ##### State transition tables begin ###
70
70
 
71
71
  racc_action_table = [
72
- 14, 12, 8, 16, 17, 18, 19, 20, 21, 22,
72
+ 14, 8, 12, 16, 17, 18, 19, 20, 21, 22,
73
73
  23, 24, 13, nil, 16, 17, 18, 19, 20, 21,
74
74
  22, 23, 4, 7, 5, 6, 4, 7, 5, 6 ]
75
75
 
76
76
  racc_action_check = [
77
- 10, 6, 1, 10, 10, 10, 10, 10, 10, 10,
77
+ 10, 1, 6, 10, 10, 10, 10, 10, 10, 10,
78
78
  10, 11, 8, nil, 11, 11, 11, 11, 11, 11,
79
- 11, 11, 2, 2, 2, 2, 0, 0, 0, 0 ]
79
+ 11, 11, 0, 0, 0, 0, 2, 2, 2, 2 ]
80
80
 
81
81
  racc_action_pointer = [
82
- 24, 2, 20, nil, nil, nil, -2, nil, 12, nil,
82
+ 20, 1, 24, nil, nil, nil, -1, nil, 12, nil,
83
83
  -3, 8, nil, nil, nil, nil, nil, nil, nil, nil,
84
84
  nil, nil, nil, nil, nil ]
85
85
 
@@ -191,7 +191,7 @@ Racc_debug_parser = false
191
191
 
192
192
  module_eval(<<'.,.,', 'parser.y', 2)
193
193
  def _reduce_1(val, _values, result)
194
- if @path_components.any? then raise 'Malformed specifications' end
194
+ if @path_components.any? then raise 'Malformed specifications' end
195
195
  result
196
196
  end
197
197
  .,.,
@@ -204,93 +204,97 @@ module_eval(<<'.,.,', 'parser.y', 2)
204
204
 
205
205
  module_eval(<<'.,.,', 'parser.y', 8)
206
206
  def _reduce_5(val, _values, result)
207
- @defaults.merge!(val[1])
207
+ @defaults.merge!(val[1])
208
208
  result
209
209
  end
210
210
  .,.,
211
211
 
212
- module_eval(<<'.,.,', 'parser.y', 9)
212
+ module_eval(<<'.,.,', 'parser.y', 10)
213
213
  def _reduce_6(val, _values, result)
214
- spec = Mtree::FileSpecification.new(val[0], @defaults.merge(val[1])); if @specifications.nil? then @specifications = spec end; if @path_components.last then @path_components.last << spec end; @path_components.push(spec)
214
+ spec = Mtree::FileSpecification.new(val[0], @defaults.merge(val[1]))
215
+ @specifications ||= spec
216
+ @path_components.last << spec if @path_components.last
217
+ @path_components.push(spec)
218
+
215
219
  result
216
220
  end
217
221
  .,.,
218
222
 
219
- module_eval(<<'.,.,', 'parser.y', 10)
223
+ module_eval(<<'.,.,', 'parser.y', 15)
220
224
  def _reduce_7(val, _values, result)
221
- @path_components.pop
225
+ @path_components.pop
222
226
  result
223
227
  end
224
228
  .,.,
225
229
 
226
230
  # reduce 8 omitted
227
231
 
228
- module_eval(<<'.,.,', 'parser.y', 13)
232
+ module_eval(<<'.,.,', 'parser.y', 18)
229
233
  def _reduce_9(val, _values, result)
230
- result = val[0].merge(val[1])
234
+ result = val[0].merge(val[1])
231
235
  result
232
236
  end
233
237
  .,.,
234
238
 
235
- module_eval(<<'.,.,', 'parser.y', 14)
239
+ module_eval(<<'.,.,', 'parser.y', 19)
236
240
  def _reduce_10(val, _values, result)
237
- result = {}
241
+ result = {}
238
242
  result
239
243
  end
240
244
  .,.,
241
245
 
242
- module_eval(<<'.,.,', 'parser.y', 16)
246
+ module_eval(<<'.,.,', 'parser.y', 21)
243
247
  def _reduce_11(val, _values, result)
244
- result = { gid: Integer(val[0]) }
248
+ result = { gid: Integer(val[0]) }
245
249
  result
246
250
  end
247
251
  .,.,
248
252
 
249
- module_eval(<<'.,.,', 'parser.y', 17)
253
+ module_eval(<<'.,.,', 'parser.y', 22)
250
254
  def _reduce_12(val, _values, result)
251
- result = { gname: val[0] }
255
+ result = { gname: val[0] }
252
256
  result
253
257
  end
254
258
  .,.,
255
259
 
256
- module_eval(<<'.,.,', 'parser.y', 18)
260
+ module_eval(<<'.,.,', 'parser.y', 23)
257
261
  def _reduce_13(val, _values, result)
258
- result = { mode: Integer(val[0], 8) }
262
+ result = { mode: Integer(val[0], 8) }
259
263
  result
260
264
  end
261
265
  .,.,
262
266
 
263
- module_eval(<<'.,.,', 'parser.y', 19)
267
+ module_eval(<<'.,.,', 'parser.y', 24)
264
268
  def _reduce_14(val, _values, result)
265
- result = { nochange: true }
269
+ result = { nochange: true }
266
270
  result
267
271
  end
268
272
  .,.,
269
273
 
270
- module_eval(<<'.,.,', 'parser.y', 20)
274
+ module_eval(<<'.,.,', 'parser.y', 25)
271
275
  def _reduce_15(val, _values, result)
272
- result = {}
276
+ result = {}
273
277
  result
274
278
  end
275
279
  .,.,
276
280
 
277
- module_eval(<<'.,.,', 'parser.y', 21)
281
+ module_eval(<<'.,.,', 'parser.y', 26)
278
282
  def _reduce_16(val, _values, result)
279
- result = { type: val[0] }
283
+ result = { type: val[0] }
280
284
  result
281
285
  end
282
286
  .,.,
283
287
 
284
- module_eval(<<'.,.,', 'parser.y', 22)
288
+ module_eval(<<'.,.,', 'parser.y', 27)
285
289
  def _reduce_17(val, _values, result)
286
- result = { uid: Integer(val[0]) }
290
+ result = { uid: Integer(val[0]) }
287
291
  result
288
292
  end
289
293
  .,.,
290
294
 
291
- module_eval(<<'.,.,', 'parser.y', 23)
295
+ module_eval(<<'.,.,', 'parser.y', 28)
292
296
  def _reduce_18(val, _values, result)
293
- result = { uname: val[0] }
297
+ result = { uname: val[0] }
294
298
  result
295
299
  end
296
300
  .,.,
@@ -300,4 +304,4 @@ def _reduce_none(val, _values, result)
300
304
  end
301
305
 
302
306
  end # class Parser
303
- end # module Mtree
307
+ end # module Mtree
data/lib/mtree/version.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Mtree
2
- VERSION = '1.0.0'.freeze
4
+ VERSION = '1.0.1'
3
5
  end
data/lib/mtree.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'mtree/file_specification'
2
4
  require 'mtree/parser.tab'
3
5
  require 'mtree/version'
data/mtree.gemspec CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  lib = File.expand_path('lib', __dir__)
2
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
5
  require 'mtree/version'
@@ -12,19 +14,30 @@ Gem::Specification.new do |spec|
12
14
  spec.description = 'This is a ruby utility and library providing the mtree(1) features found on BSDs.'
13
15
  spec.homepage = 'https://github.com/opus-codium/mtree'
14
16
  spec.license = 'MIT'
17
+ spec.required_ruby_version = '>= 2.7'
15
18
 
16
19
  # Specify which files should be added to the gem when it is released.
17
20
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
18
- spec.files = Dir.chdir(File.expand_path(__dir__)) do
19
- `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
21
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
22
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) } -
23
+ [
24
+ 'lib/mtree/parser.y',
25
+ ] +
26
+ [
27
+ 'lib/mtree/parser.tab.rb',
28
+ ]
20
29
  end
21
30
  spec.bindir = 'exe'
22
31
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
23
32
  spec.require_paths = ['lib']
24
33
 
25
- spec.add_development_dependency 'bundler', '~> 1.16'
34
+ spec.add_development_dependency 'bundler'
35
+ spec.add_development_dependency 'github_changelog_generator'
26
36
  spec.add_development_dependency 'racc'
27
- spec.add_development_dependency 'rake', '~> 10.0'
28
- spec.add_development_dependency 'rspec', '~> 3.0'
37
+ spec.add_development_dependency 'rake'
38
+ spec.add_development_dependency 'rspec'
39
+ spec.add_development_dependency 'rubocop'
40
+ spec.add_development_dependency 'rubocop-rake'
41
+ spec.add_development_dependency 'rubocop-rspec'
29
42
  spec.add_development_dependency 'simplecov'
30
43
  end
metadata CHANGED
@@ -1,29 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mtree
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Romain Tartière
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-08-31 00:00:00.000000000 Z
11
+ date: 2022-10-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '1.16'
19
+ version: '0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: github_changelog_generator
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
25
32
  - !ruby/object:Gem::Version
26
- version: '1.16'
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: racc
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -42,30 +56,72 @@ dependencies:
42
56
  name: rake
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
- - - "~>"
59
+ - - ">="
46
60
  - !ruby/object:Gem::Version
47
- version: '10.0'
61
+ version: '0'
48
62
  type: :development
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
- - - "~>"
66
+ - - ">="
53
67
  - !ruby/object:Gem::Version
54
- version: '10.0'
68
+ version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: rspec
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
- - - "~>"
73
+ - - ">="
60
74
  - !ruby/object:Gem::Version
61
- version: '3.0'
75
+ version: '0'
62
76
  type: :development
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
- - - "~>"
80
+ - - ">="
67
81
  - !ruby/object:Gem::Version
68
- version: '3.0'
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rubocop
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rubocop-rake
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rubocop-rspec
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
69
125
  - !ruby/object:Gem::Dependency
70
126
  name: simplecov
71
127
  requirement: !ruby/object:Gem::Requirement
@@ -89,10 +145,12 @@ executables:
89
145
  extensions: []
90
146
  extra_rdoc_files: []
91
147
  files:
148
+ - ".github/CODEOWNERS"
149
+ - ".github/workflows/ci.yml"
92
150
  - ".gitignore"
93
151
  - ".rspec"
94
152
  - ".rubocop.yml"
95
- - ".travis.yml"
153
+ - CHANGELOG.md
96
154
  - CODE_OF_CONDUCT.md
97
155
  - Gemfile
98
156
  - LICENSE.txt
@@ -104,14 +162,13 @@ files:
104
162
  - lib/mtree.rb
105
163
  - lib/mtree/file_specification.rb
106
164
  - lib/mtree/parser.tab.rb
107
- - lib/mtree/parser.y
108
165
  - lib/mtree/version.rb
109
166
  - mtree.gemspec
110
167
  homepage: https://github.com/opus-codium/mtree
111
168
  licenses:
112
169
  - MIT
113
170
  metadata: {}
114
- post_install_message:
171
+ post_install_message:
115
172
  rdoc_options: []
116
173
  require_paths:
117
174
  - lib
@@ -119,16 +176,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
119
176
  requirements:
120
177
  - - ">="
121
178
  - !ruby/object:Gem::Version
122
- version: '0'
179
+ version: '2.7'
123
180
  required_rubygems_version: !ruby/object:Gem::Requirement
124
181
  requirements:
125
182
  - - ">="
126
183
  - !ruby/object:Gem::Version
127
184
  version: '0'
128
185
  requirements: []
129
- rubyforge_project:
130
- rubygems_version: 2.7.7
131
- signing_key:
186
+ rubygems_version: 3.3.22
187
+ signing_key:
132
188
  specification_version: 4
133
189
  summary: Manage a directory hierarchy
134
190
  test_files: []
data/.travis.yml DELETED
@@ -1,9 +0,0 @@
1
- ---
2
- sudo: false
3
- language: ruby
4
- cache: bundler
5
- rvm:
6
- - 2.3
7
- - 2.4
8
- - 2.5
9
- before_install: gem install bundler -v 1.16.3
data/lib/mtree/parser.y DELETED
@@ -1,84 +0,0 @@
1
- class Mtree::Parser
2
- rule
3
- target: expressions { if @path_components.any? then raise 'Malformed specifications' end }
4
- |
5
-
6
- expressions: expressions expression
7
- | expression
8
-
9
- expression: SET attributes LINE_BREAK { @defaults.merge!(val[1]) }
10
- | IDENTIFIER attributes LINE_BREAK { spec = Mtree::FileSpecification.new(val[0], @defaults.merge(val[1])); if @specifications.nil? then @specifications = spec end; if @path_components.last then @path_components.last << spec end; @path_components.push(spec) } # @path_components.push(val[0]); @specifications.push() }
11
- | DOT_DOT LINE_BREAK { @path_components.pop }
12
- | LINE_BREAK
13
-
14
- attributes: attributes attribute { result = val[0].merge(val[1]) }
15
- | { result = {} }
16
-
17
- attribute: GID { result = { gid: Integer(val[0]) } }
18
- | GNAME { result = { gname: val[0] } }
19
- | MODE { result = { mode: Integer(val[0], 8) } }
20
- | NOCHANGE { result = { nochange: true } }
21
- | TAGS { result = {} }
22
- | TYPE { result = { type: val[0] } }
23
- | UID { result = { uid: Integer(val[0]) } }
24
- | UNAME { result = { uname: val[0] } }
25
- end
26
-
27
-
28
- ---- header
29
-
30
- require 'strscan'
31
-
32
- ---- inner
33
-
34
- attr_accessor :yydebug
35
- attr_accessor :defaults
36
-
37
- attr_reader :specifications
38
-
39
- def initialize
40
- super
41
- @defaults = {}
42
- @path_components = []
43
- @specifications = nil
44
- end
45
-
46
- def parse(text)
47
- s = StringScanner.new(text)
48
-
49
- tokens = []
50
- until s.eos? do
51
- case
52
- when s.scan(/#.*/); # Ignore comment
53
- when s.scan(/[[:blank:]]+/); # Ignore blanks
54
- when s.scan(/\n/); tokens << [:LINE_BREAK, s.matched]
55
- when s.scan(/\.\./); tokens << [:DOT_DOT, s.matched]
56
- when s.scan(/\/set\b/); tokens << [:SET, s.matched]
57
- when s.scan(/gid=([[:digit:]]+)/); tokens << [:GID, s[1]]
58
- when s.scan(/gname=([[:alnum:]]+)/); tokens << [:GNAME, s[1]]
59
- when s.scan(/mode=([[:digit:]]+)/); tokens << [:MODE, s[1]]
60
- when s.scan(/nochange\b/); tokens << [:NOCHANGE, s[1]]
61
- when s.scan(/tags=([[:print:]]+)\b/); tokens << [:TAGS, s[1]]
62
- when s.scan(/type=(dir|file)/); tokens << [:TYPE, s[1]]
63
- when s.scan(/uid=([[:digit:]]+)/); tokens << [:UID, s[1]]
64
- when s.scan(/uname=([[:alnum:]]+)/); tokens << [:UNAME, s[1]]
65
- when s.scan(/[^[:space:]]+/); tokens << [:IDENTIFIER, s.matched]
66
- else
67
- raise "No match: #{s.rest}"
68
- end
69
- end
70
-
71
- define_singleton_method(:next_token) { tokens.shift }
72
-
73
- tokens << [false, false]
74
-
75
- # tokens.each do |t|
76
- # puts t.inspect
77
- # end
78
-
79
- do_parse
80
- end
81
-
82
- def parse_file(filename)
83
- parse(File.read(filename))
84
- end