forked from mirrors/linphone-iphone
coding style: experimental use of a clang-format git pre-commit hook to force code convention
This commit is contained in:
parent
3933d9639f
commit
d09094223d
4 changed files with 125 additions and 0 deletions
64
.clang-format
Normal file
64
.clang-format
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
---
|
||||
# BasedOnStyle: LLVM
|
||||
AccessModifierOffset: -2
|
||||
AlignAfterOpenBracket: true
|
||||
AlignEscapedNewlinesLeft: false
|
||||
AlignOperands: true
|
||||
AlignTrailingComments: true
|
||||
AllowAllParametersOfDeclarationOnNextLine: true
|
||||
AllowShortBlocksOnASingleLine: false
|
||||
AllowShortCaseLabelsOnASingleLine: false
|
||||
AllowShortFunctionsOnASingleLine: false
|
||||
AllowShortIfStatementsOnASingleLine: false
|
||||
AllowShortLoopsOnASingleLine: false
|
||||
AlwaysBreakAfterDefinitionReturnType: false
|
||||
AlwaysBreakBeforeMultilineStrings: false
|
||||
AlwaysBreakTemplateDeclarations: false
|
||||
BinPackArguments: true
|
||||
BinPackParameters: true
|
||||
BreakBeforeBinaryOperators: None
|
||||
BreakBeforeBraces: Attach
|
||||
BreakBeforeTernaryOperators: true
|
||||
BreakConstructorInitializersBeforeComma: false
|
||||
ColumnLimit: 120
|
||||
CommentPragmas: '^ IWYU pragma:'
|
||||
ConstructorInitializerAllOnOneLineOrOnePerLine: false
|
||||
ConstructorInitializerIndentWidth: 4
|
||||
ContinuationIndentWidth: 4
|
||||
Cpp11BracedListStyle: true
|
||||
DerivePointerAlignment: false
|
||||
DisableFormat: false
|
||||
ExperimentalAutoDetectBinPacking: false
|
||||
ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH ]
|
||||
IndentCaseLabels: false
|
||||
IndentFunctionDeclarationAfterType: false
|
||||
IndentWidth: 4
|
||||
IndentWrappedFunctionNames: false
|
||||
KeepEmptyLinesAtTheStartOfBlocks: true
|
||||
Language: Cpp
|
||||
MaxEmptyLinesToKeep: 1
|
||||
NamespaceIndentation: None
|
||||
ObjCBlockIndentWidth: 2
|
||||
ObjCSpaceAfterProperty: false
|
||||
ObjCSpaceBeforeProtocolList: true
|
||||
PenaltyBreakBeforeFirstCallParameter: 19
|
||||
PenaltyBreakComment: 300
|
||||
PenaltyBreakFirstLessLess: 120
|
||||
PenaltyBreakString: 1000
|
||||
PenaltyExcessCharacter: 1000000
|
||||
PenaltyReturnTypeOnItsOwnLine: 60
|
||||
PointerAlignment: Right
|
||||
SpaceAfterCStyleCast: false
|
||||
SpaceBeforeAssignmentOperators: true
|
||||
SpaceBeforeParens: ControlStatements
|
||||
SpaceInEmptyParentheses: false
|
||||
SpacesBeforeTrailingComments: 1
|
||||
SpacesInAngles: false
|
||||
SpacesInContainerLiterals: true
|
||||
SpacesInCStyleCastParentheses: false
|
||||
SpacesInParentheses: false
|
||||
SpacesInSquareBrackets: false
|
||||
Standard: Cpp11
|
||||
TabWidth: 4
|
||||
UseTab: Always
|
||||
...
|
||||
50
.git-pre-commit
Executable file
50
.git-pre-commit
Executable file
|
|
@ -0,0 +1,50 @@
|
|||
#!/bin/bash
|
||||
|
||||
# This hook purpose is to keep coding style consistent between all developers
|
||||
# It is automatically installed in .git/hooks folder by cmake on first run.
|
||||
|
||||
# From https://github.com/tatsuhiro-t/nghttp2/blob/master/pre-commit
|
||||
|
||||
function invalid-format-detected {
|
||||
cat git-clang-format.diff
|
||||
echo "*****************"
|
||||
echo "$0: Invalid coding style detected (see git-clang-format.diff for issues). Please correct it using one of the following:"
|
||||
echo "1) Apply patch located at git-clang-format.diff using:"
|
||||
echo " cd $(git rev-parse --show-toplevel) && $1"
|
||||
echo "2) Use clang-format to correctly format source code using:"
|
||||
echo " $2"
|
||||
echo "3) Reformat these lines manually."
|
||||
echo "*** Aborting commit.***"
|
||||
exit 1
|
||||
}
|
||||
function git-clang-format-diffing {
|
||||
format_diff=$(which git-clang-format)
|
||||
format_diff_options="--style=file"
|
||||
|
||||
#only diffing commited files, ignored staged one
|
||||
$format_diff $format_diff_options --diff $(git --no-pager diff --cached --name-only) > git-clang-format.diff
|
||||
|
||||
if ! grep -q -E '(no modified files to format|clang-format did not modify any files)' git-clang-format.diff; then
|
||||
invalid-format-detected "git apply git-clang-format.diff" "clang-format $format_diff_options -i <some_file.c>"
|
||||
fi
|
||||
}
|
||||
|
||||
function clang-format-diff-diffing {
|
||||
format_diff=$(find /usr/bin/ -name 'clang-format-diff*' -type f | tail -n1)
|
||||
format_diff_options="-style file"
|
||||
|
||||
git diff-index --cached --diff-filter=ACMR -p HEAD -- | $format_diff $format_diff_options -p1 > git-clang-format.diff
|
||||
if [ -s git-clang-format.diff ]; then
|
||||
invalid-format-detected "patch -p0 < git-clang-format.diff" "${format_diff/-diff/} $format_diff_options -i <some_file.cpp>"
|
||||
fi
|
||||
}
|
||||
|
||||
if which git-clang-format &>/dev/null; then
|
||||
git-clang-format-diffing $@
|
||||
elif [ ! -z "$(find /usr/bin/ /usr/local/bin/ /opt/bin/ -name 'clang-format-diff*' -type f 2>/dev/null)" ]; then
|
||||
# Warning! We need at least version 1.6...
|
||||
clang-format-diff-diffing $@
|
||||
else
|
||||
echo "$0: Please install clang-format (coding style checker) - could not find git-clang-format nor clang-format-diff in PATH."
|
||||
exit 1
|
||||
fi
|
||||
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -11,3 +11,4 @@ test-reports
|
|||
WORK
|
||||
Makefile
|
||||
OUTPUT
|
||||
git-clang-format.diff
|
||||
|
|
|
|||
10
prepare.py
10
prepare.py
|
|
@ -151,6 +151,14 @@ def extract_libs_list():
|
|||
return list(set(l))
|
||||
|
||||
|
||||
def install_git_hook():
|
||||
git_hook_path = ".git{sep}hooks{sep}pre-commit".format(sep=os.sep)
|
||||
if os.path.isdir(".git{sep}hooks".format(sep=os.sep)) and not os.path.isfile(git_hook_path):
|
||||
print("Installing Git pre-commit hook")
|
||||
shutil.copyfile(".git-pre-commit", git_hook_path)
|
||||
os.chmod(git_hook_path, 0755)
|
||||
|
||||
|
||||
def main(argv=None):
|
||||
if argv is None:
|
||||
argv = sys.argv
|
||||
|
|
@ -171,6 +179,8 @@ def main(argv=None):
|
|||
" architectures in list: {0}.".format(', '.join([repr(platform) for platform in platforms])))
|
||||
args, additional_args = argparser.parse_known_args()
|
||||
|
||||
install_git_hook()
|
||||
|
||||
selected_platforms = []
|
||||
for platform in args.platform:
|
||||
if platform == 'all':
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue