#!/usr/bin/perl
# $Id: //depot/cad/tools/1.0/icp4-1.1/bin/p4out#5 $
#
# CSWITCH CORPORATION CONFIDENTIAL PROPRIETARY
#
# This file contains information which is the
# proprietary property of Cswitch Corporation.
# This file is confidential and its contents may
# not be disclosed without the expressed written
# consent of Cswitch Corporation.
use strict;
use warnings;
use FindBin qw($Bin);
use lib "$Bin/../lib";
# use Icp4;
use Getopt::Std;
use File::Basename;
# $P4HOME = &Icp4::p4client();
my %layouts = ();
my %schematics = ();
my %locked_layouts = ();
my %new_layouts = ();
my %new_schematics = ();
my %opt = ();
MAIN: {
my $Program = $FindBin::Script;
getopts('hDavj', \%opt);
if ($opt{"h"}) {
print "Usage: $Program [-h] [-a] [-v] [-j]\n";
print " -h: help usage\n";
print " -a: all users\n";
print " (default: just you)\n";
print " -v: verbose, show project, lib, group, and cell\n";
print " (default: show lib and cell)\n";
print " -j: print out p4ci hints for layouts; schematics not yet supported\n";
print " (default: not printed)\n";
exit;
}
my $all = $opt{"a"} ? "-a" : "";
# open (P4, "p4 opened $all ${P4HOME}/.../ic/...views/... |");
# filter out only the attr files
open (P4, "p4 opened $all ... | grep attr |");
my ($key, $proj, $lib, $group, $view, $cell, $user);
while (<P4>) {
if (($proj, $lib, $group, $view, $cell, $user) = /.*\/(\S+)\.proj\/(\S+)\.lib\/(\S+)\.group\/(\S+)\.views\/([\$\w]+)\/.* by (\S+@\S+)/) {
$key = $proj . ":" . $lib . ":" . $group . ":" . $cell;
if ($view eq "logic") {
if (! $schematics{$key}) {
$schematics{$key} = $user;
}
print "SCHEMATIC: $proj, $lib, $group, $cell editted by $user\n" if ($opt{"D"});
} elsif ($view eq "layout") {
if (! $layouts{$key}) {
$layouts{$key} = $user;
}
print "LAYOUT: $proj, $lib, $group, $cell editted by $user\n" if ($opt{"D"});
} else {
die "ERROR: Unknown view \"$view\" associated with proj=$proj, lib=$lib, group=$group, cell=$cell\n";
}
next;
}
if (($proj, $lib, $group, $view, $cell) = /.*\/(\S+)\.proj\/(\S+)\.lib\/(\S+)\.group\/(\S+)\.views\/([\$\w]+)\//) {
$key = $proj . ":" . $lib . ":" . $group . ":" . $cell;
if ($view eq "logic") {
if (! $schematics{$key}) {
$schematics{$key} = "local";
}
print "$proj, $lib, $group, $view, $cell editted locally\n" if ($opt{"D"});
} elsif ($view eq "layout") {
if (! $layouts{$key}) {
$layouts{$key} = "local";
}
print "$proj, $lib, $group, $view, $cell editted locally\n" if ($opt{"D"});
} else {
die "ERROR: Unknown view \"$view\" associated with proj=$proj, lib=$lib, group=$group, cell=$cell\n";
}
next;
}
}
close P4;
if ($opt{"v"}) {
print "Checked-out SCHEMATICS:\n";
printf " %-12s %-16s %-12s %-40s %-40s\n", "Project", "Library", "Group", "Cell", "Client";
printf " %-12s %-16s %-12s %-40s %-40s\n", "=======", "=======", "=====", "====", "======";
foreach $key (sort keys %schematics) {
($proj, $lib, $group, $cell) = split(":", $key);
printf " %-12s %-16s %-12s %-40s %-40s\n", $proj, $lib, $group, $cell, $schematics{$key};
}
print "\nChecked-out LAYOUTS:\n";
printf " %-12s %-16s %-12s %-40s %-40s\n", "Project", "Library", "Group", "Cell", "Client";
printf " %-12s %-16s %-12s %-40s %-40s\n", "=======", "=======", "=====", "====", "======";
foreach $key (sort keys %layouts) {
($proj, $lib, $group, $cell) = split(":", $key);
printf " %-12s %-16s %-12s %-40s %-40s\n", $proj, $lib, $group, $cell, $layouts{$key};
}
} else {
print "Checked-out SCHEMATICS:\n";
printf " %-16s %-40s %-40s\n", "Library", "Cell", "Client";
printf " %-16s %-40s %-40s\n", "=======", "====", "======";
foreach $key (sort keys %schematics) {
($proj, $lib, $group, $cell) = split(":", $key);
printf " %-16s %-40s %-40s\n", $lib, $cell, $schematics{$key};
}
print "\nChecked-out LAYOUTS:\n";
printf " %-16s %-40s %-40s\n", "Library", "Cell", "Client";
printf " %-16s %-40s %-40s\n", "=======", "====", "======";
foreach $key (sort keys %layouts) {
($proj, $lib, $group, $cell) = split(":", $key);
printf " %-16s %-40s %-40s\n", $lib, $cell, $layouts{$key};
}
}
if ($opt{"j"}) {
# FIXME schematics not yet supported.
my $first;
open (P4, "p4local -W . 2>&1 |");
while (<P4>) {
if (($cell) = /.*\/(\w+)\/.*\.lck/) {
if (! $locked_layouts{$cell}) {
$locked_layouts{$cell} = 1;
}
print "LOCKED $cell\n" if ($opt{"D"});
next;
}
if (($proj, $lib, $group, $cell) = /.*\/(\S+)\.proj\/(\S+)\.lib\/(\S+)\.group\/layout\.views\/([\$\w]+)\/.*\.attr/) {
if (!$new_layouts{$cell}) {
$new_layouts{$cell} = 1;
}
print "NEW $proj, $lib, $group, $cell editted locally\n" if ($opt{"D"});
next;
}
}
close P4;
print "\np4ci Hints:\n";
print "==========\n";
print " Locked Layouts:\n";
$first = 1;
foreach $cell (sort keys %locked_layouts) {
if ($locked_layouts{$cell} == 1) {
print "\t$cell\n";
}
}
print "\n";
print " Checked-out Layouts:\n";
$first = 1;
foreach $key (sort keys %layouts) {
($proj, $lib, $group, $cell) = split(":", $key);
if ($layouts{$key} eq "local") {
if ($first) {
print "\tp4ci $cell";
$first = 0;
} else {
print " $cell";
}
}
}
print "\n" if ($first == 0);
print "\n";
print " New Layouts:\n";
$first = 1;
foreach $cell (sort keys %new_layouts) {
if ($new_layouts{$cell} == 1) {
if ($first) {
print "\tp4ci $cell";
$first = 0;
} else {
print " $cell";
}
}
}
print "\n";
}
}