I am new to commit hooks as well as Clang formatting and am attempting to integrate the two. I have the pre-commit hook set up and I know how to run the Clang formatting on the command line, but am unsure of how to add it to the file.
This is the code I run in the command line for formatting:
clang-format -i -style=llvm fileName
I am also trying to run this on all files that are staged for commit. git diff --cached --name-only
This is my pre-commit file:
hook_enabled=true
# Redirect output to stderr.
exec 1>&2
# If the hook is enabled and there are one or more files added to the commit run
# code formatting.
if [ "$hook_enabled" != "false" ] &&
test $(git diff --cached --name-only $against | wc -c) != 0
then
cat <<\EOF
Code formatting changed some files, please review and re-add files with git add
EOF
exit 1
I also added the clang-formatting to package.json:
"pre-commit": "check-clang-format",
"format": "git-clang-format",
Please help me integrate the clang-formatting.
clang-format file, we need to place it in the project folder or in any parent folder of the file you want to format. clang-format.exe searches for the config file automatically starting with the folder where the file you want to format is located, all the way to the topmost directory.
Open a terminal window by using option + T in GitKraken Client. Once the terminal windows is open, change directory to . git/hooks . Then use the command chmod +x pre-commit to make the pre-commit file executable.
git-clang-format is a simple Python script distributed together with clang-format. The problem is that not so many are talking about git-clang-format. What git-clang-format solves for us is that it runs clang-format on the changes you made.
I'm adding the following to the top of my REPO_ROOT/.git/hooks/pre-commit file:
for FILE in $(git diff --cached --name-only)
do
clang-format -i $FILE
done
The .clang-format file is placed in the REPO_ROOT.
The other answer and the first comment to the original question doesn't say why it is preferred to avoid this solution, so I'd be happy to hear more about that.
This is now (finally) very simple using the open source https://pre-commit.com (the framework):
repos:
- repo: https://github.com/pre-commit/mirrors-clang-format
rev: v14.0.6
hooks:
- id: clang-format
It grabs a 1-2 MB binary from PyPI for all common platforms (Windows 64 & 32, macOS universal, manylinux 64 & 32 & arm & ppc & s390x). You can pin clang-format 10, 11, or 12 (And now 13, 14, and various patch versions, often same day releases!). See https://github.com/ssciwr/clang-format-wheel. If you use https://pre-commit.ci, you get automatic update PRs and your PRs get automatically fixed.
Actually, you don't invoke a clang-format binary at pre-commit hook.
Here is an instruction how to setup clang format at pre-commit hook: https://github.com/andrewseidl/githook-clang-format
Installation First, verify that
clang-formatis installed. On Linux this should be included with the regularclangpackage. ForMacOSX with Homebrew,
clang-formatis available viabrew install clang-format.Now install
clang-format.hookfrom this repository into your repo's.git/hooks. If you don't already have a pre-commit hook, you can simply copyclang-format.hookto.git/hooks/pre-commit. For example:
cp githook-clang-format/clang-format.hook myrepo/.git/hooks/pre-commitUsage Once the pre-commit hook is installed,
clang-formatwill be run on each file included in the commit when you rungit commit.By default,
clang-formatuses the LLVM style. To change this, either create a.clang-formatfile with your desired format in the top level of your repo, or set thehooks.clangformat.styleconfig option in your repo. The.clang-formatfile method is preferred if you will be working with a team or will be doing any major customizations to the style.You can generate the
.clang-formatfile from your desired style (here, llvm) using:
clang-format -style=llvm -dump-config > .clang-formatTo use the
git configmethod, inside your repo do:
git config hooks.clangformat.style llvm
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With