HPEG2RHVNHOPB5T4ZRXANIRBMVOVY3B5GFETJRYOTDJFVAYH2TQAC AWYTL4HOIPZSPJSFWOMMCSCZSSJ7OEYETVBAODIHW4RYMENMATFAC JSG5QEZJTJJJ3VZS2CVQGRTD3QD63U4E6I7WSTWXN3K56QVLE27QC KZAP6QPOL5XMMV3XVENLTKEIP6ZUE6GJBREZGMLZRAG7IR2WNK7QC JAUTUNGIF2UZ4YJYL5YXBUUKO774OLQZKAJ7VZNUEWAKVJL5L2DAC ALXRI3Y52GK6PXOLWQDYJJAD3MO3OPVX7XEKNHGA4T6HA3KUADFAC LTG2CO3VOIDVD44ZTOGZHQPT6SPBWSJXHF7WTOKWSKOGUTCSAO5QC LL36GPHADRAVU6XM5J2QXBSG5YXXETVTIA3EAINY67W7ECMKN6IQC UVNQPK3TO3WNRYCHV66SECURHJEKYSDLREKG3T2JVC5YLE2EHA5QC NW3ZYPCMDAFPCVDJ5HQ4EHGFDMI3U2Z4GCM6A6ER7NVRJVV4TCVAC FU3ZFU2QLECGYLTWITSLTPL6Q7BTMBSPTBBJ6FXDS64E56DZ7JVAC WAZFSDSLS4XBU6I44LCEOCGGWDGAWJRBOO4QMPQHQSMPQIJDLVOAC FFMOQLJQ5NC73KDK2FZZX7PLSSFXRUY2RL27R7XAUTMZKWVXK4GQC BAOVFU73MCAEGA6VFZ5EF3CALRRFIIROUIEDMFHIOKOYMQEG36KAC 3466DZDE3UMZNIHAJDDOWUQQYRYWB45TQVIMMTXZXG4DJLZH7DNQC ZCQOOAGYGHA2NYLVQOKDK2O7MDHDTVDQJ6FJZJ4KW6FGBNI7TNGAC FCBQMIF3WANTJKCC2L7U3M3PNRCJHKT467ETXUL5WSEEWNEAA6UAC MOX7XJ2E3XISXA7V7T4W6GEAGECGWBZ4PYSLTYBVVR4VAKOI33CQC 3EGKZC3CURTH4S36LMFCU57S42VARSHDAGA4J56RKNPD5VR4FKSQC TCHEWSZLG3PX7JFBLYO5ASBYAGZU4TWUYZQGNXPHQ3J7DILQPYGAC FPK5LF53CFUEKFYJ3IYXT4UTVC6IITWJOCFATMC4PLHEUP5SIEAAC RAKTHYAIX757GPYWCHOE5H5RD3QYKQW3QKLWUIUKPHQ5QGWQXWQQC J7EE2XZAB5EZICAZGZ6DKM4JDMH73A5AJIW6INYMWJHENIGVANQAC AH2YD57S37LRYYP54PI4PVOM63SSOPROQZD2IT7AH5ZSM62XAQCAC 75XUS62YF7OK4S45RCZ5OOASXEBIEDNDBYEEMOCBDHVXV4GA3NLQC X5UVREJYKD4FGXILS6ONEGL2LQ43FY3GATXGPXIROFHS3Y6SB4AAC T2232OBSNVDGHY46RY5BBB2IET5LV5OLKSSBDYUF7KAEDBUOTC7QC BTUDUY6FY6UTRZOGLSPFNA4MVTSP7JXBD44VYF6BPKNFF6Y3CY2QC HSVVEKTY2U5XJ4ZDHF43YEQXRPRWNZLZDDD4W7JFJ55UWD7CEFBQC BKOIYITRBRVU4D7XFAZPV5QHAPCBMIO3SBNHYJ6TVT43WR32CTHQC SHYRGAWZFYGRWCRB54TYL2GTU3B4WMQ3J5H4ZHGV27W7PUQN3EWQC ODWGRX32EMUMLRDHFGGFIBZGP3MQIJDC75SZZASN76XOEHCNRHYQC HZ2U4QEVVYICB2SZOY4UW7WPLUCQUJA7GB3GXCMLVWEF2WGI32XAC TH674WKJECNZ4K22DZ2N4SF53UGKG2BQRGBSNESRPDRSRND6TZHAC HB3OHPJLK47NODSPGPMHZOT2E6FNQMGJNVV7MKBCWF6P65TCAKKQC LBNVQXUBEZ45SOTGVXK5UEZXIAIZTJLWZNUYFI4JZ6J65N3KPDVQC NZI7E2E3LQJ6SGK3WURDUEE54JWEBVDNHTQ2PYSKHRCRZVOWKQVAC ZEEZRG2ELCFZRPLUGSFZEMT43MEMWIM7TTC7PMMGTMKQ4F2OGSFAC 2R7GHSA4NUXPRWRPVXYDYWFIVVJGSUWUI2IPJGFN6ILZIAZGXGCAC 5NO7NCKTMM5ZW7JYOETUFOSWK2ACTXWDZGJAFXZN6L3OF6BFTNOQC 6F4UNDTCAW7LYSKTUUUCX32BLAAGYPUPK2LXMMZ32Y6H3CBWP6TQC LZO3C2KIACZ3HN72RBGWWIT5ED4RJMYKI3SAHXT6RIUPHDFL3STQC NEWDDAOFCDLYBXQCZNQ2GDH7HPAHVN3YRDL52ZYEMVA4YH6LBDXAC DEMSSSB22UI2ZN26C56UYO4NZWMDCRYKLAQARGOTSORSDXX3ZNNQC 777XFGVYXBMKXY562A2DZQ5YQLZJHIALIT7456TLUWS3HHCQ7E6QC 6QRHXIM3XHCDLSIIBEGETDV67V6LTV55QMHC64ZPBMLTAECM5N3QC 3HZY24CX4U2TO74HOY4YX3LBJIYF4DLXHCIY7J2RASAC4COMSMZAC JXPHAZMVKLQZ6NHALF3IH4EP34ZGP7QW75OMUTAJYK4YGU3FRGOAC ZI535LI6PJMKSOBJE33B3RRZ5S2JVTR3XPUDTSXJW6BZNTAHS3GQC 6FRLEP4PY7HKDWDD7TWQ7HXILOWRMIKXHJRXXXS65Q5CXMQ5CSMQC J5UVLXOK6EDIL5I7VKWH4V2QDS4DPD7FHRK6XBWSXFRQS4JKXFZQC 6KJXJB7NZ5XJ3WGUWKFNT6LMBNYJN3IPHZ7B7H654D5B6LPOL5QAC P5X4P6VKS5CJOOLJRVL66GRJLDLVC3EKAVAHP2RJOXQJ7WTYAUBQC KQS7DSKJHTEHALCPTXMWRX2IBOVC5BWU7RWJ4GP5A2JJSBR7HPKAC OOQ2D3KCLFPYNAN253PHWLBQMB6OMO2KYQWQXLTP65SQAYZWQ5LAC YFPZ46YK4BOI6VH2H3F757UEGEYONURUAEDAYEIBLRY33PLSSO4AC A22P7HCOGNO3XEQWBNEG2VHTGUB2GKQ75Q6JDMPQNQCLFHE7XBFAC EDRUQ4UK643SUCYMMTS2JS4N3BHARLKRDWRH3QAYWDMWRAMPNAOQC CS7T2XFIISZ7TPQ6FFRIDYPR6BDCQHURP4JE4YKLI4OYSNWKZCHAC LUPEGYR76IIJFCEV6QU3VII2DNOHH3W3RHQI77LDFZU7B5QETTHQC KAZWI5G4DN2WUW7L2KWZR3D3QQJON4ISQYP7CRLC5HAOPIDYQGRQC H27UAGSXDDVC7VUIQDW75ASGKFUEEGGJXDRRRFMHDNJ2UZMGPADQC SJN2QPWHFYKX7CJMW4XZHI2P2THH7MECZZIHQMCH6EKBZ45G3DOAC RI4S7SYT3QKWCR2OBQ3RGVHWHRBGB6PKIEVGZYITV3FF6PF3CT6QC 3SQCOHZNX4XUQU3KW6DXP65EQ2KHYZN6LTKVSKBXPTY4J3FKU2JQC 7UJ5YV4VUSXMKB57KKXDG6KLIXMQXO45VO5UTOT46BHQJBFZ7XKQC 2I2ZX6JBPIM5D57G52MGHKUD66CJMOYAYNYN6CSHNUHAFA46A5YQC XBU2ODSPGKXUPOV5CFKOBOJLCIU5BMMZ5YVWFR7CP2G5QQZ5GAJAC 2GK5DOU7ODF4WBSN3QTD3WIO52VTL2LOAXKGCDEMMAQPTEO4A4HAC KPZNJ33UUF6TK5OPB6K5KLM3ZEK7YV3IF32HTLJFURCO6ICDMGYAC ID5DHUFUROHFV4UHHMCLH3S4BWDSK7JRYIAZ2QF37LJERXIDQKMQC PPJN6SDP3BIWOB5LB3B2F3HEWM4IG7WZMG7JICERVBR7CDMBOPOQC T7Z63K6TE3H5XDKFW5MPFTI33WK42ZXYGHMAM3WJLMGYMQN4HMIAC IN272KZWHENW2TCR3LWQ6OZAEESJL5S7AEL3GYLJTWHJUDE6HADAC AFTXA575C6JTVLVXTYJUKQGPLBO3NFORLO5XDSPHNL44HXLRH4TAC F5RYSE7TNJ6G35LFFV2F6IYDVPV4XG3A5LGDJECA7VJRS4SUER3QC PKPWUHUXLGPQFQUTNHLVGWNT6AB3H2VMDCBKT6IPZDC53CEL4W7QC ECBA3GQOGTF73Y7A5EFUXZ5PDIZ5NPJM3WMOUJTE3AEK2PZQX3MQC L2E6EVE2RVFVDCUNRJ4CZYSQNS2DZUA5DTBETHBDUQUV2KQQRAOQC US27ZTX5HCH53SQN2KFSCV2GL2625XL5J3WCDR7D5HLPA7ZSPX5AC D5QIOJGPKQJIYBUCSC3MFJ3TXLPNZ2XMI37GXMFRVRFWWR2VMTFAC SB2V735VJ2CDHGCXRUA5FOYHDRXQFVOZ3KXC3YKXWRNW6DIX7RXQC 3HCBU2FAXZMSF4JJR5Q64BSN66MBOGVETNHK33V2WSNDGOF4HHQAC SHBLLAVHMMHOPCJ5NPGDZQPVRAMPMGXSFEMX7H7BETW6GTRGUUBAC JM3DPYOMVNMCL5GMEYC3Y4NDRGTNIFBBFTPGPVT66GPENVPU7EVQC 5O6E5SU5YQ4JIXLWGHTSAJO4UAMRN65GAZLYMVBMRLFS2F6X7AKAC DHMTPGSTO5WBG7CCOY6GO6J5FDHL6OGXBFENFTQJ7GXPAANTLIDAC AHTEIK7GGPHUC3AXIJ2NX4TI3RLX65XYKGAIIC6MC2S6I6QPWTAAC BD3GRK4BQUGRQGTAILUITIH3RRSVUH6AKINVMMKYLBAAHAAUSB4AC CMU3YKOUUB6VNP54NVYUKFHI3A46YAAANNYOZSHCUJIQOQEZ3GCAC EYNG4EL4N7LDQD4XKVVLYCDBCRHJZIEEYU7KQWDTAVADVE34TVZQC 37R34XJOGMP3E3DD4RGGRX5LBW2LGB6J3E6XOXLWSU2QEIWBEM4QC R5D7DZPETNNQQ644CFC3LYTR4JX3LTNXHQSTMQENND7DARWIEAJAC ZVTSOVHNQNQCRF3N44RKDQSL3UM7HSLTAXICMWEE6EIA6SWJXZCQC 6BLUKEQ2M5RGWMPXPYIFIEVEUBV4PYAZ75S2WSBIATMRGYFMQZHQC LCKWLQW3TCEGY4E7FRZYWYSP7SHRA5LNJ2A7TWU4LVIRZTF7K7ZQC 3ZCEPLNOOWRHKM75FJJVQHHYIAHXAYKFF5SEKQGVSMLRAF4NOBIAC TWVSALRLHGSY6SHLMLT53K2A5SUCPU3SNFPZ2KWYOLDQUJBSZ2OAC VJHIHMEHNE27HYL4CLC5J3SNALGPRSHYKQO2A65P5ORMTJEI42WQC V4RNHJNR3WIBINRVD5MADTLUQWMCOMWHBD43MDV2XD7S6BRLL2YAC KN3VYE5P2RJB3KZ355LA5C2T2D5S2IR3QZFE53AJIWUVMETEEYDAC S6OISBQ3HPFHAAQ5ENG7N3MNGOPNEJPIFKSSA5N4G6KJQTQBSSLQC 4D4U5IPYZO2FONPOET4UP3ZPVPB35Q47SXU7A56G76V7VDFILOIAC S5PV6IIMKJ7PGWIFLLXERHYF3BCP2UEGFRZEZLD6UUBLVEZXJLUAC TLZ2SPBRX274EUS73SUUCOFYQUXB76S3F4AOSJXDYXIMMS7JIHEAC KOTB7BKVML6T6S5ZNTQ6456FMGCRZCP3E3KVWCOW7T6SPRHC53LAC TQKGQ5R36VOLLJ3SR2WWIQ6VSN245N3QG4JHI2ZCP5T6RXN3PJWAC H7CNGK4OJNRYZQGPLBGR72DULLEPFQ5UISF5J24D7IMA7SYW5LGQC RBNQKATLSAKTGW2IRNB5CRV3SEH5F6E4BPVWX4BII7MH5TCIPINQC YAPITGB3ENS6PXRBFC647ESCQUYG442DKHUPM46PJKCKTMHWGVXAC D3DIBMOKXK2E65267BEEWQL4S4NSHGZBCY7YTU34JSEPZ7AKNBRQC 3E6IP3R3JGH76PNGG7RCADV65KOV24HQXPXNLVVYIQ46AVYJRG3AC IK53RV4VGOHLCZGQCCIKPB45M3C7M7YMNBOJFBGZJ4LWIZNU4QNQC GNIEG2GCT6BUYHY2WXUAQVKHSYB6TVQT52O5GEY6COLKFK4ODCCQC B72GLND4UQKSGNGIY4FA6HLQNFS42SKRXV5NHTHADUJRU73NELAAC BHZXGT2HWAMFNVBUDG7VR5HNA2SUJBUSMWB7EHTECB4QJ5HVYANAC CLJQCY2XHIDNNMFBJ5PK3GQEN6RFALEFKXBJRWZPEIKR4PR5ZQ5AC RU7AQO7U4HCWJNQTR2KRGDLLG24WYD47MWIHREV6SIAPCPDQHAWQC S66BOMVUACAUDSGSDWP7ZIXVMZSQHWXOZYVTB7ILUCWZ7DDFAKVAC YTZOC7C5N3JI3AOFPLT2UM7567XIKPSCMFKSESB6J4LNVVW3DOCAC JTRG7RDQXKPSO4ESGDLSVAT5WIFGKDL424MN6YYCVTKCOR2FTXRQC FHF6IZJQPUQHY5QWQYRPZVDBRLHREWRHGNKVQDT7F3GQKKLZXJKQC RFE6T5LGBFFNEPHZOPF4UNMFC2L4CGD5TPAMOXDLRPH3TZJ43UBAC SZYY2EQQK2JUAHMDPBASGWC2RON2GA5G6FHBLO4GAAX2XTM6QLSQC Z4KRJX4QVMQ5F233DC3XMSE5ZJYHKX3UF5QWAGHDC54EC5NUBXUQC OZ5UBJEKYFW5WXAJ72IKTEZC7Z3FFFNCIBDPIDNM2CLINFSPYTTAC C5XKS77NGPFKCVMRWQW25256SW2VVJZSDPKW3MOOKGE6OMAZVNQAC VVOAXWH4EKVYSDOOKDQN3FHU2JRNNKEG7G4E7YRB7HEVYXHVP63QC 3HEMN2Q2XKIYKGTYSYOR7SYL44SHI6UHXHQQ564AI6G2KQGYWBDAC ODNCGFQ5FPKFI624BVMLW7PJ2EFJOR3TY66OCZM42UNNTWBCF2TQC DSM3TTSOVUOOXU2YS5KM7L5GHDU64RYYCQBIWBB4NIYFNQ2ADRWQC CEARA7OHINXEQLCVPJ3SP5NJLGMFYXH5UEPDZ5BQ57SBJXHLQESAC TW5ZQX5ZT5EZP4ZQYB5Y53YC6VDOXC56ZDX5IFQIMO47OEGHR5ZAC TCXFZZFNJAO6UBBRHJLBXHDPCCKTXIPVFJ3YCDIBS4W7ZJTAI4NAC JLDUSNUOOQNL63BOPXIWZOWFRQ5X35RWG33PJB3J3KMR6QR7TN7QC E5DMQRPO5BQ6KNA3C34U5JQQ5ZAZOJE2HTWM3JUVIG42LAVHPHFQC T6KISLR63EHMQ4QQI3Z46PSVQITCYNZL32K3AR2LKQ3K6ESOW3QQC JFZNAYJXKCMXYHGCLTRH7Q6TOFGJ4BT6332GONCWVYRLNMDDG3KAC GPRYAAFPVGMT7TMZILMR22FFUBB436CDM5GYVQJ7GL2H6J7WFH5QC CXRCPDSQEWHSZNCJIORUAINH5I2FFFQ7AVUQOB62REGROLROPE7QC 7YBYT2LQML2PKEO6UO4444AGSASS664UCDXW2YO3ALB7THQHCEBQC KA45EBF5GVBBFQ2E6GSMDJ5ORSOJ7YP5EHAHLUZB226F7WNO6KYQC LOMVF2KHUIJSCXY76FDF4YMGAEVTHGPFMYFC2SRSWNA2C6NYFRLQC FYO6NECE4YJC76HQIG35NNJABODV7KNQKREK5YKZU6O2MNNSQTMAC FHAVPTZ6GYCZMMPIJN2VPGBACK66NENWCFJMTAOW6464WNCJPVOQC QUTWJR7PQZ3DBPC4G2AFXOKPPGFZQLE5RLXHAOFTLMXIT2QPF4TQC BOFOHCPK7UVE3TUEL4NNOQXN2EQGN6N3ITJWTCOJK5Q6MSHYSOSQC IS32JFKXL5BXWRTLUTE75X5GZRSIK3LM3ECQOKH53WIH7MRTRJGAC AEFNBIIWLCTYPU6PDYG6D7OYGVP3E7DAGMYPIXVKCVVHJAM63FNAC WZ3AEJ67LOG5L335AAC2BDLIJPIU4VSCGBMATBHDZC26ECRS5A6AC 4X6NS66QDWR4S4ZZFKN2QOJQII5ZYIMTDYRHK25N6NJSROVLHJ6QC N22GPKYTOLZLBGTGDATQDVZ4R5APZEAOIA7L32X4UXBH4XNI7MWAC WYN733STK5DUQSWHSS6EYZK32KPZII64HLX4NS7TYUSFZ6AAFLGAC M552HLIAP52D42AVXVC5SGROAYN2TBCEUZOXESWEMBBUX7G3U6TAC BVOPAMLSAU4UTV3DUX53OYDMXP2SETAQVUKAYE2OTCVVN4RD7LLQC 5DSF5KWYCNFCWHDWAJDWQOFQML2AJIV7CESESP7HVTU4LVEEEYEQC PHX2HIVGHHKCAX6VNN2WXD4LRGSA74KQMJCCTMHK7HS6JPELVECAC { '+select' => ["me.statusChangeId", "me.statusChangeTime", "resultInfo.buildStatus"], '+as' => ["statusChangeId", "statusChangeTime", "buildStatus"]
{ '+select' => ["me.statusChangeId", "me.statusChangeTime"], '+as' => ["statusChangeId", "statusChangeTime"]
my ($latest) = joinWithResultInfo($c, $c->stash->{allBuilds})->search({finished => 1, buildstatus => 0}, {order_by => ["isCurrent DESC", "timestamp DESC"]});
my ($latest) = $c->stash->{allBuilds}->search({finished => 1, buildstatus => 0}, {order_by => ["isCurrent DESC", "timestamp DESC"]});
my ($latest) = joinWithResultInfo($c, $c->stash->{allBuilds})->search({finished => 1, buildstatus => 0, system => $system}, {order_by => ["isCurrent DESC", "timestamp DESC"]});
my ($latest) = $c->stash->{allBuilds}->search({finished => 1, buildstatus => 0, system => $system}, {order_by => ["isCurrent DESC", "timestamp DESC"]});
my $project = $c->request->params->{project} ;my $jobset = $c->request->params->{jobset} ;my $job = $c->request->params->{job} ;my $system = $c->request->params->{system} ;
my $project = $c->request->params->{project};my $jobset = $c->request->params->{jobset};my $job = $c->request->params->{job};my $system = $c->request->params->{system};
my $project = $c->request->params->{project} ;my $jobset = $c->request->params->{jobset} ;my $job = $c->request->params->{job} ;my $system = $c->request->params->{system} ;
my $project = $c->request->params->{project};my $jobset = $c->request->params->{jobset};my $job = $c->request->params->{job};my $system = $c->request->params->{system};
my @stats = $c->model('DB::Builds')->search($filter, {select => [{ count => "*" }], as => ["nr"], group_by => ["timestamp - timestamp % $base"], order_by => "timestamp - timestamp % $base DESC", rows => $nr}) ;my @arr ;foreach my $d (@stats) {push @arr, int($d->get_column("nr"));}
my @stats = $c->model('DB::Builds')->search($filter, {select => [{ count => "*" }], as => ["nr"], group_by => ["timestamp - timestamp % $base"], order_by => "timestamp - timestamp % $base DESC", rows => $nr});my @arr;push @arr, int($_->get_column("nr")) foreach @stats;
my $uri = $c->request->params->{uri} ;my $type = $c->request->params->{type} ;my $rev1 = $c->request->params->{rev1} ;my $rev2 = $c->request->params->{rev2} ;
my $uri = $c->request->params->{uri};my $type = $c->request->params->{type};my $rev1 = $c->request->params->{rev1};my $rev2 = $c->request->params->{rev2};
$branch = `(cd $clonePath ; hg log --template '{branch}' -r $rev2)`;$diff .= `(cd $clonePath ; hg log -r $rev1 -r $rev2 -b $branch)`;$diff .= `(cd $clonePath ; hg diff -r $rev1:$rev2)`;
$branch = `(cd $clonePath; hg log --template '{branch}' -r $rev2)`;$diff .= `(cd $clonePath; hg log -r $rev1 -r $rev2 -b $branch)`;$diff .= `(cd $clonePath; hg diff -r $rev1:$rev2)`;
if (-f $build1->resultInfo->logfile && -f $build2->resultInfo->logfile) {my $logtext1 = readNormalizedLog($build1->resultInfo->logfile);my $logtext2 = readNormalizedLog($build2->resultInfo->logfile);
if (-f $build1->logfile && -f $build2->logfile) {my $logtext1 = readNormalizedLog($build1->logfile);my $logtext2 = readNormalizedLog($build2->logfile);
if (defined $build->resultInfo && ($build->resultInfo->buildstatus == 1 || $build->resultInfo->buildstatus == 6) && !($path eq "") && -f $lastBuildStep->logfile) {
if ($build->finished && ($build->buildstatus == 1 || $build->buildstatus == 6) && !($path eq "") && -f $lastBuildStep->logfile) {
$c->stash->{currentBuilds} = [$c->stash->{job}->builds->search({iscurrent => 1}, { join => 'resultInfo', '+select' => ["resultInfo.releasename", "resultInfo.buildStatus"], '+as' => ["releasename", "buildStatus"], order_by => 'system' })];
$c->stash->{currentBuilds} = [$c->stash->{job}->builds->search({finished => 1, iscurrent => 1}, { order_by => 'system' })];
push(@select, "(select buildstatus from BuildResultInfo bri join Builds b using (id) where b.id = (select max(id) from Builds t where t.project = me.project and t.jobset = me.jobset and t.job = me.job and t.system = '$system' and t.iscurrent = 1 ))");
push(@select, "(select buildstatus from Builds b where b.id = (select max(id) from Builds t where t.project = me.project and t.jobset = me.jobset and t.job = me.job and t.system = '$system' and t.iscurrent = 1 ))");
push(@select, "(select b.id from BuildResultInfo bri join Builds b using (id) where b.id = (select max(id) from Builds t where t.project = me.project and t.jobset = me.jobset and t.job = me.job and t.system = '$system' and t.iscurrent = 1 ))");
push(@select, "(select b.id from Builds b where b.id = (select max(id) from Builds t where t.project = me.project and t.jobset = me.jobset and t.job = me.job and t.system = '$system' and t.iscurrent = 1 ))");
[ joinWithResultInfo($c, $tmp)->search({ finished => 1 },{ order_by => "timestamp DESC", rows => 5, '+select' => ["resultInfo.buildStatus"], '+as' => ["buildStatus"]}) ];
[ $c->stash->{jobset}->builds->search({ finished => 1 },{ order_by => "timestamp DESC", rows => 5 }) ];
$c->stash->{builds} = [$c->model('DB::Builds')->search({finished => 1, stoptime => { '>' => $pit } }, { join => 'resultInfo', order_by => ["starttime"], '+select' => [ 'resultInfo.starttime', 'resultInfo.stoptime', 'resultInfo.buildstatus' ], '+as' => [ 'starttime', 'stoptime', 'buildstatus' ]})];
$c->stash->{builds} = [ $c->model('DB::Builds')->search( { finished => 1, stoptime => { '>' => $pit } }, { order_by => ["starttime"] }) ];
my $primaryBuild = $c->stash->{project}->builds->find($id,{ join => 'resultInfo',, '+select' => ["resultInfo.releasename", "resultInfo.buildstatus"], '+as' => ["releasename", "buildstatus"] })
my $primaryBuild = $c->stash->{project}->builds->find($id)
$res = $builds->search({},{join => 'resultInfo', select => {sum => 'stoptime - starttime'}, as => ['sum']})->first ;
$res = $builds->search({}, {select => {sum => 'stoptime - starttime'}, as => ['sum']})->first;
# Add the releaseName and buildStatus attributes from the# BuildResultInfo table for each build.sub joinWithResultInfo {my ($c, $source) = @_;return $source->search({ },{ join => 'resultInfo', '+select' => ["resultInfo.releasename", "resultInfo.buildstatus"], '+as' => ["releasename", "buildStatus"]});}
my @builds2 = joinWithResultInfo($c, $builds)->search_literal("exists (select 1 from buildproducts where build = resultInfo.id and type = 'nix-build')");
my @builds2 = $builds->search_literal("exists (select 1 from buildproducts where build = me.id and type = 'nix-build')");
, "(select count(*) from Builds as a join BuildResultInfo r using (id) where me.project = a.project and me.name = a.jobset and buildstatus <> 0 and a.isCurrent = 1)", "(select count(*) from Builds as a join BuildResultInfo r using (id) where me.project = a.project and me.name = a.jobset and buildstatus = 0 and a.isCurrent = 1)"
, "(select count(*) from Builds as a where a.finished = 1 and me.project = a.project and me.name = a.jobset and buildstatus <> 0 and a.isCurrent = 1)", "(select count(*) from Builds as a where a.finished = 1 and me.project = a.project and me.name = a.jobset and buildstatus = 0 and a.isCurrent = 1)"
use utf8;package Hydra::Schema::BuildResultInfo;# Created by DBIx::Class::Schema::Loader# DO NOT MODIFY THE FIRST PART OF THIS FILE=head1 NAMEHydra::Schema::BuildResultInfo=cutuse strict;use warnings;=cut__PACKAGE__->table("BuildResultInfo");=head1 ACCESSORS=head2 idis_foreign_key: 1is_nullable: 0=head2 iscachedbuildis_nullable: 0=head2 buildstatusis_nullable: 1=head2 errormsgis_nullable: 1=head2 starttimeis_nullable: 1=head2 stoptimeis_nullable: 1=head2 logfileis_nullable: 1=head2 logsizedefault_value: 0is_nullable: 0=head2 sizedefault_value: 0is_nullable: 0=head2 closuresizedefault_value: 0is_nullable: 0data_type: 'bigint'=head2 releasenameis_nullable: 1=head2 keepdefault_value: 0is_nullable: 0=head2 faileddepbuildis_nullable: 1=head2 faileddepstepnris_nullable: 1=cutdata_type: 'integer'data_type: 'integer'data_type: 'integer'data_type: 'text'data_type: 'bigint'data_type: 'bigint'data_type: 'text'data_type: 'integer'data_type: 'integer'data_type: 'text'data_type: 'integer'data_type: 'integer'data_type: 'integer'is_auto_increment: 1__PACKAGE__->add_columns("id",{},"iscachedbuild","buildstatus","errormsg","starttime","stoptime","logfile","logsize","size","closuresize","releasename","keep","faileddepbuild","faileddepstepnr",);=head1 PRIMARY KEY=over 4=item * L</id>=back=cut__PACKAGE__->set_primary_key("id");=head1 RELATIONS=head2 idType: belongs_toRelated object: L<Hydra::Schema::Builds>=cut__PACKAGE__->belongs_to("id", "Hydra::Schema::Builds", { id => "id" }, {});1;__PACKAGE__->belongs_to("failedDep","Hydra::Schema::BuildSteps",{ build => "faileddepbuild", stepnr => "faileddepstepnr" },);# Created by DBIx::Class::Schema::Loader v0.07014 @ 2011-12-05 14:15:43# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:hX3+iQYrGslQqY9vKvyw3g{ data_type => "integer", is_nullable => 1 },{ data_type => "integer", is_nullable => 1 },{ data_type => "integer", default_value => 0, is_nullable => 0 },{ data_type => "text", is_nullable => 1 },{ data_type => "bigint", default_value => 0, is_nullable => 0 },{ data_type => "bigint", default_value => 0, is_nullable => 0 },{ data_type => "bigint", default_value => 0, is_nullable => 0 },{ data_type => "text", is_nullable => 1 },{ data_type => "integer", is_nullable => 1 },{ data_type => "integer", is_nullable => 1 },{ data_type => "text", is_nullable => 1 },{ data_type => "integer", is_nullable => 1 },{ data_type => "integer", is_nullable => 0 },data_type => "integer",is_auto_increment => 1,is_foreign_key => 1,is_nullable => 0,=head1 TABLE: C<BuildResultInfo>use base 'DBIx::Class::Core';
"iscachedbuild",{ data_type => "integer", is_nullable => 1 },"buildstatus",{ data_type => "integer", is_nullable => 1 },"errormsg",{ data_type => "text", is_nullable => 1 },"logsize",{ data_type => "bigint", is_nullable => 1 },"size",{ data_type => "bigint", is_nullable => 1 },"closuresize",{ data_type => "bigint", is_nullable => 1 },"releasename",{ data_type => "text", is_nullable => 1 },"keep",{ data_type => "integer", default_value => 0, is_nullable => 0 },
{},);=head2 buildresultinfoType: might_haveRelated object: L<Hydra::Schema::BuildResultInfo>=cut__PACKAGE__->might_have("buildresultinfo","Hydra::Schema::BuildResultInfo",{ "foreign.id" => "self.id" },
# Created by DBIx::Class::Schema::Loader v0.07014 @ 2012-02-29 00:47:54# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:VnnyFTwnLncGb2Dj2/giiA
# Created by DBIx::Class::Schema::Loader v0.07014 @ 2012-02-29 18:56:22# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:w16c86FRReLPdA8H0yTIRg
my $joinWithStatusChange =<<QUERY;join BuildResultInfo r using (id)left join Builds b onb.id =(select max(c.id)from builds c join buildresultinfo r2 on c.id = r2.idwherex.project = c.project and x.jobset = c.jobset and x.job = c.job and x.system = c.system andx.id > c.id and((r.buildstatus = 0 and r2.buildstatus != 0) or(r.buildstatus != 0 and r2.buildstatus = 0)))QUERY
selectx.id, x.finished, x.timestamp, x.project, x.jobset, x.job, x.nixname,x.description, x.drvpath, x.outpath, x.system, x.longdescription,x.license, x.homepage, x.maintainers, x.isCurrent, x.nixExprInput,x.nixExprPath, x.maxsilent, x.timeout, x.priority, x.busy, x.locker,x.logfile, x.disabled, x.startTime,b.id as statusChangeId, b.timestamp as statusChangeTime
select x.*, b.id as statusChangeId, b.timestamp as statusChangeTime
$joinWithStatusChange
left join Builds b onb.id =(select max(c.id) from Builds cwherec.finished = 1 andx.project = c.project and x.jobset = c.jobset and x.job = c.job and x.system = c.system andx.id > c.id and((x.buildStatus = 0 and c.buildStatus != 0) or(x.buildStatus != 0 and c.buildStatus = 0)))
[% INCLUDE renderDuration duration = resultInfo.stoptime - resultInfo.starttime %] <tt>finished at [% INCLUDE renderDateTime timestamp = resultInfo.stoptime %]</tt>
[% INCLUDE renderDuration duration = build.stoptime - build.starttime %] <tt>finished at [% INCLUDE renderDateTime timestamp = build.stoptime %]</tt>
<td>[% IF resultInfo.starttime %][% INCLUDE renderDateTime timestamp = resultInfo.starttime %][% ELSE %]<em>(cached build)</em>[% END %]</td>
<td>[% IF build.starttime %][% INCLUDE renderDateTime timestamp = build.starttime %][% ELSE %]<em>(cached build)</em>[% END %]</td>
<td>[% IF resultInfo.stoptime %][% INCLUDE renderDateTime timestamp = resultInfo.stoptime %][% ELSE %]<em>(cached build)</em>[% END %]</td>
<td>[% IF build.stoptime %][% INCLUDE renderDateTime timestamp = build.stoptime %][% ELSE %]<em>(cached build)</em>[% END %]</td>
[% FOREACH prevbuild IN prevBuilds %][% IF prevbuild.resultInfo.starttime != 0 %][% pbResultInfo = prevbuild.resultInfo %]d.push([[% pbResultInfo.starttime * 1000 %],[% prevbuild.get_column('actualBuildTime') %]]);ids[[% pbResultInfo.starttime * 1000 %]] = [% prevbuild.id %] ;
[% FOREACH prevbuild IN prevBuilds %][% IF prevbuild.build.starttime != 0 %]d.push([[% prevbuild.starttime * 1000 %],[% prevbuild.get_column('actualBuildTime') %]]);ids[[% prevbuild.starttime * 1000 %]] = [% prevbuild.id %] ;
[% FOREACH prevbuild IN prevBuilds %][% IF prevbuild.resultInfo.size != 0 %]d.push([[% prevbuild.resultInfo.starttime * 1000 %],[% prevbuild.resultInfo.size / (1024*1024.0) %]]);ids[[% prevbuild.resultInfo.starttime * 1000 %]] = [% prevbuild.id %] ;
[% FOREACH prevbuild IN prevBuilds %][% IF prevbuild.size != 0 %]d.push([[% prevbuild.starttime * 1000 %],[% prevbuild.size / (1024*1024.0) %]]);ids[[% prevbuild.starttime * 1000 %]] = [% prevbuild.id %] ;
[ "Build started:", showTime $build->resultInfo->starttime ],[ "Build finished:", showTime $build->resultInfo->stoptime ],[ "Duration:", $build->resultInfo->stoptime - $build->resultInfo->starttime . "s" ],) if $build->resultInfo->starttime;
[ "Build started:", showTime $build->starttime ],[ "Build finished:", showTime $build->stoptime ],[ "Duration:", $build->stoptime - $build->starttime . "s" ],) if $build->starttime;
. " of job " . $jobName . " " . (defined $prevBuild ? "has changed from '" . statusDescription($prevBuild->resultInfo->buildstatus) . "' to '$status'" : "is '$status'" ) .".\n"
. " of job " . $jobName . " " . (defined $prevBuild ? "has changed from '" . statusDescription($prevBuild->buildstatus) . "' to '$status'" : "is '$status'" ) .".\n"
. ($build->resultInfo->buildstatus != 0 ? "\nThe last $loglines lines of the build log are shown at the bottom of this email.\n" : "")
. ($build->buildstatus != 0 ? "\nThe last $loglines lines of the build log are shown at the bottom of this email.\n" : "")
$db->resultset('BuildResultInfo')->create({ id => $build->id
$build->update({ finished => 1, busy => 0, locker => '', logfile => '', timestamp => time # !!! Why change the timestamp?
foreign key (project) references Projects(name) on update cascade,foreign key (project, jobset) references Jobsets(project, name) on update cascade,foreign key (project, jobset, job) references Jobs(project, jobset, name) on update cascade);
stopTime integer,
-- Info for a finished build.create table BuildResultInfo (id integer primary key not null,isCachedBuild integer not null, -- boolean
-- Information about finished builds.isCachedBuild integer, -- boolean
startTime integer, -- in Unix time, 0 = used cached build resultstopTime integer,logfile text, -- the path of the logfilelogsize bigint not null default 0,size bigint not null default 0,closuresize bigint not null default 0,
logSize bigint,size bigint,closureSize bigint,
failedDepBuild integer, -- obsoletefailedDepStepNr integer, -- obsoleteforeign key (id) references Builds(id) on delete cascade
foreign key (project) references Projects(name) on update cascade,foreign key (project, jobset) references Jobsets(project, name) on update cascade,foreign key (project, jobset, job) references Jobs(project, jobset, name) on update cascade
add column startTime integer;--alter table Builds-- add column isCachedBuild integer,-- add column buildStatus integer,-- add column errorMsg text;
add column startTime integer,add column stopTime integer,add column isCachedBuild integer,add column buildStatus integer,add column errorMsg text,add column logSize bigint,add column size bigint,add column closureSize bigint,add column releaseName text,add column keep integer not null default 0;
-- isCachedBuild = (select isCachedBuild from BuildResultInfo r where r.id = b.id),-- buildStatus = (select buildStatus from BuildResultInfo r where r.id = b.id),-- errorMsg = (select errorMsg from BuildResultInfo r where r.id = b.id);
update Builds b setisCachedBuild = (select isCachedBuild from BuildResultInfo r where r.id = b.id),buildStatus = (select buildStatus from BuildResultInfo r where r.id = b.id),errorMsg = (select errorMsg from BuildResultInfo r where r.id = b.id),startTime = (select startTime from BuildResultInfo r where r.id = b.id),stopTime = (select stopTime from BuildResultInfo r where r.id = b.id),logfile = (select logfile from BuildResultInfo r where r.id = b.id),logSize = (select logsize from BuildResultInfo r where r.id = b.id),size = (select size from BuildResultInfo r where r.id = b.id),closureSize = (select closuresize from BuildResultInfo r where r.id = b.id),releaseName = (select releaseName from BuildResultInfo r where r.id = b.id),keep = (select keep from BuildResultInfo r where r.id = b.id)where exists (select 1 from BuildResultInfo r where r.id = b.id);