releasing/cbrtools/perl/envmembership
changeset 602 3145852acc89
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/envmembership	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,163 @@
+#!perl
+# Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin";
+use Getopt::Long;
+use IniData;
+use RelData;
+use Utils;
+use CommandController;
+
+
+#
+# Globals.
+#
+
+my $verbose = 0;
+my $iniData = IniData->New();
+my $force;
+my $commandController = CommandController->New($iniData, 'EnvMembership');
+
+#
+# Main.
+#
+
+ProcessCommandLine();
+
+
+#
+# Subs.
+#
+
+sub ProcessCommandLine {
+  Getopt::Long::Configure ("bundling");
+  my $help;
+  GetOptions("h" => \$help, "v+" => \$verbose, "f" => \$force);
+
+  if ($help) {
+    Usage(0);
+  }
+
+  # Functional description:
+  # create reldata objects for each release of <environment>
+  # for each release find if <component> is present in the environment
+  # and if so if <version> matches the version in the environment.
+  # if these conditions are met, place the current <environment> release id in 
+  # an array and print the contents of the array at the end of the script
+  #
+  #
+  if ($#ARGV == 2) {
+    # Extract the command line arguments (Note: GetOptions() will have already
+    # stripped out the options part of the command line
+    my $component_name = shift @ARGV;
+    my $component_version= shift @ARGV;
+    my $env_name= shift @ARGV;
+		
+    # Scalar variable $envRelDatas will contain a reference to an array of reldata
+    # objects following this call.
+    my $envRelDatas = RelData->OpenSet($iniData, $env_name, $verbose);
+    my @outputTable;
+    my @tableHeader = ("Component", "Version");
+    push (@outputTable, \@tableHeader);
+    foreach my $currentEnvRelData (@$envRelDatas) {
+      my $currentEnv = $currentEnvRelData->Environment();
+      # $currentEnv now contains a reference to a hash containing 
+      # component name / version pairs for all the components that were
+      # present in the current release of the environment component
+      if ($currentEnv->{$component_name}) {
+	# component is present in the current environment
+	if ($currentEnv->{$component_name} eq $component_version) {
+	  # component version of interest is present in the current environment
+	  my @tableRow = ($currentEnvRelData->Component(),$currentEnvRelData->Version());
+	  push (@outputTable, \@tableRow);
+	}
+      }
+    }
+    # print the environment versions in which componet version is present
+    my $tableLength = @outputTable;
+    if ($tableLength > 0) {
+      $iniData->TableFormatter->PrintTable(\@outputTable);
+    }
+  } else {
+    print "Error: Invalid number of arguments\n";
+    Usage(1);
+  }
+}
+
+sub Usage {
+  my $exitCode = shift;
+
+  Utils::PrintDeathMessage($exitCode, "\nUsage: envmembership [options] <component> <version> <environment>
+
+options:
+
+-h  help
+-f  (deprecated)
+-v  verbose output (-vv very verbose)\n");
+
+}
+
+__END__
+
+=head1 NAME
+
+EnvMembership - Returns the environments to which a particular component belongs
+
+=head1 SYNOPSIS
+
+  envmembership [options] <component> <version> <environment>
+
+options:
+
+  -h  help
+  -f  (deprecated)
+  -v  verbose output (-vv very verbose)
+
+=head1 DESCRIPTION
+
+Returns all the versions of a specified component for which a particular version of another specified component is present in its release environment. For example, to discover which release of a component called C<my_product> contains the component C<my_comp> at version C<my_ver>, type:
+
+  envmembership my_comp my_ver my_product 
+
+=head1 STATUS
+
+Supported. If you find a problem, please report it to us.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut