tagrity 0.1.1 → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: dcfed080b9e287731b704e80488adac996f1c4fa1b8157eb0e0836267eaed3c0
4
- data.tar.gz: a0f2b636f77d14d419efc7b6e899b1c34b9e0ef3e9ed582bfc705e8e1270b84c
3
+ metadata.gz: 0bbba0199d2e4305cc015fc1bf2151892628224fdb31ad0a1b2fe0e08b2a5b8b
4
+ data.tar.gz: b2910418b53ce0d188c03048ca4554988e1833269ed385a041291dd0427a4499
5
5
  SHA512:
6
- metadata.gz: 5a97461685ed84ae3c4488ad93469079cee4b24e778222d4d2ea6db47945fe52d10c0665bccd89de431468dffee0aaf6bab776da40710362943e05b876666683
7
- data.tar.gz: 48a82ca820c24f146dec57e888d9621a595e8fd89bd0d76ca4233eab2a54d2b517547192cf1ae5f712e4c8b828a32f46780a6d371c06612e34f263b096ed2016
6
+ metadata.gz: d103e833875ab1d827dc26857a78c9795092ccf1fd8d346fa506fcf3586b6581d5842a6d5a30b9ea470643997a97722e9df922b83cdbd8a1607b222261eaa114
7
+ data.tar.gz: 24eef3ae46b97b8e56802013a60217e9c8749f81846e4beff6f056f33166e9f2d4935cc4a12f6c8005d5b93d29db9d5803fef18e586f5cd3a8d82faf5b0a7392
@@ -0,0 +1,4 @@
1
+ continue
2
+ n
3
+ next
4
+ ls
@@ -1,22 +1,30 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- tagrity (0.1.0)
4
+ tagrity (0.1.6)
5
5
  listen (~> 3.0)
6
+ pry (~> 0.9.9)
6
7
  thor (~> 0.20)
7
8
 
8
9
  GEM
9
10
  remote: https://rubygems.org/
10
11
  specs:
12
+ coderay (1.1.2)
11
13
  diff-lcs (1.3)
12
14
  ffi (1.11.3)
13
- listen (3.2.0)
15
+ listen (3.2.1)
14
16
  rb-fsevent (~> 0.10, >= 0.10.3)
15
17
  rb-inotify (~> 0.9, >= 0.9.10)
18
+ method_source (0.9.2)
19
+ pry (0.9.12.6)
20
+ coderay (~> 1.0)
21
+ method_source (~> 0.8)
22
+ slop (~> 3.4)
16
23
  rake (10.5.0)
17
24
  rb-fsevent (0.10.3)
18
25
  rb-inotify (0.10.0)
19
26
  ffi (~> 1.0)
27
+ ripper-tags (0.8.0)
20
28
  rspec (3.9.0)
21
29
  rspec-core (~> 3.9.0)
22
30
  rspec-expectations (~> 3.9.0)
@@ -30,6 +38,7 @@ GEM
30
38
  diff-lcs (>= 1.2.0, < 2.0)
31
39
  rspec-support (~> 3.9.0)
32
40
  rspec-support (3.9.0)
41
+ slop (3.6.0)
33
42
  thor (0.20.3)
34
43
 
35
44
  PLATFORMS
@@ -38,6 +47,7 @@ PLATFORMS
38
47
  DEPENDENCIES
39
48
  bundler (~> 2.0)
40
49
  rake (~> 10.0)
50
+ ripper-tags (~> 0.8.0)
41
51
  rspec (~> 3.0)
42
52
  tagrity!
43
53
 
data/README.md CHANGED
@@ -1,28 +1,69 @@
1
1
  # Tagrity
2
2
 
3
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/tagrity`. To experiment with that code, run `bin/console` for an interactive prompt.
4
-
5
- TODO: Delete this and the text above, and describe your gem
3
+ Automatically regenerate tags on file changes.
6
4
 
7
5
  ## Installation
8
6
 
9
- Add this line to your application's Gemfile:
7
+ ```sh
8
+ $ gem install tagrity
9
+ ```
10
+
11
+ ## Quick Start
10
12
 
11
- ```ruby
12
- gem 'tagrity'
13
+ ```sh
14
+ tagrity start
13
15
  ```
14
16
 
