pluto-merge 1.1.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 +7 -0
- data/HISTORY.md +4 -0
- data/Manifest.txt +11 -0
- data/README.md +23 -0
- data/Rakefile +32 -0
- data/config/pluto.index.yml +23 -0
- data/lib/pluto/merge.rb +30 -0
- data/lib/pluto/merge/formatter.rb +84 -0
- data/lib/pluto/merge/installer.rb +61 -0
- data/lib/pluto/merge/lister.rb +45 -0
- data/lib/pluto/merge/manifest_helpers.rb +58 -0
- data/lib/pluto/merge/version.rb +25 -0
- metadata +130 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 6f65a81d1169d50cf94b9d886708d28cfa39d69a
|
4
|
+
data.tar.gz: b69cf925744453ad8b98f23862cf9d09214dfba2
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 59bea70bcb0aef67af58f204d86bafffc879172837b344c1df9c39b2f25b056f0d2a05eb9985680912c919223fd5a924207dd432716b147550c9dc9aef2cda91
|
7
|
+
data.tar.gz: 3c5c941a71df99c91b3746ba281683c48dd7b20995a46405987c02345cba1e655e363133a4e31ebc3ae1b0d25b86bb53fa75992e6fb942cf7b20438e097b7316
|
data/HISTORY.md
ADDED
data/Manifest.txt
ADDED
data/README.md
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# pluto-merge gem - planet site generator (that is, merge 'n' manage planet templates)
|
2
|
+
|
3
|
+
* home :: [github.com/feedreader/pluto-merge](https://github.com/feedreader/pluto-merge)
|
4
|
+
* bugs :: [github.com/feedreader/pluto-merge/issues](https://github.com/feedreader/pluto-merge/issues)
|
5
|
+
* gem :: [rubygems.org/gems/pluto-merge](https://rubygems.org/gems/pluto-merge)
|
6
|
+
* rdoc :: [rubydoc.info/gems/pluto-merge](http://rubydoc.info/gems/pluto-merge)
|
7
|
+
* forum :: [groups.google.com/group/feedreader](http://groups.google.com/group/feedreader)
|
8
|
+
|
9
|
+
|
10
|
+
|
11
|
+
## Usage
|
12
|
+
|
13
|
+
|
14
|
+
|
15
|
+
## License
|
16
|
+
|
17
|
+
The `pluto-merge` scripts are dedicated to the public domain.
|
18
|
+
Use it as you please with no restrictions whatsoever.
|
19
|
+
|
20
|
+
## Questions? Comments?
|
21
|
+
|
22
|
+
Send them along to the [Planet Pluto and Friends Forum/Mailing List](http://groups.google.com/group/feedreader).
|
23
|
+
Thanks!
|
data/Rakefile
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'hoe'
|
2
|
+
require './lib/pluto/merge/version.rb'
|
3
|
+
|
4
|
+
Hoe.spec 'pluto-merge' do
|
5
|
+
|
6
|
+
self.version = PlutoMerge::VERSION
|
7
|
+
|
8
|
+
self.summary = "pluto-merge - planet site generator (that is, merge 'n' manage planet templates)"
|
9
|
+
self.description = summary
|
10
|
+
|
11
|
+
self.urls = ['https://github.com/feedreader/pluto-merge']
|
12
|
+
|
13
|
+
self.author = 'Gerald Bauer'
|
14
|
+
self.email = 'feedreader@googlegroups.com'
|
15
|
+
|
16
|
+
# switch extension to .markdown for gihub formatting
|
17
|
+
self.readme_file = 'README.md'
|
18
|
+
self.history_file = 'HISTORY.md'
|
19
|
+
|
20
|
+
self.extra_deps = [
|
21
|
+
['pluto-models', '>= 1.2.2'],
|
22
|
+
['pakman', '>= 0.5.0'],
|
23
|
+
['fetcher', '>= 0.4.4'],
|
24
|
+
]
|
25
|
+
|
26
|
+
self.licenses = ['Public Domain']
|
27
|
+
|
28
|
+
self.spec_extras = {
|
29
|
+
required_ruby_version: '>= 1.9.2'
|
30
|
+
}
|
31
|
+
|
32
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
#########################################
|
2
|
+
# Pluto Update Index for Template Packs
|
3
|
+
|
4
|
+
|
5
|
+
#############
|
6
|
+
# shortcuts for fetching template packs
|
7
|
+
# maps shortcut to URI
|
8
|
+
|
9
|
+
blank: https://raw.github.com/planet-templates/planet-blank/master/blank.txt
|
10
|
+
|
11
|
+
top: https://raw.github.com/planet-templates/planet-top/master/top.txt
|
12
|
+
|
13
|
+
news: https://raw.github.com/planet-templates/planet-news/master/news.txt
|
14
|
+
|
15
|
+
feeds: https://raw.github.com/planet-templates/planet-feeds/master/feeds.txt
|
16
|
+
|
17
|
+
classic: https://raw.github.com/planet-templates/planet-classic/master/classic.txt
|
18
|
+
|
19
|
+
|
20
|
+
####
|
21
|
+
# all:
|
22
|
+
# - add why? why not??
|
23
|
+
#
|
data/lib/pluto/merge.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'pluto/models'
|
4
|
+
|
5
|
+
# 3rd party ruby gems/libs
|
6
|
+
|
7
|
+
require 'pakman' # template pack manager
|
8
|
+
require 'fetcher'
|
9
|
+
|
10
|
+
# our own code
|
11
|
+
|
12
|
+
require 'pluto/merge/version' # note: let version always get first
|
13
|
+
require 'pluto/merge/manifest_helpers'
|
14
|
+
require 'pluto/merge/installer'
|
15
|
+
require 'pluto/merge/lister'
|
16
|
+
require 'pluto/merge/formatter'
|
17
|
+
|
18
|
+
|
19
|
+
module Pluto
|
20
|
+
|
21
|
+
def self.generator # convenience alias for banner (matches HTML generator meta tag)
|
22
|
+
"Pluto #{VERSION} on Ruby #{RUBY_VERSION} (#{RUBY_RELEASE_DATE}) [#{RUBY_PLATFORM}]"
|
23
|
+
end
|
24
|
+
|
25
|
+
end # module Pluto
|
26
|
+
|
27
|
+
|
28
|
+
|
29
|
+
# say hello
|
30
|
+
puts PlutoMerge.banner if $DEBUG || (defined?($RUBYLIBS_DEBUG) && $RUBYLIBS_DEBUG)
|
@@ -0,0 +1,84 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
|
4
|
+
module Pluto
|
5
|
+
|
6
|
+
class Formatter
|
7
|
+
|
8
|
+
include LogUtils::Logging
|
9
|
+
|
10
|
+
include Models
|
11
|
+
include ManifestHelper
|
12
|
+
|
13
|
+
include TextUtils::DateHelper # e.g. lets us use time_ago_in_words
|
14
|
+
include TextUtils::HypertextHelper # e.g. lets us use link_to, strip_tags, sanitize, textify, etc.
|
15
|
+
|
16
|
+
def initialize( opts, config )
|
17
|
+
@opts = opts
|
18
|
+
@config = config
|
19
|
+
end
|
20
|
+
|
21
|
+
attr_reader :opts, :config, :site
|
22
|
+
|
23
|
+
|
24
|
+
def run( arg )
|
25
|
+
### remove - always use make( site_key )
|
26
|
+
## fix: change arg to planet_key or just key or similar
|
27
|
+
# todo: rename run to some less generic - merge/build/etc. ??
|
28
|
+
|
29
|
+
site_key = arg
|
30
|
+
site_key = site_key.downcase.gsub('.ini','').gsub('.yml','') # remove .ini|.yml extension if present
|
31
|
+
|
32
|
+
manifest_name = opts.manifest
|
33
|
+
output_path = opts.output_path
|
34
|
+
|
35
|
+
make_for(site_key, manifest_name, output_path )
|
36
|
+
end
|
37
|
+
|
38
|
+
|
39
|
+
def make_for( site_key, manifest_name, output_path )
|
40
|
+
|
41
|
+
## fix: remove reference to opts
|
42
|
+
## - e.g. now still used for auto-installer
|
43
|
+
|
44
|
+
manifest_name = manifest_name.downcase.gsub('.txt', '' ) # remove .txt if present
|
45
|
+
|
46
|
+
logger.debug "manifest=#{manifest_name}"
|
47
|
+
|
48
|
+
# check for matching manifests
|
49
|
+
manifests = installed_template_manifests.select { |m| m[0] == manifest_name+'.txt' }
|
50
|
+
|
51
|
+
if manifests.empty?
|
52
|
+
|
53
|
+
### try - autodownload
|
54
|
+
puts "*** template pack '#{manifest_name}' not found; trying auto-install..."
|
55
|
+
|
56
|
+
Installer.new( opts ).install( manifest_name )
|
57
|
+
|
58
|
+
### try again
|
59
|
+
|
60
|
+
# check for matching manifests
|
61
|
+
manifests = installed_template_manifests.select { |m| m[0] == manifest_name+'.txt' }
|
62
|
+
|
63
|
+
if manifests.empty?
|
64
|
+
puts "*** error: unknown template pack '#{manifest_name}'; use pluto ls to list installed template packs"
|
65
|
+
exit 2
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
manifestsrc = manifests[0][1]
|
70
|
+
pakpath = output_path
|
71
|
+
|
72
|
+
@site = Site.find_by_key( site_key )
|
73
|
+
if @site.nil?
|
74
|
+
puts "*** warn: no site with key '#{site_key}' found; using untitled site record"
|
75
|
+
@site = Site.new
|
76
|
+
@site.title = 'Planet Untitled'
|
77
|
+
end
|
78
|
+
|
79
|
+
Pakman::Templater.new.merge_pak( manifestsrc, pakpath, binding, site_key )
|
80
|
+
end
|
81
|
+
|
82
|
+
end # class Formatter
|
83
|
+
|
84
|
+
end # module Pluto
|
@@ -0,0 +1,61 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
|
4
|
+
module Pluto
|
5
|
+
|
6
|
+
class Installer
|
7
|
+
|
8
|
+
### fix: remove opts, use config (wrapped!!)
|
9
|
+
|
10
|
+
include LogUtils::Logging
|
11
|
+
|
12
|
+
def initialize( opts )
|
13
|
+
@opts = opts
|
14
|
+
end
|
15
|
+
|
16
|
+
attr_reader :opts
|
17
|
+
|
18
|
+
|
19
|
+
def install( shortcut_or_source )
|
20
|
+
|
21
|
+
logger.debug "fetch >#{shortcut_or_source}<"
|
22
|
+
|
23
|
+
## check for builtin shortcut (assume no / or \)
|
24
|
+
if shortcut_or_source.index( '/' ).nil? && shortcut_or_source.index( '\\' ).nil?
|
25
|
+
shortcut = shortcut_or_source
|
26
|
+
sources = opts.map_fetch_shortcut( shortcut )
|
27
|
+
|
28
|
+
if sources.empty?
|
29
|
+
puts "** Error: No mapping found for shortcut '#{shortcut}'."
|
30
|
+
return
|
31
|
+
end
|
32
|
+
puts " Mapping fetch shortcut '#{shortcut}' to: #{sources.join(',')}"
|
33
|
+
else
|
34
|
+
sources = [shortcut_or_source] # pass arg through unmapped
|
35
|
+
end
|
36
|
+
|
37
|
+
sources.each do |source|
|
38
|
+
install_template( source )
|
39
|
+
end
|
40
|
+
|
41
|
+
end # method run
|
42
|
+
|
43
|
+
|
44
|
+
def install_template( src )
|
45
|
+
# src = 'http://github.com/geraldb/slideshow/raw/d98e5b02b87ee66485431b1bee8fb6378297bfe4/code/templates/fullerscreen.txt'
|
46
|
+
# src = 'http://github.com/geraldb/sandbox/raw/13d4fec0908fbfcc456b74dfe2f88621614b5244/s5blank/s5blank.txt'
|
47
|
+
uri = URI.parse( src )
|
48
|
+
logger.debug "scheme: #{uri.scheme}, host: #{uri.host}, port: #{uri.port}, path: #{uri.path}"
|
49
|
+
|
50
|
+
pakname = File.basename( uri.path ).downcase.gsub('.txt','')
|
51
|
+
pakpath = File.expand_path( "#{opts.config_path}/#{pakname}" )
|
52
|
+
|
53
|
+
logger.debug "packname >#{pakname}<"
|
54
|
+
logger.debug "pakpath >#{pakpath}<"
|
55
|
+
|
56
|
+
Pakman::Fetcher.new.fetch_pak( src, pakpath )
|
57
|
+
end
|
58
|
+
|
59
|
+
end # class Installer
|
60
|
+
|
61
|
+
end # module Pluto
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
|
4
|
+
module Pluto
|
5
|
+
|
6
|
+
class Lister
|
7
|
+
|
8
|
+
include LogUtils::Logging
|
9
|
+
|
10
|
+
include ManifestHelper
|
11
|
+
|
12
|
+
def initialize( opts )
|
13
|
+
@opts = opts
|
14
|
+
end
|
15
|
+
|
16
|
+
attr_reader :opts
|
17
|
+
|
18
|
+
def list
|
19
|
+
home = Env.home
|
20
|
+
## replace home w/ ~ (to make out more readable (shorter))
|
21
|
+
## e.g. use gsub( home, '~' )
|
22
|
+
|
23
|
+
puts ''
|
24
|
+
puts 'Installed template packs in search path'
|
25
|
+
|
26
|
+
installed_template_manifest_patterns.each_with_index do |pattern,i|
|
27
|
+
puts " [#{i+1}] #{pattern.gsub(home,'~')}"
|
28
|
+
end
|
29
|
+
puts ' include:'
|
30
|
+
|
31
|
+
manifests = installed_template_manifests
|
32
|
+
if manifests.empty?
|
33
|
+
puts " -- none --"
|
34
|
+
else
|
35
|
+
manifests.each do |manifest|
|
36
|
+
pakname = manifest[0].gsub('.txt','')
|
37
|
+
manifestpath = manifest[1].gsub(home,'~')
|
38
|
+
puts "%16s (%s)" % [pakname,manifestpath]
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end # method list
|
42
|
+
|
43
|
+
end # class Lister
|
44
|
+
|
45
|
+
end # module Pluto
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Pluto
|
4
|
+
|
5
|
+
###
|
6
|
+
# Note: requires/needs
|
7
|
+
# opts.config_path reference
|
8
|
+
|
9
|
+
|
10
|
+
module ManifestHelper
|
11
|
+
|
12
|
+
## shared methods for handling manifest lookups
|
13
|
+
##
|
14
|
+
# note: required attribs (in host class) include:
|
15
|
+
# - opts.config_path
|
16
|
+
|
17
|
+
def installed_template_manifest_patterns
|
18
|
+
|
19
|
+
# 1) search . # that is, working/current dir
|
20
|
+
# 2) search <config_dir>
|
21
|
+
# 3) search <gem>/templates
|
22
|
+
|
23
|
+
###
|
24
|
+
# Note
|
25
|
+
# -- for now - no longer ship w/ builtin template packs
|
26
|
+
# - download on demand if needed
|
27
|
+
|
28
|
+
builtin_patterns = [
|
29
|
+
## "#{Pluto.root}/templates/*.txt"
|
30
|
+
]
|
31
|
+
config_patterns = [
|
32
|
+
## "#{File.expand_path(opts.config_path)}/*.txt",
|
33
|
+
"#{File.expand_path(opts.config_path)}/*/*.txt"
|
34
|
+
]
|
35
|
+
current_patterns = [
|
36
|
+
## "*.txt",
|
37
|
+
"*/*.txt",
|
38
|
+
"node_modules/*/*.txt", # note: add support for npm installs - use/make slideshow required in name? for namespace in the future???
|
39
|
+
]
|
40
|
+
|
41
|
+
patterns = []
|
42
|
+
patterns += current_patterns
|
43
|
+
patterns += config_patterns
|
44
|
+
patterns += builtin_patterns
|
45
|
+
end
|
46
|
+
|
47
|
+
def installed_template_manifests
|
48
|
+
excludes = [
|
49
|
+
"Manifest.txt",
|
50
|
+
"*/Manifest.txt"
|
51
|
+
]
|
52
|
+
|
53
|
+
Pakman::Finder.new.find_manifests( installed_template_manifest_patterns, excludes )
|
54
|
+
end
|
55
|
+
|
56
|
+
|
57
|
+
end # module Manifest
|
58
|
+
end # module Slideshow
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
|
4
|
+
module PlutoMerge
|
5
|
+
|
6
|
+
MAJOR = 1
|
7
|
+
MINOR = 1
|
8
|
+
PATCH = 0
|
9
|
+
VERSION = [MAJOR,MINOR,PATCH].join('.')
|
10
|
+
|
11
|
+
def self.version
|
12
|
+
VERSION
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.banner
|
16
|
+
### todo: add RUBY_PATCHLEVEL or RUBY_PATCH_LEVEL e.g. -p124
|
17
|
+
"pluto-merge/#{VERSION} on Ruby #{RUBY_VERSION} (#{RUBY_RELEASE_DATE}) [#{RUBY_PLATFORM}]"
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.root
|
21
|
+
"#{File.expand_path( File.dirname(File.dirname(File.dirname(File.dirname(__FILE__)))) )}"
|
22
|
+
end
|
23
|
+
|
24
|
+
end # module PlutoUpdate
|
25
|
+
|
metadata
ADDED
@@ -0,0 +1,130 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: pluto-merge
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Gerald Bauer
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-12-13 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: pluto-models
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 1.2.2
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 1.2.2
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: pakman
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.5.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.5.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: fetcher
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.4.4
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.4.4
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rdoc
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '4.0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '4.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: hoe
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '3.13'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '3.13'
|
83
|
+
description: pluto-merge - planet site generator (that is, merge 'n' manage planet
|
84
|
+
templates)
|
85
|
+
email: feedreader@googlegroups.com
|
86
|
+
executables: []
|
87
|
+
extensions: []
|
88
|
+
extra_rdoc_files:
|
89
|
+
- HISTORY.md
|
90
|
+
- Manifest.txt
|
91
|
+
- README.md
|
92
|
+
files:
|
93
|
+
- HISTORY.md
|
94
|
+
- Manifest.txt
|
95
|
+
- README.md
|
96
|
+
- Rakefile
|
97
|
+
- config/pluto.index.yml
|
98
|
+
- lib/pluto/merge.rb
|
99
|
+
- lib/pluto/merge/formatter.rb
|
100
|
+
- lib/pluto/merge/installer.rb
|
101
|
+
- lib/pluto/merge/lister.rb
|
102
|
+
- lib/pluto/merge/manifest_helpers.rb
|
103
|
+
- lib/pluto/merge/version.rb
|
104
|
+
homepage: https://github.com/feedreader/pluto-merge
|
105
|
+
licenses:
|
106
|
+
- Public Domain
|
107
|
+
metadata: {}
|
108
|
+
post_install_message:
|
109
|
+
rdoc_options:
|
110
|
+
- "--main"
|
111
|
+
- README.md
|
112
|
+
require_paths:
|
113
|
+
- lib
|
114
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
115
|
+
requirements:
|
116
|
+
- - ">="
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: 1.9.2
|
119
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
120
|
+
requirements:
|
121
|
+
- - ">="
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: '0'
|
124
|
+
requirements: []
|
125
|
+
rubyforge_project:
|
126
|
+
rubygems_version: 2.4.2
|
127
|
+
signing_key:
|
128
|
+
specification_version: 4
|
129
|
+
summary: pluto-merge - planet site generator (that is, merge 'n' manage planet templates)
|
130
|
+
test_files: []
|