Statistics
| Branch: | Tag: | Revision:

root / devel / check_copyright @ 13d26b66

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