;ò |oPFc@sydZdkZdkZdkZdkZdkZdkZdklZlZda eiƒa dZ de fd„ƒYZ eZdkZeZd„Zd„Zd„Zd „Zd „Zead „Zd fd „ƒYZdfd„ƒYZdkZdkZeaeadadada da!ga"dei#fd„ƒYZ$dei#fd„ƒYZ%dfd„ƒYZ&dS(sExecute the tasksN(sdebugserrorisCompilationErrorcBstZRS(N(s__name__s __module__(((sM/mnt/gmirror/ports/audio/ruby-xmms2/work/xmms2-0.2DrJekyll/wafadmin/Runner.pysCompilationErrorscCsstiidjotii|dƒnEtiidjo!|o|GHtiiƒqon|o |GHndS(Nis i( sParamss g_optionss progress_barssyssstderrswritesssstdoutsflush(ss((sM/mnt/gmirror/ports/audio/ruby-xmms2/work/xmms2-0.2DrJekyll/wafadmin/Runner.pyswrite_progress*scCs|iƒ}| odSnd}|} x&| djo| d} |d7}q+W|d7}tiidjoòd||} t i dt i t i ƒtƒƒ}d||f} | |||| |f}d|||f}tiƒt|ƒt|ƒd }|d jo d }nd t|d ||dƒd i|ƒ} d|| |f}|Sntiidjo|t i dt i t i ƒtƒƒ}ditd„|iƒƒ}ditd„|i ƒƒ} d|||| |fSnd||f} | |||||fSdS(s4do not print anything if there is nothing to displaysii if100.0s%H:%M:%Ss[%%%dd/%%%dd] %%s%%2d%%%%%%s |s| %s%s%siis=f1.0s>s%s%s%sis,cCs|iS(N(snsm_name(sn((sM/mnt/gmirror/ports/audio/ruby-xmms2/work/xmms2-0.2DrJekyll/wafadmin/Runner.pysMss2|Total %s|Current %s|Inputs %s|Outputs %s|Time %s|s[%%%dd/%%%dd] %%s%%s%%sN("stasks get_displaysdispsnstsksParamss g_optionss progress_barssspcstimesstrftimesgmtimes g_initialsetasfsscol1scol2sleftsrightsUtilss get_term_colsslenscolssintsljustsbarsjoinsmapsm_inputssinss m_outputssouts(ssstscol1staskscol2sdispsrightscolssinssoutsspcsfssbarsksnsetasleft((sM/mnt/gmirror/ports/audio/ruby-xmms2/work/xmms2-0.2DrJekyll/wafadmin/Runner.pys progress_line5s:    %$ -%cCsÁd}}x°|o| o | o>|iƒ}| o d}qbt otii|ƒqbn| oN|iƒ}| o d}q¸t o$ti idƒti i|ƒq¸q q WdS(Niis ( s stdout_eofs stderr_eofs cmd_stdoutsreadsstrsg_quietssyssstdoutswrites cmd_stderrsstderr(s cmd_stdouts cmd_stderrs stderr_eofsstrs stdout_eof((sM/mnt/gmirror/ports/audio/ruby-xmms2/work/xmms2-0.2DrJekyll/wafadmin/Runner.pysprocess_cmd_outputTs      cCs“td|dƒtidjo |GHnti|dddtidtiƒ}t|i |i ƒ|i ƒ}|d@o |dBSn|d ?Sd S( sprun commands in a portable way the subprocess module backported from python 2.4 and should work on python >= 2.2ssystem command -> srunnerisshellsstdoutsstderriÿi€iN( sdebugsstrsParamss g_verbosesexetorsPopensPIPEsprocsprocess_cmd_outputsstdoutsstderrswaitsstat(sstrsstatsproc((sM/mnt/gmirror/ports/audio/ruby-xmms2/work/xmms2-0.2DrJekyll/wafadmin/Runner.pysexec_command_normalcs '  cCsntd|dƒtidjo |GHnti|ddƒ}|iƒ}|d@o |dBSn|d?SdS( sfthis one is for the latex output, where we cannot capture the output while the process waits for stdinssystem command (interact) -> srunnerisshelliÿi€iN( sdebugsstrsParamss g_verbosesexetorsPopensprocswaitsstat(sstrsstatsproc((sM/mnt/gmirror/ports/audio/ruby-xmms2/work/xmms2-0.2DrJekyll/wafadmin/Runner.pysexec_command_interactms   cCs<|djo tan"|djo tan tdƒdS(Nsnormalsnoredirsset_runner_mode(smodesexec_command_normals exec_commandsexec_command_interactserror(smode((sM/mnt/gmirror/ports/audio/ruby-xmms2/work/xmms2-0.2DrJekyll/wafadmin/Runner.pysset_execws   s JobGeneratorcBsDtZdZd„Zd„Zd„Zd„Zd„Zd„ZRS(sYkind of iterator - the data structure is a bit complicated (price to pay for flexibility)cCsU||_d|_d|_g|_g|_tii ƒ|_ d|_ d|_ dS(Niiÿÿÿÿi( streesselfsm_treescurgroupscurprios m_outstandingspriolstsTasksg_tasksstotalsm_totals m_processeds m_switchflag(sselfstree((sM/mnt/gmirror/ports/audio/ruby-xmms2/work/xmms2-0.2DrJekyll/wafadmin/Runner.pys__init__s      cCs@|io4|id}|id|_|id7_|Sntii otSn|it tiiƒjotSn|i d7_ tii|i}|i t |i i ƒƒjo&d|_ |id7_|iƒSn|i djo#|i i ƒ|_|iiƒn|i|i }|i ||_|iƒSdS(Niiiÿÿÿÿ(sselfs m_outstandingsts m_processedsTasksg_taskssgroupssNonescurgroupslenscurpriosgroupsprioskeyssget_nextspriolstssortsid(sselfsgroupstsid((sM/mnt/gmirror/ports/audio/ruby-xmms2/work/xmms2-0.2DrJekyll/wafadmin/Runner.pysget_nexts*   cCs|i|ifSdS(N(sselfs m_processedsm_total(sself((sM/mnt/gmirror/ports/audio/ruby-xmms2/work/xmms2-0.2DrJekyll/wafadmin/Runner.pysprogressµscCsW|id8_|i |_|idjo|g|i|_n|ii|ƒdS(Nii(sselfs m_processeds m_switchflagstasks m_outstandingsappend(sselfstask((sM/mnt/gmirror/ports/audio/ruby-xmms2/work/xmms2-0.2DrJekyll/wafadmin/Runner.pyspostpone¸s  cCsOtddƒd}x(tiD]}|t|iƒd7}qWt|dƒdS(Ns'debugging a task: something went wrong:srunnerss (sdebugsssTasksg_tasksstsstrsm_idx(sselfssst((sM/mnt/gmirror/ports/audio/ruby-xmms2/work/xmms2-0.2DrJekyll/wafadmin/Runner.pysdebugÁs   cCsc|tii|i_|id7_d|_g|_ytii|ii i ƒWnnXdS(Niiÿÿÿÿ( sreasonsTasksg_taskssgroupssselfscurgroupsinfoscurprios m_outstandingspriossort(sselfsreason((sM/mnt/gmirror/ports/audio/ruby-xmms2/work/xmms2-0.2DrJekyll/wafadmin/Runner.pys skip_groupÉs  ( s__name__s __module__s__doc__s__init__sget_nextsprogressspostponesdebugs skip_group(((sM/mnt/gmirror/ports/audio/ruby-xmms2/work/xmms2-0.2DrJekyll/wafadmin/Runner.pys JobGenerator}s   %  sSerialcBstZd„Zd„ZRS(NcCs ||_dS(N(s generatorsselfs m_generator(sselfs generator((sM/mnt/gmirror/ports/audio/ruby-xmms2/work/xmms2-0.2DrJekyll/wafadmin/Runner.pys__init__ÒscCsrtddƒxMnoE|iiƒ}|tjoPntdt|iƒdƒ|iƒ o1tdt|iƒdƒ|ii |ƒqn|i ƒ|i ƒ od|_ qntdt|iƒdƒt id oo|iiƒ\}}d }d }y$t i|iƒ}t id }WnnXtt|||||ƒƒn|iƒ}|ott iio!|iid |iƒƒqqØt io4td t|ƒt|iƒfƒ|idƒn|Sny|i ƒWnVt iio!|iid |iƒƒqq?t iotdƒnt!ƒ‚nXd|_ t"i#i$|ƒqWtddƒdSdS(NsSerial start calledsrunneris retrieving #s delaying #is executing #s configuressNORMALsnon-zero return code s%task failed! (return code %s for #%s)smissing nodes s"the nodes have not been produced !s Serial endi(%sdebugsselfs m_generatorsget_nextsprocsNonesstrsm_idxs may_startspostponespreparesmust_runsm_hasrunsParamss g_commandssprogressssstscol1scol2sg_colorsscolorswrite_progresss progress_linesrunsrets g_optionsskeeps skip_groups debug_infos g_verboseserrors update_statsCompilationErrorsTasks g_tasks_donesappend(sselfscol2sretscol1ssstsproc((sM/mnt/gmirror/ports/audio/ruby-xmms2/work/xmms2-0.2DrJekyll/wafadmin/Runner.pysstartÔsb        #     (s__name__s __module__s__init__sstart(((sM/mnt/gmirror/ports/audio/ruby-xmms2/work/xmms2-0.2DrJekyll/wafadmin/Runner.pysSerialÑs s TaskPrintercBstZd„Zd„ZRS(NcCs4tii|ƒ|idƒ||_|iƒdS(Ni(s threadingsThreads__init__sselfs setDaemonsmastersm_mastersstart(sselfsidsmaster((sM/mnt/gmirror/ports/audio/ruby-xmms2/work/xmms2-0.2DrJekyll/wafadmin/Runner.pys__init__9s  cCsPxInoAtiƒtitiƒttfƒtiƒtidƒq WdS(Nif0.10000000000000001( slocksacquiresstatsappendstimescountsrunningsreleasessleep(sself((sM/mnt/gmirror/ports/audio/ruby-xmms2/work/xmms2-0.2DrJekyll/wafadmin/Runner.pysrun?s  (s__name__s __module__s__init__srun(((sM/mnt/gmirror/ports/audio/ruby-xmms2/work/xmms2-0.2DrJekyll/wafadmin/Runner.pys TaskPrinter8s s TaskConsumercBs,tZd„Zd„Zd„Zd„ZRS(NcCsOtii|ƒ|idƒ||_||_|i ƒd|_ d|_ dS(Nii( s threadingsThreads__init__sselfs setDaemonsmastersm_mastersidsm_idsstartsm_countsm_stop(sselfsidsmaster((sM/mnt/gmirror/ports/audio/ruby-xmms2/work/xmms2-0.2DrJekyll/wafadmin/Runner.pys__init__Hs     cCs"tiƒtiƒtiƒdS(N(s conditionsacquiresnotifysrelease(sself((sM/mnt/gmirror/ports/audio/ruby-xmms2/work/xmms2-0.2DrJekyll/wafadmin/Runner.pysnotifyRs  cCs"tiƒt|7atiƒdS(N(slocksacquiresrunningsnumsrelease(sselfsnum((sM/mnt/gmirror/ports/audio/ruby-xmms2/work/xmms2-0.2DrJekyll/wafadmin/Runner.pysdo_statXs  cCsÔxÍnoÅtiƒt|_tiƒ|io7x4no(tdjo danti dƒq;Wn|i i i ddƒ}|idƒt|iƒƒ|iƒ}|idƒ|oytiƒtio4tdt|ƒt|iƒfƒ|idƒntd8adada|iƒtiƒq ny|iƒWnStiƒtiotdƒntd8adada|iƒtiƒnXd|_tiƒtd8atiƒ|iƒq WdS(Niisblockiÿÿÿÿs,task failed! (return code %s and task id %s)s"the nodes have not been produced !(slocksacquiresstopsselfsm_stopsreleasesfailedscountstimessleepsm_mastersm_readysgetsprocsdo_statswrite_progresss get_displaysrunsretsParamss g_verboseserrorsstrsm_idxsdebugsnotifys update_statsm_hasrun(sselfsretsproc((sM/mnt/gmirror/ports/audio/ruby-xmms2/work/xmms2-0.2DrJekyll/wafadmin/Runner.pysrun^sX          #           (s__name__s __module__s__init__snotifysdo_statsrun(((sM/mnt/gmirror/ports/audio/ruby-xmms2/work/xmms2-0.2DrJekyll/wafadmin/Runner.pys TaskConsumerGs  sParallelcBs;tZdZd„Zd„Zd„Zd„Zd„ZRS(sá The following is a small scheduler, using an agressive scheme for making as many tasks available to the consumer threads Someone may come with a much better scheme, as i do not have too much time to spend on this (ita) cCsÁ||_||_ti|_tiiƒ|_ d|_ g|_ t i dƒ|_ g|_d|_d|_d|_d|_d|_d|_g|_tiƒatiƒa||_dS(Nii–iiÿÿÿÿ(streesselfsm_treesnumjobss m_numjobssTasksg_taskssm_tasksstotalsm_totals m_processeds m_outstandingsQueuesm_readysm_frozensm_countsm_stopsm_faileds m_runningscurgroupscurpriospriolsts threadings Conditions conditionsLockslocks m_generator(sselfstreesnumjobs((sM/mnt/gmirror/ports/audio/ruby-xmms2/work/xmms2-0.2DrJekyll/wafadmin/Runner.pys__init__s(               cCs<tiƒt|_t|_t|_t |_ ti ƒdS(N( slocksacquiresstopsselfsm_stopscountsm_countsfailedsm_failedsrunnings m_runningsrelease(sself((sM/mnt/gmirror/ports/audio/ruby-xmms2/work/xmms2-0.2DrJekyll/wafadmin/Runner.pys read_valuesÅs     cCs•tiƒx)|idjotiƒ|iƒq Wtiƒ|ioGxDno8|iƒ|idjo t ƒ‚nt i dƒqTWndS(Niif0.5( s conditionsacquiresselfsm_countswaits read_valuessreleasesm_faileds m_runningsCompilationErrorstimessleep(sself((sM/mnt/gmirror/ports/audio/ruby-xmms2/work/xmms2-0.2DrJekyll/wafadmin/Runner.pyswait_all_finishedÐs      cCsé|ittiiƒjottfSn|id7_tii|i}|it|i i ƒƒjo&d|_|id7_|i ƒSn|idjo#|i i ƒ|_ |i i ƒn|i |i}||i |fSdS(Niiÿÿÿÿi(sselfscurgroupslensTasksg_taskssgroupssNonescurpriosgroupsprioskeyss get_next_priospriolstssortsid(sselfsgroupsid((sM/mnt/gmirror/ports/audio/ruby-xmms2/work/xmms2-0.2DrJekyll/wafadmin/Runner.pys get_next_prioÝs c Cs•x$t|iƒD]}t||ƒqWtotd|ƒnd}d} x¶no®|i ƒ|i o|i ƒPn|i o|i o5|i ƒ|iƒ\}|_ |tjoPqÃn|ddjoDtiƒx)|idjotiƒ|i ƒqáWtiƒnHtiƒx0|i|idjotiƒ|i ƒq%Wtiƒ| d7} |i o|i |_ g|_ n|i oh|i idƒ}|iƒ oktiddƒo|i i|ƒn|g|i |_ |i o"tiƒtiƒtiƒqûqÿ|iƒ|iƒ od|_|id7_qUnd}d}y$t!i"|i#ƒ}t!i"d}WnnX|i$t%|i|i&|||ƒƒt'iƒt(d7a(|id7_t'iƒ|i)i*|ddƒqNqUWt+d t,| ƒd ƒtot-oht.d d ƒ}t-d\}} }x5t-D]-\} } }|i4d | || |fƒqRW|i5ƒndS(Niÿÿÿÿiiii ssNORMALsblocksamount of loops srunnerstest.datsws %f %f %f (6srangesselfs m_numjobssis TaskConsumersdostats TaskPrinters currentpriosloops read_valuessm_stopswait_all_finishedsm_frozens m_outstandings get_next_priosNones conditionsacquiresm_countswaitsreleasespopsprocs may_startsrandomsrandintsappendspreparesmust_runsm_hasruns m_processedscol1scol2sParamssg_colorsscolors set_displays progress_linesm_totalslockscountsm_readysputsdebugsstrsstatsopensfilest1squeuesrunstimeswritesclose( sselfsfilesprocsrunscol2s currentprioscol1sist1squeuestimesloop((sM/mnt/gmirror/ports/audio/ruby-xmms2/work/xmms2-0.2DrJekyll/wafadmin/Runner.pysstartôs’                    %   "(s__name__s __module__s__doc__s__init__s read_valuesswait_all_finisheds get_next_priosstart(((sM/mnt/gmirror/ports/audio/ruby-xmms2/work/xmms2-0.2DrJekyll/wafadmin/Runner.pysParallel–s  ( ('s__doc__ssysstimesrandomsParamssTasksUtilssdebugserrorsdostats g_initialsg_quiets ExceptionsCompilationErrorsNonesexetorspprocswrite_progresss progress_linesprocess_cmd_outputsexec_command_normalsexec_command_interacts exec_commandsset_execs JobGeneratorsSerials threadingsQueueslocks conditionscountsstopsrunningsfailedsstatsThreads TaskPrinters TaskConsumersParallel(sprocess_cmd_outputs JobGeneratorsrandomsParamssexec_command_interacts progress_linesg_quietspprocs TaskConsumerstimesParallelswrite_progresssTasksCompilationErrorserrorsexetorssyssQueuesUtilss TaskPrinters threadingsdebugsset_execsSerialsexec_command_normal((sM/mnt/gmirror/ports/audio/ruby-xmms2/work/xmms2-0.2DrJekyll/wafadmin/Runner.pys?sF       TZ  O