1#!/bin/sh
2#
3
4if git rev-parse --verify HEAD >/dev/null 2>&1
5then
6 against=HEAD
7else
8 # Initial commit: diff against an empty tree object
9 against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
10fi
11
12# disallow ALOGW and ALOGE
13if git diff --cached | grep "^\(+\| +\)" | grep -w 'ALOG[WE]\(_IF\)\?' > /dev/null; then
14  cat <<\EOF
15ERROR: Attempt to add ALOGW or ALOGE. These should be used only if something
16       is truly catastrophic to the running application. Use ALOGI for
17       important errors, ALOGD for mundane errors, and ALOGV for unimportant
18       logs (don't use ALOGV for errors so they can be debugged).
19
20If you are confident that the following uses are justified, commit this change with
21
22  git commit --no-verify
23
24EOF
25  git diff --cached --diff-filter AM --color -G 'ALOG[WE](_IF)?' -- | awk '
26  BEGIN { found=0 }
27  /^\033\[[0-9]+m(@@|\+\+\+|\-\-\-)/ {
28    if (found) { print substr(chunk, 2); found=0; chunk="" }
29    if (match($1, "[-+]")) { print }
30    else { chunk="\n" $0 }
31    next
32  }
33  /^\033\[[0-9]+m ?\+/ {
34    if (match($0, "\\<(ALOG[WE](_IF)?)\\>")) {
35      found=1;
36      chunk=chunk "\n" gensub("\\<(ALOG[WE](_IF)?)\\>", "\033[7m\\1\033[27m", "g")
37    } else {
38      chunk=chunk "\n" $0
39    }
40    next
41  }
42  {
43    chunk=chunk "\n" $0
44  }
45  END { if (found) { print substr(chunk, 2) } }
46'
47  exit 1
48fi
49
50# If there are whitespace errors, print the offending file names and fail.
51exec git diff-index --check --cached $against --
52