mirror of
git://git.yoctoproject.org/yocto-autobuilder2.git
synced 2025-07-19 12:49:03 +02:00
2 lines
17 KiB
JavaScript
2 lines
17 KiB
JavaScript
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("angular-animate"),require("@uirouter/angularjs"),require("guanlecoja-ui"),require("buildbot-data-js")):"function"==typeof define&&define.amd?define("yocto-console-view",["angular-animate","@uirouter/angularjs","guanlecoja-ui","buildbot-data-js"],t):"object"==typeof exports?exports["yocto-console-view"]=t(require("angular-animate"),require("@uirouter/angularjs"),require("guanlecoja-ui"),require("buildbot-data-js")):e["yocto-console-view"]=t(e["angular-animate"],e["@uirouter/angularjs"],e["guanlecoja-ui"],e["buildbot-data-js"])}("undefined"!=typeof self?self:this,(function(e,t,i,s){return function(e){var t={};function i(s){if(t[s])return t[s].exports;var l=t[s]={i:s,l:!1,exports:{}};return e[s].call(l.exports,l,l.exports,i),l.l=!0,l.exports}return i.m=e,i.c=t,i.d=function(e,t,s){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:s})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var s=Object.create(null);if(i.r(s),Object.defineProperty(s,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var l in e)i.d(s,l,function(t){return e[t]}.bind(null,l));return s},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i(i.s=0)}([function(e,t,i){"use strict";i.r(t);i(1),i(2),i(3),i(4);angular.module("yocto_console_view",["ui.router","ui.bootstrap","ngAnimate","guanlecoja.ui","bbData"]).config(["$stateProvider","glMenuServiceProvider","bbSettingsServiceProvider",class ConsoleState{constructor(e,t,s){var l="console";t.addGroup({name:l,caption:"Yocto Console View",icon:"exclamation-circle",order:5});var r={group:l,caption:"Yocto Console View"},n={controller:"".concat(l,"Controller"),controllerAs:"c",template:i(5),name:l,url:"/".concat(l),data:r};e.state(n),s.addSettingsGroup({name:"Console",caption:"Console related settings",items:[{type:"integer",name:"buildLimit",caption:"Number of builds to fetch",default_value:200},{type:"integer",name:"changeLimit",caption:"Number of changes to fetch",default_value:30}]})}}]).controller("consoleController",["$scope","$q","$window","dataService","bbSettingsService","resultsService","$uibModal","$timeout",class Console{constructor(e,t,i,s,l,r,n,a){this.onChange=this.onChange.bind(this),this._onChange=this._onChange.bind(this),this.matchBuildWithChange=this.matchBuildWithChange.bind(this),this.makeFakeChange=this.makeFakeChange.bind(this),this.$scope=e,this.$window=i,this.$uibModal=n,this.$timeout=a,angular.extend(this,r);var o=l.getSettingsGroup("Console");if(this.buildLimit=o.buildLimit.value,this.changeLimit=o.changeLimit.value,this.dataAccessor=s.open().closeOnDestroy(this.$scope),this._infoIsExpanded={},this.$scope.all_builders=this.all_builders=this.dataAccessor.getBuilders(),this.$scope.builders=this.builders=[],"undefined"!=typeof Intl&&null!==Intl){var d=new Intl.Collator(void 0,{numeric:!0,sensitivity:"base"});this.strcompare=d.compare}else this.strcompare=function(e,t){return e<t?-1:e===t?0:1};this.$scope.revmapping=this.revmapping={},this.$scope.branchmapping=this.branchmapping={},this.$scope.builds=this.builds=this.dataAccessor.getBuilds({property:["yp_build_revision","yp_build_branch","reason","publish_destination"],limit:this.buildLimit,order:"-started_at"}),this.changes=this.dataAccessor.getChanges({limit:this.changeLimit,order:"-changeid"}),this.$scope.fakechanges=this.fakechanges=[],this.buildrequests=this.dataAccessor.getBuildrequests({limit:this.buildLimit,order:"-submitted_at"}),this.buildsets=this.dataAccessor.getBuildsets({limit:this.buildLimit,order:"-submitted_at"}),this.builds.onChange=this.onChange,this.changes.onChange=this.onChange,this.buildrequests.onChange=this.onChange,this.buildsets.onChange=this.onChange,this.builds.onNew=e=>{var t=!1,i=e.buildid;null!=(null!=e.properties?e.properties.yp_build_revision:void 0)&&(this.revmapping[e.buildid]=e.properties.yp_build_revision[0],t=!0),null!=(null!=e.properties?e.properties.yp_build_branch:void 0)&&(this.branchmapping[e.buildid]=e.properties.yp_build_branch[0],t=!0),this.revmapping[i]&&this.branchmapping[i]||e.complete_at||(e.getProperties().onChange=e=>{if(t=!1,i=e.endpoint.split("/")[1],!this.revmapping[i]){var s=this.getBuildProperty(e[0],"yp_build_revision");null!=s&&(this.revmapping[i]=s,t=!0)}if(!this.branchmapping[i]){var l=this.getBuildProperty(e[0],"yp_build_branch");null!=l&&(this.branchmapping[i]=l,t=!0)}t&&null==this.onchange_debounce&&(this.onchange_debounce=this.$timeout(this._onChange,100))}),t&&null==this.onchange_debounce&&(this.onchange_debounce=this.$timeout(this._onChange,100))}}getBuildProperty(e,t){return e&&e.hasOwnProperty(t)?e[t][0]:null}onChange(e){0!==this.builds.length&&0!==this.all_builders.length&&this.changes.$resolved&&0!==this.buildsets.length&&0!==this.buildrequests&&null==this.onchange_debounce&&(this.onchange_debounce=this.$timeout(this._onChange,100))}_onChange(){var e,t;this.onchange_debounce=void 0;for(var i=0,s=Array.from(this.builds);i<s.length;i++)e=s[i],this.all_builders.get(e.builderid).hasBuild=!0;this.sortBuildersByTags(this.all_builders),null==this.changesBySSID&&(this.changesBySSID={}),null==this.changesByRevision&&(this.changesByRevision={});for(var l=0,r=Array.from(this.changes);l<r.length;l++)t=r[l],this.changesBySSID[t.sourcestamp.ssid]=t,this.changesByRevision[t.revision]=t,this.populateChange(t);for(var n=0,a=Array.from(this.fakechanges);n<a.length;n++)t=a[n],this.populateChange(t);for(var o=0,d=Array.from(this.builds);o<d.length;o++)e=d[o],this.matchBuildWithChange(e);for(var u in this.filtered_changes=[],this.changesBySSID){(t=this.changesBySSID[u]).comments&&(t.subject=t.comments.split("\n")[0]);for(var h=0,c=Array.from(t.builders);h<c.length;h++){if(c[h].builds.length>0){this.filtered_changes.push(t);break}}}}sortBuildersByTags(e){for(var t=[],i="",s=0,l=Array.from(e);s<l.length;s++){var r=l[s];r.hasBuild&&(t.push(r),i+=".".concat(r.builderid))}if(i!==this.last_builderids_with_builds){for(var n=this._sortBuildersByTags(t),a=[],o=[],d=function(e,t,i){var s=a[e];if(null==s)s=a[e]=[];else{var l=s[s.length-1];if(l.tag===t)return void(l.colspan+=i)}return s.push({tag:t,colspan:i})},u=this,h=function e(t,i){if(d(i,t.tag,t.builders.length),null!=t.tag_line&&0!==t.tag_line.length)return Array.from(t.tag_line).map(t=>e(t,i+1));t.builders.sort((e,t)=>u.strcompare(e.name,t.name)),o=o.concat(t.builders);for(var s=1;s<=100;s++)d(i+s,"",t.builders.length)},c=0,g=Array.from(n);c<g.length;c++)h(g[c],0);this.builders=o,this.tag_lines=[];for(var p=0,b=Array.from(a);p<b.length;p++)1===(n=b[p]).length&&""===n[0].tag||this.tag_lines.push(n);return this.last_builderids_with_builds=i}}_sortBuildersByTags(e){for(var t,i,s,l={},r=0,n=Array.from(e);r<n.length;r++)if(null!=(t=n[r]).tags)for(var a=0,o=Array.from(t.tags);a<o.length;a++)null==l[s=o[a]]&&(l[s]=[]),l[s].push(t);var d=[];for(s in l)(i=l[s]).length<e.length&&d.push({tag:s,builders:i});d.sort((e,t)=>t.builders.length-e.builders.length);for(var u=[],h={},c=0,g=Array.from(d);c<g.length;c++){s=g[c];for(var p=!1,b=0,m=Array.from(s.builders);b<m.length;b++)if(t=m[b],h.hasOwnProperty(t.builderid)){p=!0;break}if(!p){for(var f=0,v=Array.from(s.builders);f<v.length;f++)h[(t=v[f]).builderid]=s.tag;u.push(s)}}for(var y=[],_=0,w=Array.from(e);_<w.length;_++)t=w[_],h.hasOwnProperty(t.builderid)||y.push(t);if(y.length&&u.push({tag:"",builders:y}),u.length>1)for(var C=0,B=Array.from(u);C<B.length;C++)(s=B[C]).tag_line=this._sortBuildersByTags(s.builders);return u}populateChange(e){e.builders=[],e.buildersById={};for(var t=0,i=Array.from(this.builders);t<i.length;t++){var s=i[t];s={builderid:s.builderid,name:s.name,builds:[]},e.builders.push(s),e.buildersById[s.builderid]=s}}matchBuildWithChange(e){var t,i,s=this.buildrequests.get(e.buildrequestid);if(null!=s){var l=this.buildsets.get(s.buildsetid);if(null!=l){if(null!=(null!=e.properties?e.properties.yp_build_revision:void 0)||this.revmapping[e.buildid]){i=null!=(null!=e.properties?e.properties.yp_build_revision:void 0)?e.properties.yp_build_revision[0]:this.revmapping[e.buildid],null==(t=this.changesByRevision[i])&&(t=this.changesBySSID[i]),null==t&&(t=this.makeFakeChange(i,e.started_at,i),this.fakechanges.push(t)),t.caption="Commit",null!=(null!=e.properties?e.properties.yp_build_branch:void 0)&&(t.caption=e.properties.yp_build_branch[0]),this.branchmapping[e.buildid]&&(t.caption=this.branchmapping[e.buildid]),t.revlink="http://git.yoctoproject.org/cgit.cgi/poky/commit/?id="+i,t.errorlink="http://errors.yoctoproject.org/Errors/Latest/?filter="+i+"&type=commit&limit=150";var r=e.buildid;null!=l&&null!=l.parent_buildid&&(r=l.parent_buildid),(null!=t.bid&&r>t.bid||null==t.bid)&&(t.bid=r,t.loglink="https://wiki.yoctoproject.org/wiki/BuildLog#"+r),null!=(null!=e.properties?e.properties.reason:void 0)&&(t.reason=e.properties.reason[0]),null!=(null!=e.properties?e.properties.publish_destination:void 0)&&(t.publishurl=e.properties.publish_destination[0].replace("/srv/autobuilder/autobuilder.yoctoproject.org/","https://autobuilder.yocto.io/"),t.publishurl=t.publishurl.replace("/srv/autobuilder/autobuilder.yocto.io/","https://autobuilder.yocto.io/"))}else i="Unresolved Revision",null==t&&(t=this.changesBySSID[i]),null==t&&((t=this.makeFakeChange(i,e.started_at,i)).caption=i,this.fakechanges.push(t));t.buildersById[e.builderid].builds.push(e)}}}makeFakeChange(e,t,i){var s={revision:e,changeid:e,when_timestamp:t,comments:i};return this.changesBySSID[e]=s,this.populateChange(s),s}openAll(){return Array.from(this.filtered_changes).map(e=>e.show_details=!0)}closeAll(){return Array.from(this.filtered_changes).map(e=>e.show_details=!1)}getRowHeaderWidth(){return this.hasExpanded()?400:200}getColHeaderHeight(){for(var e=0,t=0,i=Array.from(this.builders);t<i.length;t++){var s=i[t];e=Math.max(s.name.length,e)}return Math.max(100,3*e)}isBigTable(){var e=this.getRowHeaderWidth();return(this.$window.innerWidth-e)/this.builders.length<40}hasExpanded(){for(var e=0,t=Array.from(this.changes);e<t.length;e++){var i=t[e];if(this.infoIsExpanded(i))return!0}return!1}selectBuild(e){return this.$uibModal.open({template:i(6),controller:"consoleModalController as modal",windowClass:"modal-big",resolve:{selectedBuild:()=>e}})}toggleInfo(e){return e.show_details=!e.show_details}infoIsExpanded(e){return e.show_details}}]),i(7),i(8),i(10)},function(t,i){t.exports=e},function(e,i){e.exports=t},function(e,t){e.exports=i},function(e,t){e.exports=s},function(e,t){e.exports=window.T["console_view/views/console.html"]||'<div class="console no-select"><div class="load-indicator" ng-hide="c.builds.$resolved && c.changes.$resolved && c.buildrequests.$resolved && c.buildsets.$resolved"><div class="spinner"><i class="fa fa-circle-o-notch fa-spin fa-2x"></i><p>loading</p></div></div><div ng-show="c.changes.$resolved && c.filtered_changes.length==0"><p>No changes. Console view needs changesource to be setup, and<a href="#changes">changes</a>to be in the system.</p></div><table class="table table-striped table-bordered" ng-hide="c.filtered_changes.length==0" ng-class="{\'table-fixedwidth\': c.isBigTable()}"><tr class="first-row"><th class="row-header" ng-style="{\'width\': c.getRowHeaderWidth()}"><i class="fa fa-plus-circle pull-left" ng-click="c.openAll()" uib-tooltip="Open information for all changes" uib-tooltip-placement="right"></i><i class="fa fa-minus-circle pull-left" ng-click="c.closeAll()" uib-tooltip="Close information for all changes" uib-tooltip-placement="right"></i></th><th class="column" ng-repeat="builder in c.builders"><span class="builder" ng-style="{\'margin-top\': c.getColHeaderHeight()}"><a ng-href="#/builders/{{ builder.builderid }}" ng-bind="builder.name"></a></span></th></tr><tr class="tag_row" ng-repeat="tag_line in c.tag_lines"><td class="row-header"></td><td ng-repeat="tag in tag_line" colspan="{{tag.colspan}}"><span uib-tooltip="{{ tag.tag }}" ng-style="{width: tag.colspan*50}">{{tag.tag}}</span></td></tr><tr ng-repeat="change in c.filtered_changes | orderBy: [\'-when_timestamp\'] track by change.changeid"><td><yoctochangedetails change="change"></yoctochangedetails></td><td class="column" ng-repeat="builder in change.builders" title="{{builder.name}}"><span ng-repeat="build in builder.builds | orderBy: [\'number\']"><script type="text/ng-template" id="buildsummarytooltip"><buildsummary buildid="build.buildid" type="tooltip"></buildsummary><\/script><span class="badge-status" ng-if="build.buildid" uib-tooltip-template="\'buildsummarytooltip\'" tooltip-class="buildsummarytooltipstyle" tooltip-placement="auto left-bottom" tooltip-popup-delay="400" tooltip-popup-close-delay="400" ng-class="c.results2class(build, \'pulse\')" ng-click="c.selectBuild(build)">{{ build.number }}</span></span></td></tr></table></div>'},function(e,t){e.exports=window.T["console_view/views/modal.html"]||'\x3c!-- Show build summary for the selected build in a modal window--\x3e<div class="modal-header"><i class="fa fa-times pull-right" ng-click="modal.close()"></i><h4 class="modal-title">Build summary</h4></div><div class="modal-body"><buildsummary ng-if="modal.selectedBuild" buildid="modal.selectedBuild.buildid"></buildsummary></div>'},function(e,t){angular.module("yocto_console_view").controller("consoleModalController",["$scope","$uibModalInstance","selectedBuild",class ConsoleModal{constructor(e,t,i){this.$uibModalInstance=t,this.selectedBuild=i,e.$on("$stateChangeStart",()=>this.close())}close(){return this.$uibModalInstance.close()}}])},function(e,t,i){angular.module("yocto_console_view").directive("releaseselectorfield",[class Releaseselectorfield{constructor(){return{replace:!1,restrict:"E",scope:!1,template:i(9),controller:"_ReleaseselectorfieldController"}}}]).controller("_ReleaseselectorfieldController",["$scope","$http",class _releaseselectorfield{constructor(e,t){for(var i=e;null!=i&&null==i.rootfield;)i=i.$parent;if(null!=i){var s={},l=e=>Array.from(e).map(e=>null!=e.fields?l(e.fields):s[e.fullName]=e);l(i.rootfield.fields),e.$watch("field.value",(function(t,i){var l=e.field.selectors[t];if(null!=l)return(()=>{var e=[];for(var t in l){var i=l[t];t in s&&e.push(s[t].value=i)}return e})()}))}else console.log("rootfield not found!?!?")}}])},function(e,t){e.exports=window.T["console_view/views/releaseselectorfield.html"]||'<basefield><label class="control-label col-sm-2" for="{{field.name}}">{{field.label}}</label><div class="col-sm-10"><select class="form-control" ng-model="field.value" ng-options="v for v in field.choices"></select></div></basefield>'},function(e,t,i){angular.module("yocto_console_view").directive("yoctochangedetails",[class Yoctochangedetails{constructor(){return{replace:!0,restrict:"E",scope:{change:"=",compact:"=?"},template:i(11)}}}])},function(e,t){e.exports=window.T["console_view/views/yoctochangedetails.html"]||'<div class="yoctochangedetails" style="width:100%;"><div style="width:100%;" ng-click="change.show_details = !change.show_details"><a ng-if="change.revlink" ng-href="{{change.revlink}}" uib-tooltip="{{change.comments}}">{{ change.caption }} </a><a ng-if="change.errorlink" ng-href="{{change.errorlink}}">{{ "Errors" }} </a><a ng-if="change.loglink" ng-href="{{change.loglink}}">{{ "WikiLog" }} </a><a ng-if="change.publishurl" ng-href="{{change.publishurl}}">{{ "Output" }} </a><span ng-if="!change.revlink" uib-tooltip="{{change.comments}}">{{ change.caption }} </span><span ng-if="!compact" uib-tooltip="{{change.when_timestamp | dateformat:\'LLL\'}}">({{ change.when_timestamp | timeago }}) </span><i class="fa fa-chevron-circle-right rotate clickable" ng-class="{\'fa-rotate-90\':change.show_details}"></i></div><div class="anim-changedetails" ng-show="change.show_details"><table class="table table-striped table-condensed" ng-show="change.show_details"><tr ng-show="change.reason"><td>Reason</td><td>{{ change.reason }}</td></tr><tr ng-show="change.author"><td>Author</td><td>{{ change.author }}</td></tr><tr><td>Date</td><td>{{ change.when_timestamp | dateformat:\'LLL\'}} ({{ change.when_timestamp | timeago }})</td></tr><tr ng-show="change.repository"><td>Repository</td><td>{{ change.repository }}</td></tr><tr ng-show="change.branch"><td>Branch</td><td>{{ change.branch }}</td></tr><tr><td>Revision</td><td> <a ng-if="change.revlink" ng-href="{{change.revlink}}"> {{ change.revision }}</a></td></tr></table><h5>Comment</h5><pre>{{ change.comments }}</pre><h5>Changed files</h5><ul><li ng-repeat="file in change.files">{{file}}</li></ul><p ng-hide="change.files.length">No files</p></div></div>'}])}));
|
|
//# sourceMappingURL=scripts.js.map
|