ޣ̻      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvw x y z {|}~ Read a time of day string like 17:34:05 in the local time zone [ and convert that to a UTC time of day. Good for parsing command line args to buildbots. PGet a local time stamp with format YYYYMMDD_HHMMSS. Good for naming files with. Get the local midnight we've just had as a . Get the local midnight that we've just had, as a . Get the local midnight we're about to have as a . Get the local midnight we're about to have as a . V     9Map of event names to their details and build commands. :Records when an event should start, and when it last ran. A unique name for this event. - Used when writing the schedule to a file. When to run the command. Modifier to the previous. )When the event was last started, if any. &When the event last finished, if any. Modifier to when. 2Wait until after this time before doing it first. If the event hasn'-t been invoked before then do it immediately # when we start the cron process. When to invoke some event. !Do it each day at this time. The ''days'' are UTC days, not local ones. (Do it some time after it last finished. *Do it some time after we last started it. Don't do it, ever. Just keep doing it. XGiven the current time and a list of events, determine which one should be started now. S If several events are avaliable then take the one with the earliest start time. BGiven the current time, decide whether an event could be started.  If the  is  this always returns true.  The  SkipFirst5 modifier is ignored, as this is handled separately. CGet the list of events in a schedule, ignoring the build commands. "A nice way to produce a schedule. !BGiven an event name, lookup the associated event from a schedule. "JGiven an event name, lookup the associated build command from a schedule. #LGiven a new version of an event, update any matching event in the schedule. E If the event not already there then return the original schedule.   !"#  !"#   !"#EContinually read lines from a handle and write them to this channel. ' When the handle hits EOF then write  to the channel. EContinually read lines from some channels and write them to handles.  When all the channels return  then we' re done.  When we',re done, signal this fact on the semaphore.  $%&)Print a number of picoseconds as a time. '+Print a float number of seconds as a time. (VPretty print a signed float, with a percentage change relative to a reference figure.  Comes out like  0.235( +5) for a +5 percent swing. )APrint a float number of seconds, flooring it and, prefixing with + or - appropriately. *5Right justify a doc, padding with a given character. +$Right justify a string with spaces. ,7Left justify a string, padding with a given character. -#Left justify a string with spaces. .-Blank text. This is different different from 1 because it comes out a a newline when used in a . G !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNO$%&'()*+,-. $%&')(*+,-. $%%&'()*+,-. /0;A sequence of lines, without newline charaters on the end. 1O(1) No logs here. 2 O(1) Check if the log is empty. 3O(n) Convert a 0 to a P. 4O(n) Convert a P to a 0. 5 O(1) Add a / to the start of a 0. 6 O(1) Add a / to the end of a 0. 7#O(log(min(n1,n2))) Concatenate two 0s. 8'O(n) Take the first m lines from a log 9&O(n) Take the last m lines from a log /0123456789 0/123456789 /0123456789:Global builder configuration. ;<6Log all system commands executed to this file handle. =The errors we recognise. >Some property check< was supposed to return the given boolean value, but it didn't. ?Some other IO action failed. @NSome system command fell over, and it barfed out the given stdout and stderr. ABCDESome generic error FKThe builder monad encapsulates and IO action that can fail with an error, 1 and also read some global configuration info. GThe default build config. H*Log a system command to the handle in our ;: , if any. I#Throw an error in the build monad. JRun a build command. KDRun a build command, reporting whether it succeeded to the console. > If it succeeded then return Just the result, else Nothing. LLike L but also takes a ;:. M(Lift an IO action into the build monad. G If the action throws any exceptions they get caught and turned into  ? exceptions in our F monad. NPrint some text to stdout. O1Print some text to stdout followed by a newline. PPrint a blank line to stdout QPrint a ----- line to stdout RPrint a ===== line to stdout SLike Q, but with teh monadz. :;<=>?@ABCDEFGHIJKLMNOPQRS:;<;<=E@?>ABCD>?@ABCDEFGHIJKLMNOPQRSTSome testable property. UV#Testable properties are checkable. 3 If the check returns false then throw an error. W#Testable properties are checkable. 2 If the check returns true then throw an error. X*Check some property while printing what we' re doing. Y*Check some property while printing what we' re doing. TUVWXYTUVWXYTUUVWXY :;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYF=E@?>ABCD:;<GJKLIMHNOPQRSZ1The result of running a benchmark several times. 6 We include the name of the original benchmark to it's easy to lookup the results. [\]^(The result of running a benchmark once. _`<The wall-clock time taken to run the benchmark (in seconds) aETime that the benchmark itself reported was taken to run its kernel. b5Holds elapsed, cpu, and system timings (in seconds). cdefg'Describes a benchmark that we can run. hi!A unique name for the benchmark. j0Setup command to run before the main benchmark. kPThe benchmark command to run. Only the time taken to run this part is measured. lCheck /2 cleanup command to run after the main benchmark. Z[\]^_`abcdefghijklZ[\][\]^_`a_`abcdefcdefghijklhijkl m2Aspects of a benchmark runtime we can talk about. nopqr/Get a particular aspect of a benchmark result. s1Get the average runtime from a benchmark result. t1Get the minimum runtime from a benchmark result. u1Get the maximum runtime from a benchmark result. v?Get the min, avg, and max runtimes from this benchmark result. R%Get the pretty name of a TimeAspect. mnopqrstuv mqponrstuv mqponnopqrstuv w6Header to use when pretty printing benchmark results. x.Pretty print an aspect of a benchmark result. 9 If the given aspect does not exist in the result then . Aspect of the result to print. &Optional prior result for comparison. The result to print. wxwxwx yMPretty print a comparison of all the aspects of these two benchmark results.  The first result is the ` baseline', while the second is the `current' one. a The numbers from the current results are printed, with a percentage relative to the baseline. zMPretty print a comparison of all the aspects of these two benchmark results.  The first result is the ` baseline' while the second is the `current' one. [ All the numbers from the current results are printed, with a percentage relative to the [ baseline if there is one. If there is no baseline for a particular result then we still  print the current one. yzyzyz{+Run a command, returning its elapsed time. |Run a benchmark once. }CRun a benchmark once, logging activity and timings to the console. ~@Run a benchmark several times, logging activity to the console. 7 Optionally print a comparison with a prior results. Number of iterations. )Optional previous result for comparison. Benchmark to run. ARun a benchmark serveral times, logging activity to the console. A Also lookup prior results for comparison from the given list. G If there is no matching entry then run the benchmark anyway, but don't print the comparison. 7Number of times to run each benchmark to get averages. List of prior results. The benchmark to run. &Z[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ghijklbcdef^_`aZ[\]{|}~{|}~ %Sleep for a given number of seconds. *Sleep for a given number of milliseconds.  ?Given a schedule of commands, run them when their time is due. Y Only one command is run at a time. If several commands could be started at a specific ^ moment, then we take the one with the earliest potential start time. If any command throws  an error in the F! monad then the whole loop does.   !"# ST/Run a system command, returning its exit code. !Run a successful system command.  If the exit code is U then throw an error in the F monad. 7Quietly run a system command, returning its exit code. )Quietly run a successful system command.  If the exit code is U then throw an error in the F monad. @Run a successful system command, returning what it wrote to its stdout.  If anything was written to stderr then treat that as failure. ! If it fails due to writing to stderr or returning U  then throw an error in the F monad. HQuietly run a successful system command, returning what it wrote to its stdout.  If anything was written to stderr then treat that as failure. ! If it fails due to writing to stderr or returning U  then throw an error in the F monad. Like  , but in the F monad. Like  , but in the F monad. Like  , but in the F( monad and throw an error if it returns U. Like , but with strings. $Run a system command, returning its V and what was written to stdout and stderr. Whether stdout and stderr, should be forwarded to the parent process. Command to run. What to pass to the command's stdin. WXYZ[UV  /Properties of the file system we can test for. Some file is empty. Some directory exists. Some file exists. (Some executable is in the current path. VRun a command in a different working directory. Throws an error if the directory doesn' t exist. ECreate a new directory with the given name, run a command within it, X then change out and recursively delete the directory. Throws an error if a directory ' with the given name already exists. Delete a dir recursively if it's there, otherwise do nothing.  Unlike \, this function does . not follow symlinks, it just deletes them.  Create a new directory if it isn'2t already there, or return successfully if it is. ^Create a temp file, pass it to some command, then delete the file after the command finishes. )Generic information about the platform we're running on.  The environment consists of the , and some tool versions. @Get the current environment, including versions of these tools. 7List of tool names and commands to get their versions. )Get information about the host platform. !Get the name of this host, using uname. !Get the host architecture, using uname. #Get the host processor name, using uname. %Get the host operating system, using uname. -Get the host operating system release, using uname. 8Get the version of this GHC, or throw an error if it can' t be found. 8Get the version of this GCC, or throw an error if it can' t be found. +An external mailer that can send messages. . Also contains mail server info if needed. & We only support msmtp at the moment. #An email message that we can send. 7Create a mail with a given from, to, subject and body. > Fill in the date and message id based on the current time. > Valid dates and message ids are needed to prevent the mail  being bounced by spambots. ''from''$ field. Should be an email address. ''to''$ field. Should be an email address. Subject line. Message body. %Render an email message as a string. Send a mail message. ]Use wget% to check if a web-page is gettable. * The page is deleted after downloading. !The given host is reachable with ping. ^_FXYZ[UV !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNO       !"#$%&'()*+,-.:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~` !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNNOPQRSTUVWXYZ[\]^_`abcdefghijklmmnoppqrsstuvwwxyz{|}~                !"#$%&'()*+,E+,-+,.+,/+,0+,1+,2+,3+,4+,5+,6+,7+,8+,9+,:+,;+,<+,=+,>+,?+,@+,A+,B+,C+,D+,E+,F+,G+,H+,I+,J+,K+,L+,M+,N+,O+,P+,Q+,R+,S+,T+,U+,V+,W+,X+,Y+,Z+,[+,\+,\+,]+,^+,_+,`+,a+,b+,c+,d+,e+,f%gh%ijk l m%no%np q%rs%rt%ru%nvwxyz{|}buildbox-1.0.1.0 BuildBox.TimeBuildBox.Cron.ScheduleBuildBox.PrettyBuildBox.Data.LogBuildBox.BuildBuildBox.Build.TestableBuildBox.BenchmarkBuildBox.Benchmark.TimeAspectBuildBox.Benchmark.PrettyBuildBox.Benchmark.CompareBuildBox.Command.Sleep BuildBox.CronBuildBox.Command.SystemBuildBox.Command.FileBuildBox.Command.EnvironmentBuildBox.Command.MailBuildBox.Command.Network!BuildBox.Command.System.InternalsBuildBox.Build.BaseBuildBox.Benchmark.BaseBuildBoxreadLocalTimeOfDayAsUTC getStampyTimegetMidnightTodayLocalgetMidnightTodayUTCgetMidnightTomorrowLocalgetMidnightTomorrowUTCScheduleEvent eventName eventWheneventWhenModifiereventLastStartedeventLastEnded EventName WhenModifier WaitUntil ImmediateWhenDailyAfterEveryNeverAlwayssecondminutehourdayearliestEventToStartAteventCouldStartAteventsOfSchedule makeSchedulelookupEventOfSchedulelookupCommandOfScheduleadjustEventOfSchedulePrettyppr pprPSecTime pprFloatTime pprFloatRef pprFloatSFpadRcpadRpadLcpadLblankLineLogemptynulltoString fromString<||>>< firstLines lastLines BuildConfigbuildConfigLogSystem BuildErrorErrorCheckFailed ErrorIOErrorErrorSystemCmdFailed buildErrorCmdbuildErrorCodebuildErrorStdoutbuildErrorStderr ErrorOtherBuildbuildConfigDefault logSystemthrowrunBuild runBuildPrintrunBuildPrintWithConfigiooutoutLnoutBlankoutLineoutLINEwhenMTestabletestcheck checkFalse outCheckOkoutCheckFalseOk BenchResultbenchResultNamebenchResultRunsBenchRunResultbenchRunResultElapsedbenchRunResultKernelTiming timingElapsed timingCpu timingSys Benchmark benchmarkNamebenchmarkSetupbenchmarkCommandbenchmarkCheck TimeAspectTimeAspectKernelSysTimeAspectKernelCpuTimeAspectKernelElapsedTimeAspectElapsedtakeTimeAspectOfBenchRunResulttakeAvgTimeOfBenchResulttakeMinTimeOfBenchResulttakeMaxTimeOfBenchResulttakeMinAvgMaxOfBenchResultpprBenchResultAspectHeaderpprBenchResultAspect pprComparisonpprComparisonsrunTimedCommandrunBenchmarkOnceoutRunBenchmarkOnceoutRunBenchmarkAgainstoutRunBenchmarkWithsleepmsleepcronLoopsystemssystemqsystemqssystem ssystemOut qssystemOut systemTee systemTeeLog ssystemTee systemTeeIOsystemTeeLogIOPropFile FileEmptyHasDirHasFile HasExecutableinDir inScratchDir clobberDir ensureDir withTempFilePlatformplatformHostNameplatformHostArchplatformHostProcessorplatformHostOSplatformHostRelease EnvironmentenvironmentPlatformenvironmentVersionsgetEnvironmentWithgetHostPlatform getHostName getHostArchgetHostProcessor getHostOSgetHostRelease getVersionGHC getVersionGCCMailer MailerMSMTP mailerPath mailerPortMailmailFrommailTo mailSubjectmailTime mailTimeZone mailMessageIdmailBodycreateMailWithCurrentTime renderMailsendMailWithMailer PropNetwork UrlGettable HostReachable time-1.1.4Data.Time.LocalTime.LocalTime LocalTimeData.Time.Clock.UTCUTCTimeData.Time.Format formatTimeformatCharacter FormatTimeData.Time.Format.Parse readsTimereadTime parseTime buildTime ParseTimeutcToLocalZonedTime getZonedTimezonedTimeToUTCutcToZonedTimelocalTimeToUT1ut1ToLocalTimelocalTimeToUTCutcToLocalTimelocalTimeOfDaylocalDay zonedTimeZonezonedTimeToLocalTime ZonedTimeData.Time.LocalTime.TimeOfDaytimeOfDayToDayFractiondayFractionToTimeOfDaytimeOfDayToTimetimeToTimeOfDaylocalToUTCTimeOfDayutcToLocalTimeOfDaymakeTimeOfDayValidmiddaymidnighttodSectodMintodHour TimeOfDayData.Time.LocalTime.TimeZonegetCurrentTimeZone getTimeZoneutctimeZoneOffsetStringtimeZoneOffsetString'hoursToTimeZoneminutesToTimeZone timeZoneNametimeZoneSummerOnlytimeZoneMinutesTimeZoneData.Time.ClockgetCurrentTimeData.Time.Clock.UTCDiff diffUTCTime addUTCTime utctDayTimeutctDayNominalDiffTimeData.Time.Calendar.GregorianaddGregorianYearsRollOveraddGregorianYearsClipaddGregorianMonthsRollOveraddGregorianMonthsClipgregorianMonthLength showGregorianfromGregorianValid fromGregorian toGregorianData.Time.Calendar.OrdinalDate isLeapYearData.Time.Calendar.DaysdiffDaysaddDaystoModifiedJulianDayModifiedJulianDayDayData.Time.Calendar.PrivateNumericPadOptionData.Time.Clock.ScalepicosecondsToDiffTimesecondsToDiffTimegetModJulianDate ModJulianDate UniversalTimeDiffTimestreamInbase Data.MaybeNothing streamOutsten12ten12ipretty-1.0.1.1Text.PrettyPrint.HughesPJvcat fullRenderrender renderStylefcatfsepcatsep<+><>$+$$$nest zeroWidthTextptexttextcharisEmpty punctuatehanghsephcatbracesbracketsparens doubleQuotesquotesrationaldoublefloatintegerintrbracelbracerbracklbrackrparenlparenequalsspacecommacolonsemistyleribbonsPerLine lineLengthmodeStylePageMode ZigZagModeLeftMode OneLineModeModeDocChrStrPStr TextDetailsGHC.BaseString Control.Monadwhen$fPrettyTimeAspectdebugtraceGHC.IO.Exception ExitFailureExitCode slurpChan System.Exit exitSuccess exitFailureexitWith ExitSuccessdirectory-1.0.1.1System.DirectoryremoveDirectoryRecursivesendMailWithMSMTPURLHostName