nanoc-core 4.11.23 → 4.12.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 +4 -4
- data/lib/nanoc/core/binary_compiled_content_cache.rb +27 -6
- data/lib/nanoc/core/code_snippet.rb +7 -1
- data/lib/nanoc/core/compilation_item_rep_view.rb +1 -1
- data/lib/nanoc/core/compilation_phases/cache.rb +7 -2
- data/lib/nanoc/core/compiler_loader.rb +1 -6
- data/lib/nanoc/core/config_loader.rb +2 -14
- data/lib/nanoc/core/dependency_store.rb +13 -10
- data/lib/nanoc/core/textual_compiled_content_cache.rb +1 -1
- data/lib/nanoc/core/version.rb +1 -1
- data/lib/nanoc/core.rb +0 -13
- metadata +4 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3dc7e6692696f6b2b0bbf15a7c5f0aa607af851182de259323b3f18869117ef0
|
4
|
+
data.tar.gz: a6964648a0eb41ffbffbda9fd9b18da1f80dd83a1a86d8564aee05f6bd5be16d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4ee96bf469d44eb81ee815f6adf1439dadcd7efa34fdb9f71c057888ac4b690d799506d24b3fce04d54530deca15deb3564894cd340f519fde93fdeb80295487
|
7
|
+
data.tar.gz: cfa697a3471cb5efb04c8d9e7f919c39b399f958b2f20a8232bd6c3d2d5214fd2a3acf4fb4308a4b094cbf02c4bb87ae050379c6a3b0421092101c2576e69432
|
@@ -11,7 +11,7 @@ module Nanoc
|
|
11
11
|
|
12
12
|
contract C::KeywordArgs[config: Nanoc::Core::Configuration] => C::Any
|
13
13
|
def initialize(config:)
|
14
|
-
super(Nanoc::Core::Store.tmp_path_for(config: config, store_name: 'binary_content'),
|
14
|
+
super(Nanoc::Core::Store.tmp_path_for(config: config, store_name: 'binary_content'), 2)
|
15
15
|
|
16
16
|
@cache = {}
|
17
17
|
end
|
@@ -49,6 +49,11 @@ module Nanoc
|
|
49
49
|
rep_cache = @cache[rep.item.identifier][rep.name]
|
50
50
|
|
51
51
|
content.each do |snapshot, binary_content|
|
52
|
+
# Check
|
53
|
+
if Nanoc::Core::ContractsSupport.enabled? && !File.file?(binary_content.filename)
|
54
|
+
raise Nanoc::Core::Errors::InternalInconsistency, "Binary content at #{binary_content.filename.inspect} does not exist, but is expected to."
|
55
|
+
end
|
56
|
+
|
52
57
|
filename = build_filename(rep, snapshot)
|
53
58
|
rep_cache[snapshot] = filename
|
54
59
|
|
@@ -57,12 +62,8 @@ module Nanoc
|
|
57
62
|
next if binary_content.filename == filename
|
58
63
|
|
59
64
|
# Copy
|
60
|
-
#
|
61
|
-
# NOTE: hardlinking is not an option in this case, because hardlinking
|
62
|
-
# would make it possible for the content to be (inadvertently)
|
63
|
-
# changed outside of Nanoc.
|
64
65
|
FileUtils.mkdir_p(File.dirname(filename))
|
65
|
-
|
66
|
+
smart_cp(binary_content.filename, filename)
|
66
67
|
end
|
67
68
|
end
|
68
69
|
|
@@ -123,6 +124,26 @@ module Nanoc
|
|
123
124
|
string_to_path_component(snapshot_name.to_s),
|
124
125
|
)
|
125
126
|
end
|
127
|
+
|
128
|
+
# NOTE: Similar to ItemRepWriter#smart_cp (but without hardlinking)
|
129
|
+
def smart_cp(from, to)
|
130
|
+
# NOTE: hardlinking is not an option in this case, because hardlinking
|
131
|
+
# would make it possible for the content to be (inadvertently)
|
132
|
+
# changed outside of Nanoc.
|
133
|
+
|
134
|
+
# Try clonefile
|
135
|
+
if defined?(Clonefile)
|
136
|
+
FileUtils.rm_f(to)
|
137
|
+
begin
|
138
|
+
res = Clonefile.always(from, to)
|
139
|
+
return if res
|
140
|
+
rescue Clonefile::UnsupportedPlatform, Errno::ENOTSUP, Errno::EXDEV, Errno::EINVAL
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
# Fall back to old-school copy
|
145
|
+
FileUtils.cp(from, to)
|
146
|
+
end
|
126
147
|
end
|
127
148
|
end
|
128
149
|
end
|
@@ -36,7 +36,13 @@ module Nanoc
|
|
36
36
|
# @return [void]
|
37
37
|
def load
|
38
38
|
# rubocop:disable Security/Eval
|
39
|
-
eval(
|
39
|
+
eval(<<~CODE, TOPLEVEL_BINDING)
|
40
|
+
unless respond_to?(:use_helper)
|
41
|
+
def self.use_helper(mod)
|
42
|
+
Nanoc::Core::Context.instance_eval { include mod }
|
43
|
+
end
|
44
|
+
end
|
45
|
+
CODE
|
40
46
|
eval(@data, TOPLEVEL_BINDING, @filename)
|
41
47
|
# rubocop:enable Security/Eval
|
42
48
|
nil
|
@@ -34,7 +34,7 @@ module Nanoc
|
|
34
34
|
if res
|
35
35
|
start = Time.now
|
36
36
|
sleep 0.05 until File.file?(res) || Time.now - start > FILE_APPEAR_TIMEOUT
|
37
|
-
raise Nanoc::Core::Errors::InternalInconsistency, "File did not
|
37
|
+
raise Nanoc::Core::Errors::InternalInconsistency, "File raw_path did not appear in time (#{FILE_APPEAR_TIMEOUT}s): #{res}" unless File.file?(res)
|
38
38
|
end
|
39
39
|
|
40
40
|
res
|
@@ -18,15 +18,20 @@ module Nanoc
|
|
18
18
|
contract Nanoc::Core::ItemRep, C::KeywordArgs[is_outdated: C::Bool], C::Func[C::None => C::Any] => C::Any
|
19
19
|
def run(rep, is_outdated:)
|
20
20
|
if can_reuse_content_for_rep?(rep, is_outdated: is_outdated)
|
21
|
+
# If cached content can be used for this item rep, do so, and skip
|
22
|
+
# recalculation of the item rep compiled content.
|
21
23
|
Nanoc::Core::NotificationCenter.post(:cached_content_used, rep)
|
22
|
-
|
23
24
|
@compiled_content_store.set_all(rep, @compiled_content_cache[rep])
|
24
25
|
else
|
26
|
+
# Cached content couldn’t be used for this rep. Continue as usual with
|
27
|
+
# recalculation of the item rep compiled content.
|
25
28
|
yield
|
29
|
+
|
30
|
+
# Update compiled content cache, now that the item rep is compiled.
|
31
|
+
@compiled_content_cache[rep] = @compiled_content_store.get_all(rep)
|
26
32
|
end
|
27
33
|
|
28
34
|
rep.compiled = true
|
29
|
-
@compiled_content_cache[rep] = @compiled_content_store.get_all(rep)
|
30
35
|
end
|
31
36
|
|
32
37
|
contract Nanoc::Core::ItemRep, C::KeywordArgs[is_outdated: C::Bool] => C::Bool
|
@@ -36,12 +36,7 @@ module Nanoc
|
|
36
36
|
end
|
37
37
|
|
38
38
|
def compiled_content_cache_class
|
39
|
-
|
40
|
-
if Nanoc::Core::Feature.enabled?(feature_name)
|
41
|
-
Nanoc::Core::CompiledContentCache
|
42
|
-
else
|
43
|
-
Nanoc::Core::TextualCompiledContentCache
|
44
|
-
end
|
39
|
+
Nanoc::Core::CompiledContentCache
|
45
40
|
end
|
46
41
|
end
|
47
42
|
end
|
@@ -29,12 +29,7 @@ module Nanoc
|
|
29
29
|
|
30
30
|
# @return [String]
|
31
31
|
def self.config_filename_for_cwd
|
32
|
-
filenames =
|
33
|
-
if Nanoc::Core::Feature.enabled?(Nanoc::Core::Feature::TOML)
|
34
|
-
%w[nanoc.yaml config.yaml nanoc.toml]
|
35
|
-
else
|
36
|
-
%w[nanoc.yaml config.yaml]
|
37
|
-
end
|
32
|
+
filenames = %w[nanoc.yaml config.yaml]
|
38
33
|
candidate = filenames.find { |f| File.file?(f) }
|
39
34
|
candidate && File.expand_path(candidate)
|
40
35
|
end
|
@@ -59,14 +54,7 @@ module Nanoc
|
|
59
54
|
end
|
60
55
|
|
61
56
|
def load_file(filename)
|
62
|
-
|
63
|
-
when '.yaml'
|
64
|
-
YAML.load_file(filename)
|
65
|
-
when '.toml'
|
66
|
-
Tomlrb.load_file(filename)
|
67
|
-
else
|
68
|
-
raise Nanoc::Core::Errors::InternalInconsistency, 'Unhandled config file extension'
|
69
|
-
end
|
57
|
+
YAML.load_file(filename)
|
70
58
|
end
|
71
59
|
|
72
60
|
# @api private
|
@@ -19,20 +19,25 @@ module Nanoc
|
|
19
19
|
def initialize(items, layouts, config)
|
20
20
|
super(Nanoc::Core::Store.tmp_path_for(config: config, store_name: 'dependencies'), 5)
|
21
21
|
|
22
|
+
@config = config
|
22
23
|
@items = items
|
23
24
|
@layouts = layouts
|
24
25
|
|
25
|
-
|
26
|
-
items.each { |o| add_vertex_for(o) }
|
27
|
-
layouts.each { |o| add_vertex_for(o) }
|
28
|
-
add_vertex_for(config)
|
29
|
-
add_vertex_for(items)
|
30
|
-
add_vertex_for(layouts)
|
26
|
+
rebuild_refs2objs
|
31
27
|
|
32
28
|
@new_objects = []
|
33
29
|
@graph = Nanoc::Core::DirectedGraph.new([nil] + objs2refs(@items) + objs2refs(@layouts))
|
34
30
|
end
|
35
31
|
|
32
|
+
def rebuild_refs2objs
|
33
|
+
@refs2objs = {}
|
34
|
+
@items.each { |o| add_vertex_for(o) }
|
35
|
+
@layouts.each { |o| add_vertex_for(o) }
|
36
|
+
add_vertex_for(@config)
|
37
|
+
add_vertex_for(@items)
|
38
|
+
add_vertex_for(@layouts)
|
39
|
+
end
|
40
|
+
|
36
41
|
contract C_OBJ_SRC => C::ArrayOf[Nanoc::Core::Dependency]
|
37
42
|
def dependencies_causing_outdatedness_of(object)
|
38
43
|
objects_causing_outdatedness_of(object).map do |other_object|
|
@@ -53,14 +58,12 @@ module Nanoc
|
|
53
58
|
|
54
59
|
def items=(items)
|
55
60
|
@items = items
|
56
|
-
|
57
|
-
add_vertex_for(items)
|
61
|
+
rebuild_refs2objs
|
58
62
|
end
|
59
63
|
|
60
64
|
def layouts=(layouts)
|
61
65
|
@layouts = layouts
|
62
|
-
|
63
|
-
add_vertex_for(layouts)
|
66
|
+
rebuild_refs2objs
|
64
67
|
end
|
65
68
|
|
66
69
|
def new_items
|
@@ -11,7 +11,7 @@ module Nanoc
|
|
11
11
|
|
12
12
|
contract C::KeywordArgs[config: Nanoc::Core::Configuration] => C::Any
|
13
13
|
def initialize(config:)
|
14
|
-
super(Nanoc::Core::Store.tmp_path_for(config: config, store_name: 'compiled_content'),
|
14
|
+
super(Nanoc::Core::Store.tmp_path_for(config: config, store_name: 'compiled_content'), 3)
|
15
15
|
|
16
16
|
@cache = {}
|
17
17
|
end
|
data/lib/nanoc/core/version.rb
CHANGED
data/lib/nanoc/core.rb
CHANGED
@@ -16,7 +16,6 @@ require 'ddmetrics'
|
|
16
16
|
require 'ddplugin'
|
17
17
|
require 'hamster'
|
18
18
|
require 'slow_enumerator_tools'
|
19
|
-
require 'tomlrb'
|
20
19
|
require 'tty-platform'
|
21
20
|
require 'zeitwerk'
|
22
21
|
|
@@ -76,15 +75,3 @@ loader.eager_load
|
|
76
75
|
require_relative 'core/core_ext/array'
|
77
76
|
require_relative 'core/core_ext/hash'
|
78
77
|
require_relative 'core/core_ext/string'
|
79
|
-
|
80
|
-
# Tracking issue:
|
81
|
-
# https://github.com/nanoc/features/issues/24
|
82
|
-
Nanoc::Core::Feature.define('live_cmd', version: '4.11')
|
83
|
-
|
84
|
-
# Tracking issue:
|
85
|
-
# https://github.com/nanoc/features/issues/40
|
86
|
-
Nanoc::Core::Feature.define('toml', version: '4.11')
|
87
|
-
|
88
|
-
# Tracking issue:
|
89
|
-
# https://github.com/nanoc/features/issues/20
|
90
|
-
Nanoc::Core::Feature.define('binary_compiled_content_cache', version: '4.11')
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nanoc-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.12.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: 2021-
|
11
|
+
date: 2021-10-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: concurrent-ruby
|
@@ -108,20 +108,6 @@ dependencies:
|
|
108
108
|
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '1.0'
|
111
|
-
- !ruby/object:Gem::Dependency
|
112
|
-
name: tomlrb
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
114
|
-
requirements:
|
115
|
-
- - "~>"
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
version: '1.2'
|
118
|
-
type: :runtime
|
119
|
-
prerelease: false
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
requirements:
|
122
|
-
- - "~>"
|
123
|
-
- !ruby/object:Gem::Version
|
124
|
-
version: '1.2'
|
125
111
|
- !ruby/object:Gem::Dependency
|
126
112
|
name: tty-platform
|
127
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -307,14 +293,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
307
293
|
requirements:
|
308
294
|
- - ">="
|
309
295
|
- !ruby/object:Gem::Version
|
310
|
-
version: '2.
|
296
|
+
version: '2.6'
|
311
297
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
312
298
|
requirements:
|
313
299
|
- - ">="
|
314
300
|
- !ruby/object:Gem::Version
|
315
301
|
version: '0'
|
316
302
|
requirements: []
|
317
|
-
rubygems_version: 3.2.
|
303
|
+
rubygems_version: 3.2.28
|
318
304
|
signing_key:
|
319
305
|
specification_version: 4
|
320
306
|
summary: Core of Nanoc
|