#!/usr/bin/perl -w
# -*- perl -*-
use P4CGI ;
use strict ;
use CGI::Carp ;
#
#################################################################
# CONFIGURATION INFORMATION
# All config info should be in P4CGI.pm
#
#################################################################
#
# List open files
#
#################################################################
# File argument
my $FSPC = P4CGI::cgi()->param("FSPC") ;
$FSPC = "//..." unless defined $FSPC ;
my @FSPC = split(/\s*\+?\s*(?=\/\/)/,$FSPC) ;
$FSPC = "".join(" and ",@FSPC)."" ;
my $FSPCcmd = "\"" . join("\" \"",@FSPC) . "\"" ;
my $SORTBY = P4CGI::cgi()->param("SORTBY") ;
$SORTBY="NAME" unless defined $SORTBY and $SORTBY eq "USER" ;
my $err2null = &P4CGI::REDIRECT_ERROR_TO_NULL_DEVICE() ;
# Get info about opened status
my @opened ;
&P4CGI::p4call(\@opened,"opened -a $FSPCcmd $err2null") ;
map { /(.*)\#(\d+) - (\S+) (\S+\s\S+) \S+ by (\S+)@(\S+)/ ;
$_ = [$1,$2, $3,$4, $5,$6] ; } @opened ;
# file status user
# rev change client
my @legend ;
if($SORTBY eq "USER") {
my @tmp = sort { my @a = @$a ;
my @b = @$b ;
uc("$a[4] $a[5]").$a[0] cmp uc("$b[4] $b[5]").$b[0] ; } @opened ;
@opened = @tmp ;
push @legend, &P4CGI::ahref("SORTBY=NAME",
"Sort list by file name") ;
}
else {
push @legend, &P4CGI::ahref("SORTBY=USER",
"Sort list by user") ;
} ;
# Create converstion hash for user -> fullname
my %userCvt ;
{
my @users ;
&P4CGI::p4call(\@users, "users" );
%userCvt = map { /^(\S+).*> \((.+)\) .*$/ ; ($1,$2) ; } @users ;
} ;
print &P4CGI::start_page("List open files for
$FSPC",&P4CGI::ul_list(@legend)) ;
my ($lastFile,$lastRev,$lastUser,$lastClient) = ("","","","") ;
sub printLine(@) {
my ($file,$rev,$status,$change,$user,$client) = @_ ;
$change =~ s/\s*change\s*// ;
my $Puser = &P4CGI::ahref(-url => "userView.cgi",
"USER=$user",
"$user ($userCvt{$user})") ;
my $Pclient = &P4CGI::ahref(-url => "clientView.cgi",
"CLIENT=$client",
"$client") ;
my $Pfile = &P4CGI::ahref(-url => "fileLogView.cgi",
"FSPC=$file",
"$file") ;
my $Prev = &P4CGI::ahref(-url => "fileViewer.cgi",
"FSPC=$file",
"REV=$rev",
"$rev") ;
if($SORTBY eq "NAME") {
if($file eq $lastFile) {
$Pfile = "" ;
if($rev eq $lastRev) {
$Prev = "" ;
}
}
print &P4CGI::table_row($Pfile,$Prev,$status,$change,$Puser,$Pclient) ;
}
elsif ($SORTBY eq "USER") {
if($user eq $lastUser) {
$Puser = "" ;
if($client eq $lastClient) {
$Pclient = "" ;
}
}
print &P4CGI::table_row($Puser,$Pclient,$Pfile,$Prev,$status,$change) ;
} ;
($lastFile,$lastRev,$lastUser,$lastClient) = ($file,$rev,$user,$client) ;
} ;
print &P4CGI::start_table("") ;
if($SORTBY eq "NAME") {
print &P4CGI::table_header("File/view log","Rev/view file","Status","Change","User/view","Client/view") ;
}
elsif($SORTBY eq "USER") {
print &P4CGI::table_header("User/view","Client/view","File/view log","Rev/view file","Status","Change") ;
} ;
map { printLine(@$_) ; } @opened ;
print &P4CGI::end_table() ;
print &P4CGI::end_page() ;
#
# That's all folks
#