Subversion Repositories DevTools

Rev

Rev 5710 | Details | Compare with Previous | Last modification | View Log | RSS feed

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