Git fork

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>

authored by

Karthik Nayak and committed by
Junio C Hamano
30c4f7e3 bce7e52d

+14 -3
+6 -1
.gitlab-ci.yml
··· 118 118 image: ubuntu:latest 119 119 before_script: 120 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. 121 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" 123 128 rules: 124 129 - if: $CI_PIPELINE_SOURCE == 'merge_request_event' 125 130
+8 -2
ci/check-whitespace.sh
··· 9 9 outputFile=$2 10 10 url=$3 11 11 12 - if test "$#" -ne 1 && test "$#" -ne 3 12 + if test "$#" -ne 1 && test "$#" -ne 3 || test -z "$1" 13 13 then 14 14 echo "USAGE: $0 <BASE_COMMIT> [<OUTPUT_FILE> <URL>]" 15 15 exit 1 ··· 20 20 commitText= 21 21 commitTextmd= 22 22 goodParent= 23 + 24 + if ! git rev-parse --quiet --verify "${baseCommit}" 25 + then 26 + echo "Invalid <BASE_COMMIT> '${baseCommit}'" 27 + exit 1 28 + fi 23 29 24 30 while read dash sha etc 25 31 do ··· 67 73 goodParent=${baseCommit: 0:7} 68 74 fi 69 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." 71 77 echo "Run the following command to resolve whitespace issues:" 72 78 echo "git rebase --whitespace=fix ${goodParent}" 73 79