mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-12-13 18:27:35 +00:00
909 lines
23 KiB
Plaintext
909 lines
23 KiB
Plaintext
global PPCPROJECTFAILED
|
||
global CVSSESSIONFILE
|
||
global CVSSESSIONNAME
|
||
global BUILDLIST
|
||
global BUILDNAME
|
||
global FOLDERTIME
|
||
global SOURCEPATH
|
||
global CHECKOUTTIME
|
||
global TINDERBOXTREE
|
||
global MACHINEADMIN
|
||
global CLOBBERBUILD
|
||
global STARTUPDISK
|
||
global BINARYPATH
|
||
property CONFIGFILENAME : "Tinderbox Config"
|
||
|
||
-------------------------
|
||
on CreateLogFile(logFilePath)
|
||
-- creates a "build log" file
|
||
-------------------------
|
||
global logFileID
|
||
set logFileID to 0
|
||
try
|
||
set logFileID to open for access file logFilePath with write permission
|
||
--set the type of alias logFilePath to "CWIE"
|
||
on error errMsg2 number errNum
|
||
if (errNum is not -49) then
|
||
-- nothing to do about such errors
|
||
error errMsg2 & " error = " & errNum
|
||
end if
|
||
end try
|
||
end CreateLogFile
|
||
|
||
-------------------------
|
||
on CloseLogFile()
|
||
-- close log file
|
||
-------------------------
|
||
global logFileID
|
||
if logFileID is not 0 then close access logFileID
|
||
end CloseLogFile
|
||
|
||
-------------------------
|
||
on logMessage(m)
|
||
-- logs a message to the log file
|
||
-------------------------
|
||
global logFileID
|
||
try
|
||
if logFileID is not 0 then write (m as string) & (ASCII character 13) to logFileID
|
||
--display dialog m
|
||
on error
|
||
-- hmmm??
|
||
end try
|
||
end logMessage
|
||
|
||
-------------------------
|
||
on trim(q)
|
||
-- strip leading and trailing white space.
|
||
-------------------------
|
||
set realLast to length of q
|
||
repeat
|
||
if realLast is 0 then exit repeat
|
||
set c to character realLast of q
|
||
if c is not space and c is not tab then exit repeat
|
||
set realLast to realLast - 1
|
||
end repeat
|
||
if (realLast is 0) then return ""
|
||
set realFirst to 1
|
||
repeat
|
||
if realFirst > realLast then exit repeat
|
||
set c to character realFirst of q
|
||
if c is not space and c is not tab then exit repeat
|
||
set realFirst to realFirst + 1
|
||
end repeat
|
||
if (realFirst > realLast) then return ""
|
||
return text realFirst through realLast of q
|
||
end trim
|
||
|
||
-------------------------
|
||
on Token(aString, tokenRequested)
|
||
-- Return the string up to the first space. Input must be trimmed.
|
||
-------------------------
|
||
set tokenFirst to 0 -- offset of first char of current token
|
||
set tokenCount to 0 -- which token we are examining
|
||
set tokenScan to 0 -- offset of next character being examined
|
||
set stringLength to length of aString
|
||
if (tokenRequested = 0) then return ""
|
||
repeat
|
||
set tokenFirst to tokenFirst + 1
|
||
set tokenCount to tokenCount + 1
|
||
-- check for inital whitespace
|
||
repeat
|
||
set c to character tokenFirst of aString
|
||
if c is not space and c is not tab then exit repeat
|
||
set tokenFirst to tokenFirst + 1
|
||
end repeat
|
||
-- check for inital quote
|
||
set isQuotedString to false
|
||
if c is "\"" then
|
||
set isQuotedString to true
|
||
set tokenFirst to tokenFirst + 1
|
||
end if
|
||
-- scan for the next white space or the end of string
|
||
set tokenScan to tokenFirst - 1
|
||
repeat
|
||
set tokenScan to tokenScan + 1
|
||
if tokenScan > stringLength then exit repeat
|
||
set c to character tokenScan of aString
|
||
if (isQuotedString) then
|
||
if c is "\"" then exit repeat
|
||
else
|
||
if c is space or c is tab then exit repeat -- whitespace
|
||
end if
|
||
end repeat
|
||
-- Got a token
|
||
if (tokenCount = tokenRequested) then
|
||
return trim(text tokenFirst through (tokenScan - 1) of aString)
|
||
end if
|
||
if (tokenScan > stringLength) then return ""
|
||
set tokenFirst to tokenScan
|
||
end repeat
|
||
end Token
|
||
|
||
-------------------------
|
||
on monthNumber(dateObj)
|
||
-------------------------
|
||
set monthList to {January, February, March, April, May, <20>
|
||
June, July, August, September, October, November, December}
|
||
set m to month of dateObj
|
||
repeat with i from 1 to number of items of monthList
|
||
if m = item i of monthList then
|
||
return i
|
||
end if
|
||
end repeat
|
||
end monthNumber
|
||
|
||
-------------------------
|
||
on ExtractTimeString(d)
|
||
-- given a date object, extract hh.mm
|
||
-------------------------
|
||
set tstring to ""
|
||
set t to (time of d as integer)
|
||
set m to (t div 60 as integer)
|
||
set h to m div 60
|
||
set m to (m - h * 60)
|
||
if (h < 10) then set tstring to tstring & "0"
|
||
set tstring to tstring & h
|
||
if (m < 10) then set tstring to tstring & "0"
|
||
set tstring to tstring & m
|
||
return tstring
|
||
end ExtractTimeString
|
||
|
||
-------------------------
|
||
on ExtractDateString(d)
|
||
-- given a date object, extract yy/mm/dd
|
||
-------------------------
|
||
set dstring to (year of d) & "."
|
||
set m to monthNumber(d)
|
||
if (m < 10) then set dstring to dstring & "0"
|
||
set dstring to dstring & m & "."
|
||
set d to (day of d)
|
||
if (d < 10) then set dstring to dstring & "0"
|
||
set dstring to dstring & d
|
||
return dstring
|
||
end ExtractDateString
|
||
|
||
-------------------------
|
||
on GetCVSTimeStamp(d)
|
||
-- turns AppleScript date object into a text CVS type time stamp
|
||
-- suitable for passing into MacCVS
|
||
-------------------------
|
||
set dstring to ""
|
||
set m to monthNumber(d)
|
||
if (m < 10) then set dstring to "0"
|
||
set dstring to m & "/"
|
||
set dayNum to (day of d)
|
||
if (dayNum < 10) then set dstring to dstring & "0"
|
||
set dstring to dstring & dayNum & "/"
|
||
set theYear to ((year of d) as string)
|
||
set dstring to dstring & {characters 3 thru 4 of theYear}
|
||
|
||
set tstring to ""
|
||
set t to (time of d as integer)
|
||
set m to (t div 60 as integer)
|
||
set h to m div 60
|
||
set m to (m - h * 60)
|
||
if (h < 10) then set tstring to tstring & "0"
|
||
set tstring to tstring & h & ":"
|
||
if (m < 10) then set tstring to tstring & "0"
|
||
set tstring to tstring & m & ":"
|
||
set s to (t mod 60)
|
||
if (s < 10) then set tstring to tstring & 0
|
||
set tstring to tstring & s
|
||
|
||
set theresult to ((dstring & " " & tstring & " PST") as string)
|
||
return theresult
|
||
end GetCVSTimeStamp
|
||
|
||
-------------------------
|
||
on GetTimeStamp()
|
||
-- returns a numeric string given for a date object
|
||
-------------------------
|
||
set d to current date
|
||
set dstring to ExtractDateString(d) & "." & ExtractTimeString(d)
|
||
set dstring to dstring as string
|
||
return dstring
|
||
end GetTimeStamp
|
||
|
||
-------------------------
|
||
-- given a full path, return the name of the last object
|
||
on GetCVSSessionName(path)
|
||
-- given a mac style path, return the string name of the
|
||
-- last object in a path
|
||
-------------------------
|
||
set going to true
|
||
set i to the length of path
|
||
|
||
repeat while going is true
|
||
set theChar to character i of path
|
||
if theChar is ":" then
|
||
set going to false
|
||
end if
|
||
set i to i - 1
|
||
end repeat
|
||
set sessionName to (characters {i + 2} thru length of path)
|
||
return sessionName as string
|
||
end GetCVSSessionName
|
||
|
||
-------------------------
|
||
on doOnePPCProject(projpath, targetName)
|
||
-- process one PPC project, given path to project and the target
|
||
-- if target is "" build frontmost target (the default)
|
||
-------------------------
|
||
global gDoAliases
|
||
set noError to false
|
||
with timeout of 3600 seconds (* one hour*)
|
||
|
||
try
|
||
tell application "CodeWarrior IDE 3.2"
|
||
open {projpath}
|
||
end tell
|
||
on error errMsg number errNum
|
||
logMessage("Error : Can't open project " & projpath)
|
||
set PPCPROJECTFAILED to true
|
||
error
|
||
end try
|
||
|
||
if targetName is not "" then
|
||
tell application "CodeWarrior IDE 3.2"
|
||
Set Current Target (targetName as string)
|
||
end tell
|
||
end if
|
||
|
||
try
|
||
tell application "CodeWarrior IDE 3.2"
|
||
set myErrors to Make Project
|
||
end tell
|
||
on error number errNum
|
||
if errNum < 0 then
|
||
set noError to true
|
||
end if
|
||
end try
|
||
if noError is false then
|
||
tell application "CodeWarrior IDE 3.2"
|
||
set theProjectName to my GetProjectName(projpath)
|
||
Save Error Window As {STARTUPDISK & ":" & FOLDERTIME & ":" & theProjectName & ".txt"}
|
||
end tell
|
||
set PPCPROJECTFAILED to true
|
||
end if
|
||
tell application "CodeWarrior IDE 3.2"
|
||
Close Project
|
||
end tell
|
||
end timeout
|
||
return (noError)
|
||
end doOnePPCProject
|
||
|
||
|
||
-------------------------
|
||
on ReadLn(fileRefNum)
|
||
-- strip empty lines and strip terminal comments
|
||
-------------------------
|
||
try
|
||
repeat
|
||
set q to read fileRefNum before return
|
||
if q is not "" then
|
||
set hashOffset to offset of "#" in q
|
||
if (hashOffset is 0) then set hashOffset to offset of "//" in q
|
||
if (hashOffset > 1) then
|
||
set q to text 1 thru (hashOffset - 1) of q
|
||
end if
|
||
if hashOffset is not 1 and q is not "" then
|
||
-- strip trailing white space.
|
||
set q to trim(q)
|
||
if q is not "" then return q
|
||
end if
|
||
end if
|
||
end repeat
|
||
on error errString number errNum
|
||
if errNum is -39 then -- no more lines (eof)
|
||
return ""
|
||
end if
|
||
ErrorMessage(errString)
|
||
error errString
|
||
return errString
|
||
end try
|
||
end ReadLn
|
||
|
||
on ProcessList(theListFile)
|
||
try
|
||
with timeout of 14400 seconds -- four hours
|
||
tell application "MacPerl"
|
||
Do Script {theListFile as alias}
|
||
end tell
|
||
end timeout
|
||
on error
|
||
end try
|
||
|
||
end ProcessList
|
||
|
||
(* Initialize script. Read Config file. Get source directory *)
|
||
on Initialize()
|
||
|
||
try
|
||
-- find the config file at the same level as this applescript
|
||
-- if you're running this in script debugger, uncomment lines below
|
||
set oldDelimiters to AppleScript's text item delimiters
|
||
set myPath to (path to me) as text
|
||
set AppleScript's text item delimiters to {":"}
|
||
set pl to (every text item of myPath)
|
||
set configPath to (items 1 thru ((count of pl) - 1) of pl) as string
|
||
set configPath to configPath & ":" & CONFIGFILENAME
|
||
set AppleScript's text item delimiters to oldDelimiters
|
||
|
||
set f to 0
|
||
|
||
-- DEBUG
|
||
-- uncomment this for debugging
|
||
-- set configPath to "Forge:Tinderbox:cm:client:mac:contbuild:Tinderbox Config"
|
||
set f to open for access {configPath as alias}
|
||
|
||
set MACHINEADMIN to ReadLn(f)
|
||
set TINDERBOXTREE to ReadLn(f)
|
||
set BUILDNAME to ReadLn(f)
|
||
|
||
set clobberstring to ReadLn(f)
|
||
if clobberstring is "Clobber" then
|
||
set CLOBBERBUILD to true
|
||
else
|
||
set CLOBBERBUILD to false
|
||
end if
|
||
|
||
set CVSSESSIONFILE to ReadLn(f)
|
||
set BUILDLIST to ReadLn(f)
|
||
set BINARYPATH to ReadLn(f)
|
||
|
||
if f is not 0 then
|
||
close access f
|
||
end if
|
||
on error
|
||
display dialog "Failed to read config file!"
|
||
end try
|
||
|
||
set CHECKOUTTIME to GetCVSTimeStamp(current date)
|
||
|
||
set SOURCEPATH to getLocalCVSRoot(CVSSESSIONFILE)
|
||
|
||
tell application "Finder"
|
||
set STARTUPDISK to name of startup disk
|
||
end tell
|
||
|
||
createLogDirectory(STARTUPDISK & ":")
|
||
CreateLogFile(STARTUPDISK & ":" & FOLDERTIME & ":" & "Tinderbox Script Log")
|
||
|
||
logMessage("Machine Administrator: " & MACHINEADMIN)
|
||
logMessage("Building to Tinderbox Tree: " & TINDERBOXTREE)
|
||
logMessage("Building: " & BUILDNAME)
|
||
|
||
if (CLOBBERBUILD) then
|
||
logMessage("Building Clobber")
|
||
else
|
||
logMessage("Building Depend")
|
||
end if
|
||
logMessage("CVS Session file at: " & CVSSESSIONFILE)
|
||
logMessage("BuildList at: " & BUILDLIST)
|
||
logMessage("Binary file at: " & BINARYPATH)
|
||
return true
|
||
|
||
end Initialize
|
||
|
||
-- given a full path, return the name of the last object
|
||
on GetProjectName(path)
|
||
set going to true
|
||
set i to the length of path
|
||
repeat while going is true
|
||
set theChar to character i of path
|
||
if theChar is ":" then
|
||
set going to false
|
||
end if
|
||
set i to i - 1
|
||
end repeat
|
||
return (characters {i + 2} thru length of path)
|
||
end GetProjectName
|
||
|
||
|
||
on notifyHook(result)
|
||
if result is true then
|
||
tell application "Eudora Pro 3.1"
|
||
activate
|
||
set newMsg to make new message at end of mailbox "Out" of mail folder ""
|
||
set field "Subject:" of newMsg to "Mac Continous Build FAILED"
|
||
set body of newMsg to "
|
||
The last Mac Continous Build Failed at: " & " " & {CHECKOUTTIME as text} & "
|
||
Since you are on the hook, you might be responsible for the breakage.
|
||
|
||
Please check the logs at: http://warp/tinderbox/showbuilds.cgi?tree=" & TINDERBOXTREE & "
|
||
|
||
to see if you busted the build."
|
||
set field "To:" of newMsg to "bonsai-hook"
|
||
activate
|
||
queue message newMsg
|
||
connect with sending without checking
|
||
end tell
|
||
end if
|
||
end notifyHook
|
||
|
||
on notifyTinderBoxStart()
|
||
try
|
||
tell application "Eudora Pro 3.1"
|
||
activate
|
||
set newMsg to make new message at end of mailbox "Out" of mail folder ""
|
||
set body of newMsg to "
|
||
|
||
tinderbox: tree: " & TINDERBOXTREE & "
|
||
tinderbox: builddate: " & CHECKOUTTIME & "
|
||
tinderbox: status: building
|
||
tinderbox: build: " & BUILDNAME & "
|
||
tinderbox: errorparser: mac
|
||
"
|
||
set field "To:" of newMsg to "tinderbox-daemon@warp"
|
||
activate
|
||
queue message newMsg
|
||
connect with sending without checking
|
||
quit
|
||
end tell
|
||
on error
|
||
CloseLogFile()
|
||
display dialog "MAIL SERVER ERROR: CAN'T SEND COMPLETION E-MAIL. SCRIPT HALTED"
|
||
error number -128
|
||
end try
|
||
|
||
end notifyTinderBoxStart
|
||
|
||
on notifyTinderBox(result)
|
||
try
|
||
if result is true then
|
||
|
||
tell application "Finder"
|
||
set thelist to (every file of folder (STARTUPDISK & ":" & FOLDERTIME & ":"))
|
||
end tell
|
||
|
||
set numFiles to count of thelist
|
||
set i to 1
|
||
set aliasList to {}
|
||
|
||
repeat numFiles times
|
||
set aliasList to aliasList & (item i of thelist as alias)
|
||
set i to i + 1
|
||
end repeat
|
||
|
||
tell application "Eudora Pro 3.1"
|
||
activate
|
||
set newMsg to make new message at end of mailbox "Out" of mail folder ""
|
||
attach to newMsg documents aliasList
|
||
set field "Subject:" of newMsg to "Mac Continous Build FAILED"
|
||
set body of newMsg to "
|
||
|
||
tinderbox: tree: " & TINDERBOXTREE & "
|
||
tinderbox: builddate: " & CHECKOUTTIME & "
|
||
tinderbox: status: busted
|
||
tinderbox: build: " & BUILDNAME & "
|
||
tinderbox: errorparser: mac
|
||
"
|
||
set field "To:" of newMsg to "tinderbox-daemon@warp"
|
||
activate
|
||
queue message newMsg
|
||
connect with sending without checking
|
||
quit
|
||
end tell
|
||
end if
|
||
|
||
if result is false then
|
||
|
||
tell application "Finder"
|
||
set thelist to (every file of folder (STARTUPDISK & ":" & FOLDERTIME & ":"))
|
||
end tell
|
||
|
||
set numFiles to count of thelist
|
||
set i to 1
|
||
set aliasList to {}
|
||
|
||
repeat numFiles times
|
||
set aliasList to aliasList & (item i of thelist as alias)
|
||
set i to i + 1
|
||
end repeat
|
||
|
||
tell application "Eudora Pro 3.1"
|
||
activate
|
||
set newMsg to make new message at end of mailbox "Out" of mail folder ""
|
||
set field "Subject:" of newMsg to "Mac Continous Build SUCCEEDED"
|
||
set body of newMsg to "
|
||
|
||
tinderbox: tree: " & TINDERBOXTREE & "
|
||
tinderbox: builddate: " & CHECKOUTTIME & "
|
||
tinderbox: status: success
|
||
tinderbox: build: " & BUILDNAME & "
|
||
tinderbox: errorparser: mac
|
||
"
|
||
set field "To:" of newMsg to "tinderbox-daemon@warp"
|
||
activate
|
||
queue message newMsg
|
||
connect with sending without checking
|
||
quit
|
||
end tell
|
||
end if
|
||
on error
|
||
CloseLogFile()
|
||
display dialog "MAIL SERVER ERROR: CAN'T SEND COMPLETION E-MAIL. SCRIPT HALTED"
|
||
error number -128
|
||
end try
|
||
|
||
end notifyTinderBox
|
||
|
||
on PageAdmin(pageMesg)
|
||
tell application "Eudora Pro 3.1"
|
||
activate
|
||
set newMsg to make new message at end of mailbox "Out" of mail folder ""
|
||
set field "To:" of newMsg to MACHINEADMIN
|
||
set field "Subject:" of newMsg to TINDERBOXTREE & " " & BUILDNAME & " Continous Build failed"
|
||
if pageMesg is not "" then
|
||
set body of newMsg to pageMesg
|
||
end if
|
||
activate
|
||
queue message newMsg
|
||
connect with sending without checking
|
||
quit
|
||
end tell
|
||
end PageAdmin
|
||
|
||
-- remove all directories from the local root, removing the old tree
|
||
on removeOldTree()
|
||
|
||
try
|
||
tell application "Finder"
|
||
open folder (SOURCEPATH as string)
|
||
select every item of item of container window of folder (SOURCEPATH as string)
|
||
delete selection
|
||
close container window of folder (SOURCEPATH as string)
|
||
empty trash
|
||
end tell
|
||
on error
|
||
CloseLogFile()
|
||
set PPCPROJECTFAILED to true
|
||
logMessage("Error : Couldn't delete the old tree.")
|
||
PageAdmin("Couldn't nuke old tree!")
|
||
display dialog ("Couldn't nuke old tree! SCRIPT HALTED")
|
||
error number -128
|
||
end try
|
||
|
||
end removeOldTree
|
||
|
||
-- remove the 'dist' directory from the local root
|
||
on removeOldDist() --<2D>
|
||
|
||
try
|
||
tell application "Finder"
|
||
set distPath to SOURCEPATH & ":mozilla:dist"
|
||
open folder (distPath as string)
|
||
select every item of item of container window of folder (distPath as string)
|
||
delete selection
|
||
close container window of folder (distPath as string)
|
||
empty trash
|
||
end tell
|
||
on error
|
||
CloseLogFile()
|
||
set PPCPROJECTFAILED to true
|
||
logMessage("Error : Couldn't delete the old 'dist' directory.")
|
||
PageAdmin("Couldn't nuke old 'dist' directory!")
|
||
display dialog ("Couldn't nuke old 'dist' directory! SCRIPT HALTED")
|
||
error number -128
|
||
end try
|
||
|
||
end removeOldDist
|
||
|
||
on checkoutModule(cvsmodule, cvsRevision)
|
||
|
||
try
|
||
with timeout of 1800 seconds (* 30 minutes *)
|
||
if cvsRevision is "" then
|
||
tell application "MacCVS Pro 2.1b2r1 PPC"
|
||
tell session CVSSESSIONNAME
|
||
activate
|
||
checkout module cvsmodule
|
||
end tell
|
||
end tell
|
||
else
|
||
tell application "MacCVS Pro 2.1b2r1 PPC"
|
||
tell session CVSSESSIONNAME
|
||
activate
|
||
checkout module cvsmodule revision cvsRevision
|
||
end tell
|
||
end tell
|
||
end if
|
||
end timeout
|
||
if cvsRevision is "" then
|
||
logMessage("Check-out of " & cvsmodule & "successful!")
|
||
else
|
||
logMessage("Check-out of " & cvsmodule & "at revision: " & cvsRevision & " successful!")
|
||
end if
|
||
on error errMsg number errNum
|
||
if cvsRevision is "" then
|
||
set PPCPROJECTFAILED to true
|
||
logMessage("Error : Can't check out module: " & cvsmodule & " revision: Tip")
|
||
logMessage("Error : " & errMsg)
|
||
error "Can't check out module"
|
||
else
|
||
set PPCPROJECTFAILED to true
|
||
logMessage("Error : Can't check out module: " & cvsmodule & " revision: " & cvsRevision)
|
||
logMessage("Error : " & errMsg)
|
||
error "Can't check out module"
|
||
end if
|
||
end try
|
||
|
||
end checkoutModule
|
||
|
||
on checkOutTree(pathToCVSSession)
|
||
|
||
try
|
||
set oldDelimiters to AppleScript's text item delimiters
|
||
set myPath to (path to me) as text
|
||
set AppleScript's text item delimiters to {":"}
|
||
set pl to (every text item of myPath)
|
||
set configPath to (items 1 thru ((count of pl) - 1) of pl) as string
|
||
set configPath to configPath & ":" & CONFIGFILENAME
|
||
set AppleScript's text item delimiters to oldDelimiters
|
||
|
||
set f to 0
|
||
|
||
-- set configPath to "Forge:Tinderbox:cm:client:mac:contbuild:Tinderbox Config"
|
||
set f to open for access {configPath as alias}
|
||
(* read past the cruft of the config file *)
|
||
ReadLn(f)
|
||
ReadLn(f)
|
||
ReadLn(f)
|
||
ReadLn(f)
|
||
ReadLn(f)
|
||
ReadLn(f)
|
||
ReadLn(f)
|
||
on error
|
||
CloseLogFile()
|
||
set PPCPROJECTFAILED to true
|
||
logMessage("Couldn't check-out the tree: couldn't read modules" & return)
|
||
logMessage(errMsg)
|
||
PageAdmin("Couldn't check-out the tree: couldn't read modules")
|
||
display dialog "Couldn't read modules from config file: SCRIPT HALTED"
|
||
error number -128
|
||
end try
|
||
|
||
-- open the session
|
||
tell application "MacCVS Pro 2.1b2r1 PPC"
|
||
activate
|
||
open {pathToCVSSession as alias}
|
||
end tell
|
||
|
||
try
|
||
repeat
|
||
set cvsmodule to ReadLn(f)
|
||
if cvsmodule is "" then exit repeat
|
||
if cvsmodule = "CVS Session" then
|
||
switchCVSSession(f)
|
||
else
|
||
set revision to Token(cvsmodule, 2)
|
||
set cvsmodule to Token(cvsmodule, 1)
|
||
checkoutModule(cvsmodule, revision)
|
||
end if
|
||
end repeat
|
||
logMessage("### Checked-out all required modules")
|
||
on error
|
||
--<2D>tell application "MacCVS Pro 2.1b2r1 PPC"
|
||
--<2D>quit
|
||
--<2D>end tell
|
||
-- toss something up to run()
|
||
error
|
||
end try
|
||
|
||
--<2D>tell application "MacCVS Pro 2.1b2r1 PPC"
|
||
--<2D>quit
|
||
--<2D>end tell
|
||
|
||
end checkOutTree
|
||
|
||
on switchCVSSession(f)
|
||
|
||
tell application "MacCVS Pro 2.1b2r1 PPC"
|
||
close session CVSSESSIONNAME
|
||
end tell
|
||
|
||
set newSessionPath to ReadLn(f)
|
||
set newSessionName to GetCVSSessionName(newSessionPath)
|
||
|
||
set CVSSESSIONNAME to newSessionName
|
||
|
||
tell application "MacCVS Pro 2.1b2r1 PPC"
|
||
activate
|
||
open {newSessionPath as alias}
|
||
end tell
|
||
|
||
end switchCVSSession
|
||
|
||
on getLocalCVSRoot(pathToCVSSession)
|
||
|
||
set CVSSESSIONNAME to GetCVSSessionName(pathToCVSSession)
|
||
try
|
||
tell application "MacCVS Pro 2.1b2r1 PPC"
|
||
open {pathToCVSSession as alias}
|
||
tell session CVSSESSIONNAME
|
||
set theLocalRoot to local root
|
||
end tell
|
||
--<2D>quit
|
||
end tell
|
||
set pathLength to {(get the length of (theLocalRoot as text)) as text}
|
||
return (characters 1 thru {pathLength - 1} of (theLocalRoot as text))
|
||
on error
|
||
display dialog "Error : CVS Session path wrong, or doesn't have a local root. SCRIPT HALTED!"
|
||
error number -128
|
||
end try
|
||
|
||
end getLocalCVSRoot
|
||
|
||
on createLogDirectory(destFolder)
|
||
|
||
tell application "Finder"
|
||
set FOLDERTIME to my GetTimeStamp()
|
||
make new folder at folder (destFolder)
|
||
set the name of the result to FOLDERTIME
|
||
end tell
|
||
|
||
end createLogDirectory
|
||
|
||
on mozillaLives(filePath)
|
||
|
||
try
|
||
tell application "Finder"
|
||
set fileTest to file filePath
|
||
set creatorType to get the creator type of fileTest
|
||
set fileTest to application file filePath
|
||
set partitionSize to get the partition size of fileTest
|
||
if (creatorType is "????" and partitionSize > 0) then
|
||
return false
|
||
else
|
||
return true
|
||
end if
|
||
end tell
|
||
on error
|
||
return true
|
||
end try
|
||
|
||
end mozillaLives
|
||
|
||
on copyFile(srcPath, destFolder)
|
||
|
||
try
|
||
tell application "Finder"
|
||
copy file (srcPath as alias) to folder (destFolder as alias)
|
||
-- set the name of the result to destName
|
||
end tell
|
||
on error msgErr
|
||
logMessage("Error: Could not copy - " & srcPath & msgErr)
|
||
end try
|
||
|
||
end copyFile
|
||
|
||
on getDriveName(path)
|
||
|
||
set going to true
|
||
set i to 1
|
||
|
||
repeat while going is true
|
||
set theChar to character i of path
|
||
if theChar is ":" then
|
||
set going to false
|
||
end if
|
||
set i to i + 1
|
||
end repeat
|
||
set driveName to (characters 1 thru {i - 1} of path)
|
||
return driveName as string
|
||
|
||
end getDriveName
|
||
|
||
on trashItem(filePath)
|
||
|
||
try
|
||
tell application "Finder"
|
||
select item (filePath as string)
|
||
delete selection
|
||
empty trash
|
||
end tell
|
||
on error
|
||
logMessage("Error : Couldn't delete the old binary.")
|
||
PageAdmin("Couldn't nuke old binary!")
|
||
display dialog "Couldn't nuke old binary: SCRIPT HALTED"
|
||
error number -128
|
||
end try
|
||
|
||
end trashItem
|
||
|
||
on run
|
||
|
||
-- if we are executing first time, skip time delay check
|
||
set firstRun to true
|
||
|
||
--<2D>repeat
|
||
|
||
-- if we're cycling around, make sure we don't cycle faster than 10 minutes
|
||
if firstRun is false then
|
||
if endTime - startTime is less than 600 then
|
||
repeat while endTime - startTime is less than 600
|
||
set endTime to current date
|
||
end repeat
|
||
end if
|
||
end if
|
||
|
||
set firstRun to false
|
||
|
||
set startTime to current date
|
||
|
||
-- 2 hour timeout
|
||
with timeout of 7200 seconds
|
||
|
||
set PPCPROJECTFAILED to false
|
||
|
||
-- read config file and create log directories
|
||
Initialize()
|
||
|
||
notifyTinderBoxStart()
|
||
|
||
if (CLOBBERBUILD) then
|
||
removeOldTree()
|
||
else
|
||
removeOldDist() --<2D>
|
||
end if
|
||
|
||
(*
|
||
else
|
||
trashItem("")
|
||
end
|
||
*)
|
||
|
||
try
|
||
checkOutTree(CVSSESSIONFILE)
|
||
on error
|
||
PageAdmin("Can't check out tree!")
|
||
end try
|
||
|
||
if PPCPROJECTFAILED is false then
|
||
set SOURCEPATH to getLocalCVSRoot(CVSSESSIONFILE)
|
||
set SOURCEPATH to SOURCEPATH as string
|
||
|
||
ProcessList(SOURCEPATH & BUILDLIST)
|
||
|
||
tell application "CodeWarrior IDE 3.2"
|
||
quit
|
||
end tell
|
||
|
||
tell application "MacCVS Pro 2.1b2r1 PPC"
|
||
quit
|
||
end tell
|
||
|
||
tell application "ToolServer"
|
||
quit
|
||
end tell
|
||
|
||
end if
|
||
|
||
-- set builddrive to getDriveName(SOURCEPATH)
|
||
|
||
copyFile(SOURCEPATH & ":Mozilla.BuildLog", STARTUPDISK & ":" & FOLDERTIME & ":")
|
||
set PPCPROJECTFAILED to mozillaLives(SOURCEPATH & BINARYPATH)
|
||
|
||
CloseLogFile()
|
||
|
||
try
|
||
notifyTinderBox(PPCPROJECTFAILED)
|
||
on error
|
||
PageAdmin("Couldn't send Tinderbox completion message!")
|
||
end try
|
||
|
||
tell application "Finder"
|
||
select folder FOLDERTIME of startup disk
|
||
delete selection
|
||
--<2D>empty trash
|
||
restart --<2D>
|
||
end tell
|
||
|
||
end timeout
|
||
|
||
set endTime to current date
|
||
|
||
--<2D>end repeat
|
||
|
||
end run
|