#!/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/^.* \//; #$UserData{$Author} = $Email; add_p4user ($Author, $Email); } print "\nSummary: Already Existing: $ExistingUserCount New Added: $AddedUserCount Failed Adds: $FailedUserAddCount\n\n";