nanoc 4.8.14 → 4.8.15

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 61126d7052bc64e948aa9ee87b4e9dd63e6e04424ffa22b65b9190a99aae6aaa
4
- data.tar.gz: fef1657e63de4eb84ed66b75b3462dee717a7c84f2a6ac164e7a7d52ce6be9e5
3
+ metadata.gz: 72454ce3213cfb07daf01923f88260c8e1c3e439e163a1b38ecd603cb74794a2
4
+ data.tar.gz: fd783734d7a4fd46fe5b391f8ef0a3373bb51ad0e6300e356af66d03478e8b7b
5
5
  SHA512:
6
- metadata.gz: 1fa6df98e23b3d1975f7bae4265f63308e3a900ceea08f82caca0c5bb3039819dfa9e45e3b35983d2c030173e2bf07155dd72d2c7aafa1b861c2b4f5214919e1
7
- data.tar.gz: 93dba7e96ddc3a866cd0cd62c90ec7cd380d67b937f7d519afac64a87078186fdf23d87c3bb60101230288380038123756f03801f003ae06d2445a6de733846d
6
+ metadata.gz: 33d234ba1e4646f801f273b26d43b5993cbe4f06f306d58139b8a9f2f6af01007b319dc3f47bf5b0ffa059c836cb3356b6d329a95901445382dc40eaec57dd2e
7
+ data.tar.gz: cefdbfa34c2f66ea3fe70fc42f6496b2fa4d607361ff7c5fb8065503f508b0e5786063679e350b996d581ed848860a68cf56055355796db8ddc3f8beb9eca226
data/NEWS.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # Nanoc news
2
2
 
