如果文件符合指定格式,您是否可以以clang-format的模式运行它报告的方式?一种模拟运行模式,在这种模式中,它报告是否需要更改,但不进行更改。理想情况下,如果文件需要更改,我希望clang格式只返回一个非零退出代码。或者,更理想的情况是,非零退出代码和需要对标准输出进行更改的文件列表。
我试图保持这个问题的一般性,以便更多的人能够回答,但我要做的是编写一个git预提交钩子,它将拒绝任何与预期的..clang格式不匹配的提交。在索引中的文件列表上运行clang格式很容易。但是很难知道clang格式是否真的改变了什么。
我有一个基于-output-replacements-xml的潜在解决方案(我将把它作为一个答案发布),但这是一次黑客攻击,我觉得这应该更加简单。欢迎评论/建议、编辑、不同的答案/方法。
发布于 2017-08-29 21:41:57
在受到戴维·奥格伦的职位的启发后,我制作了一个pre-commit钩子,它能够处理阶段性的更改。这将确保pre-commit钩子能够在实际构成提交内容的代码上工作,并且不会被没有被分阶段的clang-format运行所愚弄。
#!/bin/bash
files=()
for file in `git diff --cached --name-only --diff-filter=ACMRT | grep -E "\.(cpp|hpp)$"`; do
  if ! cmp -s <(git show :${file}) <(git show :${file}|clang-format); then
    files+=("${file}")
  fi
done
if [ -n "${files}" ]; then
echo Format error within the following files:
printf "%s\n" "${files[@]}"
exit 1
fihttps://stackoverflow.com/questions/22866609
复制相似问题