127 lines
3.3 KiB
Perl
127 lines
3.3 KiB
Perl
#----------------------------------------------------------------//
|
|
# Script: checkdepots.pl
|
|
#
|
|
# (c) 2001 Microsoft Corporation. All rights reserved.
|
|
#
|
|
# Purpose: This script validates if all depots have a mapping
|
|
# consistent with the root depot in a particular drive
|
|
# enlistment. This tool should be run from the root of the
|
|
# enlistment drive of interest and is. Currently it is
|
|
# invoked as part of razzle with an optional argument i.e.:
|
|
# razzle.cmd checkdepots
|
|
#
|
|
#
|
|
# Version: <1.00> 03/22/2001 : VishnuP
|
|
#----------------------------------------------------------------//
|
|
|
|
$VERSION = '1.00';
|
|
|
|
if ($#ARGV != -1) {
|
|
die "usage: perl.exe checkdepots.pl\n";
|
|
}
|
|
|
|
$sdxroot = $ENV{'SDXROOT'} || die "SDXROOT not defined\n";
|
|
|
|
chdir($sdxroot);
|
|
|
|
print "\nChecking for consistent mappings...\n";
|
|
|
|
$SdRootMapping = `sd client -o`;
|
|
if ($SdRootMapping =~ m/depot\/([^\/]+)\/root\/... /){
|
|
$SdRootDepotMapping = lc($1);
|
|
}
|
|
else {
|
|
die "Warning: Either there are Source Depot problems or some client specification(s) might be corrupt in $sdxroot.\n";
|
|
}
|
|
|
|
@dirs = `dir /ad /b $sdxroot`;
|
|
chomp(@dirs);
|
|
|
|
@serverarray = ();
|
|
|
|
foreach $dir (@dirs) {
|
|
$dir = "$sdxroot\\$dir";
|
|
if (-e "$dir\\sd.ini"){
|
|
chdir($dir);
|
|
$server = `sd info | findstr /c:"Server address:"`;
|
|
|
|
if ($temp = ~ m/Server/){
|
|
push(@serverarray, $server);
|
|
}
|
|
else {
|
|
die "Warning: Either there are Source Depot problems or some client specification(s) might be corrupt in $dir\n";
|
|
}
|
|
}
|
|
}
|
|
|
|
chdir($sdxroot);
|
|
|
|
%seen = ();
|
|
@uniqeservers = ();
|
|
foreach $server (@serverarray) {
|
|
push(@uniqeservers, $server) unless $seen{$server}++;
|
|
}
|
|
|
|
for (@cleanservers = @uniqeservers) { s/Server address: //, s/.ntdev.microsoft.com// };
|
|
|
|
chomp(@cleanservers);
|
|
|
|
$bIsInconsistent = 0;
|
|
|
|
print "root -> $SdRootDepotMapping, ";
|
|
|
|
$depotprintcount = 1;
|
|
$depotcount = 1;
|
|
|
|
@inconsistencies = ();
|
|
|
|
foreach $server (@cleanservers){
|
|
$sdcmd = "sd -p $server client -o | findstr /i /c:\"//depot/\" | findstr /i /v /c:\"//depot/$ARGV[0]/\"";
|
|
$output = `$sdcmd`;
|
|
|
|
if ($output =~ m/depot\/([^\/]+)\/([^\/]+)\/... /){
|
|
$depotmatch = lc($1);
|
|
if (!($depotmatch eq $SdRootDepotMapping)){
|
|
$inconsistency = "$2 -> $depotmatch";
|
|
push(@inconsistencies, $inconsistency);
|
|
$bIsInconsistent = 1;
|
|
}
|
|
else {
|
|
if (($depotprintcount) % 3 == 0 || $depotcount == $#cleanservers+1 ){
|
|
$separator = "\n";
|
|
}
|
|
else {
|
|
$separator = ", ";
|
|
}
|
|
print "$2 -> ",$depotmatch, $separator;
|
|
++$depotprintcount;
|
|
}
|
|
++$depotcount;
|
|
|
|
}
|
|
else {
|
|
die "Warning: Either there are Source Depot problems or some client specification(s) might be corrupt when querying server $server.\n";
|
|
}
|
|
}
|
|
|
|
if (!$bIsInconsistent){
|
|
print "\nInformation: All depots are consistent with the root depot's mapping\n";
|
|
}
|
|
else {
|
|
print "\nInconsistent mapping(s): ";
|
|
$inconsistencyCnt = 0;
|
|
foreach $inconsistency (@inconsistencies){
|
|
if ($inconsistencyCnt == $#inconsistencies) {
|
|
$separator = "\n";
|
|
}
|
|
else {
|
|
$separator = ", ";
|
|
}
|
|
print $inconsistency, $separator;
|
|
$inconsistencyCnt++;
|
|
|
|
}
|
|
print "\nWarning: At least one depot does not map to the same depot that the root\n";
|
|
print "depot maps to as reported above. If this is not the intention, please edit\n";
|
|
print "the client specification for the inconsistent depots.\n";
|
|
} |