check-whitespace: detect if no base_commit is provided

The 'check-whitespace' CI script exits gracefully if no base commit is provided or if an invalid revision is provided. This is not good because if a particular CI provides an incorrect base_commit, it would fail successfully. This is exactly the case with the GitLab CI. The CI is using the "$CI_MERGE_REQUEST_TARGET_BRANCH_SHA" variable to get the base commit SHA, but variable is only defined for _merged_ pipelines. So it is empty for regular pipelines [1]. This should've failed the check-whitespace job. Let's fallback to 'CI_MERGE_REQUEST_DIFF_BASE_SHA' if "CI_MERGE_REQUEST_TARGET_BRANCH_SHA" isn't available in GitLab CI, similar to the previous commit. Let's also add a check for incorrect base_commit in the 'check-whitespace.sh' script. While here, fix a small typo too. [1]: https://docs.gitlab.com/ee/ci/variables/predefined_variables.html#predefined-variables-for-merge-request-pipelines Helped-by: Junio C Hamano <gitster@pobox.com> Signed-off-by: Karthik Nayak <karthik.188@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Karthik Nayak committed Jul 23, 2024 at 10:21 UTC 30c4f7e3504f04496c0475f5c0428b2ee261dce2
2 files changed +14 -3
.gitlab-ci.yml
+6 -1
@@ -118,8 +118,13 @@ check-whitespace:
118 image: ubuntu:latest
119 before_script:
120 - ./ci/install-dependencies.sh
121 + # Since $CI_MERGE_REQUEST_TARGET_BRANCH_SHA is only defined for merged
122 + # pipelines, we fallback to $CI_MERGE_REQUEST_DIFF_BASE_SHA, which should
123 + # be defined in all pipelines.
124 script:
122 - - ./ci/check-whitespace.sh "$CI_MERGE_REQUEST_TARGET_BRANCH_SHA"
125 + - |
126 + R=${CI_MERGE_REQUEST_TARGET_BRANCH_SHA-${CI_MERGE_REQUEST_DIFF_BASE_SHA:?}} || exit
127 + ./ci/check-whitespace.sh "$R"
128 rules:
129 - if: $CI_PIPELINE_SOURCE == 'merge_request_event'
130
ci/check-whitespace.sh
+8 -2
@@ -9,7 +9,7 @@ baseCommit=$1
9 outputFile=$2
10 url=$3
11
12 -if test "$#" -ne 1 && test "$#" -ne 3
12 +if test "$#" -ne 1 && test "$#" -ne 3 || test -z "$1"
13 then
14 echo "USAGE: $0 <BASE_COMMIT> [<OUTPUT_FILE> <URL>]"
15 exit 1
@@ -21,6 +21,12 @@ commitText=
21 commitTextmd=
22 goodParent=
23
24 +if ! git rev-parse --quiet --verify "${baseCommit}"
25 +then
26 + echo "Invalid <BASE_COMMIT> '${baseCommit}'"
27 + exit 1
28 +fi
29 +
30 while read dash sha etc
31 do
32 case "${dash}" in
@@ -67,7 +73,7 @@ then
73 goodParent=${baseCommit: 0:7}
74 fi
75
70 - echo "A whitespace issue was found in onen of more of the commits."
76 + echo "A whitespace issue was found in one or more of the commits."
77 echo "Run the following command to resolve whitespace issues:"
78 echo "git rebase --whitespace=fix ${goodParent}"
79