Subversion Repositories DevTools

Rev

Rev 5710 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
392 dpurdie 1
#! perl
2
########################################################################
5710 dpurdie 3
# Copyright (c) VIX TECHNOLOGY (AUST) LTD
392 dpurdie 4
#
5
# Module name   : jats.sh
6
# Module type   : Makefile system
7
# Compiler(s)   : n/a
8
# Environment(s): jats
9
#
10
# Description   : Determine all packages with Ignore Warnings
11
#
12
# Usage:
13
#
14
# Version   Who      Date        Description
15
#
16
#......................................................................#
17
 
18
require 5.006_001;
19
use strict;
20
use warnings;
21
use JatsError;
22
use JatsSystem;
23
use Getopt::Long;
24
use Pod::Usage;                             # required for help support
25
use JatsRmApi;
26
 
27
use DBI;
28
 
29
my $VERSION = "1.2.3";                      # Update this
30
my $opt_verbose = 1;
31
my $opt_help = 0;
32
my $opt_manual;
33
my $opt_rtag_id = 6362;                     #  Beijing R4
34
my $RM_DB;
35
 
36
#
37
#   Package information
38
#
39
my %Package;
40
my %Dnr;
41
my @StrayPackages;
42
 
43
#-------------------------------------------------------------------------------
44
# Function        : Main Entry
45
#
46
# Description     :
47
#
48
# Inputs          :
49
#
50
# Returns         :
51
#
52
my $result = GetOptions (
53
                "help+"         => \$opt_help,          # flag, multiple use allowed
54
                "manual"        => \$opt_manual,        # flag
55
                "verbose+"      => \$opt_verbose,       # flag
56
                "rtag_id=s"     => \$opt_rtag_id,       # string
57
                );
58
 
59
#
60
#   Process help and manual options
61
#
62
pod2usage(-verbose => 0, -message => "Version: $VERSION")  if ($opt_help == 1  || ! $result);
63
pod2usage(-verbose => 1)  if ($opt_help == 2 );
64
pod2usage(-verbose => 2)  if ($opt_manual || ($opt_help > 2));
65
 
66
ErrorConfig( 'name'    =>'PLAY20' );
67
 
68
Error ("No RTAGID specified") unless ( $opt_rtag_id );
69
 
70
getNoWarnbyRTAGID ($opt_rtag_id);
71
getPkgDetailsByRTAG_ID($opt_rtag_id);
72
Calc_NoRipples();
73
 
74
##BuildOrder();
75
#DebugDumpData ("Package", \%Package );
76
 
77
exit;
78
 
79
 
80
sub  getNoWarnbyRTAGID
81
{
82
    my ($RTAG_ID) = @_;
83
    my $foundDetails = 0;
84
    my (@row);
85
 
86
    # if we are not or cannot connect then return 0 as we have not found anything
87
    connectRM( \$RM_DB);
88
 
89
    # First get details from pv_id
90
 
91
#    my $m_sqlstr = "SELECT iw.PV_ID, pkg.PKG_NAME, pv.PKG_VERSION, rc.RTAG_ID" .
92
#                    " FROM IGNORE_WARNINGS iw, PACKAGE_VERSIONS pv, PACKAGES pkg, RELEASE_CONTENT rc" .
93
#                    " WHERE iw.PV_ID = pv.PV_ID AND pv.PKG_ID = pkg.PKG_ID AND rc.PV_ID = pv.PV_ID AND iw.RTAG_ID = rc.RTAG_ID AND iw.RTAG_ID = $RTAG_ID";
94
 
95
    my $m_sqlstr = "SELECT iw.PV_ID, pkg.PKG_NAME, pv.PKG_VERSION, rc.RTAG_ID" .
96
                    " FROM IGNORE_WARNINGS iw, PACKAGE_VERSIONS pv, PACKAGES pkg, RELEASE_CONTENT rc" .
97
                    " WHERE iw.PV_ID = pv.PV_ID AND pv.PKG_ID = pkg.PKG_ID AND rc.PV_ID = pv.PV_ID AND iw.RTAG_ID = $RTAG_ID";
98
 
99
 
100
    my $sth = $RM_DB->prepare($m_sqlstr);
101
    if ( defined($sth) )
102
    {
103
        if ( $sth->execute( ) )
104
        {
105
            if ( $sth->rows )
106
            {
107
                while ( @row = $sth->fetchrow_array )
108
                {
109
                    my $pv_id = $row[0];
110
                    my $name = $row[1];
111
                    my $ver = $row[2];
112
                    my $rtag_id = $row[3];
113
 
114
                    $Dnr{$name,$ver} = $pv_id;
115
print "IgnoreWarn: $rtag_id, $pv_id, $name, $ver\n";
116
                }
117
            }
118
            $sth->finish();
119
        }
120
        else
121
        {
122
        Error("Execute failure" );
123
        }
124
    }
125
    else
126
    {
127
        Error("Prepare failure" );
128
    }
129
}
130
 
131
 
132
 
