## ## 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 = ; 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;