# File lib/nanoc3/cli/commands/compile.rb, line 48
    def run(options, arguments)
      # Make sure we are in a nanoc site directory
      puts "Loading site data..."
      @base.require_site
      @base.site.load_data

      # Check presence of --all option
      if options.has_key?(:all)
        $stderr.puts "Warning: the --all option is deprecated; please use --force instead."
      end

      # Find item(s) to compile
      if arguments.size == 0
        item = nil
      elsif arguments.size == 1
        # Find item
        identifier = arguments[0].cleaned_identifier
        item = @base.site.items.find { |item| item.identifier == identifier }

        # Ensure item
        if item.nil?
          $stderr.puts "Unknown item: #{identifier}"
          exit 1
        end
      end

      # Give feedback
      puts "Compiling #{item.nil? ? 'site' : 'item'}..."

      # Initialize profiling stuff
      time_before = Time.now
      @filter_times ||= {}
      @times_stack  ||= []
      setup_notifications

      # Compile
      @base.site.compiler.run(
        item,
        :force => options.has_key?(:all) || options.has_key?(:force)
      )

      # Find reps
      reps = @base.site.items.map  { |i| i.reps }.flatten

      # Show skipped reps
      reps.select { |r| !r.compiled? }.each do |rep|
        next if rep.raw_path.nil?
        duration = @rep_times[rep.raw_path]
        Nanoc3::CLI::Logger.instance.file(:high, :skip, rep.raw_path, duration)
      end

      # Show diff
      write_diff_for(reps)

      # Give general feedback
      puts
      puts "No items were modified." unless reps.any? { |r| r.modified? }
      puts "#{item.nil? ? 'Site' : 'Item'} compiled in #{format('%.2f', Time.now - time_before)}s."

      if options.has_key?(:verbose)
        print_state_feedback(reps)
        print_profiling_feedback(reps)
      end
    end