blob: 58d1f4065bb5860d8eb11deda5ebe1f29aaef7fc [file] [log] [blame]
#!/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 "$@"