summaryrefslogtreecommitdiffstats
path: root/src/build/tools/pre-receive
blob: 60b07d4ed3d7a3a0832f4677c411eabe3556c739 (plain)
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;
OpenPOWER on IntegriCloud