Windows-Server-2003/base/ntsetup/bom/diff.pl

214 lines
7.5 KiB
Perl

##
## DIFF.PL
## Sub-routines used to windiff CD Trees
## Created by: Robert E. Blue (a-robebl) 09/08/99
##
sub tree_diff {
if ( $platform eq "x86" ) {
$platdir = "i386";
} else {
$platdir = $platform;
}
`ECHO \@ECHO OFF > $log_path\\wind.cmd`;
if ( $product =~ /CD2/i ) {
$local = "$drive\\$lang\\cd2" unless $local; ### For wind.bat
@cd2_plats = ( 'x86' );
push @cd2_plats, 'nec98' if $lang =~ /JPN/i;
foreach $cd2_plat ( @cd2_plats ) {
$bld_root{$cd2_plat} = find_bldsrv( $bld_plat{uc $cd2_plat} ) or die "ERROR: No release shares found for $cd2_plat!\n\n";
}
&wind_cmd( "dbg.htm", "\\\\nighthawk\\nec\\review\\scratch\\w2ktool\\dbg.htm", "dbg.htm-cd2" );
&wind_cmd( "autorun.inf", "$bld_root{'x86'}\\fre.wks\\symbolcd\\cd\\autorun.inf", "autorun.inf-cd2" );
&wind_cmd( "setup\\gifs", "$bld_root{'x86'}\\fre.wks\\symbolcd\\cd\\setup\\gifs", "gifs-setup-cd2" ) unless $cd2_plat =~ /nec98/i;
foreach $cd2_plat ( @cd2_plats ) {
if ( $cd2_plat =~ /x86/i ) { $plat_dir = 'i386'; } else { $plat_dir = $cd2_plat; }
&wind_cmd( "symbols\\$plat_dir\\retail", "$bld_root{$cd2_plat}\\fre.wks\\symbolcd\\cd\\symbols\\$plat_dir\\retail", "$cd2_plat\-fre-cd2" );
&wind_cmd( "symbols\\$plat_dir\\debug", "$bld_root{$cd2_plat}\\chk.wks\\symbolcd\\cd\\symbols\\$plat_dir\\debug", "$cd2_plat\-chk-cd2" );
&wind_cmd( "tools\\$plat_dir", "$bld_root{$cd2_plat}\\fre.wks\\symbolcd\\cd\\tools\\$plat_dir", "$cd2_plat\-tools-cd2" ) unless $cd2_plat =~ /nec98/i;
&wind_cmd( "setup\\$plat_dir", "$bld_root{$cd2_plat}\\fre.wks\\symbolcd\\cd\\setup\\$plat_dir", "$cd2_plat\-setup-cd2" ) unless $cd2_plat =~ /nec98/i;
}
`$log_path\\wind.cmd`;
`del $log_path\\wind.cmd`;
### Check windiff logs
print "\nChecking windiff logs...\n\n";
wdfcheck "dbg.htm-cd2";
wdfcheck "autorun.inf-cd2";
wdfcheck "gifs-setup-cd2";
foreach $cd2_plat ( @cd2_plats ) {
wdfcheck "$cd2_plat\-fre-cd2";
wdfcheck "$cd2_plat\-chk-cd2";
wdfcheck "$cd2_plat\-tools-cd2" unless $cd2_plat =~ /nec98/i;
wdfcheck "$cd2_plat\-setup-cd2" unless $cd2_plat =~ /nec98/i;
}
} else {
$bld_root{$platform} = find_bldsrv( $bld_plat{uc $platform} ) or die "ERROR: No release shares found for $platform!\n\n";
$ntbuilds = "$bld_root{$platform}\\$fre.$product";
$local = "$drive\\$lang\\$fre.$product\\$platform" unless $local;
### Platform Directory.
&wind_cmd( $platdir, $ntbuilds, $platdir );
### WINNTUPG
&wind_cmd( "$platdir\\winntupg", "$ntbuilds\\winnt32\\winntupg", "winntupg" );
### WIN9XUPG
&wind_cmd( "$platdir\\win9xupg", "$ntbuilds\\winnt32\\win9xupg", "win9xupg" ) if $platform =~ /x86/i;
### COMPDATA
&wind_cmd( "$platdir\\compdata", "$ntbuilds\\winnt32\\compdata", "compdata" );
if ( $lang =~ /USA/i ) {
### SUPPORT
&wind_cmd( "support", "$ntbuilds\\support", "support" );
### VALUEADD
&wind_cmd( "valueadd", "$bld_root{$platform}\\$fre.wks\\valueadd", "valueadd" );
### DISCOVER
&wind_cmd( "discover", "$bld_root{$platform}\\$fre.wks\\discover", "discover" ) if $product =~ /wks/i;
} else {
### SUPPORT
&wind_cmd( "support", "\\\\intlrel\\nt5media\\$lang\\$product\\x86\\support", "support" );
### VALUEADD
&wind_cmd( "valueadd", "\\\\intlrel\\nt5media\\$lang\\$product\\x86\\valueadd", "valueadd" );
### DISCOVER
&wind_cmd( "discover", "\\\\rastaman\\external\\src\\nt5\\discover\\$lang\\content", "discover" ) if $product =~ /wks/i;
}
### PRINTERS
if ( $product =~ /(SRV|ENT|DTC)/i ) {
&wind_cmd( "printers", "$ntbuilds\\printers", "printers" );
&wind_cmd( "clients", "$ntbuilds\\clients", "clients" );
}
`$log_path\\wind.cmd`;
`del $log_path\\wind.cmd`;
### Check windiff logs
print "\nChecking windiff logs...\n\n";
wdfcheck "$platdir";
wdfcheck "winntupg";
wdfcheck "support";
wdfcheck "msreport";
wdfcheck "win9xupg" if $platform =~ /x86/i;
wdfcheck "reskit";
wdfcheck "discover" if $product =~ /wks/i;
wdfcheck "valueadd";
wdfcheck "compdata";
if ( $product =~ /(SRV|ENT|DTC)/i ) {
wdfcheck "printers";
wdfcheck "clients";
}
}
}
####################################################################
### Create the wind.cmd file to be executed by &runwindiff()
###
sub wind_cmd {
my $cmplcl = $_[0];
my $cmpsrc = $_[1];
my $cmpname = uc $_[2];
print "Windiffing $cmplcl...\n";
`echo start windiff $local\\$cmplcl $cmpsrc -T -Sdx $log_path\\$build-$platform-$fre-$product-$cmpname.wdf >> $log_path\\wind.cmd`;
`echo sleep 1 >> $log_path\\wind.cmd`;
}
#####################################################################
### Check the windiff logs to find if any files did not match and
### attempt to fix them if they do not.
###
sub wdfcheck {
$wdf_log = "$log_path\\$build-$platform-$fre-$product-$_[0].wdf";
$fix_files = 1 if $_[0] =~ /fix/i;
print "Checking $wdf_log for errors\n";
if ( -e $wdf_log ) {
$wdf_list = `type $wdf_log`;
unless ( $wdf_list =~ /-- 0 files listed/g ) {
while ( $wdf_list =~ /\.\\(\S+)/g ) {
$problem_files++ unless $1 =~ /(setupp.ini|2000rkst.msi|different in blanks)/i;
push @bad_files, $1;
$wdf_count++
}
if ( $problem_files ) {
$wdf_brk++;
print "Found problem files in $build $platform $fre.$product \\$_[0]\n";
system "start notepad $wdf_log";
### Let's make it easier to check for different in blanks only (CD media only).
if ( $problem_files <= 25 && $goldcheck_ver ) {
$wdf_list =~ /-- (.*) : (.*) --/;
$wdf_local = $1;
$wdf_remote = $2;
foreach $pf ( @bad_files ) {
next if $pf =~ /(setupp.ini|2000rkst.msi)/i;
$counter++;
print " `--> Checking if $pf is different in blanks only.\n";
### We only want to start 5 at a time.
$dibo[$dibo_counter] .= "start windiff $wdf_local\\$pf $wdf_remote\\$pf && ";
if ( $counter == 5 ) {
$dibo_counter++;
$counter = 0;
}
}
### Execute the windiff.
foreach $dibo_wdf ( @dibo ) {
`$dibo_wdf ECHO.`;
}
}
if ( $fix_files ) {
print " `-- Would you like to start Share Fixer now? [Y/N] ";
$verify = <STDIN> ;
if ( $verify =~ ( /^Y/i ) ) {
print " `-- Fixing problem files found in \\$_[0]...\n";
`start sharefix $wdf_log`;
} else {
print " `-- Ok, not fixing problem files found in \\$_[0]...\n";
}
}
}
}
}
}
return 1;