#!perl -w ############################################################################### # # File: CreateClient.pl # Syntax: perl CreateClient.pl # Parameter: -t <template> <client name> # Purpose: Create a client from the specified template and make sure that # all options are copied with the client. # Author: Robert Cowham (robert@vaccaperna.co.uk) # History: 24/11/2000 created the first version # 30/11/2000 Copy root and description fields into new client. # ############################################################################### use strict; # Command option parsing use Getopt::Long; use vars qw( $p4 $release $date $template $client $verbose ); BEGIN {} $p4 = "p4"; readParams (); &createClient($template, $client); exit(0); ############################################################################### # ONLY SUBROUTINES BELOW !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ############################################################################### ############################################################################### # # Function: readParams # Purpose: Read the parameters from the command line and initialize all vars # ############################################################################### sub readParams { my $usage = "Usage: $0 [-v [verbose level]] -t <template client> <client>\n"; my $result; $verbose = -1; # default - will be set to zero if specified with no parameter $result = GetOptions("t=s" => \$template, "v:i" => \$verbose ); if (!$result) { die "Error: Invalid parameters!\n$usage"; } if (!defined($template) || $template eq "") { die "Error: Template must be specified!\n$usage"; } # Check for name of client if (@ARGV > 1) { die "Error: too many parameters specified!\n$usage"; } elsif (@ARGV < 1) { die "Error: No client file specifed!\n$usage"; } else { $client = $ARGV[0]; } $verbose = 1 if ($verbose == 0); trace(1, "Params: template=$template, client=$client, verbose=$verbose\n"); } ############################################################################### # # Function: createClient # Purpose: Call the appropriate commands to create the client, and modify the # various fields within it. # ############################################################################### sub createClient ($$) { my ($template, $client) = @_; my $cmd = "$p4 client -o -t $template $client"; my $c_contents = `$cmd`; trace(3, "Results: $c_contents"); # Check for template not existing if (!defined($c_contents) || $c_contents eq "") { die "Error!"; } # OK, now we get the contents of the template command $cmd = "$p4 client -o $template"; my $t_contents = `$cmd`; trace(3, "Template contents: $t_contents\n"); # parse the output for views for options and root directory - we ignore line endings my ($options) = ($t_contents =~ m/\nOptions:\s+([^\n]*)\n/s); trace(2, "Options: $options\n"); my ($root) = ($t_contents =~ m/\nRoot:\s+([^\n]*)\n/s); trace(2, "Root: $root\n"); # Update the contents of the client $c_contents =~ s/\nOptions:\s+[^\n]*\n/\nOptions: $options\n/m; trace(3, "New contents: $c_contents\n"); # Update the root directory too $c_contents =~ s/\nRoot:\s+[^\n]*\n/\nRoot: $root\n/m; # Extract out some other fields my ($desc) = ($t_contents =~ m/\nDescription:\n(.*)\nRoot:/s); trace(2, "Description:\n$desc\n"); $c_contents =~ s/\nDescription:\n.*\nRoot:/\nDescription:\n$desc\nRoot:/s; trace(3, "New contents: $c_contents\n"); # Finally write out the contents of the new client and save to Perforce $cmd = "| $p4 client -i "; trace(3, "Command: $cmd\n"); open(CLIENT, $cmd) || die "can't fork: $!"; print CLIENT "$c_contents\n"; close CLIENT || die "bad write: $! $?"; } ############################################################################### # # Function: trace # Purpose: Output trace information # ############################################################################### sub trace { my ($level, $msg) = @_; if ($verbose >= $level) { print STDOUT $msg; } } ############################################################################### # END OF FILE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ###############################################################################
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#1 | 515 | Robert Cowham |
New utils showing how to create new clients based on an existing one and update all the fields to some desired defaults. |