15
- And then execute:
17
+ That's it! By default, tagrity will only index files tracked by git. You may wish to al
18
+
19
+ ## Usage
20
+
21
+ ```
22
+ Commands:
23
+ tagrity help [COMMAND] # Describe available commands or one specific command
24
+ tagrity start # Start watching a directory (default to pwd)
25
+ tagrity status # List running tagrity processes and the directories being watched
26
+ tagrity stop # Stop watching a directory (default to pwd)
27
+ ```
16
28
 
17
- $ bundle
29
+ ### start
18
30
 
19
- Or install it yourself as:
31
+ ```
32
+ Usage:
33
+ tagrity start
34
+
35
+ Options:
36
+ [--dir=DIR]
37
+ [--fg], [--no-fg]
38
+ [--configfile=CONFIGFILE]
39
+ [--tagf=TAGF]
40
+ [--default-cmd=DEFAULT_CMD]
41
+ [--excluded-exts=one two three]
42
+ [--excluded-paths=one two three]
43
+
44
+ Start watching a directory (default to pwd)
45
+ ```
20
46
 
21
- $ gem install tagrity
47
+ ### stop
22
48
 
23
- ## Usage
49
+ ```
50
+ Usage:
51
+ tagrity stop
24
52
 
25
- TODO: Write usage instructions here
53
+ Options:
54
+ [--dir=DIR]
55
+
56
+ Stop watching a directory (default to pwd)
57
+ ```
58
+
59
+ ### status
60
+
61
+ ```
62
+ Usage:
63
+ tagrity status
64
+
65
+ List running tagrity processes and the directories being watched
66
+ ```
26
67
 
27
68
  ## Development
28
69
 
@@ -41,3 +82,12 @@ The gem is available as open source under the terms of the [MIT License](https:/
41
82
  ## Code of Conduct
42
83
 
43
84
  Everyone interacting in the Tagrity project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/[USERNAME]/tagrity/blob/master/CODE_OF_CONDUCT.md).
85
+
86
+
87
+
88
+
89
+ tagrity config to use (default to ~/.config/tagrity/config.yml if available).
90
+ A config file is a yaml file with the following possible values.
91
+ Some of these can be overridden with options, however the configfile
92
+ provided via --configfile will override the global config file in
93
+ ~/.config/tagrity/config.yml
@@ -1,32 +1,33 @@
1
1
  require 'thor'
2
2
  require 'tagrity/commands/start'
3
3
  require 'tagrity/commands/stop'
4
- require 'tagrity/commands/restart'
5
4
  require 'tagrity/commands/status'
6
5
 
7
6
  module Tagrity
8
7
  class CLI < Thor
9
- desc "start", "Start watching pwd or DIR"
10
- option :dir
11
- option :fg, type: :boolean
8
+ desc "start", "Start watching a directory (default to pwd)"
9
+ option :dir, desc: "directory to watch (omit to use pwd)"
10
+ option :tagf, desc: "filename (relative) to generate tags into (default: 'tags')."
11
+ option :fg, type: :boolean, desc: "keep the tagrity process running in the foreground"
12
+ option :fresh, type: :boolean, default: false, desc: "index the whole codebase before watching the file system. This will be slow if the codebase is large."
13
+ option :git, type: :boolean, default: true, desc: "only index files which are being tracked by git"
14
+ option :configfile, desc: "See README for more info."
15
+ option :ext_cmds, type: :hash, desc: "which <command> to use to generate tags based on the file extension. <command> must support -f and --append"
16
+ option :default_cmd, desc: "the default <command> to be used to generate tags (default: 'ctags'). <command> must support -f and --append"
17
+ option :excluded_exts, type: :array, desc: "which file extensions to not generate tags for."
18
+ option :excluded_paths, type: :array, desc: "which paths to ignore. Usually better to ignore this since by default only file tracked by git are indexed."
12
19
  def start()
13
- Command::Start::call(dir, fg?)
20
+ setup_config
21
+ Command::Start::call(dir, fg?, fresh?)
14
22
  end
15
23
 
16
- desc "stop", "Stop watching pwd or DIR"
24
+ desc "stop", "Stop watching a directory (default to pwd)"
17
25
  option :dir
18
26
  def stop()
19
27
  Command::Stop::call(dir)
20
28
  end
21
29
 