3
+ ## 4.8.15 (2017-12-02)
4
+
5
+ Fixes:
6
+
7
+ * Made `nanoc` show item being compiled in crash logs of all errors, not just errors inheriting from `StandardError` (#1258)
8
+ * Made Erubi stack traces include the filename of the item or layout that is being compiled (#1255, #1259)
9
+ * Prevented `view --live-reload` from crashing when the output directory does not exist (#1254, #1261)
10
+
11
+ Enhancements:
12
+
13
+ * Made pruner not remove the output directory if it’s empty (#1260)
14
+
3
15
  ## 4.8.14 (2017-11-27)
4
16
 
5
17
  Same as 4.8.13, but published with the proper release date.
@@ -95,7 +107,7 @@ Enhancements:
95
107
 
96
108
  * Various speed improvements
97
109
 
98
- ## 4.8.0 (2017-07-17)
110
+ ## 4.8 (2017-07-17)
99
111
 
100
112
  Features:
101
113
 
data/lib/nanoc.rb CHANGED
@@ -24,6 +24,7 @@ require 'ddplugin'
24
24
  require 'hamster'
25
25
  require 'ref'
26
26
  require 'slow_enumerator_tools'
27
+ require 'ddtelemetry'
27
28
 
28
29
  # Load general requirements
29
30
  require 'cgi'
@@ -50,7 +51,6 @@ require 'yaml'
50
51
  # Load Nanoc
51
52
  require 'nanoc/version'
52
53
  require 'nanoc/base'
53
- require 'nanoc/telemetry'
54
54
  require 'nanoc/checking'
55
55
  require 'nanoc/deploying'
56
56
  require 'nanoc/extra'
@@ -26,7 +26,7 @@ module Nanoc::Int::Compiler::Stages
26
26
 
27
27
  def handle_errors_while(item_rep)
28
28
  yield
29
- rescue => e
29
+ rescue Exception => e # rubocop:disable Lint/RescueException
30
30
  raise Nanoc::Int::Errors::CompilationError.new(e, item_rep)
31
31
  end
32
32
 
@@ -80,6 +80,8 @@ module Nanoc
80
80
  present_files = []
81
81
  present_dirs = []
82
82
 
83
+ expanded_dir = File.expand_path(dir)
84
+
83
85
  Find.find(dir) do |f|
84
86
  basename = File.basename(f)
85
87
 
@@ -91,7 +93,7 @@ module Nanoc
91
93
  when 'directory'
92
94
  if exclude?(basename)
93
95
  Find.prune
94
- else
96
+ elsif expanded_dir != File.expand_path(f)
95
97
  present_dirs << f
96
98
  end
97
99
  end
@@ -12,12 +12,12 @@ module Nanoc::CLI::Commands::CompileListeners
12
12
  # @param [Enumerable<Nanoc::Int::ItemRep>] reps
13
13
  def initialize(reps:)
14
14
  @reps = reps
15
- @telemetry = Nanoc::Telemetry.new
15
+ @telemetry = DDTelemetry.new
16
16
  end
17
17
 
18
18
  # @see Listener#start
19
19
  def start
20
- stage_stopwatch = Nanoc::Telemetry::Stopwatch.new
20
+ stage_stopwatch = DDTelemetry::Stopwatch.new
21
21
 
22
22
  on(:stage_started) do |_klass|
23
23
  stage_stopwatch.start
@@ -27,14 +27,14 @@ module Nanoc::CLI::Commands::CompileListeners
27
27
  stage_stopwatch.stop
28
28
  name = klass.to_s.sub(/.*::/, '')
29
29
  @telemetry.summary(:stages).observe(stage_stopwatch.duration, name)
30
- stage_stopwatch = Nanoc::Telemetry::Stopwatch.new
30
+ stage_stopwatch = DDTelemetry::Stopwatch.new
31
31
  end
32
32
 
33
33
  outdatedness_rule_stopwatches = {}
34
34
 
35
35
  on(:outdatedness_rule_started) do |klass, obj|
36
36
  stopwatches = outdatedness_rule_stopwatches.fetch(klass) { outdatedness_rule_stopwatches[klass] = {} }
37
- stopwatch = stopwatches.fetch(obj) { stopwatches[obj] = Nanoc::Telemetry::Stopwatch.new }
37
+ stopwatch = stopwatches.fetch(obj) { stopwatches[obj] = DDTelemetry::Stopwatch.new }
38
38
  stopwatch.start
39
39
  end
40
40
 
@@ -51,7 +51,7 @@ module Nanoc::CLI::Commands::CompileListeners
51
51
 
52
52
  on(:filtering_started) do |rep, _filter_name|
53
53
  stopwatch_stack = filter_stopwatches.fetch(rep) { filter_stopwatches[rep] = [] }
54
- stopwatch_stack << Nanoc::Telemetry::Stopwatch.new
54
+ stopwatch_stack << DDTelemetry::Stopwatch.new
55
55
  stopwatch_stack.last.start
56
56
  end
57
57
 
@@ -74,7 +74,7 @@ module Nanoc::CLI::Commands::CompileListeners
74
74
 
75
75
  on(:phase_started) do |phase_name, rep|
76
76
  stopwatches = phase_stopwatches.fetch(rep) { phase_stopwatches[rep] = {} }
77
- stopwatches[phase_name] = Nanoc::Telemetry::Stopwatch.new.tap(&:start)
77
+ stopwatches[phase_name] = DDTelemetry::Stopwatch.new.tap(&:start)
78
78
  end
79
79
 
80
80
  on(:phase_ended) do |phase_name, rep|
@@ -196,7 +196,7 @@ module Nanoc::CLI::Commands::CompileListeners
196
196
  end
197
197
 
198
198
  def print_table(rows)
199
- puts Nanoc::Telemetry::Table.new(rows).to_s
199
+ puts DDTelemetry::Table.new(rows).to_s
200
200
  end
201
201
  end
202
202
  end
@@ -23,6 +23,9 @@ module Nanoc::CLI::Commands
23
23
 
24
24
  config = Nanoc::Int::ConfigLoader.new.new_from_cwd
25
25
 
26
+ # Create output dir so that viewer/watcher doesn’t explode.
27
+ FileUtils.mkdir_p(config[:output_dir])
28
+
26
29
  server =
27
30
  Adsf::Server.new(
28
31
  root: File.absolute_path(config[:output_dir]),
@@ -23,7 +23,9 @@ module Nanoc::Filters
23
23
  assigns_binding = context.get_binding(&proc)
24
24
 
25
25
  # Get result
26
- eval(::Erubi::Engine.new(content, { bufvar: '_erbout', filename: filename }.merge(params)).src, assigns_binding)
26
+ engine_opts = { bufvar: '_erbout', filename: filename }.merge(params)
27
+ engine = ::Erubi::Engine.new(content, engine_opts)
28
+ eval(engine.src, assigns_binding, filename)
27
29
  end
28
30
  end
29
31
  end
data/lib/nanoc/version.rb CHANGED
@@ -2,5 +2,5 @@
2
2
 
3
3
  module Nanoc
4
4
  # The current Nanoc version.
5
- VERSION = '4.8.14'
5
+ VERSION = '4.8.15'
6
6
  end
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.14
4
+ version: 4.8.15
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-11-27 00:00:00.000000000 Z
11
+ date: 2017-12-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '1.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: ddtelemetry
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '='
60
+ - !ruby/object:Gem::Version
61
+ version: 1.0.0a1
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '='
67
+ - !ruby/object:Gem::Version
68
+ version: 1.0.0a1
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: hamster
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -360,14 +374,6 @@ files:
360
374
  - lib/nanoc/rule_dsl/rules_collection.rb
361
375
  - lib/nanoc/rule_dsl/rules_loader.rb
362
376
  - lib/nanoc/spec.rb
363
- - lib/nanoc/telemetry.rb
364
- - lib/nanoc/telemetry/counter.rb
365
- - lib/nanoc/telemetry/labelled_counter.rb
366
- - lib/nanoc/telemetry/labelled_summary.rb
367
- - lib/nanoc/telemetry/registry.rb
368
- - lib/nanoc/telemetry/stopwatch.rb
369
- - lib/nanoc/telemetry/summary.rb
370
- - lib/nanoc/telemetry/table.rb
371
377
  - lib/nanoc/version.rb
372
378
  homepage: http://nanoc.ws/
373
379
  licenses:
@@ -391,7 +397,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
391
397
  version: '0'
392
398
  requirements: []
393
399
  rubyforge_project:
394
- rubygems_version: 2.7.2
400
+ rubygems_version: 2.7.3
395
401
  signing_key:
396
402
  specification_version: 4
397
403
  summary: A static-site generator with a focus on flexibility.
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Nanoc
4
- # @api private
5
- module Telemetry
6
- def self.new
7
- Registry.new
8
- end
9
- end
10
- end
11
-
12
- require_relative 'telemetry/counter'
13
- require_relative 'telemetry/summary'
14
-
15
- require_relative 'telemetry/labelled_counter'
16
- require_relative 'telemetry/labelled_summary'
17
-
18
- require_relative 'telemetry/registry'
19
- require_relative 'telemetry/stopwatch'
20
-
21
- require_relative 'telemetry/table'
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Nanoc::Telemetry
4
- class Counter
5
- attr_reader :value
6
-
7
- def initialize
8
- @value = 0
9
- end
10
-
11
- def increment
12
- @value += 1
13
- end
14
- end
15
- end
@@ -1,35 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Nanoc::Telemetry
4
- class LabelledCounter
5
- def initialize
6
- @counters = {}
7
- end
8
-
9
- def increment(label)
10
- get(label).increment
11
- end
12
-
13
- def get(label)
14
- @counters.fetch(label) { @counters[label] = Counter.new }
15
- end
16
-
17
- def empty?
18
- @counters.empty?
19
- end
20
-
21
- def value(label)
22
- get(label).value
23
- end
24
-
25
- def values
26
- @counters.each_with_object({}) do |(label, counter), res|
27
- res[label] = counter.value
28
- end
29
- end
30
-
31
- def map
32
- @counters.map { |(label, counter)| yield(label, counter) }
33
- end
34
- end
35
- end
@@ -1,37 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Nanoc::Telemetry
4
- class LabelledSummary
5
- def initialize
6
- @summaries = {}
7
- end
8
-
9
- def observe(value, label)
10
- get(label).observe(value)
11
- end
12
-
13
- def get(label)
14
- @summaries.fetch(label) { @summaries[label] = Summary.new }
15
- end
16
-
17
- def empty?
18
- @summaries.empty?
19
- end
20
-
21
- def quantile(fraction, label)
22
- get(label).quantile(fraction)
23
- end
24
-
25
- def map
26
- @summaries.map { |(label, summary)| yield(label, summary) }
27
- end
28
-
29
- # TODO: add quantiles(fraction)
30
- # TODO: add min(label)
31
- # TODO: add mins
32
- # TODO: add max(label)
33
- # TODO: add maxs
34
- # TODO: add sum(label)
35
- # TODO: add sums
36
- end
37
- end
@@ -1,18 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Nanoc::Telemetry
4
- class Registry
5
- def initialize
6
- @counters = {}
7
- @summaries = {}
8
- end
9
-
10
- def counter(name)
11
- @counters.fetch(name) { @counters[name] = LabelledCounter.new }
12
- end
13
-
14
- def summary(name)
15
- @summaries.fetch(name) { @summaries[name] = LabelledSummary.new }
16
- end
17
- end
18
- end
@@ -1,43 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Nanoc::Telemetry
4
- class Stopwatch
5
- attr_reader :duration
6
-
7
- class AlreadyRunningError < StandardError
8
- def message
9
- 'Cannot start, because stopwatch is already running'
10
- end
11
- end
12
-
13
- class NotRunningError < StandardError
14
- def message
15
- 'Cannot stop, because stopwatch is not running'
16
- end
17
- end
18
-
19
- def initialize
20
- @duration = 0.0
21
- @last_start = nil
22
- end
23
-
24
- def start
25
- raise AlreadyRunningError if running?
26
- @last_start = Time.now
27
- end
28
-
29
- def stop
30
- raise NotRunningError unless running?
31
- @duration += (Time.now - @last_start)
32
- @last_start = nil
33
- end
34
-
35
- def running?
36
- !@last_start.nil?
37
- end
38
-
39
- def stopped?
40
- !running?
41
- end
42
- end
43
- end
@@ -1,55 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Nanoc::Telemetry
4
- class Summary
5
- class EmptySummaryError < StandardError
6
- def message
7
- 'Cannot calculate quantile for empty summary'
8
- end
9
- end
10
-
11
- def initialize
12
- @values = []
13
- end
14
-
15
- def observe(value)
16
- @values << value
17
- @sorted_values = nil
18
- end
19
-
20
- def count
21
- @values.size
22
- end
23
-
24
- def sum
25
- raise EmptySummaryError if @values.empty?
26
- @values.reduce(:+)
27
- end
28
-
29
- def avg
30
- sum / count
31
- end
32
-
33
- def min
34
- quantile(0.0)
35
- end
36
-
37
- def max
38
- quantile(1.0)
39
- end
40
-
41
- def quantile(fraction)
42
- raise EmptySummaryError if @values.empty?
43
-
44
- target = (@values.size - 1) * fraction.to_f
45
- interp = target % 1.0
46
- sorted_values[target.floor] * (1.0 - interp) + sorted_values[target.ceil] * interp
47
- end
48
-
49
- private
50
-
51
- def sorted_values
52
- @sorted_values ||= @values.sort
53
- end
54
- end
55
- end
@@ -1,35 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Nanoc::Telemetry
4
- class Table
5
- def initialize(rows)
6
- @rows = rows
7
- end
8
-
9
- def to_s
10
- columns = @rows.transpose
11
- column_lengths = columns.map { |c| c.map(&:size).max }
12
-
13
- [].tap do |lines|
14
- lines << row_to_s(@rows[0], column_lengths)
15
- lines << separator(column_lengths)
16
- lines.concat(@rows.drop(1).map { |r| row_to_s(r, column_lengths) })
17
- end.join("\n")
18
- end
19
-
20
- private
21
-
22
- def row_to_s(row, column_lengths)
23
- values = row.zip(column_lengths).map { |text, length| text.rjust(length) }
24
- values[0] + ' │ ' + values[1..-1].join(' ')
25
- end
26
-
27
- def separator(column_lengths)
28
- (+'').tap do |s|
29
- s << '─' * column_lengths[0]
30
- s << '─┼─'
31
- s << column_lengths[1..-1].map { |l| '─' * l }.join('───')
32
- end
33
- end
34
- end
35
- end