#!/usr/bin/perl -w
#------------------------------------------------------------------------------
# Declarations
use strict;
my $Author;
my $Email;
my @AuthorList;
#my %UserData;
my $AddedUserCount = 0;
my $ExistingUserCount = 0;
my $FailedUserAddCount = 0;
sub add_p4user ($$;);
#------------------------------------------------------------------------------
# Local Subroutines
sub add_p4user ($$;) {
print "CALL add_p4user(@_)\n";
my ($user, $email) = @_;
my $cmd;
my $output;
my $tmpFile = "/p4/1/tmp/tmp.user.$user.txt";
my $uSpec;
$tmpFile =~ s/ /_/g;
$tmpFile =~ s/\\/_/g;
$tmpFile =~ s/\//_/g;
# If email has a space, delete anything from the space onward.
$email =~ s/\s+.*$//;
# If the username has a space, use the email for the username,
# but trim from the @ character onward.
if ($user =~ / /) {
$user = $email;
$user =~ s/\@.*$//;
}
$cmd = "p4 -s user -o $user";
$output = `$cmd 2>&1`;
if ($output =~ /\ninfo: Access:/) {
$ExistingUserCount++;
return 1;
}
$uSpec = "User:\t$user\n\nEmail:\t$email\n\nFullName:\t$user\n\n";
open (USER, ">$tmpFile") or
die "\nError: Couldn't open user file for write [$tmpFile]: $!\n";
print USER $uSpec;
close (USER);
$cmd = "p4 -s user -f -i < $tmpFile";
$output = `$cmd 2>&1`;
unlink $tmpFile;
if ($output =~ /exit: 0/) {
$AddedUserCount++;
print $output;
return 1;
} else {
$FailedUserAddCount++;
print "BEGIN SPEC:\n$uSpec\n:END SPEC\n";
print $output;
return 0;
}
}
#------------------------------------------------------------------------------
# Main Program
@AuthorList = grep (/^Author: /, split ('\n', `git log --all`));
foreach $Author (@AuthorList) {
chomp $Author;
$Author =~ s/^Author: //;
$Email = $Author;
$Author =~ s/ \<.*$//g;
$Email =~ s/^.* \<//;
$Email =~ s/\>//;
#$UserData{$Author} = $Email;
add_p4user ($Author, $Email);
}
print "\nSummary:
Already Existing: $ExistingUserCount
New Added: $AddedUserCount
Failed Adds: $FailedUserAddCount\n\n";