22
- desc "restart", "Stop watching pwd or DIR. Start watching pwd or DIR again"
23
- option :dir
24
- option :fg, type: :boolean
25
- def restart()
26
- Command::Restart::call(dir, fg?)
27
- end
28
-
29
- desc "status", "status running tagrity processes watching directories"
30
+ desc "status", "List running tagrity processes and the directories being watched"
30
31
  def status
31
32
  Command::Status::call
32
33
  end
@@ -42,5 +43,21 @@ module Tagrity
42
43
  def fg?
43
44
  options[:fg]
44
45
  end
46
+
47
+ def fresh?
48
+ options[:fresh]
49
+ end
50
+
51
+ def setup_config
52
+ ConfigFile.instance.init(
53
+ configfile: options[:configfile],
54
+ default_cmd: options[:default_cmd],
55
+ tagf: options[:tagf],
56
+ ext_cmds: options[:ext_cmds],
57
+ excluded_exts: options[:excluded_exts],
58
+ excluded_paths: options[:excluded_paths],
59
+ git: options[:git]
60
+ )
61
+ end
45
62
  end
46
63
  end
@@ -1,7 +1,8 @@
1
1
  require 'listen'
2
2
  require 'tagrity/pid_file'
3
- require 'tagrity/process_helper'
3
+ require 'tagrity/helper'
4
4
  require 'tagrity/file_callbacks'
5
+ require 'tagrity/provider'
5
6
 
6
7
  module Tagrity
7
8
  module Command
@@ -9,25 +10,26 @@ module Tagrity
9
10
  class ErrorProcessAlreadyRunning < StandardError; end
10
11
 
11
12
  class << self
12
- def call(dir, fg)
13
+ def call(dir, fg, fresh)
13
14
  assert_not_running(dir)
14
15
 
15
- callbacks = FileCallbacks.new
16
+ Process.daemon(nochdir: true) unless fg
16
17
 
17
- Process.daemon unless fg
18
+ callbacks = Provider.provide(:file_callbacks)
18
19
  PidFile.write(PidFile.new(dir, Process.pid))
19
20
 
21
+ callbacks.on_fresh if fresh
22
+
20
23
  listener = Listen.to(
21
24
  dir,
22
- ignore: [/tags/],
23
25
  relative: true,
24
26
  ) do |modified, added, removed|
27
+ puts "modified absolute path: #{modified}"
28
+ puts "added absolute path: #{added}"
29
+ puts "removed absolute path: #{removed}"
25
30
  callbacks.on_files_modified(modified)
26
31
  callbacks.on_files_added(added)
27
32
  callbacks.on_files_removed(removed)
28
- puts "modified absolute paths: #{modified}"
29
- puts "added absolute paths: #{added}"
30
- puts "removed absolute paths: #{removed}"
31
33
  end
32
34
  listener.start
33
35
  sleep
@@ -1,7 +1,111 @@
1
+ require 'yaml'
2
+ require 'singleton'
3
+ require 'tagrity/helper'
4
+
1
5
  module Tagrity
2
6
  class ConfigFile
