mirror of
https://github.com/git/git.git
synced 2024-09-16 21:01:42 +02:00
Merge branch 'kn/ci-clang-format' into next
A CI job that use clang-format to check coding style issues in new code has been added. * kn/ci-clang-format: ci/style-check: add `RemoveBracesLLVM` in CI job check-whitespace: detect if no base_commit is provided ci: run style check on GitHub and GitLab clang-format: formalize some of the spacing rules clang-format: avoid spacing around bitfield colon clang-format: indent preprocessor directives after hash
This commit is contained in:
commit
3aca45d08a
@ -72,6 +72,10 @@ AlwaysBreakAfterReturnType: None
|
|||||||
BinPackArguments: true
|
BinPackArguments: true
|
||||||
BinPackParameters: true
|
BinPackParameters: true
|
||||||
|
|
||||||
|
# Add no space around the bit field
|
||||||
|
# unsigned bf:2;
|
||||||
|
BitFieldColonSpacing: None
|
||||||
|
|
||||||
# Attach braces to surrounding context except break before braces on function
|
# Attach braces to surrounding context except break before braces on function
|
||||||
# definitions.
|
# definitions.
|
||||||
# void foo()
|
# void foo()
|
||||||
@ -96,6 +100,12 @@ BreakStringLiterals: false
|
|||||||
# Switch statement body is always indented one level more than case labels.
|
# Switch statement body is always indented one level more than case labels.
|
||||||
IndentCaseLabels: false
|
IndentCaseLabels: false
|
||||||
|
|
||||||
|
# Indents directives before the hash.
|
||||||
|
# #if FOO
|
||||||
|
# # include <foo>
|
||||||
|
# #endif
|
||||||
|
IndentPPDirectives: AfterHash
|
||||||
|
|
||||||
# Don't indent a function definition or declaration if it is wrapped after the
|
# Don't indent a function definition or declaration if it is wrapped after the
|
||||||
# type
|
# type
|
||||||
IndentWrappedFunctionNames: false
|
IndentWrappedFunctionNames: false
|
||||||
@ -108,11 +118,18 @@ PointerAlignment: Right
|
|||||||
# x = (int32)y; not x = (int32) y;
|
# x = (int32)y; not x = (int32) y;
|
||||||
SpaceAfterCStyleCast: false
|
SpaceAfterCStyleCast: false
|
||||||
|
|
||||||
|
# No space is inserted after the logical not operator
|
||||||
|
SpaceAfterLogicalNot: false
|
||||||
|
|
||||||
# Insert spaces before and after assignment operators
|
# Insert spaces before and after assignment operators
|
||||||
# int a = 5; not int a=5;
|
# int a = 5; not int a=5;
|
||||||
# a += 42; a+=42;
|
# a += 42; a+=42;
|
||||||
SpaceBeforeAssignmentOperators: true
|
SpaceBeforeAssignmentOperators: true
|
||||||
|
|
||||||
|
# Spaces will be removed before case colon.
|
||||||
|
# case 1: break; not case 1 : break;
|
||||||
|
SpaceBeforeCaseColon: false
|
||||||
|
|
||||||
# Put a space before opening parentheses only after control statement keywords.
|
# Put a space before opening parentheses only after control statement keywords.
|
||||||
# void f() {
|
# void f() {
|
||||||
# if (true) {
|
# if (true) {
|
||||||
@ -124,6 +141,14 @@ SpaceBeforeParens: ControlStatements
|
|||||||
# Don't insert spaces inside empty '()'
|
# Don't insert spaces inside empty '()'
|
||||||
SpaceInEmptyParentheses: false
|
SpaceInEmptyParentheses: false
|
||||||
|
|
||||||
|
# No space before first '[' in arrays
|
||||||
|
# int a[5][5]; not int a [5][5];
|
||||||
|
SpaceBeforeSquareBrackets: false
|
||||||
|
|
||||||
|
# No space will be inserted into {}
|
||||||
|
# while (true) {} not while (true) { }
|
||||||
|
SpaceInEmptyBlock: false
|
||||||
|
|
||||||
# The number of spaces before trailing line comments (// - comments).
|
# The number of spaces before trailing line comments (// - comments).
|
||||||
# This does not affect trailing block comments (/* - comments).
|
# This does not affect trailing block comments (/* - comments).
|
||||||
SpacesBeforeTrailingComments: 1
|
SpacesBeforeTrailingComments: 1
|
||||||
|
34
.github/workflows/check-style.yml
vendored
Normal file
34
.github/workflows/check-style.yml
vendored
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
name: check-style
|
||||||
|
|
||||||
|
# Get the repository with all commits to ensure that we can analyze
|
||||||
|
# all of the commits contributed via the Pull Request.
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
types: [opened, synchronize]
|
||||||
|
|
||||||
|
# Avoid unnecessary builds. Unlike the main CI jobs, these are not
|
||||||
|
# ci-configurable (but could be).
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.ref }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
check-style:
|
||||||
|
env:
|
||||||
|
CC: clang
|
||||||
|
jobname: ClangFormat
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- run: ci/install-dependencies.sh
|
||||||
|
|
||||||
|
- name: git clang-format
|
||||||
|
continue-on-error: true
|
||||||
|
id: check_out
|
||||||
|
run: |
|
||||||
|
./ci/run-style-check.sh \
|
||||||
|
"${{github.event.pull_request.base.sha}}"
|
@ -118,8 +118,31 @@ check-whitespace:
|
|||||||
image: ubuntu:latest
|
image: ubuntu:latest
|
||||||
before_script:
|
before_script:
|
||||||
- ./ci/install-dependencies.sh
|
- ./ci/install-dependencies.sh
|
||||||
|
# Since $CI_MERGE_REQUEST_TARGET_BRANCH_SHA is only defined for merged
|
||||||
|
# pipelines, we fallback to $CI_MERGE_REQUEST_DIFF_BASE_SHA, which should
|
||||||
|
# be defined in all pipelines.
|
||||||
script:
|
script:
|
||||||
- ./ci/check-whitespace.sh "$CI_MERGE_REQUEST_TARGET_BRANCH_SHA"
|
- |
|
||||||
|
R=${CI_MERGE_REQUEST_TARGET_BRANCH_SHA-${CI_MERGE_REQUEST_DIFF_BASE_SHA:?}} || exit
|
||||||
|
./ci/check-whitespace.sh "$R"
|
||||||
|
rules:
|
||||||
|
- if: $CI_PIPELINE_SOURCE == 'merge_request_event'
|
||||||
|
|
||||||
|
check-style:
|
||||||
|
image: ubuntu:latest
|
||||||
|
allow_failure: true
|
||||||
|
variables:
|
||||||
|
CC: clang
|
||||||
|
jobname: ClangFormat
|
||||||
|
before_script:
|
||||||
|
- ./ci/install-dependencies.sh
|
||||||
|
# Since $CI_MERGE_REQUEST_TARGET_BRANCH_SHA is only defined for merged
|
||||||
|
# pipelines, we fallback to $CI_MERGE_REQUEST_DIFF_BASE_SHA, which should
|
||||||
|
# be defined in all pipelines.
|
||||||
|
script:
|
||||||
|
- |
|
||||||
|
R=${CI_MERGE_REQUEST_TARGET_BRANCH_SHA-${CI_MERGE_REQUEST_DIFF_BASE_SHA:?}} || exit
|
||||||
|
./ci/run-style-check.sh "$R"
|
||||||
rules:
|
rules:
|
||||||
- if: $CI_PIPELINE_SOURCE == 'merge_request_event'
|
- if: $CI_PIPELINE_SOURCE == 'merge_request_event'
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ baseCommit=$1
|
|||||||
outputFile=$2
|
outputFile=$2
|
||||||
url=$3
|
url=$3
|
||||||
|
|
||||||
if test "$#" -ne 1 && test "$#" -ne 3
|
if test "$#" -ne 1 && test "$#" -ne 3 || test -z "$1"
|
||||||
then
|
then
|
||||||
echo "USAGE: $0 <BASE_COMMIT> [<OUTPUT_FILE> <URL>]"
|
echo "USAGE: $0 <BASE_COMMIT> [<OUTPUT_FILE> <URL>]"
|
||||||
exit 1
|
exit 1
|
||||||
@ -21,6 +21,12 @@ commitText=
|
|||||||
commitTextmd=
|
commitTextmd=
|
||||||
goodParent=
|
goodParent=
|
||||||
|
|
||||||
|
if ! git rev-parse --quiet --verify "${baseCommit}"
|
||||||
|
then
|
||||||
|
echo "Invalid <BASE_COMMIT> '${baseCommit}'"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
while read dash sha etc
|
while read dash sha etc
|
||||||
do
|
do
|
||||||
case "${dash}" in
|
case "${dash}" in
|
||||||
@ -67,7 +73,7 @@ then
|
|||||||
goodParent=${baseCommit: 0:7}
|
goodParent=${baseCommit: 0:7}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "A whitespace issue was found in onen of more of the commits."
|
echo "A whitespace issue was found in one or more of the commits."
|
||||||
echo "Run the following command to resolve whitespace issues:"
|
echo "Run the following command to resolve whitespace issues:"
|
||||||
echo "git rebase --whitespace=fix ${goodParent}"
|
echo "git rebase --whitespace=fix ${goodParent}"
|
||||||
|
|
||||||
|
@ -87,6 +87,10 @@ macos-*)
|
|||||||
esac
|
esac
|
||||||
|
|
||||||
case "$jobname" in
|
case "$jobname" in
|
||||||
|
ClangFormat)
|
||||||
|
sudo apt-get -q update
|
||||||
|
sudo apt-get -q -y install clang-format
|
||||||
|
;;
|
||||||
StaticAnalysis)
|
StaticAnalysis)
|
||||||
sudo apt-get -q update
|
sudo apt-get -q update
|
||||||
sudo apt-get -q -y install coccinelle libcurl4-openssl-dev libssl-dev \
|
sudo apt-get -q -y install coccinelle libcurl4-openssl-dev libssl-dev \
|
||||||
|
25
ci/run-style-check.sh
Executable file
25
ci/run-style-check.sh
Executable file
@ -0,0 +1,25 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# Perform style check
|
||||||
|
#
|
||||||
|
|
||||||
|
baseCommit=$1
|
||||||
|
|
||||||
|
# Remove optional braces of control statements (if, else, for, and while)
|
||||||
|
# according to the LLVM coding style. This avoids braces on simple
|
||||||
|
# single-statement bodies of statements but keeps braces if one side of
|
||||||
|
# if/else if/.../else cascade has multi-statement body.
|
||||||
|
#
|
||||||
|
# As this rule comes with a warning [1], we want to experiment with it
|
||||||
|
# before adding it in-tree. since the CI job for the style check is allowed
|
||||||
|
# to fail, appending the rule here allows us to validate its efficacy.
|
||||||
|
# While also ensuring that end-users are not affected directly.
|
||||||
|
#
|
||||||
|
# [1]: https://clang.llvm.org/docs/ClangFormatStyleOptions.html#removebracesllvm
|
||||||
|
{
|
||||||
|
cat .clang-format
|
||||||
|
echo "RemoveBracesLLVM: true"
|
||||||
|
} >/tmp/clang-format-rules
|
||||||
|
|
||||||
|
git clang-format --style=file:/tmp/clang-format-rules \
|
||||||
|
--diff --extensions c,h "$baseCommit"
|
Loading…
Reference in New Issue
Block a user