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   : Create auto.pl for given package
11
#                 Need rtag_id and pv_id
12
#
13
#                 Slow Version
14
#                   Multiple DB accesses may be slow
15
#
16
# Usage:
17
#
18
#......................................................................#
19
 
20
require 5.006_001;
21
use strict;
22
use warnings;
23
use JatsError;
24
use JatsVersionUtils;
25
use JatsRmApi;
26
use JatsSystem;
27
 
28
#use Data::Dumper;
29
use Cwd;
30
use DBI;
31
use Getopt::Long;
32
use Pod::Usage;                             # required for help support
33
 
34
my $GBE_PERL     = $ENV{'GBE_PERL'};        # Essential ENV variables
35
my $GBE_CORE     = $ENV{'GBE_CORE'};
36
my $RM_DB;
37
 
38
################################################################################
39
#   Global data
40
#
41
my $VERSION = "1.0.0";
42
my %ReleasePackages;            # Packages in the release
43
my %BuildPackages;              # Packages for this build
44
my $base_name;
45
my $base_version;
46
my $base_label;
47
my $base_path;
48
 
49
 
50
#
51
#   Options
52
#
53
my $opt_help = 0;
54
my $opt_verbose = 0;
55
my $opt_rtagid;
56
my $opt_pvid;
57
 
58
my $result = GetOptions (
59
                "help|h:+"          => \$opt_help,
60
                "manual:3"          => \$opt_help,
61
                "verbose:+"         => \$opt_verbose,       # flag or number
62
                "rtagid|rtag_id=s"  => \$opt_rtagid,
63
                "pvid|pv_id=s"      => \$opt_pvid,
64
                );
65
 
66
#
67
#   Process help and manual options
68
#
69
pod2usage(-verbose => 0, -message => "Version: $VERSION")  if ($opt_help == 1  || ! $result);
70
pod2usage(-verbose => 1)  if ($opt_help == 2);
71
pod2usage(-verbose => 2)  if ($opt_help > 2);
72
 
73
#
74
#   Configure the error reporting process now that we have the user options
75
#
76
ErrorConfig( 'name'    =>'PLAY19',
77
             'verbose' => $opt_verbose );
78
 
79
 
80
Error( "Need rtagid and pvid" )
81
    unless ( $opt_rtagid && $opt_pvid );
82
 
83
 
84
#
85
#   Get info the specified package
86
#
87
getPkgDetailsBy_PVID ( $opt_pvid );
88
#DebugDumpData ("BuildPackages", \%BuildPackages );
89
 
90
 
91
#
92
#   Get the current (released) version of packages that we depend on
93
#
94
getCurrentPkgVersion ( $opt_rtagid, $_ ) for (keys %BuildPackages);
95
#DebugDumpData ("ReleasePackages", \%ReleasePackages );
96
 
97
 
98
#
99
#   %ReleasePackages - Packages in this release
100
#   %BuildPackages   - Packges in this build
101
#
102
foreach my $pkg ( keys %BuildPackages  )
103
{
104
    foreach my $ext ( keys %{$BuildPackages{$pkg}}  )
105
    {
106
#print "Version: $pkg, $ext, $BuildPackages{$pkg}{$ext} \n";
107
 
108
        Error ("Package not in Release: $pkg") unless ( exists $ReleasePackages{$pkg} );
109
        Error ("Package not in Release: $pkg.xxx.$ext") unless ( exists $ReleasePackages{$pkg}{$ext} );
110
#        $ReleasePackages{$pkg}{$ext} =  $BuildPackages{$pkg}{$ext};
111
    }
112
}
113
 
114
#
115
#   Create a configuration file for use by the JATS rewrite tool
116
#   This will allow the build.pl file to be re-written
117
#
118
my $file = "jats_rewrite.cfg";
119
open CFG, ">$file" || Error("Cannot create $file" );
120
foreach my $pkg ( sort keys %ReleasePackages )
121
{
122
    foreach my $prj ( sort keys %{$ReleasePackages{$pkg}} )
123
    {
124
        my $ver = $ReleasePackages{$pkg}{$prj};
125
        print CFG "${pkg} ${ver}.${prj}\n";
126
    }
127
}
128
close CFG;
129
 
130
#
131
#   Massage the build.pl file to create the auto.pl file
132
#   That will be used to create the final package.
133
#
134
JatsTool ("jats_rewrite.pl", "-conf", "$file", "-verb" ) && Error("Did not rewrite build.pl file");
135
 
136
exit 0;
137
 
