nanoc-core 4.11.20 → 4.12.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 +4 -4
- data/lib/nanoc/core.rb +8 -15
- data/lib/nanoc/core/binary_compiled_content_cache.rb +27 -6
- data/lib/nanoc/core/compilation_item_rep_view.rb +1 -1
- data/lib/nanoc/core/compiler_loader.rb +1 -6
- data/lib/nanoc/core/config_loader.rb +2 -14
- data/lib/nanoc/core/contracts_support.rb +2 -1
- data/lib/nanoc/core/item_rep_writer.rb +7 -5
- data/lib/nanoc/core/textual_compiled_content_cache.rb +1 -1
- data/lib/nanoc/core/version.rb +1 -1
- metadata +8 -36
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4967bb5538d055185b3c646d4364f75e01e63a337592b63b1df8896b011b1423
|
4
|
+
data.tar.gz: 472af023ca27a5f7a2f09c54ff43c978c83a4d0f86c265e52f75b5e0dc1c7beb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a8cac018340546cc2950bbf3821df4f54be6e50c94eb91e07baa0aeafdc06f899438eb78d5b7f7cd5691c023230415a705bc7b69bcb70ca4621cd411c09d0d69
|
7
|
+
data.tar.gz: 6a56360bd58b3f779e86be59188e453a8f4add7b6626d4ae9f0c3624436fefd7c1ca5fc7836f7f566974c992ae0c67a3acd869eecbd9a31dfc8cf94bd75ee7c3
|
data/lib/nanoc/core.rb
CHANGED
@@ -9,7 +9,6 @@ require 'tmpdir'
|
|
9
9
|
require 'yaml'
|
10
10
|
|
11
11
|
# External gems
|
12
|
-
require 'clonefile'
|
13
12
|
require 'concurrent-ruby'
|
14
13
|
require 'json_schema'
|
15
14
|
require 'ddmemoize'
|
@@ -17,10 +16,16 @@ require 'ddmetrics'
|
|
17
16
|
require 'ddplugin'
|
18
17
|
require 'hamster'
|
19
18
|
require 'slow_enumerator_tools'
|
20
|
-
require 'tomlrb'
|
21
19
|
require 'tty-platform'
|
22
20
|
require 'zeitwerk'
|
23
21
|
|
22
|
+
# External gems (optional)
|
23
|
+
begin
|
24
|
+
require 'clonefile'
|
25
|
+
rescue LoadError
|
26
|
+
# ignore
|
27
|
+
end
|
28
|
+
|
24
29
|
module Nanoc
|
25
30
|
module Core
|
26
31
|
# Similar to `nil` except that it can only be compared against using
|
@@ -33,7 +38,7 @@ module Nanoc
|
|
33
38
|
#
|
34
39
|
# @api private
|
35
40
|
def self.version_information
|
36
|
-
"Nanoc #{Nanoc::VERSION} © 2007–
|
41
|
+
"Nanoc #{Nanoc::VERSION} © 2007–2021 Denis Defreyne.\n" \
|
37
42
|
"Running #{RUBY_ENGINE} #{RUBY_VERSION} (#{RUBY_RELEASE_DATE}) on #{RUBY_PLATFORM} with RubyGems #{Gem::VERSION}.\n"
|
38
43
|
end
|
39
44
|
|
@@ -70,15 +75,3 @@ loader.eager_load
|
|
70
75
|
require_relative 'core/core_ext/array'
|
71
76
|
require_relative 'core/core_ext/hash'
|
72
77
|
require_relative 'core/core_ext/string'
|
73
|
-
|
74
|
-
# Tracking issue:
|
75
|
-
# https://github.com/nanoc/features/issues/24
|
76
|
-
Nanoc::Core::Feature.define('live_cmd', version: '4.11')
|
77
|
-
|
78
|
-
# Tracking issue:
|
79
|
-
# https://github.com/nanoc/features/issues/40
|
80
|
-
Nanoc::Core::Feature.define('toml', version: '4.11')
|
81
|
-
|
82
|
-
# Tracking issue:
|
83
|
-
# https://github.com/nanoc/features/issues/20
|
84
|
-
Nanoc::Core::Feature.define('binary_compiled_content_cache', version: '4.11')
|
@@ -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
|
@@ -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
|
@@ -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
|
@@ -96,7 +96,8 @@ module Nanoc
|
|
96
96
|
false
|
97
97
|
end
|
98
98
|
|
99
|
-
|
99
|
+
# FIXME: Do something better with contracts on Ruby 3.x
|
100
|
+
@_contracts_support__should_enable = contracts_loadable && !RUBY_VERSION.start_with?('3') && !ENV.key?('DISABLE_CONTRACTS')
|
100
101
|
|
101
102
|
if @_contracts_support__should_enable
|
102
103
|
# FIXME: ugly
|
@@ -79,11 +79,13 @@ module Nanoc
|
|
79
79
|
|
80
80
|
def smart_cp(from, to)
|
81
81
|
# Try clonefile
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
82
|
+
if defined?(Clonefile)
|
83
|
+
FileUtils.rm_f(to)
|
84
|
+
begin
|
85
|
+
res = Clonefile.always(from, to)
|
86
|
+
return if res
|
87
|
+
rescue Clonefile::UnsupportedPlatform, Errno::ENOTSUP, Errno::EXDEV, Errno::EINVAL
|
88
|
+
end
|
87
89
|
end
|
88
90
|
|
89
91
|
# Try with hardlink
|
@@ -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
metadata
CHANGED
@@ -1,29 +1,15 @@
|
|
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.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Denis Defreyne
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-04-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: clonefile
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: 0.5.2
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - "~>"
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: 0.5.2
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: concurrent-ruby
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -122,20 +108,6 @@ dependencies:
|
|
122
108
|
- - "~>"
|
123
109
|
- !ruby/object:Gem::Version
|
124
110
|
version: '1.0'
|
125
|
-
- !ruby/object:Gem::Dependency
|
126
|
-
name: tomlrb
|
127
|
-
requirement: !ruby/object:Gem::Requirement
|
128
|
-
requirements:
|
129
|
-
- - "~>"
|
130
|
-
- !ruby/object:Gem::Version
|
131
|
-
version: '1.2'
|
132
|
-
type: :runtime
|
133
|
-
prerelease: false
|
134
|
-
version_requirements: !ruby/object:Gem::Requirement
|
135
|
-
requirements:
|
136
|
-
- - "~>"
|
137
|
-
- !ruby/object:Gem::Version
|
138
|
-
version: '1.2'
|
139
111
|
- !ruby/object:Gem::Dependency
|
140
112
|
name: tty-platform
|
141
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -313,23 +285,23 @@ homepage: https://nanoc.ws/
|
|
313
285
|
licenses:
|
314
286
|
- MIT
|
315
287
|
metadata: {}
|
316
|
-
post_install_message:
|
288
|
+
post_install_message:
|
317
289
|
rdoc_options: []
|
318
290
|
require_paths:
|
319
291
|
- lib
|
320
292
|
required_ruby_version: !ruby/object:Gem::Requirement
|
321
293
|
requirements:
|
322
|
-
- - "
|
294
|
+
- - ">="
|
323
295
|
- !ruby/object:Gem::Version
|
324
|
-
version: '2.
|
296
|
+
version: '2.5'
|
325
297
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
326
298
|
requirements:
|
327
299
|
- - ">="
|
328
300
|
- !ruby/object:Gem::Version
|
329
301
|
version: '0'
|
330
302
|
requirements: []
|
331
|
-
rubygems_version: 3.2.
|
332
|
-
signing_key:
|
303
|
+
rubygems_version: 3.2.15
|
304
|
+
signing_key:
|
333
305
|
specification_version: 4
|
334
306
|
summary: Core of Nanoc
|
335
307
|
test_files: []
|