diff -r 000000000000 -r 83f4b4db085c bldsystemtools/commonbldutils/pushComp.pl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bldsystemtools/commonbldutils/pushComp.pl Tue Feb 02 01:39:43 2010 +0200 @@ -0,0 +1,200 @@ +#!/usr/bin/perl +use strict; +use LWP::UserAgent; +use Getopt::Long; + + +my ($iComp, $iLoc, $iType) = ProcessCommandLine(); +my $iVersion; +if ($iType eq "green") +{ + $iVersion = GetLatestGreenBuild($iComp) +} +elsif($iType eq "latest") +{ + $iVersion = GetLatestBuild($iComp); +} +elsif ($iType =~ /DP/i) +{ + if ($iType =~ /_DeveloperProduct/i) + { + $iVersion = $iType; + } + else + { + $iVersion = $iType."_DeveloperProduct"; + } +} +else{ + $iVersion = $iType; +} +chomp($iVersion); + +my $pushreloutput = `pushrel -vv $iComp $iVersion $iLoc`; +if (($pushreloutput =~ /^Copying $iComp $iVersion to/) || ($pushreloutput =~ /already present/)){ + print $pushreloutput; +}else{ + print "ERROR: could not pushrel $iComp $iVersion - $pushreloutput\n"; +} + + + +# 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 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 ) { + $build = LRtrim($build); + 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 ($sVer =~ /\_DeveloperProduct/i) + { + #DP00420_DeveloperProduct + if ($sVer =~ /([\w\.]+)\_DeveloperProduct/i) + { + $sSnapshot = $1; + $sProduct = "DP"; + } + 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 =~ /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" + } +} + + + +# ProcessCommandLine +# +# Inputs +# +# Outputs +# $iComp - Name of the component to push +# $iLoc - Remote site reltools.ini location +# +# Description +# This function processes the commandline +sub ProcessCommandLine { + + my ($iHelp, $iComp, $iLoc, $iLatest, $iGreen, $iVer); + GetOptions('h' => \$iHelp, 'c=s' => \$iComp, 'r=s' => \$iLoc, 'g' => \$iGreen, 'l' => \$iLatest, 'version=s'=>\$iVer); + + if (($iHelp) || (!defined $iComp) || (!defined $iLoc) || ($iVer && $iLatest)|| ($iVer && $iGreen)| ($iGreen && $iLatest)) + { + &Usage(); + } + + my $iType = ($iGreen)? "green" : "latest"; + $iType = ($iVer)? $iVer:$iType; + + return($iComp,$iLoc,$iType); +} + +# Usage +# +# Output Usage Information. +# +sub Usage { + print <