#!/usr/local/bin/perl use File::stat; use Time::localtime; use Getopt::Long; $Getopt::Long::autoabbrev=0; unless($result=GetOptions("h", "bname=s", "l")) { die "Illegal Input Options, -h for help\n"; } $HELP="Usage: cdscheckouts -bname [-l] Long format will stat each file\nto give modify time\nand can take a few moments\n"; if($opt_h) { print $HELP; exit; } if(!$opt_bname) { print $HELP; exit; } $cmd="p4 branches | grep $opt_bname > /dev/null"; system($cmd); if($? ne 0) { print "Couldn't find branch $opt_bname\n"; exit 1; } print "Getting check out status...please wait\n"; $cmd="p4 opened -a //depot/$opt_bname/...| grep cdb > /tmp/p4cdsco.$$"; system($cmd); open(CMD,") { chop; (@data)=split; ($user,$client)=split('@',$data[7]); ($nclient,$branch)=split(':',$client); (@dspec)=split('/',$data[0]); $max=($#dspec); $datastring="$user $dspec[$max-3] $dspec[$max-2]"; $dlen=length($datastring); $numspaces=40-$dlen; $pad=""; for $i (0...$numspaces) { $pad=$pad." "; } $datastring=$datastring.$pad.$dspec[$max-1]; # target column 50 for beginning of data field $dlen=length($datastring); $numspaces=50-$dlen; $pad=""; for $i (0...$numspaces) { $pad=$pad." "; } $datastring=$datastring.$pad.$data[2]; if($opt_l) { # if modtime is set in the client # we can see the time the file was last modified (@dfilenorev)=split('#',$data[0]); $cmd="p4 -c $client have $dfilenorev[0]"; open(CMD2,"$cmd 2>&1|") || die; while() { chop; if(/not on client/) { $date_string= "No data ($client)"; next; } ($ig,$ig,$unixpath)=split; $date_string = ctime(stat($unixpath)->mtime()); } $dlen=length($datastring); # target column 60 for beginning of data field $numspaces=60-$dlen; $pad=""; for $i (0...$numspaces) { $pad=$pad." "; } $datastring=$datastring.$pad.$date_string; } $cotable{$branch}=$cotable{$branch}."\n".$datastring; } close(CMD); foreach $key (sort(keys(%cotable))) { print "\nBranch: $key\n-------------------------------------------\n$cotable{$key}\n"; } system("rm /tmp/p4cdsco.$$");