Skip to content

Instantly share code, notes, and snippets.

@tjkirch
Forked from tobias/run_tags.rb
Created March 20, 2011 02:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tjkirch/877993 to your computer and use it in GitHub Desktop.
Save tjkirch/877993 to your computer and use it in GitHub Desktop.
#!/usr/bin/env ruby
# A script to run ctags on all .rb files in a project. Can be run on
# the current dir, called from a git callback, or install itself as a
# git callback.
CTAGS = %x{which ctags}.chomp
HOOKS = %w{ post-merge post-commit post-checkout }
HOOKS_DIR = '.git/hooks'
def install
if !File.writable?(HOOKS_DIR)
$stderr.print "The install option [-i] can only be used within a git repo; exiting.\n"
exit 1
end
HOOKS.each { |hook| install_hook("#{HOOKS_DIR}/#{hook}") }
end
def run_tags(dir, run_in_background = false)
if File.executable?(CTAGS) and File.writable?(dir)
cmd = "find #{dir} -name \\\*.rb | #{CTAGS} -f #{dir}/tags -L - 2>>/dev/null"
cmd << '&' if run_in_background
system cmd
else
$stderr.print "FAILED to write TAGS file to #{dir}\n"
end
end
def install_hook(hook)
if File.exists?(hook)
$stderr.print "A file already exists at #{hook}, and will NOT be replaced.\n"
return
end
print "Linking #{__FILE__} to #{hook}\n"
%x{ln -s #{__FILE__} #{hook}}
end
if ARGV.first == '-i'
install
else
run_tags Dir.pwd, HOOKS.include?(File.basename(__FILE__))
end
@tjkirch
Copy link
Author

tjkirch commented Mar 20, 2011

This dynamically gets the path of ruby and ctags, and fixes some minor spacing issues.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment