class Tagrity::Command::Start

Public Class Methods

call(fg, fresh) click to toggle source
# File lib/tagrity/commands/start.rb, line 14
def call(fg, fresh)
  dir = Dir.pwd
  assert_not_running(dir)

  Process.daemon({nochdir: true}) unless fg
  logger.fg = fg

  tag_generator = Provider.provide(:tag_generator)
  PidFile.write(PidFile.new(dir, Process.pid))

  logger.info("Watching #{dir} with process pid #{Process.pid}")

  if fresh
    logger.info("Generating tags fresh for #{dir}")
    tag_generator.generate_all
  end

  listener = Listen.to(
    dir,
    relative: true,
  ) do |modified, added, removed|
    unless modified.empty?
      logger.info("modified absolute path: #{modified}")
      tag_generator.generate(modified, true)
    end
    unless added.empty?
      logger.info("added absolute path: #{added}")
      tag_generator.generate(added, true)
    end
    unless removed.empty?
      logger.info("removed absolute path: #{removed}")
      tag_generator.delete_files_tags(removed)
    end
  end
  listener.start
  sleep
rescue ErrorProcessAlreadyRunning => e
  puts ::CLI::UI.fmt "{{red:#{e.message}}}"
  logger.error(e.message)
rescue Interrupt => e
  logger.info("Process interrupted. Killing #{Process.pid}")
  PidFile.delete(dir)
end

Private Class Methods

assert_not_running(dir) click to toggle source
# File lib/tagrity/commands/start.rb, line 60
def assert_not_running(dir)
  running_processes = PidFile.alive_pid_files(dir: dir)
  unless running_processes.empty?
    pids = running_processes.map { |pid_file| pid_file.pid }
    raise ErrorProcessAlreadyRunning, "Error: tagrity is already watching #{dir} with process #{pids}"
  end
end
logger() click to toggle source
# File lib/tagrity/commands/start.rb, line 68
def logger
  @logger ||= Provider.provide(:tlogger)
end