class Lolcommits::InstallationGit
Methods to handle enabling and disabling of lolcommits
Constants
- HOOK_DIR
- HOOK_PATH
Public Class Methods
do_disable()
click to toggle source
IF –DISABLE, DO DISABLE
# File lib/lolcommits/backends/installation_git.rb, line 48 def self.do_disable if lolcommits_hook_exists? remove_existing_hook! info "uninstalled lolcommits hook (from #{HOOK_PATH})" elsif File.exist?(HOOK_PATH) info "couldn't find an lolcommits hook (at #{HOOK_PATH})" if File.read(HOOK_PATH) =~ /lolcommit/ info "warning: an older-style lolcommit hook may still exist, edit #{HOOK_PATH} to remove it manually" end else info "no post commit hook found (at #{HOOK_PATH}), so there is nothing to uninstall" end end
do_enable(capture_args = '')
click to toggle source
IF –ENABLE, DO ENABLE
# File lib/lolcommits/backends/installation_git.rb, line 14 def self.do_enable(capture_args = '') # its possible a hooks dir doesnt exist, so create it if so Dir.mkdir(HOOK_DIR) unless File.directory?(HOOK_DIR) # should add a shebang (or not) adding will rewrite hook file add_shebang = false if hook_file_exists? # clear away any existing lolcommits hook remove_existing_hook! if lolcommits_hook_exists? # if file is empty we should add a shebang (and rewrite hook) if File.read(HOOK_PATH).strip.empty? add_shebang = true elsif !good_shebang? # look for good shebang in existing hook, abort if none found warn "the existing hook (at #{HOOK_PATH}) doesn't start with a good shebang; like #!/bin/sh" exit 1 end else add_shebang = true end File.open(HOOK_PATH, add_shebang ? 'w' : 'a') do |f| f.write("#!/bin/sh\n") if add_shebang f.write(hook_script(capture_args)) end FileUtils.chmod 0o755, HOOK_PATH HOOK_PATH end
good_shebang?()
click to toggle source
does the git hook file have a good shebang?
# File lib/lolcommits/backends/installation_git.rb, line 92 def self.good_shebang? File.read(HOOK_PATH).lines.first =~ %r{^\#!.*/bin/.*sh} end
hook_file_exists?()
click to toggle source
does a git hook exist at all?
# File lib/lolcommits/backends/installation_git.rb, line 81 def self.hook_file_exists? File.exist?(HOOK_PATH) end
hook_script(capture_args = '')
click to toggle source
# File lib/lolcommits/backends/installation_git.rb, line 62 def self.hook_script(capture_args = '') ruby_path = Lolcommits::Platform.command_which('ruby', only_path: true) imagick_path = Lolcommits::Platform.command_which('identify', only_path: true) capture_cmd = "if [ ! -d \"$GIT_DIR/rebase-merge\" ] && [ \"$LOLCOMMITS_CAPTURE_DISABLED\" != \"true\" ]; then lolcommits --capture #{capture_args}; fi" exports = "LANG=\"#{ENV['LANG']}\" && PATH=\"$PATH:#{ruby_path}:#{imagick_path}\"" if Lolcommits::Platform.platform_windows? exports = "set path=\"%PATH%;#{ruby_path};#{imagick_path}\"" end <<-HOOK ### lolcommits hook (begin) ### #{exports} && #{capture_cmd} ### lolcommits hook (end) ### HOOK end
lolcommits_hook_exists?()
click to toggle source
does a git hook exist with lolcommits commands?
# File lib/lolcommits/backends/installation_git.rb, line 86 def self.lolcommits_hook_exists? hook_file_exists? && File.read(HOOK_PATH).to_s =~ /lolcommits.*\(begin\)(.*\n)*.*lolcommits.*\(end\)/ end
remove_existing_hook!()
click to toggle source
# File lib/lolcommits/backends/installation_git.rb, line 96 def self.remove_existing_hook! hook = File.read(HOOK_PATH) out = File.open(HOOK_PATH, 'w') skip = false hook.lines.each do |line| skip = true if !skip && (line =~ /lolcommits.*\(begin\)/) out << line unless skip skip = false if skip && (line =~ /lolcommits.*\(end\)/) end out.close end