class Git::Catch::Runner
Public Class Methods
new()
click to toggle source
# File lib/git/catch.rb, line 9 def initialize @logger = Logger.new(STDOUT) @logger.formatter = proc do |type, time, name, message| "[#{time}] #{type.ljust(5)} #{message}\n" end @config = YAML.load_file("./.git-catch.yaml") @dir = @config.fetch("dir", nil) @hooks = [ "applypatch-msg", "commit-msg", "post-update", "pre-applypatch", "pre-commit", "pre-push", "pre-rebase", "prepare-commit-msg", "update", ] end
Public Instance Methods
init()
click to toggle source
# File lib/git/catch.rb, line 29 def init @config.fetch("hooks", {}).each do |name, _| if !@hooks.include? name @logger.error "Hook #{name} is not known." next end build name, files(name) end end
list()
click to toggle source
# File lib/git/catch.rb, line 39 def list data = {} @config.fetch("hooks", {}).each do |name, _| if !@hooks.include? name @logger.error "Hook #{name} is not known." next end data[name] = files(name) end data end
Private Instance Methods
build(name, files)
click to toggle source
# File lib/git/catch.rb, line 60 def build(name, files) file = ".git/hooks/#{name}" content = <<~EOS #!/usr/bin/env bash set -e EOS files.each do |file| content << "#{file}\n" end File.write file, content FileUtils.chmod "+x", file @logger.info "File #{file} written" end
dir_files(dir, hook)
click to toggle source
# File lib/git/catch.rb, line 75 def dir_files(dir, hook) files = [] Dir["#{dir}/#{hook}/**/*"].each do |f| if not File.executable? f @logger.warn "File #{f} is not executable" next end files << f end files end
files(name)
click to toggle source
# File lib/git/catch.rb, line 54 def files(name) files = @config.fetch("hooks", {}).fetch(name, []) files = (files + dir_files(@dir, name)).uniq if @dir files end