nanoc 4.8.17 → 4.8.18
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/NEWS.md +11 -0
- data/lib/nanoc.rb +3 -2
- data/lib/nanoc/base/entities/action_sequence.rb +1 -1
- data/lib/nanoc/base/entities/configuration.rb +1 -1
- data/lib/nanoc/base/entities/identifiable_collection.rb +1 -1
- data/lib/nanoc/base/services.rb +1 -0
- data/lib/nanoc/base/services/compiler.rb +12 -19
- data/lib/nanoc/base/services/compiler/stage.rb +13 -0
- data/lib/nanoc/base/services/compiler/stages.rb +2 -0
- data/lib/nanoc/base/services/compiler/stages/build_reps.rb +1 -1
- data/lib/nanoc/base/services/compiler/stages/calculate_checksums.rb +1 -1
- data/lib/nanoc/base/services/compiler/stages/cleanup.rb +1 -1
- data/lib/nanoc/base/services/compiler/stages/compile_reps.rb +1 -1
- data/lib/nanoc/base/services/compiler/stages/determine_outdatedness.rb +1 -1
- data/lib/nanoc/base/services/compiler/stages/forget_outdated_dependencies.rb +1 -1
- data/lib/nanoc/base/services/compiler/stages/load_stores.rb +13 -6
- data/lib/nanoc/base/services/compiler/stages/postprocess.rb +1 -1
- data/lib/nanoc/base/services/compiler/stages/preprocess.rb +1 -1
- data/lib/nanoc/base/services/compiler/stages/prune.rb +1 -1
- data/lib/nanoc/base/services/compiler/stages/store_post_compilation_state.rb +1 -1
- data/lib/nanoc/base/services/compiler/stages/store_pre_compilation_state.rb +1 -1
- data/lib/nanoc/base/services/instrumentor.rb +15 -0
- data/lib/nanoc/base/services/outdatedness_checker.rb +2 -2
- data/lib/nanoc/base/services/outdatedness_rule.rb +3 -4
- data/lib/nanoc/base/services/outdatedness_rules/code_snippets_modified.rb +1 -1
- data/lib/nanoc/base/views/identifiable_collection_view.rb +8 -1
- data/lib/nanoc/cli/command_runner.rb +0 -1
- data/lib/nanoc/cli/commands/compile_listeners/timing_recorder.rb +45 -54
- data/lib/nanoc/cli/error_handler.rb +8 -0
- data/lib/nanoc/filters/colorize_syntax.rb +1 -1
- data/lib/nanoc/helpers/breadcrumbs.rb +30 -1
- data/lib/nanoc/rule_dsl/action_sequence_calculator.rb +1 -1
- data/lib/nanoc/spec.rb +13 -0
- data/lib/nanoc/version.rb +1 -1
- metadata +9 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 42c6429f3ab75c70a0616b03c8658442b860f3238e626e3b7a41e21b93558bc6
|
4
|
+
data.tar.gz: 329c3e49d8813363facc58726517a330821866d2ef6dac20279aa61800c0c617
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3caf2cc5572e4ccc9615ab06487391f6d691e4dbe9bb08d600f20f2f20284c827a7ce1fd6325e7ed5cd785d16d19b6e77380a2134fa505dd27f11c91defb780b
|
7
|
+
data.tar.gz: 71c7a650d30c2d29ba5a38b8fc2eee74596102506dbc44956a733f914d1c7b58b87bdd0ac5603788eae03758b3ef8ebae6c65c3102b3743e68e17354846b0f0d
|
data/NEWS.md
CHANGED
@@ -1,5 +1,16 @@
|
|
1
1
|
# Nanoc news
|
2
2
|
|
3
|
+
## 4.8.18 (2017-12-28)
|
4
|
+
|
5
|
+
Enhancements:
|
6
|
+
|
7
|
+
* Added `.tex` to the default list of text extensions (#1280) [Rien Maertens]
|
8
|
+
|
9
|
+
Fixes:
|
10
|
+
|
11
|
+
* Made `#breadcrumbs_trail` smarter about picking the right parent when there is ambiguity (#1278, #1279)
|
12
|
+
* Made `#find_all` be callable with block instead of an argument (like `Enumerable#find_all`) (#1284, #1285)
|
13
|
+
|
3
14
|
## 4.8.17 (2017-12-16)
|
4
15
|
|
5
16
|
Enhancements:
|
data/lib/nanoc.rb
CHANGED
@@ -9,6 +9,8 @@ require 'slow_enumerator_tools'
|
|
9
9
|
require 'ddmemoize'
|
10
10
|
require 'ddtelemetry'
|
11
11
|
|
12
|
+
DDMemoize.enable_telemetry
|
13
|
+
|
12
14
|
module Nanoc
|
13
15
|
# @return [String] A string containing information about this Nanoc version
|
14
16
|
# and its environment (Ruby engine and version, Rubygems version if any).
|
@@ -25,8 +27,6 @@ module Nanoc
|
|
25
27
|
def self.on_windows?
|
26
28
|
RUBY_PLATFORM =~ /windows|bccwin|cygwin|djgpp|mingw|mswin|wince/i
|
27
29
|
end
|
28
|
-
|
29
|
-
MEMOIZATION_TELEMETRY = DDTelemetry.new
|
30
30
|
end
|
31
31
|
|
32
32
|
# Load general requirements
|
@@ -44,6 +44,7 @@ require 'pathname'
|
|
44
44
|
require 'pstore'
|
45
45
|
require 'set'
|
46
46
|
require 'singleton'
|
47
|
+
require 'stringio'
|
47
48
|
require 'tempfile'
|
48
49
|
require 'time'
|
49
50
|
require 'timeout'
|
@@ -24,7 +24,7 @@ module Nanoc::Int
|
|
24
24
|
# that lacks some options, the default value will be taken from
|
25
25
|
# `DEFAULT_CONFIG`.
|
26
26
|
DEFAULT_CONFIG = {
|
27
|
-
text_extensions: %w[adoc asciidoc atom css erb haml htm html js less markdown md php rb sass scss txt xhtml xml coffee hb handlebars mustache ms slim rdoc].sort,
|
27
|
+
text_extensions: %w[adoc asciidoc atom css erb haml htm html js less markdown md php rb sass scss tex txt xhtml xml coffee hb handlebars mustache ms slim rdoc].sort,
|
28
28
|
lib_dirs: %w[lib],
|
29
29
|
commands_dirs: %w[commands],
|
30
30
|
output_dir: 'output',
|
data/lib/nanoc/base/services.rb
CHANGED
@@ -9,6 +9,7 @@ require_relative 'services/compiler_loader'
|
|
9
9
|
require_relative 'services/dependency_tracker'
|
10
10
|
require_relative 'services/executor'
|
11
11
|
require_relative 'services/filter'
|
12
|
+
require_relative 'services/instrumentor'
|
12
13
|
require_relative 'services/item_rep_builder'
|
13
14
|
require_relative 'services/item_rep_router'
|
14
15
|
require_relative 'services/item_rep_selector'
|
@@ -27,7 +27,7 @@ module Nanoc::Int
|
|
27
27
|
|
28
28
|
def run_until_preprocessed
|
29
29
|
@_res_preprocessed ||= begin
|
30
|
-
|
30
|
+
preprocess_stage.call
|
31
31
|
{}
|
32
32
|
end
|
33
33
|
end
|
@@ -36,7 +36,7 @@ module Nanoc::Int
|
|
36
36
|
@_res_reps_built ||= begin
|
37
37
|
prev = run_until_preprocessed
|
38
38
|
|
39
|
-
res =
|
39
|
+
res = build_reps_stage.call
|
40
40
|
|
41
41
|
prev.merge(
|
42
42
|
reps: res.fetch(:reps),
|
@@ -51,14 +51,14 @@ module Nanoc::Int
|
|
51
51
|
action_sequences = prev.fetch(:action_sequences)
|
52
52
|
reps = prev.fetch(:reps)
|
53
53
|
|
54
|
-
|
55
|
-
checksums =
|
54
|
+
load_stores_stage.call
|
55
|
+
checksums = calculate_checksums_stage.call
|
56
56
|
outdatedness_checker = create_outdatedness_checker(
|
57
57
|
checksums: checksums,
|
58
58
|
action_sequences: action_sequences,
|
59
59
|
reps: reps,
|
60
60
|
)
|
61
|
-
outdated_items =
|
61
|
+
outdated_items = determine_outdatedness_stage(outdatedness_checker, reps).call
|
62
62
|
|
63
63
|
prev.merge(
|
64
64
|
checksums: checksums,
|
@@ -76,14 +76,14 @@ module Nanoc::Int
|
|
76
76
|
checksums = res.fetch(:checksums)
|
77
77
|
outdated_items = res.fetch(:outdated_items)
|
78
78
|
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
79
|
+
forget_outdated_dependencies_stage.call(outdated_items)
|
80
|
+
store_pre_compilation_state_stage(action_sequences, reps).call(checksums)
|
81
|
+
prune_stage(reps).call
|
82
|
+
compile_reps_stage(action_sequences, reps).call
|
83
|
+
store_post_compilation_state_stage.call
|
84
|
+
postprocess_stage.call(self)
|
85
85
|
ensure
|
86
|
-
|
86
|
+
cleanup_stage.call
|
87
87
|
end
|
88
88
|
|
89
89
|
def compilation_context(reps:)
|
@@ -98,13 +98,6 @@ module Nanoc::Int
|
|
98
98
|
|
99
99
|
private
|
100
100
|
|
101
|
-
def run_stage(stage, *args)
|
102
|
-
Nanoc::Int::NotificationCenter.post(:stage_started, stage.class)
|
103
|
-
stage.run(*args)
|
104
|
-
ensure
|
105
|
-
Nanoc::Int::NotificationCenter.post(:stage_ended, stage.class)
|
106
|
-
end
|
107
|
-
|
108
101
|
def create_outdatedness_checker(checksums:, action_sequences:, reps:)
|
109
102
|
Nanoc::Int::OutdatednessChecker.new(
|
110
103
|
site: @site,
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Nanoc::Int::Compiler::Stages
|
4
|
-
class CompileReps
|
4
|
+
class CompileReps < Nanoc::Int::Compiler::Stage
|
5
5
|
def initialize(reps:, outdatedness_store:, dependency_store:, action_sequences:, compilation_context:, compiled_content_cache:)
|
6
6
|
@reps = reps
|
7
7
|
@outdatedness_store = outdatedness_store
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Nanoc::Int::Compiler::Stages
|
4
|
-
class DetermineOutdatedness
|
4
|
+
class DetermineOutdatedness < Nanoc::Int::Compiler::Stage
|
5
5
|
include Nanoc::Int::ContractsSupport
|
6
6
|
|
7
7
|
def initialize(reps:, outdatedness_checker:, outdatedness_store:)
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Nanoc::Int::Compiler::Stages
|
4
|
-
class LoadStores
|
4
|
+
class LoadStores < Nanoc::Int::Compiler::Stage
|
5
5
|
include Nanoc::Int::ContractsSupport
|
6
6
|
|
7
7
|
def initialize(checksum_store:, compiled_content_cache:, dependency_store:, action_sequence_store:, outdatedness_store:)
|
@@ -14,11 +14,18 @@ module Nanoc::Int::Compiler::Stages
|
|
14
14
|
|
15
15
|
contract C::None => C::Any
|
16
16
|
def run
|
17
|
-
@checksum_store
|
18
|
-
@compiled_content_cache
|
19
|
-
@dependency_store
|
20
|
-
@action_sequence_store
|
21
|
-
@outdatedness_store
|
17
|
+
load_store(@checksum_store)
|
18
|
+
load_store(@compiled_content_cache)
|
19
|
+
load_store(@dependency_store)
|
20
|
+
load_store(@action_sequence_store)
|
21
|
+
load_store(@outdatedness_store)
|
22
|
+
end
|
23
|
+
|
24
|
+
contract Nanoc::Int::Store => C::Any
|
25
|
+
def load_store(store)
|
26
|
+
Nanoc::Int::Instrumentor.call(:store_loaded, store.class) do
|
27
|
+
store.load
|
28
|
+
end
|
22
29
|
end
|
23
30
|
end
|
24
31
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Nanoc::Int::Compiler::Stages
|
4
|
-
class Preprocess
|
4
|
+
class Preprocess < Nanoc::Int::Compiler::Stage
|
5
5
|
def initialize(action_provider:, site:, dependency_store:, checksum_store:)
|
6
6
|
@action_provider = action_provider
|
7
7
|
@site = site
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Nanoc::Int::Compiler::Stages
|
4
|
-
class StorePreCompilationState
|
4
|
+
class StorePreCompilationState < Nanoc::Int::Compiler::Stage
|
5
5
|
include Nanoc::Int::ContractsSupport
|
6
6
|
|
7
7
|
def initialize(reps:, layouts:, checksum_store:, action_sequence_store:, action_sequences:)
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Nanoc::Int
|
4
|
+
# @api private
|
5
|
+
class Instrumentor
|
6
|
+
def self.call(key, *args)
|
7
|
+
stopwatch = DDTelemetry::Stopwatch.new
|
8
|
+
stopwatch.start
|
9
|
+
yield
|
10
|
+
ensure
|
11
|
+
stopwatch.stop
|
12
|
+
Nanoc::Int::NotificationCenter.post(key, stopwatch.duration, *args)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -6,7 +6,7 @@ module Nanoc::Int
|
|
6
6
|
# @api private
|
7
7
|
class OutdatednessChecker
|
8
8
|
class Basic
|
9
|
-
DDMemoize.activate(self
|
9
|
+
DDMemoize.activate(self)
|
10
10
|
|
11
11
|
include Nanoc::Int::ContractsSupport
|
12
12
|
|
@@ -97,7 +97,7 @@ module Nanoc::Int
|
|
97
97
|
end
|
98
98
|
end
|
99
99
|
|
100
|
-
DDMemoize.activate(self
|
100
|
+
DDMemoize.activate(self)
|
101
101
|
|
102
102
|
include Nanoc::Int::ContractsSupport
|
103
103
|
|
@@ -7,10 +7,9 @@ module Nanoc::Int
|
|
7
7
|
include Singleton
|
8
8
|
|
9
9
|
def call(obj, outdatedness_checker)
|
10
|
-
Nanoc::Int::
|
11
|
-
|
12
|
-
|
13
|
-
Nanoc::Int::NotificationCenter.post(:outdatedness_rule_ended, self.class, obj)
|
10
|
+
Nanoc::Int::Instrumentor.call(:outdatedness_rule_ran, self.class) do
|
11
|
+
apply(obj, outdatedness_checker)
|
12
|
+
end
|
14
13
|
end
|
15
14
|
|
16
15
|
def apply(_obj, _outdatedness_checker)
|
@@ -4,6 +4,8 @@ module Nanoc
|
|
4
4
|
class IdentifiableCollectionView < ::Nanoc::View
|
5
5
|
include Enumerable
|
6
6
|
|
7
|
+
NOTHING = Object.new
|
8
|
+
|
7
9
|
# @api private
|
8
10
|
def initialize(objects, context)
|
9
11
|
super(context)
|
@@ -46,7 +48,12 @@ module Nanoc
|
|
46
48
|
# @param [String, Regex] arg
|
47
49
|
#
|
48
50
|
# @return [Enumerable]
|
49
|
-
def find_all(arg)
|
51
|
+
def find_all(arg = NOTHING, &block)
|
52
|
+
if NOTHING.equal?(arg)
|
53
|
+
@context.dependency_tracker.bounce(unwrap, raw_content: true)
|
54
|
+
return @objects.select(&block).map { |i| view_class.new(i, @context) }
|
55
|
+
end
|
56
|
+
|
50
57
|
prop_attribute =
|
51
58
|
case arg
|
52
59
|
when String, Nanoc::Identifier
|
@@ -2,7 +2,10 @@
|
|
2
2
|
|
3
3
|
module Nanoc::CLI::Commands::CompileListeners
|
4
4
|
class TimingRecorder < Abstract
|
5
|
-
attr_reader :
|
5
|
+
attr_reader :stages_summary
|
6
|
+
attr_reader :phases_summary
|
7
|
+
attr_reader :outdatedness_rules_summary
|
8
|
+
attr_reader :filters_summary
|
6
9
|
|
7
10
|
# @see Listener#enable_for?
|
8
11
|
def self.enable_for?(_command_runner, _site)
|
@@ -12,39 +15,22 @@ module Nanoc::CLI::Commands::CompileListeners
|
|
12
15
|
# @param [Enumerable<Nanoc::Int::ItemRep>] reps
|
13
16
|
def initialize(reps:)
|
14
17
|
@reps = reps
|
15
|
-
|
18
|
+
|
19
|
+
@stages_summary = DDTelemetry::Summary.new
|
20
|
+
@phases_summary = DDTelemetry::Summary.new
|
21
|
+
@outdatedness_rules_summary = DDTelemetry::Summary.new
|
22
|
+
@filters_summary = DDTelemetry::Summary.new
|
23
|
+
@load_stores_summary = DDTelemetry::Summary.new
|
16
24
|
end
|
17
25
|
|
18
26
|
# @see Listener#start
|
19
27
|
def start
|
20
|
-
|
21
|
-
|
22
|
-
on(:stage_started) do |_klass|
|
23
|
-
stage_stopwatch.start
|
24
|
-
end
|
25
|
-
|
26
|
-
on(:stage_ended) do |klass|
|
27
|
-
stage_stopwatch.stop
|
28
|
-
name = klass.to_s.sub(/.*::/, '')
|
29
|
-
@telemetry.summary(:stages).observe(stage_stopwatch.duration, name)
|
30
|
-
stage_stopwatch = DDTelemetry::Stopwatch.new
|
28
|
+
on(:stage_ran) do |duration, klass|
|
29
|
+
@stages_summary.observe(duration, klass.to_s.sub(/.*::/, ''))
|
31
30
|
end
|
32
31
|
|
33
|
-
|
34
|
-
|
35
|
-
on(:outdatedness_rule_started) do |klass, obj|
|
36
|
-
stopwatches = outdatedness_rule_stopwatches.fetch(klass) { outdatedness_rule_stopwatches[klass] = {} }
|
37
|
-
stopwatch = stopwatches.fetch(obj) { stopwatches[obj] = DDTelemetry::Stopwatch.new }
|
38
|
-
stopwatch.start
|
39
|
-
end
|
40
|
-
|
41
|
-
on(:outdatedness_rule_ended) do |klass, obj|
|
42
|
-
stopwatches = outdatedness_rule_stopwatches.fetch(klass)
|
43
|
-
stopwatch = stopwatches.fetch(obj)
|
44
|
-
stopwatch.stop
|
45
|
-
|
46
|
-
name = klass.to_s.sub(/.*::/, '')
|
47
|
-
@telemetry.summary(:outdatedness_rules).observe(stopwatch.duration, name)
|
32
|
+
on(:outdatedness_rule_ran) do |duration, klass|
|
33
|
+
@outdatedness_rules_summary.observe(duration, klass.to_s.sub(/.*::/, ''))
|
48
34
|
end
|
49
35
|
|
50
36
|
filter_stopwatches = {}
|
@@ -59,7 +45,11 @@ module Nanoc::CLI::Commands::CompileListeners
|
|
59
45
|
stopwatch = filter_stopwatches.fetch(rep).pop
|
60
46
|
stopwatch.stop
|
61
47
|
|
62
|
-
@
|
48
|
+
@filters_summary.observe(stopwatch.duration, filter_name.to_s)
|
49
|
+
end
|
50
|
+
|
51
|
+
on(:store_loaded) do |duration, klass|
|
52
|
+
@load_stores_summary.observe(duration, klass.to_s)
|
63
53
|
end
|
64
54
|
|
65
55
|
on(:compilation_suspended) do |rep, _exception|
|
@@ -81,7 +71,7 @@ module Nanoc::CLI::Commands::CompileListeners
|
|
81
71
|
stopwatch = phase_stopwatches.fetch(rep).fetch(phase_name)
|
82
72
|
stopwatch.stop
|
83
73
|
|
84
|
-
@
|
74
|
+
@phases_summary.observe(stopwatch.duration, phase_name)
|
85
75
|
end
|
86
76
|
|
87
77
|
on(:phase_yielded) do |phase_name, rep|
|
@@ -98,7 +88,7 @@ module Nanoc::CLI::Commands::CompileListeners
|
|
98
88
|
stopwatch = phase_stopwatches.fetch(rep).fetch(phase_name)
|
99
89
|
stopwatch.stop if stopwatch.running?
|
100
90
|
|
101
|
-
@
|
91
|
+
@phases_summary.observe(stopwatch.duration, phase_name)
|
102
92
|
end
|
103
93
|
end
|
104
94
|
|
@@ -110,17 +100,17 @@ module Nanoc::CLI::Commands::CompileListeners
|
|
110
100
|
|
111
101
|
protected
|
112
102
|
|
113
|
-
def table_for_summary(name)
|
103
|
+
def table_for_summary(name, summary)
|
114
104
|
headers = [name.to_s, 'count', 'min', '.50', '.90', '.95', 'max', 'tot']
|
115
105
|
|
116
|
-
rows =
|
117
|
-
count =
|
118
|
-
min =
|
119
|
-
p50 =
|
120
|
-
p90 =
|
121
|
-
p95 =
|
122
|
-
tot =
|
123
|
-
max =
|
106
|
+
rows = summary.map do |filter_name, stats|
|
107
|
+
count = stats.count
|
108
|
+
min = stats.min
|
109
|
+
p50 = stats.quantile(0.50)
|
110
|
+
p90 = stats.quantile(0.90)
|
111
|
+
p95 = stats.quantile(0.95)
|
112
|
+
tot = stats.sum
|
113
|
+
max = stats.max
|
124
114
|
|
125
115
|
[filter_name, count.to_s] + [min, p50, p90, p95, max, tot].map { |r| "#{format('%4.2f', r)}s" }
|
126
116
|
end
|
@@ -128,36 +118,37 @@ module Nanoc::CLI::Commands::CompileListeners
|
|
128
118
|
[headers] + rows
|
129
119
|
end
|
130
120
|
|
131
|
-
def table_for_summary_durations(name)
|
121
|
+
def table_for_summary_durations(name, summary)
|
132
122
|
headers = [name.to_s, 'tot']
|
133
123
|
|
134
|
-
rows =
|
135
|
-
[stage_name, "#{format('%4.2f',
|
124
|
+
rows = summary.map do |stage_name, stats|
|
125
|
+
[stage_name, "#{format('%4.2f', stats.sum)}s"]
|
136
126
|
end
|
137
127
|
|
138
128
|
[headers] + rows
|
139
129
|
end
|
140
130
|
|
141
131
|
def print_profiling_feedback
|
142
|
-
print_table_for_summary(:filters)
|
143
|
-
print_table_for_summary(:phases) if Nanoc::CLI.verbosity >= 2
|
144
|
-
print_table_for_summary_duration(:stages) if Nanoc::CLI.verbosity >= 2
|
145
|
-
print_table_for_summary(:outdatedness_rules) if Nanoc::CLI.verbosity >= 2
|
146
|
-
|
132
|
+
print_table_for_summary(:filters, @filters_summary)
|
133
|
+
print_table_for_summary(:phases, @phases_summary) if Nanoc::CLI.verbosity >= 2
|
134
|
+
print_table_for_summary_duration(:stages, @stages_summary) if Nanoc::CLI.verbosity >= 2
|
135
|
+
print_table_for_summary(:outdatedness_rules, @outdatedness_rules_summary) if Nanoc::CLI.verbosity >= 2
|
136
|
+
print_table_for_summary_duration(:load_stores, @load_stores_summary) if Nanoc::CLI.verbosity >= 2
|
137
|
+
DDMemoize.print_telemetry if Nanoc::CLI.verbosity >= 2
|
147
138
|
end
|
148
139
|
|
149
|
-
def print_table_for_summary(name)
|
150
|
-
return
|
140
|
+
def print_table_for_summary(name, summary)
|
141
|
+
return unless summary.any?
|
151
142
|
|
152
143
|
puts
|
153
|
-
print_table(table_for_summary(name))
|
144
|
+
print_table(table_for_summary(name, summary))
|
154
145
|
end
|
155
146
|
|
156
|
-
def print_table_for_summary_duration(name)
|
157
|
-
return
|
147
|
+
def print_table_for_summary_duration(name, summary)
|
148
|
+
return unless summary.any?
|
158
149
|
|
159
150
|
puts
|
160
|
-
print_table(table_for_summary_durations(name))
|
151
|
+
print_table(table_for_summary_durations(name, summary))
|
161
152
|
end
|
162
153
|
|
163
154
|
def print_table(rows)
|
@@ -184,9 +184,11 @@ module Nanoc::CLI
|
|
184
184
|
# `#require` fails, the gem name is looked up in this hash.
|
185
185
|
GEM_NAMES = {
|
186
186
|
'adsf' => 'adsf',
|
187
|
+
'asciidoctor' => 'asciidoctor',
|
187
188
|
'bluecloth' => 'bluecloth',
|
188
189
|
'builder' => 'builder',
|
189
190
|
'coderay' => 'coderay',
|
191
|
+
'coffee-script' => 'coffee-script',
|
190
192
|
'cri' => 'cri',
|
191
193
|
'erubi' => 'erubi',
|
192
194
|
'erubis' => 'erubis',
|
@@ -201,9 +203,11 @@ module Nanoc::CLI
|
|
201
203
|
'markaby' => 'markaby',
|
202
204
|
'maruku' => 'maruku',
|
203
205
|
'mime/types' => 'mime-types',
|
206
|
+
'mustache' => 'mustache',
|
204
207
|
'nanoc/live' => 'nanoc-live',
|
205
208
|
'nokogiri' => 'nokogiri',
|
206
209
|
'nokogumbo' => 'nokogumbo',
|
210
|
+
'pandoc-ruby' => 'pandoc-ruby',
|
207
211
|
'pry' => 'pry',
|
208
212
|
'rack' => 'rack',
|
209
213
|
'rack/cache' => 'rack-cache',
|
@@ -213,7 +217,11 @@ module Nanoc::CLI
|
|
213
217
|
'redcloth' => 'RedCloth',
|
214
218
|
'rubypants' => 'rubypants',
|
215
219
|
'sass' => 'sass',
|
220
|
+
'slim' => 'slim',
|
221
|
+
'typogruby' => 'typogruby',
|
222
|
+
'uglifier' => 'uglifier',
|
216
223
|
'w3c_validators' => 'w3c_validators',
|
224
|
+
'yuicompressor' => 'yuicompressor',
|
217
225
|
}.freeze
|
218
226
|
|
219
227
|
# Attempts to find a resolution for the given error, or nil if no
|
@@ -3,6 +3,34 @@
|
|
3
3
|
module Nanoc::Helpers
|
4
4
|
# @see http://nanoc.ws/doc/reference/helpers/#breadcrumbs
|
5
5
|
module Breadcrumbs
|
6
|
+
# @api private
|
7
|
+
module Int
|
8
|
+
# e.g. unfold(10.class, &:superclass)
|
9
|
+
# => [Integer, Numeric, Object, BasicObject]
|
10
|
+
def self.unfold(obj, &blk)
|
11
|
+
acc = [obj]
|
12
|
+
|
13
|
+
res = yield(obj)
|
14
|
+
if res
|
15
|
+
acc + unfold(res, &blk)
|
16
|
+
else
|
17
|
+
acc
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
# e.g. patterns_for_prefix('/foo/1.0')
|
22
|
+
# => ['/foo/1.0.*', '/foo/1.*']
|
23
|
+
def self.patterns_for_prefix(prefix)
|
24
|
+
prefixes =
|
25
|
+
unfold(prefix) do |old_prefix|
|
26
|
+
new_prefix = Nanoc::Identifier.new(old_prefix).without_ext
|
27
|
+
new_prefix == old_prefix ? nil : new_prefix
|
28
|
+
end
|
29
|
+
|
30
|
+
prefixes.map { |pr| pr + '.*' }
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
6
34
|
# @return [Array]
|
7
35
|
def breadcrumbs_trail
|
8
36
|
# e.g. ['', '/foo', '/foo/bar']
|
@@ -18,7 +46,8 @@ module Nanoc::Helpers
|
|
18
46
|
if pr == ''
|
19
47
|
@items['/index.*']
|
20
48
|
else
|
21
|
-
|
49
|
+
prefix_patterns = Int.patterns_for_prefix(pr)
|
50
|
+
prefix_patterns.lazy.map { |pat| @items[pat] }.find(&:itself)
|
22
51
|
end
|
23
52
|
end
|
24
53
|
end
|
data/lib/nanoc/spec.rb
CHANGED
@@ -11,6 +11,19 @@ module Nanoc
|
|
11
11
|
ensure
|
12
12
|
Dir.chdir(here)
|
13
13
|
end
|
14
|
+
|
15
|
+
def on_windows?
|
16
|
+
Nanoc.on_windows?
|
17
|
+
end
|
18
|
+
|
19
|
+
def command?(cmd)
|
20
|
+
which, null = on_windows? ? %w[where NUL] : ['which', '/dev/null']
|
21
|
+
system("#{which} #{cmd} > #{null} 2>&1")
|
22
|
+
end
|
23
|
+
|
24
|
+
def skip_unless_have_command(cmd)
|
25
|
+
skip "Could not find external command \"#{cmd}\"" unless command?(cmd)
|
26
|
+
end
|
14
27
|
end
|
15
28
|
|
16
29
|
class HelperContext
|
data/lib/nanoc/version.rb
CHANGED
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: 4.8.
|
4
|
+
version: 4.8.18
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Denis Defreyne
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-12-
|
11
|
+
date: 2017-12-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: addressable
|
@@ -44,14 +44,14 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - '='
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 1.0.
|
47
|
+
version: 1.0.0a3
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - '='
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 1.0.
|
54
|
+
version: 1.0.0a3
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: ddplugin
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -72,14 +72,14 @@ dependencies:
|
|
72
72
|
requirements:
|
73
73
|
- - '='
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: 1.0.
|
75
|
+
version: 1.0.0a2
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - '='
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: 1.0.
|
82
|
+
version: 1.0.0a2
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: hamster
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -204,6 +204,7 @@ files:
|
|
204
204
|
- lib/nanoc/base/services/compiler/phases/recalculate.rb
|
205
205
|
- lib/nanoc/base/services/compiler/phases/resume.rb
|
206
206
|
- lib/nanoc/base/services/compiler/phases/write.rb
|
207
|
+
- lib/nanoc/base/services/compiler/stage.rb
|
207
208
|
- lib/nanoc/base/services/compiler/stages.rb
|
208
209
|
- lib/nanoc/base/services/compiler/stages/build_reps.rb
|
209
210
|
- lib/nanoc/base/services/compiler/stages/calculate_checksums.rb
|
@@ -221,6 +222,7 @@ files:
|
|
221
222
|
- lib/nanoc/base/services/dependency_tracker.rb
|
222
223
|
- lib/nanoc/base/services/executor.rb
|
223
224
|
- lib/nanoc/base/services/filter.rb
|
225
|
+
- lib/nanoc/base/services/instrumentor.rb
|
224
226
|
- lib/nanoc/base/services/item_rep_builder.rb
|
225
227
|
- lib/nanoc/base/services/item_rep_router.rb
|
226
228
|
- lib/nanoc/base/services/item_rep_selector.rb
|
@@ -402,7 +404,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
402
404
|
version: '0'
|
403
405
|
requirements: []
|
404
406
|
rubyforge_project:
|
405
|
-
rubygems_version: 2.7.
|
407
|
+
rubygems_version: 2.7.4
|
406
408
|
signing_key:
|
407
409
|
specification_version: 4
|
408
410
|
summary: A static-site generator with a focus on flexibility.
|