windows-nt/Source/XPSP1/NT/tools/sp/copysym.cmd
2020-09-26 16:20:57 +08:00

190 lines
4.8 KiB
Batchfile

@echo off
REM ------------------------------------------------------------------
REM
REM copysym.cmd
REM Copy symbols from US build to the other language builds.
REM
REM Copyright (c) Microsoft Corporation. All rights reserved.
REM Version: < 1.0 > 05/28/2002 Suemiao Rossignol
REM ------------------------------------------------------------------
perl -x "%~f0" %*
@set RETURNVALUE=%errorlevel%
@goto :endperl
#!perl
use strict;
use lib "$ENV{RAZZLETOOLPATH}\\sp";
use lib $ENV{RAZZLETOOLPATH};
use Logmsg;
use ParseArgs;
use File::Basename;
use comlib;
use GetIniSetting;
$ENV{script_name} = basename( $0 );
sub Usage {
print<<USAGE;
Copy symbols from US build to the other language builds.
Usage:
$ENV{script_name} -l:Language -n:<Build Number> [-s:<Source Server>][-d:<Target Server>]
[-a:<Build Architecture>] [-t:<Build Debug Type>][-d] [-p]
-n: Build Number.
-s: Source Server.
Default is skifre00.
-d: Target Server.
Default is %computername%.
-a: Build Architecture. x86 or ia64.
Default is $ENV{_BuildArch}.
-t: Build Debug Type. fre or chk.
Default is $ENV{_BuildType}.
-p: Powerless.
-? Display Usage.
USAGE
exit(1)
}
my ( $buildNo, $srcServer, $destServer, $isPowerLess);
my ( $buildArch, $buildType );
my ( $srcPath, $destPath );
if( !&GetParams()) { exit(1); }
timemsg( "Start $ENV{script_name}" );
if( lc $ENV{lang} eq "usa" )
{
logmsg( "Skip running for usa builds" );
exit(0);
}
if( !&InitVars() ) { exit(1); }
if( !&CopySymbols ){ exit(1); }
timemsg( "Complete $ENV{script_name}" );
exit(0);
#-----------------------------------------------------------------------------
sub GetParams
{
my $relServer;
parseargs('?' => \&Usage, 'l:' =>\$ENV{lang}, 'n:' => \$buildNo,
's:' =>\$srcServer, 'd:' =>\$destServer,
'a:' =>\$buildArch, 't:' =>\$buildType,
'p'=>\$isPowerLess );
$ENV{lang} = "usa" if( !$ENV{lang} );
if( !$buildNo )
{
errmsg( "Please enter build number." );
return 0;
}
$destServer = $ENV{computername} if( !$destServer );
if( !$buildArch ) { $buildArch = $ENV{_BuildArch}; }
elsif( lc $buildArch ne "x86" && lc $buildArch ne "ia64" )
{
errmsg( "Invalid Build Architecture." );
return 0;
}
if( !$buildType ) { $buildType = $ENV{_BuildType}; }
elsif( lc $buildType ne "fre" && lc $buildType ne "chk" )
{
errmsg( "Invalid Build Debug Type." );
return 0;
}
&comlib::ResetLogErrFile( "copysym.$buildNo.$buildArch$buildType.$destServer" );
return 1;
}
#-----------------------------------------------------------------------------
sub InitVars
{
my ( @iniRequest );
# Check source server is available
if( !$srcServer )
{
@iniRequest = ( "BuildMachine\:\:$buildArch\:\:$buildType\:\:usa" );
if( !($srcServer = &GetIniSetting::GetSetting( @iniRequest )))
{
errmsg( "Failed to find usa symbol server." );
return 0;
}
}
if( !&comlib::ExecuteSystem( "net view $srcServer >nul 2>nul") )
{
errmsg( "Failed to see [$srcServer] via net view, exit. ");
return 0;
}
# Get release Drive
@iniRequest = ( "releaseDrive::$destServer" );
my( $relDrive ) = &GetIniSetting::GetSetting( @iniRequest );
# Check source path is existing
$srcPath = "\\\\$srcServer\\release\\$buildNo\\usa\\$buildArch$buildType\\spcd\\support\\symbols";
$destPath = "\\\\$destServer\\$relDrive\$\\release\\$buildNo\\$ENV{lang}\\$buildArch$buildType\\spcd\\support\\symbols";
logmsg( "Lauguage ............[$ENV{lang}]" );
logmsg( "Build No ............[$buildNo]" );
logmsg( "Source Serevrs ......[$srcServer]" );
logmsg( "Target Serevrs ......[$destServer]" );
logmsg( "Build Platform ......[$buildArch$buildType]" );
logmsg( "Release Path ........[$srcPath]" );
logmsg( "Release Path ........[$destPath]" );
logmsg( "Temp Log file .......[$ENV{LOGFILE}]" );
logmsg( "Temp Error file .....[$ENV{ERRFILE}]" );
return 1;
}
#-----------------------------------------------------------------------------
sub CopySymbols
{
return 1 if( $isPowerLess );
my $cnt;
while( !(-e "$srcPath" ) && $cnt <= 60 )
{
timemsg( "[$srcPath] is not available, sleep and try again later" );
sleep(600);
$cnt++;
}
if( $cnt > 60 )
{
errmsg( "Give up copying [$srcPath] after 10 hours checking." );
return 0;
}
&comlib::ExecuteSystem( "md $destPath" ) if( !(-e $destPath ) );
return 0 if( !&comlib::ExecuteSystem( "compdir /deknst /x eula.txt $srcPath $destPath" ) );
return 1;
}
#-----------------------------------------------------------------------------
1;
__END__
:endperl
@echo off
if not defined seterror (
set seterror=
for %%a in ( seterror.exe ) do set seterror=%%~$PATH:a
)
@%seterror% %RETURNVALUE%