3
- def initialize(opts = {})
7
+ include Singleton
8
+
9
+ class ErrorTagFileNotWritable < StandardError; end
10
+ class ErrorGitNotExecutable < StandardError; end
11
+
12
+ def init(
13
+ configfile:,
14
+ default_cmd:,
15
+ tagf:,
16
+ ext_cmds:,
17
+ excluded_exts:,
18
+ excluded_paths:,
19
+ git:
20
+ )
21
+ fname = config_file_name(configfile)
22
+ @config = if fname.nil? then {} else YAML.load_file(fname) end
23
+ ensure_ext_cmds(ext_cmds)
24
+ ensure_default_cmd(default_cmd)
25
+ ensure_tagf(tagf)
26
+ ensure_excluded_exts(excluded_exts)
27
+ ensure_excluded_paths(excluded_paths)
28
+ ensure_git(git)
29
+ end
30
+
31
+ def ft_to_cmd(ext)
32
+ ft_cmd = @config['ext_cmds'][ext]
33
+ return @config['default_cmd'] if ft_cmd.nil? || !Helper.is_executable?(ft_cmd)
34
+ ft_cmd
35
+ end
36
+
37
+ def is_ft_excluded(ext)
38
+ @config['excluded_exts'].include?(ext)
39
+ end
40
+
41
+ def is_path_excluded(path)
42
+ @config['excluded_paths'].any? { |pat| /^(\.\/)?#{pat}.*/ =~ path }
43
+ end
44
+
45
+ def tagf
46
+ @config['tagf']
47
+ end
48
+
49
+ def respect_git?
50
+ @config['git']
51
+ end
52
+
53
+ def to_s
54
+ @config.to_s
55
+ end
56
+
57
+ private
58
+
59
+ def ensure_ext_cmds(ext_cmds)
60
+ set_option('ext_cmds', ext_cmds, {})
61
+ end
62
+
63
+ def ensure_default_cmd(default_cmd)
64
+ set_option('default_cmd', default_cmd, 'ctags')
65
+ end
66
+
67
+ def ensure_excluded_exts(excluded_exts)
68
+ set_option('excluded_exts', excluded_exts, [])
69
+ end
70
+
71
+ def ensure_excluded_paths(excluded_paths)
72
+ set_option('excluded_paths', excluded_paths, [])
73
+ end
74
+
75
+ def ensure_tagf(tagf)
76
+ set_option('tagf', tagf, 'tags')
77
+ if File.exists?(@config['tagf']) && !File.writable?(@config['tagf'])
78
+ raise ErrorTagFileNotWritable, "#{@config['tagf']} must be writable to be used as the tag file."
79
+ end
80
+ end
81
+
82
+ def ensure_git(git)
83
+ set_option('git', git, true)
84
+ if @config['git'] && !Helper.is_executable?('git')
85
+ raise ErrorGitNotExecutable, "'git' must be executable to use the --git option."
86
+ end
87
+ end
88
+
89
+ def set_option(key, local_val, default)
90
+ unless local_val.nil?
91
+ @config[key] = local_val
92
+ end
93
+ return if @config.key?(key) && !@config[key].nil? && @config[key].is_a?(default.class)
94
+ @config[key] = default
95
+ end
96
+
97
+ def config_file_name(fname)
98
+ return fname unless fname.nil?
99
+ return global_config_file_name if File.file?(global_config_file_name)
100
+ nil
101
+ end
102
+
103
+ def global_config_file_name
104
+ "#{global_config_dir_name}/config.yml"
105
+ end
4
106
 
107
+ def global_config_dir_name
108
+ "#{ENV["HOME"]}/.config/tagrity"
5
109
  end
6
110
  end
7
111
  end
@@ -1,9 +1,14 @@
1
1
  require 'tagrity/tag_generator'
2
+ require 'tagrity/config_file'
2
3
 
3
4
  module Tagrity
4
5
  class FileCallbacks
5
- def initialize
6
- @tag_generator = TagGenerator.new
6
+ def initialize(tag_generator)
7
+ @tag_generator = tag_generator
8
+ end
9
+
10
+ def on_fresh
11
+ @tag_generator.generate_all
7
12
  end
8
13
 
9
14
  def on_files_modified(files)
@@ -0,0 +1,57 @@
1
+ module Tagrity
2
+ class Helper
3
+ root = ENV['TEST'] ? __dir__ : "#{ENV['HOME']}/.tagrity/"
4
+ RUN_DIR = File.join(root, 'var/run').freeze
5
+ LOG_DIR = File.join(root, 'var/log').freeze
6
+
7
+ class << self
8
+ def run_dir
9
+ ensure_data_dirs
10
+ RUN_DIR
11
+ end
12
+
13
+ def is_executable?(cmd)
14
+ !%x{command -v #{cmd}}.empty?
15
+ end
16
+
17
+ def kill(pid)
18
+ Process.kill('HUP', pid)
19
+ end
20
+
21
+ def alive?(pid)
22
+ Process.kill(0, pid) # signal 0 checks if pid is alive
23
+ true
24
+ rescue Errno::ESRCH
25
+ false
26
+ rescue Errno::EPERM
27
+ true
28
+ end
29
+
30
+ def is_git_dir?
31
+ return @is_git_dir unless @is_git_dir.nil?
32
+ `git rev-parse --git-dir &> /dev/null`
33
+ if $?.exitstatus == 0
34
+ @is_git_dir = true
35
+ else
36
+ @is_git_dir = false
37
+ end
38
+ end
39
+
40
+ def is_file_ignored?(file)
41
+ `git check-ignore -q #{file} &> /dev/null`
42
+ $?.exitstatus == 0
43
+ end
44
+
45
+ def is_file_tracked?(file)
46
+ `git ls-files --error-unmatch #{file} &> /dev/null`
47
+ $?.exitstatus == 0
48
+ end
49
+
50
+ private
51
+
52
+ def ensure_data_dirs
53
+ FileUtils.mkdir_p(RUN_DIR)
54
+ end
55
+ end
56
+ end
57
+ end
@@ -1,31 +1,31 @@
1
+ require 'tagrity/helper'
2
+
1
3
  module Tagrity
2
4
  class PidFile
3
- RUN_DIR = "#{__dir__}/../../var/run"
4
-
5
5
  class << self
6
6
  def write(pid_file)
7
- File.write("#{run_dir}/#{pid_file.name}", pid_file.dir)
7
+ File.write("#{Helper.run_dir}/#{pid_file.name}", pid_file.dir)
8
8
  end
9
9
 
10
10
  def delete(dir)
11
- pid_file_paths = Dir.glob("#{run_dir}/#{dir.split('/').last}.*.pid").select do |path|
11
+ pid_file_paths = Dir.glob("#{Helper.run_dir}/#{dir.split('/').last}.*.pid").select do |path|
12
12
  full_dir = File.read(path)
13
13
  File.realdirpath(full_dir) == File.realdirpath(dir)
14
14
  end
15
15
 
16
16
  pid_file_paths.each do |path|
17
17
  File.delete(path)
18
- ProcessHelper.kill(pid_from_path(path))
18
+ Helper.kill(pid_from_path(path))
19
19
  end
20
20
  end
21
21
 
22
22
  def alive_pid_files(dir: nil)
23
- Dir.glob("#{run_dir}/*").reduce([]) do |pid_files, path|
23
+ Dir.glob("#{Helper.run_dir}/*").reduce([]) do |pid_files, path|
24
24
  pid = pid_from_path(path)
25
25
  pid_file_dir = File.read(path)
26
26
 
27
27
  if dir.nil? || is_same_dirs(pid_file_dir, dir)
28
- if ProcessHelper.alive?(pid)
28
+ if Helper.alive?(pid)
29
29
  pid_files << PidFile.new(pid_file_dir, pid)
30
30
  else
31
31
  File.delete(path)
@@ -36,23 +36,12 @@ module Tagrity
36
36
  end
37
37
  end
38
38
 
39
- def run_dir
40
- ensure_dirs
41
- RUN_DIR
42
- end
43
-
44
39
  private
45
40
 
46
41
  def is_same_dirs(dir1, dir2)
47
42
  File.realdirpath(dir1) == File.realdirpath(dir2)
48
43
  end
49
44
 
50
- def ensure_dirs
51
- return if @ensure_dirs_done
52
- FileUtils.mkdir_p(RUN_DIR)
53
- @ensure_dirs_done = true
54
- end
55
-
56
45
  def pid_from_path(pid_file_name)
57
46
  pid_file_name.split('.')[-2].to_i
58
47
  end
@@ -76,13 +65,13 @@ module Tagrity
76
65
 
77
66
  def delete
78
67
  File.delete(pid_file_path)
79
- ProcessHelper.kill(pid.to_i)
68
+ Helper.kill(pid.to_i)
80
69
  end
81
70
 
82
71
  private
83
72
 
84
73
  def pid_file_path
85
- "#{PidFile.run_dir}/#{name}"
74
+ "#{Helper.run_dir}/#{name}"
86
75
  end
87
76
  end
88
77
  end
@@ -0,0 +1,26 @@
1
+ require 'tagrity/file_callbacks'
2
+ require 'tagrity/config_file'
3
+ require 'tagrity/tag_generator'
4
+
5
+ module Tagrity
6
+ class Provider
7
+ class << self
8
+ def provide(want)
9
+ case want
10
+ when :file_callbacks
11
+ provide_file_callbacks
12
+ when :tag_generator
13
+ provide_tag_generator
14
+ end
15
+ end
16
+
17
+ def provide_file_callbacks
18
+ FileCallbacks.new(provide(:tag_generator))
19
+ end
20
+
21
+ def provide_tag_generator
22
+ TagGenerator.new
23
+ end
24
+ end
25
+ end
26
+ end
@@ -1,33 +1,106 @@
1
+ require 'tmpdir'
2
+ require 'tempfile'
3
+ require 'fileutils'
4
+ require 'pry'
5
+ require 'tagrity/helper'
6
+
1
7
  module Tagrity
2
8
  class TagGenerator
3
9
  class ExecutableNonExist < StandardError; end
4
10
 
5
11
  def initialize
6
12
  assert_executables
13
+ @config = ConfigFile.instance
7
14
  end
8
15
 
9
16
  def generate_all
17
+ if File.exists?(tagf)
18
+ File.delete(tagf)
19
+ end
20
+ if check_git?
21
+ files = `git ls-files 2> /dev/null`.split
22
+ else
23
+ files = `find * 2> /dev/null`.split
24
+ end
25
+ if $?.exitstatus == 0
26
+ generate(files)
27
+ else
28
+ puts "Failed to get a listing of all files under pwd for use with --fresh."
29
+ end
10
30
  end
11
31
 
12
32
  def generate(files)
13
33
  return if files.empty?
14
- `ctags -f tags --append #{files.join(' ')}`
34
+ files
35
+ .select { |file| generate_tags?(file) }
36
+ .group_by { |file| @config.ft_to_cmd(file.partition('.').last) }
37
+ .each do |cmd, fnames|
38
+ Tempfile.create do |tmpf|
39
+ IO::write(tmpf.path, fnames.join("\n"))
40
+ system(cmd, '-f', tagf, '--append', '-L', tmpf.path, out: File::NULL)
41
+ if $?.exitstatus == 0
42
+ puts "{#{cmd}} generated tags for #{fnames} into #{tagf}"
43
+ else
44
+ puts "{#{cmd}} failed to generate tags for #{fnames} into #{tagf}"
45
+ end
46
+ end
47
+ end
15
48
  end
16
49
 
17
50
  def delete_files_tags(files)
18
51
  return if files.empty?
19
- `cat tags | grep -v -F #{files.map { |f| " -e \"#{f}\""}.join(' ')} > .tags`
20
- `mv .tags tags`
52
+ Tempfile.create do |tmpf|
53
+ File.open(tagf) do |f|
54
+ f.each_line do |line|
55
+ unless files.any? { |fname| line.include?("\t#{fname}\t") }
56
+ tmpf.write line
57
+ end
58
+ end
59
+ end
60
+ tmpf.rewind
61
+ FileUtils.mv(tmpf.path, tagf, force: true)
62
+ puts "Deleted tags for #{files} from #{tagf}"
63
+ end
21
64
  end
22
65
 
23
66
  private
24
67
 
68
+ def generate_tags?(file)
69
+ copacetic_with_git?(file) && indexable?(file)
70
+ end
71
+
72
+ def indexable?(file)
73
+ file != tagf && !is_file_excluded(file) && File.readable?(file)
74
+ end
75
+
76
+ def copacetic_with_git?(file)
77
+ !(check_git? && !Helper.is_file_tracked?(file))
78
+ end
79
+
80
+ def check_git?
81
+ @config.respect_git? && Helper.is_git_dir?
82
+ end
83
+
84
+ def is_file_excluded(fname)
85
+ @config.is_ft_excluded(fname.partition('.').last) || @config.is_path_excluded(fname)
86
+ end
87
+
25
88
  def assert_executables
26
89
  %w(cat grep mv).each do |exe|
27
- if %x{command -v #{exe}}.empty?
90
+ if !Helper.is_executable?(exe)
28
91
  raise ExecutableNonExist, "tagrity depends on the executable #{exe}"
29
92
  end
30
93
  end
31
94
  end
95
+
96
+ def tagf
97
+ @config.tagf
98
+ end
99
+
100
+ def tmp_file
101
+ tmpdir = "#{Dir.tmpdir}/tagrity"
102
+ FileUtils.mkdir_p(tmpdir)
103
+ "#{tmpdir}/#{Process.pid}.tmptags"
104
+ end
32
105
  end
33
106
  end
@@ -1,3 +1,3 @@
1
1
  module Tagrity
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.6"
3
3
  end
@@ -0,0 +1,31 @@
1
+ # ext_cmds allows different tag generators to be used depending on the file extension.
2
+ # Multiple extensions does not work, *.html.erb files will be picked up as erb.
3
+ # ext_cmds:
4
+ # <file extension>: <command to use to generate tags for this file extension>
5
+ # DEFAULT: empty
6
+ ext_cmds:
7
+ rb: ripper-tags
8
+ c: ctags
9
+ go: gotags
10
+
11
+ # default_cmd specifies the default command to be used to generate tags
12
+ # default_cmd: <command>
13
+ # DEFAULT: ctags
14
+ default_cmd: ctags
15
+
16
+ # tagf is the filename (relative) to generate tags into
17
+ # tagf: <filename>
18
+ # DEFAULT: tags
19
+ tagf: tags
20
+
21
+ # excluded_exts specifies which file extensions to not generate tags for.
22
+ # excluded_exts: [<file extension>, ...]
23
+ # DEFAULT: []
24
+ excluded_exts: [rb, h, js]
25
+
26
+ # excluded_paths specifies which paths to ignore.
27
+ # It's usually better to avoid this since by default tagrity will only look
28
+ # at files which are tracked by git.
29
+ # excluded_paths: [<path>, ...]
30
+ # DEFAULT: []
31
+ excluded_paths: [vendor, node_modules]
@@ -32,4 +32,6 @@ Gem::Specification.new do |spec|
32
32
  spec.add_development_dependency "bundler", "~> 2.0"
33
33
  spec.add_development_dependency "rake", "~> 10.0"
34
34
  spec.add_development_dependency "rspec", "~> 3.0"
35
+ spec.add_development_dependency "ripper-tags", "~> 0.8.0"
36
+ spec.add_dependency "pry", "~> 0.9.9"
35
37
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tagrity
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam P. Regasz-Rethy
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-12-05 00:00:00.000000000 Z
11
+ date: 2019-12-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -80,6 +80,34 @@ dependencies:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '3.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: ripper-tags
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 0.8.0
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 0.8.0
97
+ - !ruby/object:Gem::Dependency
98
+ name: pry
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 0.9.9
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 0.9.9
83
111
  description: Ditto
84
112
  email:
85
113
  - rethy.spud@gmail.com
@@ -88,6 +116,7 @@ executables:
88
116
  extensions: []
89
117
  extra_rdoc_files: []
90
118
  files:
119
+ - ".byebug_history"
91
120
  - ".gitignore"
92
121
  - ".rspec"
93
122
  - ".travis.yml"
@@ -102,16 +131,17 @@ files:
102
131
  - exe/tagrity
103
132
  - lib/tagrity.rb
104
133
  - lib/tagrity/cli.rb
105
- - lib/tagrity/commands/restart.rb
106
134
  - lib/tagrity/commands/start.rb
107
135
  - lib/tagrity/commands/status.rb
108
136
  - lib/tagrity/commands/stop.rb
109
137
  - lib/tagrity/config_file.rb
110
138
  - lib/tagrity/file_callbacks.rb
139
+ - lib/tagrity/helper.rb
111
140
  - lib/tagrity/pid_file.rb
112
- - lib/tagrity/process_helper.rb
141
+ - lib/tagrity/provider.rb
113
142
  - lib/tagrity/tag_generator.rb
114
143
  - lib/tagrity/version.rb
144
+ - sample_config.yml
115
145
  - tagrity.gemspec
116
146
  homepage: https://github.com/RRethy/tagrity
117
147
  licenses:
@@ -1,12 +0,0 @@
1
- module Tagrity
2
- module Command
3
- class Restart
4
- class << self
5
- def call(dir, fg)
6
- Command::Stop.call(dir)
7
- Command::Start.call(dir, fg)
8
- end
9
- end
10
- end
11
- end
12
- end
@@ -1,18 +0,0 @@
1
- module Tagrity
2
- class ProcessHelper
3
- class << self
4
- def kill(pid)
5
- Process.kill('HUP', pid)
6
- end
7
-
8
- def alive?(pid)
9
- Process.kill(0, pid) # signal 0 checks if pid is alive
10
- true
11
- rescue Errno::ESRCH
12
- false
13
- rescue Errno::EPERM
14
- true
15
- end
16
- end
17
- end
18
- end