Sha256: 55838e92eab100ff4115de9180810c59ec2707242faa4e5727f04040676593c8

Contents?: true

Size: 1.87 KB

Versions: 15

Compression:

Stored size: 1.87 KB

Contents

# frozen_string_literal: true

module Nanoc::CLI::Commands::CompileListeners
  class FileActionPrinter < Abstract
    def initialize(reps:)
      @start_times = {}
      @acc_durations = {}

      @reps = reps
    end

    # @see Listener#start
    def start
      Nanoc::Int::NotificationCenter.on(:compilation_started, self) do |rep|
        @start_times[rep] = Time.now
        @acc_durations[rep] ||= 0.0
      end

      Nanoc::Int::NotificationCenter.on(:compilation_suspended, self) do |rep|
        @acc_durations[rep] += Time.now - @start_times[rep]
      end

      cached_reps = Set.new
      Nanoc::Int::NotificationCenter.on(:cached_content_used, self) do |rep|
        cached_reps << rep
      end

      Nanoc::Int::NotificationCenter.on(:rep_written, self) do |rep, _binary, path, is_created, is_modified|
        @acc_durations[rep] += Time.now - @start_times[rep]
        duration = @acc_durations[rep]

        action =
          if is_created then :create
          elsif is_modified then :update
          elsif cached_reps.include?(rep) then :cached
          else :identical
          end
        level =
          if is_created then :high
          elsif is_modified then :high
          else :low
          end
        log(level, action, path, duration)
      end
    end

    # @see Listener#stop
    def stop
      super

      Nanoc::Int::NotificationCenter.remove(:compilation_started, self)
      Nanoc::Int::NotificationCenter.remove(:compilation_suspended, self)
      Nanoc::Int::NotificationCenter.remove(:rep_written, self)

      @reps.reject(&:compiled?).each do |rep|
        raw_paths = rep.raw_paths.values.flatten.uniq
        raw_paths.each do |raw_path|
          log(:low, :skip, raw_path, nil)
        end
      end
    end

    private

    def log(level, action, path, duration)
      Nanoc::CLI::Logger.instance.file(level, action, path, duration)
    end
  end
end

Version data entries

15 entries across 15 versions & 1 rubygems

Version Path
nanoc-4.8.19 lib/nanoc/cli/commands/compile_listeners/file_action_printer.rb
nanoc-4.8.18 lib/nanoc/cli/commands/compile_listeners/file_action_printer.rb
nanoc-4.8.17 lib/nanoc/cli/commands/compile_listeners/file_action_printer.rb
nanoc-4.8.16 lib/nanoc/cli/commands/compile_listeners/file_action_printer.rb
nanoc-4.8.15 lib/nanoc/cli/commands/compile_listeners/file_action_printer.rb
nanoc-4.8.14 lib/nanoc/cli/commands/compile_listeners/file_action_printer.rb
nanoc-4.8.13 lib/nanoc/cli/commands/compile_listeners/file_action_printer.rb
nanoc-4.8.12 lib/nanoc/cli/commands/compile_listeners/file_action_printer.rb
nanoc-4.8.11 lib/nanoc/cli/commands/compile_listeners/file_action_printer.rb
nanoc-4.8.10 lib/nanoc/cli/commands/compile_listeners/file_action_printer.rb
nanoc-4.8.9 lib/nanoc/cli/commands/compile_listeners/file_action_printer.rb
nanoc-4.8.8 lib/nanoc/cli/commands/compile_listeners/file_action_printer.rb
nanoc-4.8.7 lib/nanoc/cli/commands/compile_listeners/file_action_printer.rb
nanoc-4.8.6 lib/nanoc/cli/commands/compile_listeners/file_action_printer.rb
nanoc-4.8.5 lib/nanoc/cli/commands/compile_listeners/file_action_printer.rb