bldsystemtools/commonbldutils/pushComp.pl
changeset 0 83f4b4db085c
child 2 99082257a271
--- /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 <<USAGE_EOF;
+
+  Usage: pushComp.pl [Args/options]
+
+  Args: (required)
+  
+  -c  [Component name]  Name of component to push 
+  -r [Remote reltools.ini location] Remote site reltools.ini location (Target location reltools.ini file)
+  -l Latest Build  or -g Latest Green Build or -v specify a build
+  
+  options:
+
+  -h                    help
+  
+  Example Commandline
+  pushComp.pl -c tools_testexecute -r C:\\epoc32\\relinfo\\reltools.ini -g
+  pushComp.pl -c tools_testexecute -r C:\\epoc32\\relinfo\\reltools.ini -l
+  pushComp.pl -c tools_testexecute -r C:\\epoc32\\relinfo\\reltools.ini -version DP00500
+  
+
+USAGE_EOF
+	exit 1;
+}