X-Git-Url: https://git.openstreetmap.org/chef.git/blobdiff_plain/98cc5f14caf136d786fea344a4742735ca192da2..0901083e8a05bbeff9057698e1eb981e55e8ceab:/hooks/pre-commit diff --git a/hooks/pre-commit b/hooks/pre-commit index 6f7912f1f..57c23a35a 100755 --- a/hooks/pre-commit +++ b/hooks/pre-commit @@ -3,11 +3,13 @@ ok = true if IO.popen(["git", "ls-files", "--unmerged"]).read.empty? - need_stash = IO.popen(%w(git diff)).read.length > 0 + need_stash = !IO.popen(%w(git diff)).read.empty? system("git", "stash", "save", "--keep-index", "--quiet") if need_stash - files = IO.popen(["git", "diff", "--staged", "--name-only"]).readlines.map(&:chomp) + files = IO.popen(["git", "diff", "--staged", "--name-status"]).map do |line| + Regexp.last_match(1) if line =~ /^[AM]\s+(.*)$/ + end.compact ruby_files = files.select do |file| file =~ /\.rb$/ || `file --brief --mime-type #{file}` == "text/x-ruby\n" @@ -15,6 +17,10 @@ if IO.popen(["git", "ls-files", "--unmerged"]).read.empty? ok &&= system("rubocop", *ruby_files) unless ruby_files.empty? + cookbooks = files.grep(%r{(cookbooks/[^/]+)/}) { Regexp.last_match(1) }.uniq + + ok &&= system("foodcritic", "-f", "any", *cookbooks) unless cookbooks.empty? + system("git", "stash", "pop", "--quiet") if need_stash else puts "Unmerged files. Resolve before committing."