| #!/bin/bash | |
| # Copyright 2016 The Android Open Source Project | |
| # | |
| # Licensed under the Apache License, Version 2.0 (the "License"); | |
| # you may not use this file except in compliance with the License. | |
| # You may obtain a copy of the License at | |
| # | |
| # http://www.apache.org/licenses/LICENSE-2.0 | |
| # | |
| # Unless required by applicable law or agreed to in writing, software | |
| # distributed under the License is distributed on an "AS IS" BASIS, | |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| # See the License for the specific language governing permissions and | |
| # limitations under the License. | |
| set -eu | |
| GIT_URL="git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git" | |
| CGIT_URL="https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/plain" | |
| usage() { | |
| cat <<EOF | |
| Usage: $0 [linux version] | |
| Helper script to quickly update the bundled checkpatch.pl script. | |
| EOF | |
| if [[ $# -ne 0 ]]; then | |
| echo "ERROR: $*" 2>&1 | |
| exit 1 | |
| else | |
| exit 0 | |
| fi | |
| } | |
| # Return the latest kernel release version. | |
| get_latest_version() { | |
| local output | |
| # Parse the git tag output to find the latest version. | |
| # Example output: | |
| # 0fc80a1fc05dd08762fda6e8efafbb54e88608f4 refs/tags/v4.5 | |
| # b562e44f507e863c6792946e4e1b1449fbbac85d refs/tags/v4.5^{} | |
| # b13adfcdf288a00a7e58556f326ecb56fbb53b92 refs/tags/v4.5-rc1 | |
| output=$(git ls-remote --tags "${GIT_URL}") | |
| # Filter out rc/signed tags. | |
| output=$(echo "${output}" | grep -v -e '-rc' -e '\^{}') | |
| # The output might not be sorted based on versions, so do so ourselves and | |
| # grab the last entry. | |
| output=$(echo "${output}" | cut -d/ -f3 | sort -V | tail -1) | |
| # Chop the leading "v" bit. | |
| echo "${output#v}" | |
| } | |
| # Download checkpatch.pl & data for the specified kernel version. | |
| download() { | |
| local version="$1" | |
| local url | |
| # First the main checkpatch.pl file. | |
| url="${CGIT_URL}/scripts/checkpatch.pl?h=v${version}" | |
| wget "${url}" -O checkpatch.pl | |
| chmod a+rx checkpatch.pl | |
| # Then any data it uses. | |
| url="${CGIT_URL}/scripts/spelling.txt?h=v${version}" | |
| wget "${url}" -O spelling.txt | |
| # Then any data it uses. | |
| url="${CGIT_URL}/scripts/const_structs.checkpatch?h=v${version}" | |
| wget "${url}" -O const_structs.checkpatch | |
| } | |
| main() { | |
| local version='' | |
| while [[ $# -gt 0 ]]; do | |
| case $1 in | |
| -h|--help) usage;; | |
| -x) set -x;; | |
| -*) usage "Unknown option: $1";; | |
| *) version=${1#v};; | |
| esac | |
| shift | |
| done | |
| if [[ -z "${version}" ]]; then | |
| printf 'Detecting latest kernel version ... ' | |
| version=$(get_latest_version) | |
| echo "${version}" | |
| fi | |
| download "${version}" | |
| } | |
| main "$@" |