Rev 5710 | Blame | Compare with Previous | Last modification | View Log | RSS feed
#! perl######################################################################### COPYRIGHT - VIX IP PTY LTD ("VIX"). ALL RIGHTS RESERVED.## Module name : jats.sh# Module type : Makefile system# Compiler(s) : n/a# Environment(s): jats## Description : Create auto.pl for given package# Need rtag_id and pv_id## Slow Version# Multiple DB accesses may be slow## Usage:##......................................................................#require 5.006_001;use strict;use warnings;use JatsError;use JatsVersionUtils;use JatsRmApi;use JatsSystem;#use Data::Dumper;use Cwd;use DBI;use Getopt::Long;use Pod::Usage; # required for help supportmy $GBE_PERL = $ENV{'GBE_PERL'}; # Essential ENV variablesmy $GBE_CORE = $ENV{'GBE_CORE'};my $RM_DB;################################################################################# Global data#my $VERSION = "1.0.0";my %ReleasePackages; # Packages in the releasemy %BuildPackages; # Packages for this buildmy $base_name;my $base_version;my $base_label;my $base_path;## Options#my $opt_help = 0;my $opt_verbose = 0;my $opt_rtagid;my $opt_pvid;my $result = GetOptions ("help|h:+" => \$opt_help,"manual:3" => \$opt_help,"verbose:+" => \$opt_verbose, # flag or number"rtagid|rtag_id=s" => \$opt_rtagid,"pvid|pv_id=s" => \$opt_pvid,);## Process help and manual options#pod2usage(-verbose => 0, -message => "Version: $VERSION") if ($opt_help == 1 || ! $result);pod2usage(-verbose => 1) if ($opt_help == 2);pod2usage(-verbose => 2) if ($opt_help > 2);## Configure the error reporting process now that we have the user options#ErrorConfig( 'name' =>'PLAY19','verbose' => $opt_verbose );Error( "Need rtagid and pvid" )unless ( $opt_rtagid && $opt_pvid );## Get info the specified package#getPkgDetailsBy_PVID ( $opt_pvid );#DebugDumpData ("BuildPackages", \%BuildPackages );## Get the current (released) version of packages that we depend on#getCurrentPkgVersion ( $opt_rtagid, $_ ) for (keys %BuildPackages);#DebugDumpData ("ReleasePackages", \%ReleasePackages );## %ReleasePackages - Packages in this release# %BuildPackages - Packges in this build#foreach my $pkg ( keys %BuildPackages ){foreach my $ext ( keys %{$BuildPackages{$pkg}} ){#print "Version: $pkg, $ext, $BuildPackages{$pkg}{$ext} \n";Error ("Package not in Release: $pkg") unless ( exists $ReleasePackages{$pkg} );Error ("Package not in Release: $pkg.xxx.$ext") unless ( exists $ReleasePackages{$pkg}{$ext} );# $ReleasePackages{$pkg}{$ext} = $BuildPackages{$pkg}{$ext};}}## Create a configuration file for use by the JATS rewrite tool# This will allow the build.pl file to be re-written#my $file = "jats_rewrite.cfg";open CFG, ">$file" || Error("Cannot create $file" );foreach my $pkg ( sort keys %ReleasePackages ){foreach my $prj ( sort keys %{$ReleasePackages{$pkg}} ){my $ver = $ReleasePackages{$pkg}{$prj};print CFG "${pkg} ${ver}.${prj}\n";}}close CFG;## Massage the build.pl file to create the auto.pl file# That will be used to create the final package.#JatsTool ("jats_rewrite.pl", "-conf", "$file", "-verb" ) && Error("Did not rewrite build.pl file");exit 0;#-------------------------------------------------------------------------------# Function : getPkgDetailsBy_PVID## Description :## Inputs : pvid## Returns :#sub getPkgDetailsBy_PVID{my (@row);my ($pv_id) = @_;# if we are not or cannot connect then return 0 as we have not found anythingconnectRM(\$RM_DB) unless ( $RM_DB );#print "getPkgDetailsBy_PVID: $pv_id\n";## Determine package information#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"." FROM RELEASE_MANAGER.PACKAGES pkg, RELEASE_MANAGER.PACKAGE_VERSIONS pv" ." WHERE pv.PV_ID = \'$pv_id\' AND pkg.PKG_ID = pv.PKG_ID";my $sth = $RM_DB->prepare($m_sqlstr);if ( defined($sth) ){if ( $sth->execute( ) ){if ( $sth->rows ){while ( @row = $sth->fetchrow_array ){#print ( "getPkgDetailsBy_PVID: " . join(',', @row) . "\n");$base_name = $row[0];$base_version = $row[1];$base_label = $row[6];$base_path = $row[7];my ( $pn, $pv, $pp ) = SplitPackage( $base_name, $base_version );$BuildPackages{$pn}{$pp} = $pv;last;}}$sth->finish();}else{Error("getPkgDetailsBy_PVID:Execute failure 1", $m_sqlstr );}}else{Error("getPkgDetailsBy_PVID:Prepare failure" );}# Now extract the package dependacies#$m_sqlstr = "SELECT pkg.PKG_NAME, pv.PKG_VERSION, pd.DPV_ID" ." FROM RELEASE_MANAGER.PACKAGE_DEPENDENCIES pd, RELEASE_MANAGER.PACKAGE_VERSIONS pv, RELEASE_MANAGER.PACKAGES pkg" ." WHERE pd.PV_ID = \'$pv_id\' AND pd.DPV_ID = pv.PV_ID AND pv.PKG_ID = pkg.PKG_ID";$sth = $RM_DB->prepare($m_sqlstr);if ( defined($sth) ){if ( $sth->execute( ) ){if ( $sth->rows ){while ( @row = $sth->fetchrow_array ){#print ( "getPkgDetailsBy_PVID: " . join(',', @row) . "\n");my ( $pn, $pv, $pp ) = SplitPackage( $row[0], $row[1] );$BuildPackages{$pn}{$pp} = $pv;}}$sth->finish();}else{Error("getPkgDetailsBy_PVID:Execute failure 2", $m_sqlstr );}}else{Error("getPkgDetailsBy_PVID:Prepare failure" );}}#-------------------------------------------------------------------------------# Function : getCurrentPkgVersion## Description :## Inputs :## Returns :#sub getCurrentPkgVersion{my ($RTAG_ID, $pname ) = @_;my $foundDetails = 0;my (@row);# if we are not or cannot connect then return 0 as we have not found anythingconnectRM(\$RM_DB)unless ( $RM_DB );# First get details from pv_idmy $m_sqlstr = "SELECT pv.PV_ID, pkg.PKG_NAME, pv.PKG_VERSION" ." FROM RELEASE_MANAGER.RELEASE_CONTENT rc, RELEASE_MANAGER.PACKAGE_VERSIONS pv, RELEASE_MANAGER.PACKAGES pkg" ." 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\'";my $sth = $RM_DB->prepare($m_sqlstr);if ( defined($sth) ){if ( $sth->execute( ) ){if ( $sth->rows ){while ( @row = $sth->fetchrow_array ){#print ( "getCurrentPkgVersion: " . join(',', @row) . "\n");my $pv_id = $row[0];my $name = $row[1];my $version = $row[2];my ( $pn, $pv, $pp ) = SplitPackage( $name, $version );$ReleasePackages{$pn}{$pp} = $pv;}}$sth->finish();}else{Error("getCurrentPkgVersion:Execute failure" );}}else{Error("getCurrentPkgVersion:Prepare failure" );}}