Module: Textus::Protocol::StoreEngine::Pipeline

Defined in:
lib/textus/protocol/store_engine/pipeline.rb

Defined Under Namespace

Classes: DeleteDeps, MoveDeps, WriteDeps

Class Method Summary collapse

Class Method Details

.check_etag(key, path, if_etag, file_system) ⇒ Object



29
30
31
32
33
34
# File 'lib/textus/protocol/store_engine/pipeline.rb', line 29

def check_etag(key, path, if_etag, file_system)
  etag_before = file_system.exists?(path) ? file_system.etag(path) : nil
  raise Textus::EtagMismatch.new(key, if_etag, etag_before) if if_etag && (etag_before != if_etag)

  etag_before
end

.emit_event(deps, event_type:, pending_key:, emit_key:, emit_lane: nil, pending_keys: []) ⇒ Object



49
50
51
52
53
54
55
56
57
# File 'lib/textus/protocol/store_engine/pipeline.rb', line 49

def emit_event(deps, event_type:, pending_key:, emit_key:, emit_lane: nil, pending_keys: [])
  return unless deps.event_emitter
  return if deps.store.workflow_queue.pending?(event_type:, key: pending_key)
  return if pending_keys.any? { |k| deps.store.workflow_queue.pending?(event_type:, key: k) }

  deps.event_emitter.emit(event_type:, key: emit_key, lane: emit_lane || "artifacts")
rescue StandardError => e
  warn "textus: emit_workflow_event(#{event_type}, #{emit_key}) failed: #{e.message}"
end

.prune_parents(path, deps) ⇒ Object



36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/textus/protocol/store_engine/pipeline.rb', line 36

def prune_parents(path, deps)
  floor = deps.layout.lane_floor(path)
  return unless floor

  dir = File.dirname(path)
  while dir.start_with?("#{floor}/") && deps.file_system.dir_empty?(dir)
    deps.file_system.rmdir(dir)
    dir = File.dirname(dir)
  end
rescue SystemCallError
  # race: dir may have been emptied by another writer
end

.resolve_path(key, deps) ⇒ Object



25
26
27
# File 'lib/textus/protocol/store_engine/pipeline.rb', line 25

def resolve_path(key, deps)
  deps.manifest.resolver.resolve(key).path
end