Sha256: 5c203c8f961106267fb94f81932bfe7f25120a5ce1ffccce7e699d203c0a7c8b
Contents?: true
Size: 1.87 KB
Versions: 2
Compression:
Stored size: 1.87 KB
Contents
module Overcommit::Hook::PreCommit # Checks for line endings in files. # # WARNING: Works with Git 2.10.0 or newer. class LineEndings < Base def run messages = [] offending_files.map do |file_name| file = File.open(file_name) begin messages += check_file(file, file_name) rescue ArgumentError => ex # File is likely a binary file which this check should ignore, but # print a warning just in case messages << Overcommit::Hook::Message.new( :warning, file_name, file.lineno, "#{file_name}:#{file.lineno}:#{ex.message}" ) end end messages end private def check_file(file, file_name) messages_for_file = [] file.each_line do |line| # Remove configured line-ending line.gsub!(/#{config['eol']}/, '') # Detect any left over line-ending characters next unless line.end_with?("\n", "\r") messages_for_file << Overcommit::Hook::Message.new( :error, file_name, file.lineno, "#{file_name}:#{file.lineno}:#{line.inspect}" ) end messages_for_file end def offending_files result = execute(%w[git ls-files --eol -z --], args: applicable_files) raise 'Unable to access git tree' unless result.success? result.stdout.split("\0").map do |file_info| i, _w, _attr, path = file_info.split next if i == 'l/-text' # ignore binary files next if i == "l/#{eol}" path end.compact end def eol @eol ||= case config['eol'] when "\n" 'lf' when "\r\n" 'crlf' else raise 'Invalid `eol` option specified: must be "\n" or "\r\n"' end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
overcommit-0.41.0 | lib/overcommit/hook/pre_commit/line_endings.rb |
overcommit-0.40.0 | lib/overcommit/hook/pre_commit/line_endings.rb |