Sha256: ae34d5b4d36c94e0477ce84b903a657c5c7ffb14a1f33f2ed8e2588d694213c9
Contents?: true
Size: 1.92 KB
Versions: 3
Compression:
Stored size: 1.92 KB
Contents
# frozen_string_literal: true module Nanoc::Int # @api private class ItemRepWriter TMP_TEXT_ITEMS_DIR = 'text_items' def write_all(item_rep, snapshot_repo) written_paths = Set.new item_rep.snapshot_defs.map(&:name).each do |snapshot_name| write(item_rep, snapshot_repo, snapshot_name, written_paths) end end def write(item_rep, snapshot_repo, snapshot_name, written_paths) item_rep.raw_paths.fetch(snapshot_name, []).each do |raw_path| write_single(item_rep, snapshot_repo, snapshot_name, raw_path, written_paths) end end def write_single(item_rep, snapshot_repo, snapshot_name, raw_path, written_paths) # Don’t write twice # TODO: test written_paths behavior return if written_paths.include?(raw_path) written_paths << raw_path # Create parent directory FileUtils.mkdir_p(File.dirname(raw_path)) # Check if file will be created is_created = !File.file?(raw_path) # Notify Nanoc::Int::NotificationCenter.post( :rep_write_started, item_rep, raw_path ) content = snapshot_repo.get(item_rep, snapshot_name) if content.binary? temp_path = content.filename else temp_path = temp_filename File.write(temp_path, content.string) end # Check whether content was modified is_modified = is_created || !FileUtils.identical?(raw_path, temp_path) # Write if is_modified begin FileUtils.ln(temp_path, raw_path, force: true) rescue Errno::EXDEV FileUtils.cp(temp_path, raw_path) end end item_rep.modified = is_modified # Notify Nanoc::Int::NotificationCenter.post( :rep_write_ended, item_rep, content.binary?, raw_path, is_created, is_modified ) end def temp_filename Nanoc::Int::TempFilenameFactory.instance.create(TMP_TEXT_ITEMS_DIR) end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
nanoc-4.9.4 | lib/nanoc/base/services/item_rep_writer.rb |
nanoc-4.9.3 | lib/nanoc/base/services/item_rep_writer.rb |
nanoc-4.9.2 | lib/nanoc/base/services/item_rep_writer.rb |