mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-07 12:15:51 +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
|