nanoc 3.6.2 → 3.6.3
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 +8 -8
- data/Architecture.md +70 -0
- data/Gemfile.lock +44 -35
- data/NEWS.md +21 -6
- data/TODO.md +95 -0
- data/lib/nanoc.rb +1 -1
- data/lib/nanoc/base/compilation/compiler_dsl.rb +5 -1
- data/lib/nanoc/cli/command_runner.rb +2 -2
- data/lib/nanoc/cli/commands/compile.rb +69 -24
- data/lib/nanoc/cli/commands/watch.rb +48 -15
- data/lib/nanoc/data_sources/filesystem.rb +7 -2
- data/lib/nanoc/data_sources/static.rb +9 -5
- data/lib/nanoc/extra.rb +1 -0
- data/lib/nanoc/extra/checking/checks/external_links.rb +15 -2
- data/lib/nanoc/extra/file_proxy.rb +1 -1
- data/lib/nanoc/extra/filesystem_tools.rb +124 -0
- data/lib/nanoc/filters/colorize_syntax.rb +4 -4
- data/lib/nanoc/filters/relativize_paths.rb +1 -8
- data/lib/nanoc/filters/uglify_js.rb +2 -22
- data/test/base/test_compiler_dsl.rb +30 -0
- data/test/cli/commands/test_compile.rb +27 -1
- data/test/cli/commands/test_watch.rb +10 -0
- data/test/data_sources/test_static.rb +28 -0
- data/test/extra/checking/checks/test_external_links.rb +27 -1
- data/test/extra/checking/checks/test_html.rb +1 -1
- data/test/extra/test_filesystem_tools.rb +100 -0
- data/test/filters/test_pandoc.rb +1 -1
- data/test/filters/test_relativize_paths.rb +23 -0
- data/test/filters/test_uglify_js.rb +8 -6
- metadata +6 -2
@@ -273,10 +273,6 @@ module Nanoc::Filters
|
|
273
273
|
stdout.read
|
274
274
|
end
|
275
275
|
|
276
|
-
protected
|
277
|
-
|
278
|
-
KNOWN_COLORIZERS = [ :coderay, :dummy, :pygmentize, :pygmentsrb, :simon_highlight ]
|
279
|
-
|
280
276
|
# Wraps the element in <div class="CodeRay"><div class="code">
|
281
277
|
def coderay_postprocess(language, element)
|
282
278
|
# Skip if we're a free <code>
|
@@ -296,6 +292,10 @@ module Nanoc::Filters
|
|
296
292
|
element.swap div_outer
|
297
293
|
end
|
298
294
|
|
295
|
+
protected
|
296
|
+
|
297
|
+
KNOWN_COLORIZERS = [ :coderay, :dummy, :pygmentize, :pygmentsrb, :simon_highlight ]
|
298
|
+
|
299
299
|
# Removes the first blank lines and any whitespace at the end.
|
300
300
|
def strip(s)
|
301
301
|
s.lines.drop_while { |line| line.strip.empty? }.join.rstrip
|
@@ -90,14 +90,7 @@ module Nanoc::Filters
|
|
90
90
|
end
|
91
91
|
end
|
92
92
|
end
|
93
|
-
|
94
|
-
|
95
|
-
# FIXME cleanup because it is ugly
|
96
|
-
# # Because using the `Nokogiri::XML::DocumentFragment` class DOCTYPE
|
97
|
-
# pseudonodes becomes even more creepy than usual.
|
98
|
-
result.sub!(/(!DOCTYPE.+?)(>)/, '<\1>')
|
99
|
-
|
100
|
-
result
|
93
|
+
doc.send("to_#{type}")
|
101
94
|
end
|
102
95
|
|
103
96
|
def path_is_relativizable?(s)
|
@@ -5,28 +5,8 @@ module Nanoc::Filters
|
|
5
5
|
|
6
6
|
requires 'uglifier'
|
7
7
|
|
8
|
-
# Runs the content through [UglifyJS](https://github.com/mishoo/
|
9
|
-
# This method optionally takes options to pass directly to Uglifier
|
10
|
-
#
|
11
|
-
# {
|
12
|
-
# :mangle => true, # Mangle variables names
|
13
|
-
# :toplevel => false, # Mangle top-level variable names
|
14
|
-
# :except => [], # Variable names to be excluded from mangling
|
15
|
-
# :max_line_length => 32 * 1024, # Maximum line length
|
16
|
-
# :squeeze => true, # Squeeze code resulting in smaller, but less-readable code
|
17
|
-
# :seqs => true, # Reduce consecutive statements in blocks into single statement
|
18
|
-
# :dead_code => true, # Remove dead code (e.g. after return)
|
19
|
-
# :unsafe => false, # Optimizations known to be unsafe in some situations
|
20
|
-
# :copyright => true, # Show copyright message
|
21
|
-
# :beautify => false, # Ouput indented code
|
22
|
-
# :beautify_options => {
|
23
|
-
# :indent_level => 4,
|
24
|
-
# :indent_start => 0,
|
25
|
-
# :quote_keys => false,
|
26
|
-
# :space_colon => 0,
|
27
|
-
# :ascii_only => false
|
28
|
-
# }
|
29
|
-
# }
|
8
|
+
# Runs the content through [UglifyJS](https://github.com/mishoo/UglifyJS2/).
|
9
|
+
# This method optionally takes options to pass directly to Uglifier.
|
30
10
|
#
|
31
11
|
# @param [String] content The content to filter
|
32
12
|
#
|
@@ -89,6 +89,36 @@ EOS
|
|
89
89
|
end
|
90
90
|
end
|
91
91
|
|
92
|
+
def test_passthrough_with_ext_from_static_data_source
|
93
|
+
with_site do
|
94
|
+
# Create config
|
95
|
+
File.open('nanoc.yaml', 'w') do |io|
|
96
|
+
io.write "data_sources:\n"
|
97
|
+
io.write " - type: static\n"
|
98
|
+
end
|
99
|
+
|
100
|
+
# Create rules
|
101
|
+
File.open('Rules', 'w') do |io|
|
102
|
+
io.write <<EOS
|
103
|
+
passthrough "/foo.txt/"
|
104
|
+
EOS
|
105
|
+
end
|
106
|
+
|
107
|
+
# Create items
|
108
|
+
FileUtils.mkdir_p('static')
|
109
|
+
File.open('static/foo.txt', 'w') do |io|
|
110
|
+
io.write "Hello I am foo"
|
111
|
+
end
|
112
|
+
|
113
|
+
# Compile
|
114
|
+
site = Nanoc::Site.new('.')
|
115
|
+
site.compile
|
116
|
+
|
117
|
+
# Check paths
|
118
|
+
assert_equal [ 'output/foo.txt' ], Dir['output/*']
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
92
122
|
def test_passthrough_priority
|
93
123
|
with_site do
|
94
124
|
# Create rules
|
@@ -111,7 +111,33 @@ class Nanoc::CLI::Commands::CompileTest < Nanoc::TestCase
|
|
111
111
|
Nanoc::CLI.run %w( compile )
|
112
112
|
refute File.file?('output/stray.html')
|
113
113
|
assert File.directory?('output/excluded_dir'),
|
114
|
-
|
114
|
+
'excluded_dir should still be there'
|
115
115
|
end
|
116
116
|
end
|
117
|
+
|
118
|
+
def test_setup_and_teardown_listeners
|
119
|
+
with_site do
|
120
|
+
test_listener_class = Class.new(::Nanoc::CLI::Commands::Compile::Listener) do
|
121
|
+
def start ; @started = true ; end
|
122
|
+
def stop ; @stopped = true ; end
|
123
|
+
def started? ; @started ; end
|
124
|
+
def stopped? ; @stopped ; end
|
125
|
+
end
|
126
|
+
|
127
|
+
options = {}
|
128
|
+
arguments = []
|
129
|
+
cmd = nil
|
130
|
+
listener_classes = [ test_listener_class ]
|
131
|
+
cmd_runner = Nanoc::CLI::Commands::Compile.new(
|
132
|
+
options, arguments, cmd, :listener_classes => listener_classes)
|
133
|
+
|
134
|
+
cmd_runner.run
|
135
|
+
|
136
|
+
listeners = cmd_runner.send(:listeners)
|
137
|
+
assert listeners.size == 1
|
138
|
+
assert listeners.first.started?
|
139
|
+
assert listeners.first.stopped?
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
117
143
|
end
|
@@ -56,6 +56,16 @@ class Nanoc::CLI::Commands::WatchTest < Nanoc::TestCase
|
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
59
|
+
def test_growlnotify_cmd
|
60
|
+
notifier = Nanoc::CLI::Commands::Watch::Notifier.new
|
61
|
+
assert_equal [ 'growlnotify', '-m', 'foo' ], notifier.send(:growlnotify_cmd_for, 'foo')
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_growlnotify_windows_cmd
|
65
|
+
notifier = Nanoc::CLI::Commands::Watch::Notifier.new
|
66
|
+
assert_equal [ 'growlnotify', '/t:nanoc', 'foo' ], notifier.send(:growlnotify_windows_cmd_for, 'foo')
|
67
|
+
end
|
68
|
+
|
59
69
|
def wait_until_exists(filename)
|
60
70
|
20.times do
|
61
71
|
break if File.file?(filename)
|
@@ -13,6 +13,34 @@ class Nanoc::DataSources::StaticTest < Nanoc::TestCase
|
|
13
13
|
data_source
|
14
14
|
end
|
15
15
|
|
16
|
+
def test_items_with_symlinks
|
17
|
+
# Create data source
|
18
|
+
data_source = new_data_source(:prefix => 'foo')
|
19
|
+
|
20
|
+
# Create sample files
|
21
|
+
FileUtils.mkdir_p('foo')
|
22
|
+
FileUtils.mkdir_p('foo-outside-1')
|
23
|
+
FileUtils.mkdir_p('foo-outside-2')
|
24
|
+
File.open('foo/a.png', 'w') { |io| io.write("random binary data") }
|
25
|
+
File.open('foo-outside-1/b.png', 'w') { |io| io.write("more binary data") }
|
26
|
+
File.open('foo-outside-2/c.png', 'w') { |io| io.write("yet more binary data") }
|
27
|
+
|
28
|
+
# Create symlinks
|
29
|
+
File.symlink('../foo-outside-1', 'foo/1')
|
30
|
+
File.symlink('../foo-outside-2/c.png', 'foo/c.png')
|
31
|
+
|
32
|
+
# Check all files
|
33
|
+
expected_filenames = [ 'foo/a.png', 'foo/1/b.png', 'foo/c.png' ].sort
|
34
|
+
actual_filenames = Nanoc::Extra::FilesystemTools.all_files_in('foo').sort
|
35
|
+
assert_equal expected_filenames, actual_filenames
|
36
|
+
|
37
|
+
# Check items
|
38
|
+
items = data_source.send(:items).sort_by { |i| i.identifier }
|
39
|
+
actual_item_identifiers = items.map { |i| i.identifier }.sort
|
40
|
+
expected_item_identifiers = %w( /a.png/ /1/b.png/ /c.png/ ).sort
|
41
|
+
assert_equal expected_item_identifiers, actual_item_identifiers
|
42
|
+
end
|
43
|
+
|
16
44
|
def test_items
|
17
45
|
# Create data source
|
18
46
|
data_source = new_data_source(:prefix => 'foo')
|
@@ -21,7 +21,7 @@ class Nanoc::Extra::Checking::Checks::ExternalLinksTest < Nanoc::TestCase
|
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
|
-
def
|
24
|
+
def test_valid_by_path
|
25
25
|
with_site do |site|
|
26
26
|
# Create check
|
27
27
|
check = Nanoc::Extra::Checking::Checks::ExternalLinks.new(site)
|
@@ -36,6 +36,20 @@ class Nanoc::Extra::Checking::Checks::ExternalLinksTest < Nanoc::TestCase
|
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
39
|
+
def test_valid_by_query
|
40
|
+
with_site do |site|
|
41
|
+
# Create check
|
42
|
+
check = Nanoc::Extra::Checking::Checks::ExternalLinks.new(site)
|
43
|
+
def check.request_url_once(url)
|
44
|
+
Net::HTTPResponse.new('1.1', url.query == 'status=200' ? '200' : '404', 'okay')
|
45
|
+
end
|
46
|
+
|
47
|
+
# Test
|
48
|
+
assert_nil check.validate('http://example.com/?status=200')
|
49
|
+
refute_nil check.validate('http://example.com/?status=404')
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
39
53
|
def test_fallback_to_get_when_head_is_not_allowed
|
40
54
|
with_site do |site|
|
41
55
|
#Create check
|
@@ -50,4 +64,16 @@ class Nanoc::Extra::Checking::Checks::ExternalLinksTest < Nanoc::TestCase
|
|
50
64
|
end
|
51
65
|
end
|
52
66
|
|
67
|
+
def test_path_for_url
|
68
|
+
with_site do |site|
|
69
|
+
check = Nanoc::Extra::Checking::Checks::ExternalLinks.new(site)
|
70
|
+
|
71
|
+
assert_equal '/', check.send(:path_for_url, URI.parse('http://example.com'))
|
72
|
+
assert_equal '/', check.send(:path_for_url, URI.parse('http://example.com/'))
|
73
|
+
assert_equal '/?foo=bar', check.send(:path_for_url, URI.parse('http://example.com?foo=bar'))
|
74
|
+
assert_equal '/?foo=bar', check.send(:path_for_url, URI.parse('http://example.com/?foo=bar'))
|
75
|
+
assert_equal '/meow?foo=bar', check.send(:path_for_url, URI.parse('http://example.com/meow?foo=bar'))
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
53
79
|
end
|
@@ -6,7 +6,7 @@ class Nanoc::Extra::Checking::Checks::HTMLTest < Nanoc::TestCase
|
|
6
6
|
with_site do |site|
|
7
7
|
# Create files
|
8
8
|
FileUtils.mkdir_p('output')
|
9
|
-
File.open('output/blah.html', 'w') { |io| io.write('<!DOCTYPE html><html><head><title>Hello</title></head><body><h1>Hi!</h1></body>') }
|
9
|
+
File.open('output/blah.html', 'w') { |io| io.write('<!DOCTYPE html><html><head><meta charset="utf-8"><title>Hello</title></head><body><h1>Hi!</h1></body>') }
|
10
10
|
File.open('output/style.css', 'w') { |io| io.write('h1 { coxlor: rxed; }') }
|
11
11
|
|
12
12
|
# Run check
|
@@ -0,0 +1,100 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
class Nanoc::Extra::FilesystemToolsTest < Nanoc::TestCase
|
4
|
+
|
5
|
+
def test_all_files_in_follows_symlinks_to_dirs
|
6
|
+
# Write sample files
|
7
|
+
(0..15).each do |i|
|
8
|
+
FileUtils.mkdir_p("dir#{i}")
|
9
|
+
File.open("dir#{i}/foo.md", 'w') { |io| io.write('o hai') }
|
10
|
+
end
|
11
|
+
(1..10).each do |i|
|
12
|
+
File.symlink("../dir#{i}", "dir#{i-1}/sub")
|
13
|
+
end
|
14
|
+
|
15
|
+
# Check
|
16
|
+
# 11 expected files (follow symlink 10 times)
|
17
|
+
# sort required because 10 comes before 2
|
18
|
+
expected_files = [
|
19
|
+
'dir0/foo.md',
|
20
|
+
'dir0/sub/foo.md',
|
21
|
+
'dir0/sub/sub/foo.md',
|
22
|
+
'dir0/sub/sub/sub/foo.md',
|
23
|
+
'dir0/sub/sub/sub/sub/foo.md',
|
24
|
+
'dir0/sub/sub/sub/sub/sub/foo.md',
|
25
|
+
'dir0/sub/sub/sub/sub/sub/sub/foo.md',
|
26
|
+
'dir0/sub/sub/sub/sub/sub/sub/sub/foo.md',
|
27
|
+
'dir0/sub/sub/sub/sub/sub/sub/sub/sub/foo.md',
|
28
|
+
'dir0/sub/sub/sub/sub/sub/sub/sub/sub/sub/foo.md',
|
29
|
+
'dir0/sub/sub/sub/sub/sub/sub/sub/sub/sub/sub/foo.md'
|
30
|
+
]
|
31
|
+
actual_files = Nanoc::Extra::FilesystemTools.all_files_in('dir0').sort
|
32
|
+
assert_equal expected_files, actual_files
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_all_files_in_follows_symlinks_to_dirs_too_many
|
36
|
+
# Write sample files
|
37
|
+
(0..15).each do |i|
|
38
|
+
FileUtils.mkdir_p("dir#{i}")
|
39
|
+
File.open("dir#{i}/foo.md", 'w') { |io| io.write('o hai') }
|
40
|
+
end
|
41
|
+
(1..15).each do |i|
|
42
|
+
File.symlink("../dir#{i}", "dir#{i-1}/sub")
|
43
|
+
end
|
44
|
+
|
45
|
+
assert_raises Nanoc::Extra::FilesystemTools::MaxSymlinkDepthExceededError do
|
46
|
+
Nanoc::Extra::FilesystemTools.all_files_in('dir0')
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_all_files_in_relativizes_directory_names
|
51
|
+
FileUtils.mkdir('foo')
|
52
|
+
FileUtils.mkdir('bar')
|
53
|
+
|
54
|
+
File.open('foo/x.md', 'w') { |io| io.write('o hai from foo/x') }
|
55
|
+
File.open('bar/y.md', 'w') { |io| io.write('o hai from bar/y') }
|
56
|
+
|
57
|
+
File.symlink('../bar', 'foo/barlink')
|
58
|
+
|
59
|
+
expected_files = [ 'foo/barlink/y.md', 'foo/x.md' ]
|
60
|
+
actual_files = Nanoc::Extra::FilesystemTools.all_files_in('foo').sort
|
61
|
+
assert_equal expected_files, actual_files
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_all_files_in_follows_symlinks_to_files
|
65
|
+
# Write sample files
|
66
|
+
File.open('bar', 'w') { |io| io.write('o hai from bar') }
|
67
|
+
FileUtils.mkdir_p('dir')
|
68
|
+
File.open('dir/foo', 'w') { |io| io.write('o hai from foo') }
|
69
|
+
File.symlink('../bar', 'dir/bar-link')
|
70
|
+
|
71
|
+
# Check
|
72
|
+
expected_files = [ 'dir/bar-link', 'dir/foo' ]
|
73
|
+
actual_files = Nanoc::Extra::FilesystemTools.all_files_in('dir').sort
|
74
|
+
assert_equal expected_files, actual_files
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_resolve_symlink
|
78
|
+
File.open('foo', 'w') { |io| io.write('o hai') }
|
79
|
+
File.symlink('foo', 'bar')
|
80
|
+
File.symlink('bar', 'baz')
|
81
|
+
File.symlink('baz', 'qux')
|
82
|
+
|
83
|
+
expected = File.expand_path('foo')
|
84
|
+
actual = Nanoc::Extra::FilesystemTools.resolve_symlink('qux')
|
85
|
+
assert_equal expected, actual
|
86
|
+
end
|
87
|
+
|
88
|
+
def test_resolve_symlink_too_many
|
89
|
+
File.open('foo', 'w') { |io| io.write('o hai') }
|
90
|
+
File.symlink('foo', 'symlin-0')
|
91
|
+
(1..7).each do |i|
|
92
|
+
File.symlink("symlink-#{i-1}", "symlink-#{i}")
|
93
|
+
end
|
94
|
+
|
95
|
+
assert_raises Nanoc::Extra::FilesystemTools::MaxSymlinkDepthExceededError do
|
96
|
+
Nanoc::Extra::FilesystemTools.resolve_symlink('symlink-7')
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
end
|
data/test/filters/test_pandoc.rb
CHANGED
@@ -750,5 +750,28 @@ XML
|
|
750
750
|
end
|
751
751
|
end
|
752
752
|
|
753
|
+
def test_filter_html_doctype
|
754
|
+
# Create filter with mock item
|
755
|
+
filter = Nanoc::Filters::RelativizePaths.new
|
756
|
+
|
757
|
+
# Mock item
|
758
|
+
filter.instance_eval do
|
759
|
+
@item_rep = Nanoc::ItemRep.new(
|
760
|
+
Nanoc::Item.new(
|
761
|
+
'content',
|
762
|
+
{},
|
763
|
+
'/foo/bar/baz/'),
|
764
|
+
:blah)
|
765
|
+
@item_rep.path = '/foo/bar/baz/'
|
766
|
+
end
|
767
|
+
|
768
|
+
# Set content
|
769
|
+
raw_content = %[<!DOCTYPE html>]
|
770
|
+
expected_content = %[<!DOCTYPE html>]
|
771
|
+
|
772
|
+
# Test
|
773
|
+
actual_content = filter.setup_and_run(raw_content, :type => :html)
|
774
|
+
assert_equal(expected_content, actual_content)
|
775
|
+
end
|
753
776
|
|
754
777
|
end
|
@@ -8,20 +8,22 @@ class Nanoc::Filters::UglifyJSTest < Nanoc::TestCase
|
|
8
8
|
filter = ::Nanoc::Filters::UglifyJS.new
|
9
9
|
|
10
10
|
# Run filter
|
11
|
-
|
11
|
+
input = "foo = 1; (function(bar) { if (true) alert(bar); })(foo)"
|
12
|
+
result = filter.setup_and_run(input)
|
12
13
|
assert_match(/foo=1,function\((.)\)\{alert\(\1\)\}\(foo\);/, result)
|
13
14
|
end
|
14
15
|
end
|
15
16
|
|
16
17
|
def test_filter_with_options
|
17
|
-
|
18
18
|
if_have 'uglifier' do
|
19
|
-
# Create filter
|
20
19
|
filter = ::Nanoc::Filters::UglifyJS.new
|
20
|
+
input = "if(donkey) alert('It is a donkey!');"
|
21
21
|
|
22
|
-
|
23
|
-
|
24
|
-
|
22
|
+
result = filter.setup_and_run(input, output: { beautify: false })
|
23
|
+
assert_equal 'donkey&&alert("It is a donkey!");', result
|
24
|
+
|
25
|
+
result = filter.setup_and_run(input, output: { beautify: true })
|
26
|
+
assert_equal 'donkey && alert("It is a donkey!");', result
|
25
27
|
end
|
26
28
|
end
|
27
29
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nanoc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.6.
|
4
|
+
version: 3.6.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Denis Defreyne
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-04-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cri
|
@@ -108,6 +108,7 @@ extra_rdoc_files:
|
|
108
108
|
- README.md
|
109
109
|
- NEWS.md
|
110
110
|
files:
|
111
|
+
- Architecture.md
|
111
112
|
- ChangeLog
|
112
113
|
- CONTRIBUTING.md
|
113
114
|
- Gemfile
|
@@ -116,6 +117,7 @@ files:
|
|
116
117
|
- NEWS.md
|
117
118
|
- Rakefile
|
118
119
|
- README.md
|
120
|
+
- TODO.md
|
119
121
|
- doc/yardoc_templates/default/layout/html/footer.erb
|
120
122
|
- bin/nanoc
|
121
123
|
- lib/nanoc/base/compilation/checksum_store.rb
|
@@ -216,6 +218,7 @@ files:
|
|
216
218
|
- lib/nanoc/extra/deployers/rsync.rb
|
217
219
|
- lib/nanoc/extra/deployers.rb
|
218
220
|
- lib/nanoc/extra/file_proxy.rb
|
221
|
+
- lib/nanoc/extra/filesystem_tools.rb
|
219
222
|
- lib/nanoc/extra/link_collector.rb
|
220
223
|
- lib/nanoc/extra/pruner.rb
|
221
224
|
- lib/nanoc/extra/validators/links.rb
|
@@ -341,6 +344,7 @@ files:
|
|
341
344
|
- test/extra/deployers/test_rsync.rb
|
342
345
|
- test/extra/test_auto_compiler.rb
|
343
346
|
- test/extra/test_file_proxy.rb
|
347
|
+
- test/extra/test_filesystem_tools.rb
|
344
348
|
- test/extra/test_link_collector.rb
|
345
349
|
- test/extra/test_vcs.rb
|
346
350
|
- test/extra/validators/test_links.rb
|