function Dialog() { // "Dialog" is an object that is used to put up dialogs to the user. this.fShowDialog = false; // true,false this.fEMailOnly = false; // true,false this.cDialogIndex = 0; // Index to keep track of wheter we've shown this dialog yet this.strTitle = ''; // Dialog Title this.strMessage = ''; // Dialog Message this.aBtnText = new Array(); // Array of button text strings this.nSecRemaining = 0; // 3000 } function BuildType() { // "BuildType" is an object to describe the type of build this.strConfigLongName = ''; // ConfigLongName this.strEnviroLongName = ''; // EnviroLongName this.strConfigDescription = ''; // ConfigDescription this.strEnviroDescription = ''; // EnviroDescription this.fDistributed = false; // Indicates if this is a distributed build. this.strPostBuildMachine = ''; // PostBuildMachine } function ElapsedTimes() { // "ElapsedTimes" is an object to keep track of overall elapsed times for the build this.dateScorchStart = 'unset'; // UTC Timestamp of when the Scorch phase started this.dateScorchFinish = 'unset'; // UTC Timestamp of when the Scorch phase finished this.dateSyncStart = 'unset'; // UTC Timestamp of when the sync phase started this.dateSyncFinish = 'unset'; // UTC Timestamp of when the sync phase finished this.dateBuildStart = 'unset'; // UTC Timestamp of when the build phase started this.dateBuildFinish = 'unset'; // UTC Timestamp of when the build phase finished this.dateCopyFilesStart = 'unset'; // UTC Timestamp of when the CopyFiles phase started this.dateCopyFilesFinish = 'unset'; // UTC Timestamp of when the CopyFiles phase finished this.datePostStart = 'unset'; // UTC Timestamp of when the postbuild phase started this.datePostFinish = 'unset'; // UTC Timestamp of when the postbuild phase finished } function DepotInfo() { // "DepotInfo" is an array of depots in this enlistment this.strName = ''; // Human readable name of depot (left side of sd.map list) this.strDir = ''; // Directory name for this depot (right side of sd.map list) } function Enlistment() { // "Enlistment" is an array of known enlistments on the machine (given in env. template) this.strRootDir = ''; // Root directory of enlistment (e.g. d:\newnt) this.strBinaryDir = ''; // Place where built binaries get put (e.g. d:\binaries.*) this.aDepotInfo = new Array(); // "DepotInfo" is an array of depots in this enlistment } function Machine() { // "Machine" is a hash array indexed by machine name this.strName = ''; // machine name this.strStatus = 'idle'; // idle,busy,waiting this.strLog = ''; // Contents of detailed log for this machine this.aEnlistment = new Array(); // "Enlistment" is an array of known enlistments on the machine (given in env. template) this.strBuildPassStatus = ''; // "busy[0,1,2]", "wait[1,2]" this.fSuccess = true; } function UpdateCount() { // "UpdateCount" Number which is incremented any time this depot object or its tasks are changed. this.nCount = 1; } function Task() { // "Task" is an array of tasks currently or previously performed in this depot this.strName = ''; // sync,build,postbuild this.nID = -1; // Machine-unique ID for this task. Must be valid after it has completed this.dateStart = ''; // Date object giving the start time of the task this.dateFinish = ''; // Date object giving the finish time of the task this.strOperation = ''; // Sync:sync,resolve; Build:pass0,compile,link; PostBuild: ??? this.strStatus = 'not started'; // not started,in progress,completed,waiting this.fSuccess = true; // Indicates success or failure of task. Should be used instead of cErrors to determine error status. this.nRestarted = 0; // The number of times an operation was automatically restarted. this.cFiles = 0; // Count of sync'd files this.cResolved = 0; // Count of resolved files this.cWarnings = 0; // Warning count this.cErrors = 0; // Error count this.strLogPath = ''; // UNC path to detailed log file this.strErrLogPath = ''; // UNC path to log file containing only detailed error information this.strFirstLine = ''; // First line of error message in UI status this.strSecondLine = ''; // Second line of error message in UI status } function Depot() { // "Depot" is an array of depots for the build. It contains the depots that are actually performing tasks. this.strName = ''; // Name of depot (DepotInfo.strName) this.objUpdateCount = new UpdateCount(); this.strDir = ''; // Directory of depot (DepotInfo.strDir) this.strPath = ''; // Full path of depot's root directory this.strStatus = 'not started'; // not started,syncing,building,postbuild,waiting,error this.strMachine = ''; // Name of the machine building this depot this.nEnlistment = -1; // index of enlistment in machine's enlistment array this.aTask = new Array(); // "Task" is an array of tasks currently or previously performed in this depot } function Build() { // "Build" is an array of build objects. For now there will always be only one build. this.strConfigTemplate = ''; // file://\\server\path\clean_build.xml this.strEnvTemplate = ''; // file://\\server\path\bluelab.xml this.objBuildType = new BuildType(); this.objElapsedTimes = new ElapsedTimes(); this.hMachine = new Object(); // "Machine" is a hash array indexed by machine name this.aDepot = new Array(); // "Depot" is an array of depots for the build. It contains the depots that are actually performing tasks. } function PublicDataObj() { // "PublicDataObj" is the object to be put in the PublicData property. All data here will be exposed to outside clients. // $DROPVERSION: this.strDataVersion = 'V(########) F(!!!!!!!!!!!!!!)'; // $ this.strStatus = 'idle'; // idle,busy,completed this.strMode = 'idle'; // idle,master,slave,standalone this.objDialog = new Dialog(); this.aBuild = new Array(); // "Build" is an array of build objects. For now there will always be only one build. } function Util() { // "Util" is function pointers and other data used by the utility thread. this.fnLoadXML = null; // Pointer to function which will load an XML file into an object this.fnUneval = null; // Pointer to function which will convert any JScript data type into a string this.fnDeleteFileNoThrow = null; // Pointer to function to delete files without throwing errors this.fnMoveFileNoThrow = null; // Pointer to function to move files without throwing error this.fnCreateFolderNoThrow = null; // Pointer to function to make folders without throwing error this.fnDirScanNoThrow = null; // Pointer to function to scan a folder (for files) without throwing error this.fnCopyFileNoThrow = null; // Pointer to function to copy files without throwing error this.fnCreateHistoriedFile = null; // Pointer to function create files with a history of numbered files this.fnCreateNumberedFile = null; // Pointer to function create a file with an increasing index this.unevalNextID = 0; // Used by the Uneval function to get unique IDs for objects being stringized } function PublishedFile() { // "PublishedFiles" is the array of filenames this.strPublishedStatus = 'not yet copied'; // "not yet copied", "duplicate", "copy to master", "copy to slaves", "complete" this.strName = ''; } function PublishEnlistment() { // "PublishEnlistment" is hash by enlistment path this.aPublishedFile = new Array(); // "PublishedFiles" is the array of filenames this.strSrcUNCPrefix = ''; } function Publisher() { // "Publisher" is a hash by slave machine name this.hPublishEnlistment = new Object(); // "PublishEnlistment" is hash by enlistment path } function PublishedFiles() { // "PublishedFiles" is a hash by filename of the files to be published this.aReferences = new Array(); // array of DepotInfo } function RemoteMachine() { // "RemoteMachine" is a hash array indexed by machine name this.fSetConfig = false; // Determines if we have succeeded in doing a "setconfig" command to a slave machine. this.fRegistered = false; // Determines if we have succeeded in doing a "RegisterEventSource" to a slave machine. this.objRemote = null; // Only valid on master side, handle to remote mtscript } function EnvObj() { // the environment variables from razzle } function EnlistmentInfo() { // Array of environments for each enlistment for this machine this.hEnvObj = new Object(); } function RemotePublicDataObj() { // Hash by machine name, a copy of the public data from each remote build machine } function PrivateDataObj() { // "PrivateDataObj" is the type of the PrivateData property. This is used to share data between threads but will not be seen by others this.fileLog = null; // General logfile which logging information is written to this.fEnableLogging = false; // Enable/Disable writing logmsgs to the logfile. this.objConfig = null; // Config data read from configuration template this.objEnviron = null; // Environment data read from environment template this.fnExecScript = null; // Pointer to function to delegate calls to exec to. Will vary depending on mode engine is running in. this.objUtil = new Util(); this.dateErrorMailSent = 0; // Time that we last sent out an error message this.fIsStandalone = false; // True if the machine is operating in standalone mode this.hPublisher = new Object(); // "Publisher" is a hash by slave machine name this.hPublishedFiles = new Object(); // "PublishedFiles" is a hash by filename of the files to be published this.aDepotList = new Array(); // Array of depots giving names of all known depots this.hRemoteMachine = new Object(); // "RemoteMachine" is a hash array indexed by machine name this.aEnlistmentInfo = new Array(); // Array of environments for each enlistment for this machine this.strLogDir = ''; // Directory location where log files should be placed this.aStringMap = new Array(); // Array of string mappings received from setstringmap - used for sending to slaves this.hRemotePublicDataObj = new Object(); }