138
#-------------------------------------------------------------------------------
139
# Function        : getPkgDetailsBy_PVID
140
#
141
# Description     :
142
#
143
# Inputs          : pvid
144
#
145
# Returns         :
146
#
147
sub getPkgDetailsBy_PVID
148
{
149
    my (@row);
150
    my ($pv_id) = @_;
151
 
152
    # if we are not or cannot connect then return 0 as we have not found anything
153
    connectRM(\$RM_DB) unless ( $RM_DB );
154
#print "getPkgDetailsBy_PVID: $pv_id\n";
155
 
156
 
157
    #
158
    #   Determine package information
159
    #
160
    my $m_sqlstr = "SELECT pkg.PKG_NAME, pv.PKG_VERSION, pkg.PKG_ID, pv.PV_ID, pv.CHANGE_TYPE, pv.BUILD_TYPE, pv.PKG_LABEL, pv.SRC_PATH".
161
                   " FROM RELEASE_MANAGER.PACKAGES pkg, RELEASE_MANAGER.PACKAGE_VERSIONS pv" .
162
                   " WHERE pv.PV_ID = \'$pv_id\' AND pkg.PKG_ID = pv.PKG_ID";
163
    my $sth = $RM_DB->prepare($m_sqlstr);
164
    if ( defined($sth) )
165
    {
166
        if ( $sth->execute( ) )
167
        {
168
            if ( $sth->rows )
169
            {
170
                while ( @row = $sth->fetchrow_array )
171
                {
172
#print ( "getPkgDetailsBy_PVID: " . join(',', @row) . "\n");
173
                    $base_name = $row[0];
174
                    $base_version = $row[1];
175
                    $base_label = $row[6];
176
                    $base_path = $row[7];
177
 
178
                    my ( $pn, $pv, $pp ) = SplitPackage( $base_name, $base_version );
179
                    $BuildPackages{$pn}{$pp} = $pv;
180
 
181
                    last;
182
                }
183
            }
184
            $sth->finish();
185
        }
186
        else
187
        {
188
            Error("getPkgDetailsBy_PVID:Execute failure 1", $m_sqlstr );
189
        }
190
    }
191
    else
192
    {
193
        Error("getPkgDetailsBy_PVID:Prepare failure" );
194
    }
195
 
196
 
197
    #   Now extract the package dependacies
198
    #
199
    $m_sqlstr = "SELECT pkg.PKG_NAME, pv.PKG_VERSION, pd.DPV_ID" .
200
                   " FROM RELEASE_MANAGER.PACKAGE_DEPENDENCIES pd, RELEASE_MANAGER.PACKAGE_VERSIONS pv, RELEASE_MANAGER.PACKAGES pkg" .
201
                   " WHERE pd.PV_ID = \'$pv_id\' AND pd.DPV_ID = pv.PV_ID AND pv.PKG_ID = pkg.PKG_ID";
202
    $sth = $RM_DB->prepare($m_sqlstr);
203
    if ( defined($sth) )
204
    {
205
        if ( $sth->execute( ) )
206
        {
207
            if ( $sth->rows )
208
            {
209
                while ( @row = $sth->fetchrow_array )
210
                {
211
#print ( "getPkgDetailsBy_PVID: " . join(',', @row) . "\n");
212
                    my ( $pn, $pv, $pp ) = SplitPackage( $row[0], $row[1] );
213
                    $BuildPackages{$pn}{$pp} = $pv;
214
                }
215
            }
216
            $sth->finish();
217
        }
218
        else
219
        {
220
            Error("getPkgDetailsBy_PVID:Execute failure 2", $m_sqlstr );
221
        }
222
    }
223
    else
224
    {
225
        Error("getPkgDetailsBy_PVID:Prepare failure" );
226
    }
227
}
228
 
229
#-------------------------------------------------------------------------------
230
# Function        : getCurrentPkgVersion
231
#
232
# Description     : 
233
#
234
# Inputs          : 
235
#
236
# Returns         : 
237
#
238
sub getCurrentPkgVersion
239
{
240
 
241
    my ($RTAG_ID, $pname ) = @_;
242
    my $foundDetails = 0;
243
    my (@row);
244
 
245
    # if we are not or cannot connect then return 0 as we have not found anything
246
    connectRM(\$RM_DB)
247
        unless ( $RM_DB );
248
 
249
    # First get details from pv_id
250
 
251
    my $m_sqlstr = "SELECT pv.PV_ID, pkg.PKG_NAME, pv.PKG_VERSION" .
252
                   " FROM RELEASE_MANAGER.RELEASE_CONTENT rc, RELEASE_MANAGER.PACKAGE_VERSIONS pv, RELEASE_MANAGER.PACKAGES pkg" .
253
                   " WHERE rc.RTAG_ID = $RTAG_ID AND rc.PV_ID = pv.PV_ID AND pv.PKG_ID = pkg.PKG_ID AND pkg.PKG_NAME = \'$pname\'";
254
    my $sth = $RM_DB->prepare($m_sqlstr);
255
    if ( defined($sth) )
256
    {
257
        if ( $sth->execute( ) )
258
        {
259
            if ( $sth->rows )
260
            {
261
                while ( @row = $sth->fetchrow_array )
262
                {
263
#print ( "getCurrentPkgVersion: " . join(',', @row) . "\n");
264
                    my $pv_id   = $row[0];
265
                    my $name    = $row[1];
266
                    my $version = $row[2];
267
 
268
                    my ( $pn, $pv, $pp ) = SplitPackage( $name,  $version );
269
                    $ReleasePackages{$pn}{$pp} = $pv;
270
                }
271
            }
272
            $sth->finish();
273
        }
274
        else
275
        {
276
            Error("getCurrentPkgVersion:Execute failure" );
277
        }
278
    }
279
    else
280
    {
281
        Error("getCurrentPkgVersion:Prepare failure" );
282
    }
283
}