bldsystemtools/commonbldutils/SetP4Client.pm
changeset 0 83f4b4db085c
child 2 99082257a271
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bldsystemtools/commonbldutils/SetP4Client.pm	Tue Feb 02 01:39:43 2010 +0200
@@ -0,0 +1,150 @@
+# Copyright (c) 2003-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:
+#
+
+package SetP4Client;
+
+use strict;
+use Carp;
+use Sys::Hostname;
+
+# Start
+#
+# Inputs
+# $iClientName (Name of the client to create)
+# $iCodeline (Codeline root)
+# $iUser
+# $iDrive
+# $iHost
+# $iType
+#
+# Outputs
+#
+# Description
+#
+
+sub Start
+{
+	my ( $iCodeline, $iDrive, $iType) = @_;
+	my ($iUser, $iHost, $iClientname);
+
+	$iUser = &get_user();
+	($iHost) = &hostname() =~ /(\S+?)\./;
+  if ($iHost eq "")
+  {
+    # Not a fully qualified Hostname, use use raw name
+    $iHost =  &hostname();
+  }
+  print "Hostname is $iHost\n";
+  $iClientname = $iHost."_source_".$iType;
+
+	#processing codeline
+	$iCodeline =~ s?//CLIENTNAME/?//$iClientname/?g;
+	my (@iSplit_codeline) = split /\+/, $iCodeline;
+	for (my ($n)=1; $n <= $#iSplit_codeline; $n=$n+2)
+	{
+		$iSplit_codeline[$n] .= "\n";
+	} 
+
+	#Flushes and deletes old client, then creates new client and sets it as a default
+	&set_view($iClientname);
+	#Sets up client specification
+	&set_client($iHost, $iClientname, $iUser, $iDrive, @iSplit_codeline);
+
+
+}
+
+# Start
+#
+# Inputs
+#
+# Outputs
+# $iUser
+#
+# Description
+# This Gets the user name
+sub get_user
+{
+  my ($iLine, $iUser);  
+  
+	open USER, "p4 user -o |" or die "Can't read user";
+	while ($iLine=<USER>)
+	{
+		if ($iLine =~ /^User:\s+(\S+)/)
+		{
+		  $iUser = $1; 
+		}
+	}
+	close USER;
+	return ($iUser);
+}
+
+sub set_client
+{
+  my ($iHost, $iClientname, $iUser, $iDrive, @iSplit_codeline) = @_;  
+  
+	open CLIENT, "| p4 client -i" or die "Can't create Perforce client";
+	
+	print CLIENT<<CLIENTSPEC_EOF;
+# A Perforce Client Specification.
+#
+#  Client:      The client name.
+#  Update:      The date this specification was last modified.
+#  Access:      The date this client was last used in any way.
+#  Owner:       The user who created this client.
+#  Host:        If set, restricts access to the named host.
+#  Description: A short description of the client (optional).
+#  Root:        The base directory of the client workspace.
+#  Options:     Client options:
+#                      [no]allwrite [no]clobber [no]compress
+#                      [un]locked [no]modtime [no]rmdir
+#  LineEnd:     Text file line endings on client: local/unix/mac/win/share.
+#  View:        Lines to map depot files into the client workspace.
+#
+# Use 'p4 help client' to see more about client views and options.
+
+Client:  $iClientname
+
+Owner:	$iUser 
+
+Host:	$iHost
+
+Description:
+  DO NOT USE THIS CLIENT UNLESS YOU ARE PART OF THE "BUILD" TEAM. 
+  This client is generated automatically when GetSource.pl is 
+  called as a part of the build process. If client spec
+  is changed manually it will not take any effect as the
+  client will be deleted and then regenerated during
+  build. 
+  
+Root:	$iDrive
+
+Options:	noallwrite noclobber nocompress crlf unlocked nomodtime normdir
+
+View:
+  @iSplit_codeline
+
+CLIENTSPEC_EOF
+
+	close CLIENT;  # Terminate input, and wait for command to finish..
+}
+
+
+sub set_view()
+{
+	my ($iClientname) = @_;	
+	print `p4 client -d $iClientname 2>&1`;	
+	print `p4 set p4client=$iClientname 2>&1`;
+}
+1;