Add presubmit hook for hidden API lists.

Check that they're sorted as expected and contain no duplicates.
The sort order now uses:
$ LC_COLLATE=C sort -f

So that non-alphanumeric characters are not ignored, giving a more
intuitive sort order. the '-f' means ignore case.

Also sort the existing lists accordingly.

Test: repo upload
Bug: 64382372
Merged-In: I52b884da33a9a46455df6747a215683d9d3c3218
Change-Id: Icc124fd8ceb3f001a9c11bbf40e0a111910c6b39
(cherry picked from commit e5dc64d428)
This commit is contained in:
David Brazdil
2018-05-05 12:07:38 +01:00
parent 40f67c52bb
commit 2200a1b83b
3 changed files with 29 additions and 0 deletions

View File

@@ -8,3 +8,4 @@ checkstyle_hook = ${REPO_ROOT}/prebuilts/checkstyle/checkstyle.py --sha ${PREUPL
services/usb/
telephony/
hidden_api_txt_hook = ${REPO_ROOT}/frameworks/base/tools/hiddenapi/checksorted_sha.sh ${PREUPLOAD_COMMIT} ${REPO_ROOT}

View File

@@ -0,0 +1,10 @@
#!/bin/bash
set -e
LOCAL_DIR="$( dirname ${BASH_SOURCE} )"
git show --name-only --pretty=format: $1 | grep "config/hiddenapi-.*txt" | while read file; do
diff <(git show $1:$file) <(git show $1:$file | $LOCAL_DIR/sort_api.sh ) || {
echo -e "\e[1m\e[31m$file $1 is not sorted or contains duplicates. To sort it correctly:\e[0m"
echo -e "\e[33m${LOCAL_DIR}/sort_api.sh $2/frameworks/base/$file\e[0m"
exit 1
}
done

18
tools/hiddenapi/sort_api.sh Executable file
View File

@@ -0,0 +1,18 @@
#!/bin/bash
set -e
if [ -z "$1" ]; then
source_list=/dev/stdin
dest_list=/dev/stdout
else
source_list="$1"
dest_list="$1"
fi
# Load the file
readarray A < "$source_list"
# Sort
IFS=$'\n'
A=( $(LC_COLLATE=C sort -f <<< "${A[*]}") )
A=( $(uniq <<< "${A[*]}") )
unset IFS
# Dump array back into the file
printf '%s\n' "${A[@]}" > "$dest_list"