diff --git a/utils/arcanist/clang-format.sh b/utils/arcanist/clang-format.sh --- a/utils/arcanist/clang-format.sh +++ b/utils/arcanist/clang-format.sh @@ -4,17 +4,23 @@ # "script-and-regex.regex": "/^(?P.*?)\n(?P.*?)\n(?P\\d),(?P\\d)(\n(?P.*?)>>>>\n(?P.*?)<<</dev/null; then - # advice severity level is completely non-disruptive. - # switch to warning or error if you want to prompt the user. +# advice severity level is completely non-disruptive. +# switch to warning or error if you want to prompt the user. +if ! hash clang-format >/dev/null; then echo "advice" - echo "clang-format-diff not found in user's PATH; not linting file." + echo "clang-format not found in user's PATH; not linting file." + echo "====" + exit 0 +fi +if ! git rev-parse --git-dir >/dev/null; then + echo "advice" + echo "not in git repostitory; not linting file." echo "====" exit 0 fi @@ -37,14 +43,17 @@ # Arcanist can filter out lint messages for unchanged lines, but for that, we # need to generate line by line lint messages. Instead, we generate one lint -# message on line 1, char 1 with file content edited using clang-format-diff. -if git rev-parse --git-dir >/dev/null; then - arc_base_commit=$(arc which --show-base) - # An alternative is to use git-clang-format. - git diff -U0 --no-color "${arc_base_commit}"| clang-format-diff -style file -i -p1 -else - svn diff --diff-cmd=diff -x -U0 "${src_file}" | clang-format-diff -style LLVM -i -fi +# message on line 1, char 1 with file content edited using clang-format-diff.py +# +# We do not use git-clang-format because it wants to modify the index, +# and arc is already holding the lock. +# +# We do not look for clang-format-diff or clang-format-diff.py in the PATH +# because whether/how these are installed differs between distributions, +# and we have an executable copy in the tree anyway. +arc_base_commit=$(arc which --show-base) +git diff -U0 --no-color "${arc_base_commit}" \ + | clang/tools/clang-format/clang-format-diff.py -style file -i -p1 cp -p "${src_file}" "${formatted_file}" cp -p "${original_file}" "${src_file}"