mtree 1.0.0 → 1.0.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 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