Class: Tagrity::TagGenerator

Inherits:
Object
  • Object
show all
Defined in:
lib/tagrity/tag_generator.rb

Defined Under Namespace

Classes: ExecutableNonExist

Instance Method Summary collapse

Constructor Details

#initialize(config, logger) ⇒ TagGenerator

Returns a new instance of TagGenerator.



10
11
12
13
# File 'lib/tagrity/tag_generator.rb', line 10

def initialize(config, logger)
  @config = config
  @logger = logger
end

Instance Method Details

#delete_files_tags(files) ⇒ Object



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# 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) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# 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_allObject



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# 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