File: pre-commit

package info (click to toggle)
sdkmanager 0.6.11-2
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 1,044 kB
  • sloc: python: 1,387; sh: 92; makefile: 9
file content (104 lines) | stat: -rwxr-xr-x 2,404 bytes parent folder | download | duplicates (2)
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
#!/bin/bash
#
# Simple pre-commit hook to check that there are no errors in the sdkmanager
# source files.

# Redirect output to stderr.
exec 1>&2

files=`git diff-index --cached HEAD 2>&1 | sed 's/^:.*     //' | uniq | cut -b100-500`
if [ -z "$files" ]; then
    PY_FILES="*.py"
    SH_FILES="hooks/pre-commit"
else
    # if actually committing right now, then only run on the files
    # that are going to be committed at this moment
    PY_FILES=
    SH_FILES=
    BASH_FILES=

    for f in $files; do
        test -e $f || continue
        case $f in
            *.py)
                PY_FILES+=" $f"
                ;;
            *)
                if head -1 $f | grep '^#!/bin/sh' > /dev/null 2>&1; then
                    SH_FILES+=" $f"
                elif head -1 $f | grep '^#!/bin/bash' > /dev/null 2>&1; then
                    BASH_FILES+=" $f"
                elif head -1 $f | grep '^#!.*python' > /dev/null 2>&1; then
                    PY_FILES+=" $f"
                fi
                ;;
        esac
    done
fi

# We ignore the following PEP8 warnings
# * E501: line too long (82 > 79 characters)
#   - Recommended for readability but not enforced
#   - Some lines are awkward to wrap around a char limit
# * W503: line break before binary operator
#   - Quite pedantic

PEP8_IGNORE="E501,W503"

err() {
	echo >&2 ERROR: "$@"
	exit 1
}

warn() {
	echo >&2 WARNING: "$@"
}

cmd_exists() {
	command -v $1 1>/dev/null
}

find_command() {
	for name in $@; do
		for suff in "3" "-3" "-python3" ""; do
			cmd=${name}${suff}
			if cmd_exists $cmd; then
				echo $cmd
				return 0
			fi
		done
	done
	warn "$1 is not installed, using dummy placeholder!"
	echo :
}

DASH=$(find_command dash)
PYFLAKES=$(find_command pyflakes)
PEP8=$(find_command pycodestyle pep8)
RUBY=$(find_command ruby)

if [ "$PY_FILES" != " " ]; then
    if ! $PYFLAKES $PY_FILES; then
	err "pyflakes tests failed!"
    fi
    # The tests use a little hack in order to cleanly import the sdkmanager
    # package locally like a regular package.  pep8 doesn't see that, so this
    # makes pep8 skip E402 on the test files that need that hack.
    if ! $PEP8 --ignore=$PEP8_IGNORE,E402 $PY_FILES; then
	err "pep8 tests failed!"
    fi
fi

for f in $SH_FILES; do
	if ! $DASH -n $f; then
		err "dash tests failed!"
	fi
done

for f in $BASH_FILES; do
	if ! bash -n $f; then
		err "bash tests failed!"
	fi
done

exit 0