root / devel / check_copyright @ 5349519d
History | View | Annotate | Download (2.5 kB)
1 | b13fa4c4 | Jose A. Lopes | #!/bin/bash |
---|---|---|---|
2 | b13fa4c4 | Jose A. Lopes | |
3 | b13fa4c4 | Jose A. Lopes | # Copyright (C) 2014 Google Inc. |
4 | b13fa4c4 | Jose A. Lopes | # |
5 | b13fa4c4 | Jose A. Lopes | # This program is free software; you can redistribute it and/or modify |
6 | b13fa4c4 | Jose A. Lopes | # it under the terms of the GNU General Public License as published by |
7 | b13fa4c4 | Jose A. Lopes | # the Free Software Foundation; either version 2 of the License, or |
8 | b13fa4c4 | Jose A. Lopes | # (at your option) any later version. |
9 | b13fa4c4 | Jose A. Lopes | # |
10 | b13fa4c4 | Jose A. Lopes | # This program is distributed in the hope that it will be useful, but |
11 | b13fa4c4 | Jose A. Lopes | # WITHOUT ANY WARRANTY; without even the implied warranty of |
12 | b13fa4c4 | Jose A. Lopes | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
13 | b13fa4c4 | Jose A. Lopes | # General Public License for more details. |
14 | b13fa4c4 | Jose A. Lopes | # |
15 | b13fa4c4 | Jose A. Lopes | # You should have received a copy of the GNU General Public License |
16 | b13fa4c4 | Jose A. Lopes | # along with this program; if not, write to the Free Software |
17 | b13fa4c4 | Jose A. Lopes | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA |
18 | b13fa4c4 | Jose A. Lopes | # 02110-1301, USA. |
19 | b13fa4c4 | Jose A. Lopes | |
20 | b13fa4c4 | Jose A. Lopes | # Script to check whether the local dirty commits are changing files |
21 | b13fa4c4 | Jose A. Lopes | # which do not have an updated copyright. |
22 | b13fa4c4 | Jose A. Lopes | # |
23 | b13fa4c4 | Jose A. Lopes | # The script will determine your current remote branch and local |
24 | b13fa4c4 | Jose A. Lopes | # branch, from which it will extract the commits to analyze. |
25 | b13fa4c4 | Jose A. Lopes | # Afterwards, for each commit, it will see which files are being |
26 | b13fa4c4 | Jose A. Lopes | # modified and, for each file, it will check the copyright. |
27 | b13fa4c4 | Jose A. Lopes | |
28 | b13fa4c4 | Jose A. Lopes | function join { |
29 | b13fa4c4 | Jose A. Lopes | local IFS="$1" |
30 | b13fa4c4 | Jose A. Lopes | shift |
31 | b13fa4c4 | Jose A. Lopes | echo "$*" |
32 | b13fa4c4 | Jose A. Lopes | } |
33 | b13fa4c4 | Jose A. Lopes | |
34 | b13fa4c4 | Jose A. Lopes | # Determine the tracking branch for the current branch |
35 | 28de1c3c | Jose A. Lopes | readonly REMOTE=$(git branch -vv | grep -e "^\*" | sed -e "s/ \+/ /g" | awk '{ print $4 }' | grep "\[" | tr -d ":[]") |
36 | b13fa4c4 | Jose A. Lopes | |
37 | b13fa4c4 | Jose A. Lopes | if [ -z "$REMOTE" ] |
38 | b13fa4c4 | Jose A. Lopes | then |
39 | b13fa4c4 | Jose A. Lopes | echo check_copyright: failed to get remote branch |
40 | b13fa4c4 | Jose A. Lopes | exit 1 |
41 | b13fa4c4 | Jose A. Lopes | fi |
42 | b13fa4c4 | Jose A. Lopes | |
43 | b13fa4c4 | Jose A. Lopes | # Determine which commits have no been pushed (i.e, diff between the |
44 | b13fa4c4 | Jose A. Lopes | # remote branch and the current branch) |
45 | b13fa4c4 | Jose A. Lopes | COMMITS=$(git log --pretty=format:'%h' ${REMOTE}..HEAD) |
46 | b13fa4c4 | Jose A. Lopes | |
47 | b13fa4c4 | Jose A. Lopes | if [ -z "$COMMITS" ] |
48 | b13fa4c4 | Jose A. Lopes | then |
49 | b13fa4c4 | Jose A. Lopes | echo check_copyright: there are no commits to check |
50 | b13fa4c4 | Jose A. Lopes | exit 0 |
51 | b13fa4c4 | Jose A. Lopes | fi |
52 | b13fa4c4 | Jose A. Lopes | |
53 | b13fa4c4 | Jose A. Lopes | # for each commit, check its files |
54 | b13fa4c4 | Jose A. Lopes | for commit in $(echo $COMMITS | tac -s " ") |
55 | b13fa4c4 | Jose A. Lopes | do |
56 | b13fa4c4 | Jose A. Lopes | FILES=$(git diff-tree --no-commit-id --name-only -r $commit) |
57 | b13fa4c4 | Jose A. Lopes | |
58 | b13fa4c4 | Jose A. Lopes | if [ -z "$FILES" ] |
59 | b13fa4c4 | Jose A. Lopes | then |
60 | b13fa4c4 | Jose A. Lopes | echo check_copyright: commit \"$commit\" has no files to check |
61 | b13fa4c4 | Jose A. Lopes | else |
62 | b13fa4c4 | Jose A. Lopes | # for each file, check if it is in the 'lib' or 'src' dirs |
63 | b13fa4c4 | Jose A. Lopes | # and, if so, check the copyright |
64 | b13fa4c4 | Jose A. Lopes | for file in $FILES |
65 | b13fa4c4 | Jose A. Lopes | do |
66 | b13fa4c4 | Jose A. Lopes | DIR=$(echo $file | cut -d "/" -f 1) |
67 | b13fa4c4 | Jose A. Lopes | |
68 | b13fa4c4 | Jose A. Lopes | if [ "$DIR" = lib -o "$DIR" = src ] |
69 | b13fa4c4 | Jose A. Lopes | then |
70 | b13fa4c4 | Jose A. Lopes | COPYRIGHT=$(grep "Copyright (C)" $file) |
71 | b13fa4c4 | Jose A. Lopes | YEAR=$(date +%G) |
72 | b13fa4c4 | Jose A. Lopes | |
73 | b13fa4c4 | Jose A. Lopes | if [ -z "$COPYRIGHT" ] |
74 | b13fa4c4 | Jose A. Lopes | then |
75 | b13fa4c4 | Jose A. Lopes | echo check_copyright: commit \"$commit\" misses \ |
76 | b13fa4c4 | Jose A. Lopes | copyright for \"$file\" |
77 | b13fa4c4 | Jose A. Lopes | elif ! echo $COPYRIGHT | grep -o $YEAR > /dev/null |
78 | b13fa4c4 | Jose A. Lopes | then |
79 | b13fa4c4 | Jose A. Lopes | echo check_copyright: commit \"$commit\" misses \ |
80 | b13fa4c4 | Jose A. Lopes | \"$YEAR\" copyright for \"$file\" |
81 | b13fa4c4 | Jose A. Lopes | fi |
82 | b13fa4c4 | Jose A. Lopes | fi |
83 | b13fa4c4 | Jose A. Lopes | done |
84 | b13fa4c4 | Jose A. Lopes | fi |
85 | b13fa4c4 | Jose A. Lopes | done |