diskimage-builder/bin/dib-lint
Ben Nemec 825b1964bb Allow excluding tests from certain files
There are certain scripts (such as the ramdisk init script) that
need to ignore linting rules for one reason or another.  This adds
support for exclusions via a comment in the file like:

"# dib-lint: disable=executable sete"

There should be no ", but I need those to prevent git from treating
that as a comment.  This syntax is similar to the pylint exclusion
mechanism.

Exclusion support is added to the executable check, but not
the alphabetical ordering one because I can't imagine a reason we
would need to disable that, and I don't know that comments are
supported in those files anyway.

Change-Id: I9ecfb47269841dc75a005855455ac26ad2cbc642
2014-05-02 17:18:54 -05:00

66 lines
No EOL
2 KiB
Bash
Executable file

#!/bin/bash
# Copyright 2014 Red Hat, Inc.
#
# 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.
# This script checks all files in the "elements" directory for some
# common mistakes and exits with a non-zero status if it finds any.
parse_exclusions() {
# Exclusions are currently only read on a per-file basis
local filename=$1
local disable_pattern="# dib-lint: disable="
local exclusions=$(grep "^$disable_pattern.*$" $filename | sed "s/$disable_pattern//g")
echo $exclusions
}
excluded() {
local test_name=$1
for e in $exclusions; do
if [ "$e" = "$test_name" ]; then
return 0
fi
done
return 1
}
rc=0
TMPDIR=$(mktemp -d)
trap "rm -rf $TMPDIR" EXIT
for i in $(find elements -type f); do
exclusions=("$(parse_exclusions $i)")
# Check that files starting with a shebang are +x
if ! excluded executable; then
firstline=$(head -n 1 "$i")
if [ ! -x "$i" ] && [ "${firstline:0:2}" = "#!" ]; then
echo "ERROR: $i is not executable"
rc=1
fi
fi
# Check alphabetical ordering of element-deps
if [ $(basename $i) = "element-deps" ]; then
UNSORTED=${TMPDIR}/element-deps.unsorted
SORTED=${TMPDIR}/element-deps.sorted
grep -v '^#' $i > ${UNSORTED}
sort ${UNSORTED} > ${SORTED}
diff -c ${UNSORTED} ${SORTED}
if [ $? -ne 0 ]; then
echo "ERROR: $i is not sorted alphabetically"
rc=1
fi
fi
done
exit $rc