This file is indexed.

/usr/bin/dib-lint is in python-diskimage-builder 1.0.0-1.

This file is owned by root:root, with mode 0o755.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
#!/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.

set -eu
set -o pipefail

parse_exclusions() {
    # Per-file exclusions
    # Example: # dib-lint: disable=sete setpipefail
    local filename=$1
    local disable_pattern="# dib-lint: disable="
    local exclusions=$(grep "^$disable_pattern.*$" $filename | sed "s/$disable_pattern//g")

    # Global exclusions read from tox.ini
    # Example section in tox.ini:
    #   [dib-lint]
    #   ignore = sete setu
    section="dib-lint"
    option="ignore"
    global_exclusions=$(python -c \
        "import ConfigParser; \
        conf=ConfigParser.ConfigParser(); \
        conf.read('tox.ini'); \
        print conf.get('$section', '$option') if conf.has_option('$section', '$option') else ''"
    )
    echo $exclusions $global_exclusions
}

excluded() {
    local test_name=$1
    for e in $exclusions; do
        if [ "$e" = "$test_name" ]; then
            return 0
        fi
    done
    return 1
}

error() {
    echo "ERROR: $1"
    rc=1
}

rc=0
TMPDIR=$(mktemp -d /tmp/tmp.XXXXXXXXXX)
trap "rm -rf $TMPDIR" EXIT
for i in $(find elements -type f \
                -not -name \*~ \
                -not -name \*.rst \
                -not -name \*.py \
                -not -name \*.pyc); do
    exclusions=("$(parse_exclusions $i)")
    # Check that files starting with a shebang are +x
    firstline=$(head -n 1 "$i")
    if [ "${firstline:0:2}" = "#!" ]; then
        if [ ! -x "$i" ] && ! excluded executable; then
            error "$i is not executable"
        fi

        # Ensure 4 spaces indent are used

        if [ "$(file -b --mime-type $i)" = "text/x-python" ]; then
            flake8 $i
        else
            if ! excluded indent ; then
                if grep -q "^\( \{4\}\)* \{1,3\}[^ ]" ${i}; then
                    error "$i should use 4 spaces indent"
                fi
            fi
        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}
        if [ -n "$(diff -c ${UNSORTED} ${SORTED})" ]; then
            error "$i is not sorted alphabetically"
        fi
    fi

    # Check that all scripts are set -eu -o pipefail and look for
    # DIB_DEBUG_TRACE
    # NOTE(bnemec): This doesn't verify that the set call occurs high
    # enough in the file to be useful, but hopefully nobody will be
    # sticking set calls at the end of their file to trick us.  And if
    # they are, that's easy enough to catch in reviews.
    # Also, this is only going to check bash scripts - we've decided to
    # explicitly require bash for any scripts that don't have a specific
    # need to run under other shells, and any exceptions to that rule
    # may not want these checks either.
    if [ -n "$(echo $firstline | grep '#!/bin/bash')" ]; then
        if ! excluded sete; then
            if [ -z "$(grep "^set -[^ ]*e" $i)" ]; then
                error "$i is not set -e"
            fi
        fi
        if ! excluded setu; then
            if [ -z "$(grep "^set -[^ ]*u" $i)" ]; then
                error "$i is not set -u"
            fi
        fi
        if ! excluded setpipefail; then
            if [ -z "$(grep "^set -o pipefail" $i)" ]; then
                error "$i is not set -o pipefail"
            fi
        fi
        if ! excluded dibdebugtrace; then
            if [ -z "$(grep "DIB_DEBUG_TRACE" $i)" ]; then
                error "$i does not follow DIB_DEBUG_TRACE"
            fi
        fi
    fi
done

for i in $(find elements -type f -and -name '*.rst' -or -type f -executable); do
    # Check for tab indentation
    if ! excluded tabindent; then
        if grep -q $'^ *\t' ${i}; then
            error "$i contains tab characters"
        fi
    fi

    if ! excluded newline; then
        if [ "$(tail -c 1 $i)" != "" ]; then
            error "No newline at end of file: $i"
        fi
    fi
done

md_docs=$(find elements -name '*.md')
if [ -n "$md_docs" ]; then
    error ".md docs found: $md_docs"
fi
exit $rc