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"
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."