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
|
#!/usr/bin/perl
# IBM_PROLOG_BEGIN_TAG
# This is an automatically generated prolog.
#
# $Source: src/build/tools/pre-receive $
#
# IBM CONFIDENTIAL
#
# COPYRIGHT International Business Machines Corp. 2011
#
# p1
#
# Object Code Only (OCO) source materials
# Licensed Internal Code Source Materials
# IBM HostBoot Licensed Internal Code
#
# The source code for this program is not published or other-
# wise divested of its trade secrets, irrespective of what has
# been deposited with the U.S. Copyright Office.
#
# Origin: 30
#
# IBM_PROLOG_END
#
# From "git help githooks" :
# "This hook executes once for the receive operation. It takes no arguments,
# but for each ref to be updated it receives on standard input a line of
# the format:
#
# <old-value> SP <new-value> SP <ref-name> LF
#
# where <old-value> is the old object name stored in the ref,
# <new-value> is the new object name to be stored in the ref,
# and <ref-name> is the full name of the ref.
# When creating a new ref, <old-value> is 40 0."
#
$COPYRIGHT_SCRIPT=".git/hooks/addCopyright.pl";
print "Processing pre-receive script\n";
while (<STDIN>)
{
my $refsLine = $_;
if ($refsLine =~ /([0-9a-f]*) ([0-9a-f]*) (.*)/)
{
my ($oldRef, $newRef, $refName) = ($1, $2, $3);
print "$oldRef, $newRef, $refName\n";
my @diffTreeList = split('\n', `git diff-tree -r --diff-filter=AM $newRef $oldRef`);
foreach my $diffTreeLine (@diffTreeList)
{
#print "$diffTreeLine\n";
if ($diffTreeLine =~ m/^:\d*\s*\d*\s*(\S*)\s*(\S*)\s*(\S*)\s*(\S*)/)
{
my ($diffNewRef, $diffOldRef, $type, $name) = ($1, $2, $3, $4);
my $namePart = $name;
if ($name =~ m/\/([^\/]*)$/)
{
$namePart = $1;
}
if ($diffNewRef != 0)
{
my $tmpName = "/tmp/git_$<_$diffNewRef"."_$namePart";
system("git show $diffNewRef > $tmpName");
if ($? != 0)
{
print "Unable to git show $diffNewRef on file $name type $type\n";
exit 1;
}
# system("/gsa/rchgsa/projects/p/powerhal/tools/addCopyright.pl validate $tmpName");
system( "$COPYRIGHT_SCRIPT validate $tmpname" );
if ($? != 0)
{
print "File $name does not have a correct prolog\n";
system("rm -f $tmpName");
exit 1;
}
system("rm -f $tmpName");
}
}
}
}
}
exit 0;
|