133
sub getPkgDetailsByRTAG_ID
134
{
135
    my ($RTAG_ID) = @_;
136
    my $foundDetails = 0;
137
    my (@row);
138
 
139
    # Connect to the database
140
    connectRM( \$RM_DB)
141
        unless $RM_DB;
142
 
143
    # First get details from pv_id
144
 
145
    my $m_sqlstr = "SELECT pv.PV_ID, pkg.PKG_NAME, pv.PKG_VERSION, pv.PKG_LABEL, pv.SRC_PATH, pv.BUILD_TYPE, pv.IS_DEPLOYABLE, rc.BASE_VIEW_ID" .
146
                    " FROM RELEASE_CONTENT rc, PACKAGE_VERSIONS pv, PACKAGES pkg" .
147
                    " WHERE rc.RTAG_ID = $RTAG_ID AND rc.PV_ID = pv.PV_ID AND pv.PKG_ID = pkg.PKG_ID";
148
    my $sth = $RM_DB->prepare($m_sqlstr);
149
    if ( defined($sth) )
150
    {
151
        if ( $sth->execute( ) )
152
        {
153
            if ( $sth->rows )
154
            {
155
                while ( @row = $sth->fetchrow_array )
156
                {
157
                    my $pv_id = $row[0];
158
                    my $name = $row[1];
159
                    my $ver = $row[2];
160
                    my $label = $row[3] || '';
161
                    my $path = $row[4] || '';
162
                    my $deployable = $row[6];
163
                    my $base_id = $row[7] || '';
164
 
165
                    #
166
                    #   Construct archive path
167
                    #
168
                    my $dpkg;
169
                    foreach my $var ( 'GBE_DPKG', 'GBE_DPLY' )
170
                    {
171
                        my $pkg_dir="$ENV{$var}/${name}/${ver}";
172
                        if ( -d $pkg_dir )
173
                        {
174
                            $dpkg = $pkg_dir;
175
                            last;
176
                        }
177
                    }
178
 
179
                    $path =~ tr~\\/~/~s;
180
#print "$row[5] --";
181
#printf ( "%40s %15s %50s %s\n",  $name, $ver, $label, $path);
182
#printf ( "copy e:\\%s\\%s .\n",  $name, $ver, $label, $path);
183
#print "$name $ver\n";
184
#print "$name $ver, $dpkg\n";
185
                    $Package{$name}{$ver}{done} = 1;
186
                    $Package{$name}{$ver}{base} = 1;
187
                    $Package{$name}{$ver}{base_id} = $base_id;
188
                    $Package{$name}{$ver}{deployable} = 1 if ($deployable);
189
                    $Package{$name}{$ver}{dpkg} = $dpkg if ($dpkg);
190
                    $Package{$name}{$ver}{label} = $label;
191
                    $Package{$name}{$ver}{path} = $path;
192
 
193
#                    GetDepends( $pv_id, $name, $ver );
194
                }
195
            }
196
            $sth->finish();
197
        }
198
    }
199
    else
200
    {
201
        Error("Prepare failure" );
202
    }
203
}
204
 
205
#-------------------------------------------------------------------------------
206
# Function        : GetDepends
207
#
208
# Description     : Extract the dependancies for a given package version
209
#
210
# Inputs          : $pvid
211
#
212
# Returns         :
213
#
214
sub GetDepends
215
{
216
    my ($pv_id, $pname, $pver ) = @_;
217
 
218
    #
219
    #   Now extract the package dependacies
220
    #
221
    my $m_sqlstr = "SELECT pkg.PKG_NAME, pv.PKG_VERSION, pd.DPV_ID, pv.IS_DEPLOYABLE" .
222
                   " FROM PACKAGE_DEPENDENCIES pd, PACKAGE_VERSIONS pv, PACKAGES pkg" .
223
                   " WHERE pd.PV_ID = \'$pv_id\' AND pd.DPV_ID = pv.PV_ID AND pv.PKG_ID = pkg.PKG_ID";
224
    my $sth = $RM_DB->prepare($m_sqlstr);
225
    if ( defined($sth) )
226
    {
227
        if ( $sth->execute( ) )
228
        {
229
            if ( $sth->rows )
230
            {
231
                my %depends;
232
                while ( my @row = $sth->fetchrow_array )
233
                {
234
#                    print "$name ===== @row\n";
235
                    my $name = $row[0];
236
                    my $ver = $row[1];
237
                    my $deployable = $row[3];
238
 
239
                    $depends{$name,$ver} = 1;
240
                    $Package{$name}{$ver}{usedby}{$pname,$pver} = $pv_id;
241
 
242
                    unless ( exists $Package{$name}{$ver}{done} )
243
                    {
244
                        $Package{$name}{$ver}{needed} = 1;
245
                        $Package{$name}{$ver}{deployable} = 1 if ($deployable);
246
 
247
                        my @DATA = ($name, $ver, $row[2]);
248
                        push @StrayPackages, \@DATA;
249
                    }
250
                }
251
                $Package{$pname}{$pver}{depends} = \%depends;
252
            }
253
            $sth->finish();
254
        }
255
    }
256
    else
257
    {
258
        Error("GetDepends:Prepare failure" );
259
    }
260
}
261
 
262
#-------------------------------------------------------------------------------
263
# Function        : Calc_NoRipples
264
#
265
# Description     : 
266
#
267
# Inputs          : 
268
#
269
# Returns         : 
270
#
271
my %all_dnr;
272
my @dnr_list;
273
 
274
sub Calc_NoRipples
275
{
276
    print "Packages not part of the build set beacuse of Do Not Ripple";
277
    @dnr_list = keys %Dnr;
278
    while ( $#dnr_list >= 0 )
279
    {
280
        my $data = pop @dnr_list;
281
        next if ( exists $all_dnr{$data} );
282
 
283
        my ($name, $ver ) = split $;, $data;
284
        next unless ( exists $Package{$name} );
285
        next unless ( exists $Package{$name}{$ver} );
286
        $all_dnr{$name,$ver} = 1;
287
 
288
        push @dnr_list, keys %{$Package{$name}{$ver}{usedby}};
289
    }
290
 
291
    foreach my $entry ( sort keys %all_dnr )
292
    {
293
        my ($name, $ver ) = split $;, $entry;
294
        print "--- $name, $ver\n";
295
    }
296
}
297