diff -r 000000000000 -r 83f4b4db085c bldsystemtools/commonbldutils/GetDPComp/GetDPComp.pm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bldsystemtools/commonbldutils/GetDPComp/GetDPComp.pm Tue Feb 02 01:39:43 2010 +0200 @@ -0,0 +1,194 @@ +#!/usr/bin/perl + +package GetDPComp ; + +use strict; +use LWP::UserAgent; +use Getopt::Long; + +# LRtrim +# +# Description +# This function removes the space on the left and right +sub LRtrim( $ ) { + my $result = shift ; + $result =~ s/^\s+// ; + $result =~ s/\s+$// ; + return $result ; +} + +sub GenerateComponentVersion( $ $ ) { + my $inputVersion = shift ; + $inputVersion = LRtrim($inputVersion); + my $iBaselineComponentName = shift ; + $iBaselineComponentName = LRtrim($iBaselineComponentName); + my %ComponentVersion = ( ); + print "envsize -vv $iBaselineComponentName $inputVersion \n" ; + my @envsizeoutput = `envsize -vv $iBaselineComponentName $inputVersion `; + foreach my $line ( @envsizeoutput ) { + if ($line =~ /^Adding up size of / ) { + $line =~ s/^Adding up size of //; + $line = LRtrim( $line ) ; + my ($component, $release) = split(/\s+/, $line); + $ComponentVersion{$component} = $release ; + } + } + return %ComponentVersion ; +} + +sub ValidateVersion( $ $ ) { + my $inputVersion = shift ; + $inputVersion = LRtrim($inputVersion); + my $iBaselineComponentName = shift ; + $iBaselineComponentName = LRtrim($iBaselineComponentName); + my $retval = 1 ; + + if( (!defined $inputVersion) || ($inputVersion eq "" ) ){ + $retval = 0 ; + print "\nERROR: No valid version specified. \n"; + }elsif ( CheckBuild( $inputVersion, $iBaselineComponentName ) == 1 ){ + print "\nUser specified build: $inputVersion is using. \n"; + }elsif ( lc($inputVersion) eq "latest") { + $inputVersion = GetLatestBuild( $iBaselineComponentName ); + $inputVersion = LRtrim( $inputVersion ); + if ($inputVersion eq "nobuild" ) { + $retval = 0 ; + print "\nERROR: No build available. \n"; + } else { + print "\nLatest build: $inputVersion is using.\n"; + } + }elsif ( lc($inputVersion) eq "green" ){ + $inputVersion = GetLatestGreenBuild( $iBaselineComponentName ) ; + $inputVersion = LRtrim( $inputVersion ); + if ($inputVersion eq "amberbuild" ) { + $retval = 0 ; + print "\nERROR: No green build available. \n"; + } else { + print "\nLatest green build: $inputVersion is using.\n"; + } + }else { + $retval = 0 ; + print "\nERROR: No Such Build: $inputVersion .\n"; + } + return ( $inputVersion, $retval) ; +} + +sub CheckBuild( $ $ ) { + my $iVer = shift ; + $iVer = LRtrim( $iVer ); + my $iBaselineComponentName = shift ; + $iBaselineComponentName = LRtrim($iBaselineComponentName); + my $iRet = 0 ; + my @AllVersions = `latestver -a $iBaselineComponentName`; + + foreach my $build ( @AllVersions ) { + $build = LRtrim( $build ); + if (lc( $build ) eq lc( $iVer ) ) { + $iRet = 1 ; + last ; + } + } + return $iRet ; +} + +sub GetLatestBuild( $ ) { + my $iBaselineComponentName = shift ; + $iBaselineComponentName = LRtrim($iBaselineComponentName); + my $latestbuild = "nobuild"; + my @AllBuilds = `latestver -a $iBaselineComponentName`; + + foreach my $build ( @AllBuilds ) { + my $status = BragFromAutobuild2HttpInterface( $build , $iBaselineComponentName ); + if ( ( lc( $status ) eq "green" ) or ( lc( $status ) eq "amber" ) ){ + $latestbuild = $build ; + last ; + } + } + return $latestbuild ; +} + +sub GetLatestGreenBuild( $ ) { + my $iBaselineComponentName = shift ; + $iBaselineComponentName = LRtrim($iBaselineComponentName); + my $greenbuild = "amberbuild"; + my @AllBuilds = `latestver -a $iBaselineComponentName`; + + foreach my $build ( @AllBuilds ) { + my $status = BragFromAutobuild2HttpInterface( $build , $iBaselineComponentName ); + if ( lc( $status ) eq "green" ) { + $greenbuild = $build ; + last ; + } + } + return $greenbuild ; # buildnumber or "amberbuild" +} + +# Usage +# Just call the sub-route called BragFromAutobuild2HttpInterface like this +# my $status = BragFromAutobuild2HttpInterface("M04735_Symbian_OS_v9.5" , "gt_techview_baseline"); +# my $status = BragFromAutobuild2HttpInterface("DP00454_DeveloperProduct" , "sf_tools_baseline"); +# $status should be green or amber etc. + +## @fn BragFromAutobuild2HttpInterface($sVer) +# +# Queries the HTTP interface to Autobuild2 DB to determine the BRAG status of a CBR. +# +# @param sVer string, CBR for which the BRAG status is to be determined. +# +# @return string, BRAG status of the queried CBR. "TBA" if BRAG was indeterminable. + +sub BragFromAutobuild2HttpInterface( $ $ ) +{ + my $sVer = shift ; + $sVer = LRtrim( $sVer ); + my $iBaselineComponentName = shift ; + $iBaselineComponentName = LRtrim($iBaselineComponentName); + my $sBrag = "TBA"; + my $sSnapshot = ""; + my $sProduct = ""; + if (( lc( $iBaselineComponentName ) eq "sf_tools_baseline" ) or ( lc( $iBaselineComponentName ) eq "developer_product_baseline" ) ) + { + if ( $sVer =~ /([\w\.]+)\_DeveloperProduct/i ) + { + $sSnapshot = $1; + $sProduct = "DP"; + } + else + { + return $sBrag; # i.e. "TBA" + } + }elsif (( lc( $iBaselineComponentName ) eq "gt_techview_baseline" ) or ( lc( $iBaselineComponentName ) eq "gt_only_baseline" ) ) + { + if ( $sVer =~ /([\w\.]+)\_Symbian_OS_v([\w\.]+)/i ) + { + #print $1, "\n", $2, "\n"; + $sSnapshot = $1; + $sProduct = $2; + } + else + { + return $sBrag; # i.e. "TBA" + } + } + + my $parameters = "snapshot=$sSnapshot&product=$sProduct"; + # Alternative method of getting the BRAG status - use the HTTP interface to Autobuild + my $sLogsLocation = "http://intweb:8080/esr/query?$parameters"; + + my $roUserAgent = LWP::UserAgent->new; + my $roResponse = $roUserAgent->get($sLogsLocation); + + if ($roResponse->is_success and $roResponse->content =~ /\=\=\s*BRAG\s*\=\s*([a-z|A-Z]+)/) + { + $sBrag = $1; + $sBrag =~ s/\s//g; # remove any whitespace padding + return $sBrag; + } + else + { + return $sBrag; # i.e. "TBA" + } +} + + +1; \ No newline at end of file