#!/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
|
}
|
|
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 "$@"
|