Windows-Server-2003/tools/postbuildscripts/tokrel.cmd

203 lines
5.8 KiB
Batchfile

@REM -----------------------------------------------------------------
@REM
@REM Tokrel.cmd - JorgeBa
@REM Move the build resources to the release servers
@REM
@REM Copyright (c) Microsoft Corporation. All rights reserved.
@REM
@REM -----------------------------------------------------------------
@perl -x "%~f0" %*
@goto :EOF
#!perl
use strict;
use lib $ENV{RAZZLETOOLPATH} . "\\PostBuildScripts";
use lib $ENV{RAZZLETOOLPATH};
use PbuildEnv;
use Logmsg;
use ParseArgs;
use File::Basename;
use BuildName;
use GetIniSetting;
use comlib;
my $scriptname = basename( $0 );
sub Usage {
print<<USAGE;
Propogate miscellaneous build components such as symbols and DDKS to conglomeration servers.
Usage:
$scriptname: -l:<language> [-b:<BuildName>][-misc] [-p]
-l Language.
Default is "usa".
-b Build Name.
Default is defined in
<ReleaseShare>\\build_logs\\buildname.txt for language usa.
<ReleaseShare>\\<lang>\\build_logs\\buildname.txt for language none usa.
-p Powerless.
Display key variables only.
-? Display Usage.
Example:
$scriptname -b:2415.x86fre.main.001222-1745
$scriptname -l:ger -p
USAGE
exit(1)
}
my ( $buildName, $buildNo, $powerLess, $buildBranch, $buildArch, $buildType, $iniFile );
my ( $buildTime, %groupShareName, %groupShareRootDir, @group, $releaseDrive );
my ( $lang, $computerName, $releaseResDir);
my ( @conglomerators, @releaseServers, @releaseAccess );
my ( @hashTable, $miscOnly );
&GetParams();
if(lc($ENV{"lang"}) ne "usa" && lc($ENV{"lang"}) ne "cov")
{
timemsg( "Start [$scriptname]" );
if( !&InitVars() ) { exit(1); }
if( !$powerLess && !&CopyTokens ){ exit(1); }
timemsg( "Complete [$scriptname]" );
exit(0);
}
#-----------------------------------------------------------------------------
sub GetParams
{
parseargs('?' => \&Usage, 'b:' => \$buildName, 'p' =>\$powerLess );
$lang = lc( $ENV{lang} );
$computerName = lc( $ENV{computername} );
}
#-----------------------------------------------------------------------------
sub InitVars
{
my( @iniRequest );
#####Set build name, buildbranch, buildArch, buildType and ini file
if( !$buildName )
{
my ($cmdLine ) = "$ENV{RazzleToolPath}\\postbuildscripts\\getlatestrelease.cmd -l:$lang";
return 0 if( !chomp($buildName= `$cmdLine`) );
}
$buildNo = build_number($buildName);
$buildBranch = lc ( build_branch($buildName) );
$buildArch = lc ( build_arch($buildName) );
$buildType = lc ( build_type($buildName) );
$buildTime = build_date($buildName);
if( !$buildBranch || !$buildArch || !$buildType )
{
errmsg( "Unable to parse [$buildName]");
return 0;
}
$iniFile = "$buildBranch.$lang.ini";
#####Set <ReleaseShareName> & <ReleaseShareRootDir> & <ReleaseDir>
my $lookUpName = "release";
if( $ENV{_BuildBranch} =~ /idx\d{2}/i )
{
$lookUpName = "$ENV{_buildBranch}$lookUpName";
}
my $releaseShareRootDir = &comlib::ParseNetShare( $lookUpName, "Path" );
if( lc($lang) eq "usa" )
{
$releaseResDir = "$releaseShareRootDir\\$buildName";
}
else
{
$releaseResDir = "$releaseShareRootDir\\$lang\\$buildName";
}
if( !( -e $releaseResDir ) )
{
errmsg( "[$releaseResDir] not exists, exit." );
return 0;
}
$releaseShareRootDir =~ /^([^\:]+)\:(\\.+)$/;
my $localReleaseDrive= $1;
$releaseShareRootDir = $2;
#####Set release servers
@iniRequest = ( "ReleaseServers::$buildArch$buildType" );
my( $iniRelServers ) = &GetIniSetting::GetSetting( @iniRequest );
if( !$iniRelServers )
{
logmsg( "no [Release Servers] defined in $iniFile, exit." );
}
@releaseServers = split( /\s+/, $iniRelServers );
#####Set public share access
@iniRequest = ( "ReleaseAccess");
my $iniAccess = &GetIniSetting::GetSetting( @iniRequest );
@releaseAccess = split ( /\s+/, $iniAccess );
@releaseAccess = "$ENV{userDomain}\\$ENV{UserName}" if( !@releaseAccess );
logmsg( "Lauguage .................[$lang]" );
logmsg( "This computer.............[$computerName]");
logmsg( "Release Servers ..........[$iniRelServers]");
logmsg( "Build name ...............[$buildName]" );
logmsg( "Ini file .................[$iniFile]" );
logmsg( "Local release Drive.......[$localReleaseDrive]" );
logmsg( "Share Access is ..........[@releaseAccess]" );
logmsg( "Temp Log file ............[$ENV{LOGFILE}]" );
logmsg( "Temp Error file ..........[$ENV{ERRFILE}]" );
return 1;
}
#-----------------------------------------------------------------------------
sub CopyTokens
{
my ( $destRootDir, $copyFlag );
for my $sReleaseServer ( @releaseServers )
{
if( $sReleaseServer =~ /burn/)
{
next;
}
#####Set Remote Misc Share Drive
my $tmpReleasePath = &comlib::ParseNetShare( "\\\\$sReleaseServer\\release", "Path" );
$tmpReleasePath =~ /^([^\:]+)\:(\\.+)$/;
$releaseDrive = $1;
if ( !$releaseDrive )
{
my( @iniRequest ) = ("ReleaseDrive::$sReleaseServer");
$releaseDrive = &GetIniSetting::GetSettingEx( $buildBranch,$lang,@iniRequest );
if ( !$releaseDrive )
{
$ENV{_ntdrive} =~ /(.*)\:/;
$releaseDrive = $1;
}
}
$destRootDir = "\\\\$sReleaseServer\\$releaseDrive\$\\Release\\$lang\\$buildName\\Resources";
$copyFlag = "/ydei";
comlib::ExecuteSystem("xcopy $copyFlag $releaseResDir\\Resources $destRootDir");
}
#####Check error logs
if( -e $ENV{errfile} && !(-z $ENV{errfile}) )
{
$ENV{errfile} =~ /(.*)\.tmp$/;
logmsg("Please check error at $1");
return 0;
}
logmsg("tokrel Copy Successfully");
return 1;
}
#-----------------------------------------------------------------------------
1;