class Tagrity::TagGenerator

Public Class Methods

new(config, logger) click to toggle source
# File lib/tagrity/tag_generator.rb, line 10
def initialize(config, logger)
  @config = config
  @logger = logger
end

Public Instance Methods

delete_files_tags(files) click to toggle source
# File lib/tagrity/tag_generator.rb, line 60
def delete_files_tags(files)
  return if files.empty? || !File.readable?(tagf)
  Tempfile.create do |tmpf|
    File.open(tagf) do |f|
      f.each_line do |line|
        unless files.any? { |fname| line.include?("\t#{fname}\t") }
          tmpf.write line
        end
      end
    end
    tmpf.rewind
    FileUtils.mv(tmpf.path, tagf, force: true)
    @logger.info("Deleted tags for #{files} from #{tagf}")
  end
end
generate(files, check_git) click to toggle source
# File lib/tagrity/tag_generator.rb, line 39
def generate(files, check_git)
  return if files.empty?
  if not Helper.git_dir?
    check_git = false
  end
  files
    .select { |file| generate_tags?(file, check_git) }
    .group_by { |file| @config.command_for_extension(file.split('.').last) }
    .each do |cmd, fnames|
    Tempfile.create do |tmpf|
      IO::write(tmpf.path, fnames.join("\n"))
      system(cmd, '-f', tagf, '--append', '-L', tmpf.path, out: File::NULL, err: File::NULL)
      if $?.exitstatus == 0
        @logger.info("{#{cmd}} generated tags for #{fnames} into #{tagf}")
      else
        @logger.error("{#{cmd}} failed (#{$?.exitstatus}) to generate tags for #{fnames} into #{tagf}")
      end
    end
  end
end
generate_all() click to toggle source
# File lib/tagrity/tag_generator.rb, line 15
def generate_all
  files = []
  if Helper.git_dir?
    untracked_files = `git ls-files --others --exclude-standard 2> /dev/null`.split("\n")
    if $?.exitstatus != 0
      @logger.error("Failed to get a listing of all untracked files under pwd for use with --fresh.")
      untracked_files = []
    end
    tracked_files = `git ls-files 2> /dev/null`.split("\n")
    if $?.exitstatus != 0
      @logger.error("Failed to get a listing of all tracked files under pwd for use with --fresh.")
      tracked_files = []
    end
    files = tracked_files.concat untracked_files
  else
    files = `find * -type f 2> /dev/null`.split("\n")
  end
  if not files.empty? and File.exists?(tagf)
    File.delete(tagf)
  end

  generate(files, false)
end

Private Instance Methods

check_git?() click to toggle source
# File lib/tagrity/tag_generator.rb, line 98
def check_git?
  @check_git ||= @config.respect_git? && Helper.git_dir?
end
copacetic_with_git?(file) click to toggle source
# File lib/tagrity/tag_generator.rb, line 86
def copacetic_with_git?(file)
  return true if !check_git?
  case @config.git_strategy
  when 'TRACKED'
    Helper.file_tracked?(file)
  when 'IGNORED'
    !Helper.file_ignored?(file)
  else
    false
  end
end
file_excluded?(fname) click to toggle source
# File lib/tagrity/tag_generator.rb, line 102
def file_excluded?(fname)
  @config.ignore_extension?(fname.split('.').last) || @config.path_ignored?(fname)
end
generate_tags?(file, check_git) click to toggle source
# File lib/tagrity/tag_generator.rb, line 78
def generate_tags?(file, check_git)
  return (!check_git || !Helper.file_ignored?(file)) && indexable?(file)
end
indexable?(file) click to toggle source
# File lib/tagrity/tag_generator.rb, line 82
def indexable?(file)
  file != tagf && !file_excluded?(file) && File.readable?(file)
end
tagf() click to toggle source
# File lib/tagrity/tag_generator.rb, line 106
def tagf
  @config.tagf
end