From 67d9f4a4df64e111d5bacfe50d7a804e4733268e Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Thu, 23 Mar 2023 00:09:22 +0000 Subject: [PATCH] console_view: Drop obsolete wiki log link Signed-off-by: Richard Purdie --- yocto_console_view/src/module/main.module.js | 4 ---- yocto_console_view/src/module/yoctochangedetails.tpl.jade | 2 -- yocto_console_view/yocto_console_view/static/scripts.js | 2 +- yocto_console_view/yocto_console_view/static/scripts.js.map | 2 +- 4 files changed, 2 insertions(+), 8 deletions(-) diff --git a/yocto_console_view/src/module/main.module.js b/yocto_console_view/src/module/main.module.js index 35ab02a..806eabf 100644 --- a/yocto_console_view/src/module/main.module.js +++ b/yocto_console_view/src/module/main.module.js @@ -424,10 +424,6 @@ class Console { if ((buildset != null) && (buildset.parent_buildid != null)) { bid = buildset.parent_buildid; } - if (((change.bid != null) && (bid > change.bid)) || (change.bid == null)) { - change.bid = bid; - change.loglink = "https://wiki.yoctoproject.org/wiki/BuildLog#" + bid; - } if ((build.properties != null ? build.properties.reason : undefined) != null) { change.reason = build.properties.reason[0]; } diff --git a/yocto_console_view/src/module/yoctochangedetails.tpl.jade b/yocto_console_view/src/module/yoctochangedetails.tpl.jade index e563e79..5415890 100644 --- a/yocto_console_view/src/module/yoctochangedetails.tpl.jade +++ b/yocto_console_view/src/module/yoctochangedetails.tpl.jade @@ -4,8 +4,6 @@ div.yoctochangedetails(style="width:100%;") | {{ change.caption }}   a(ng-if="change.errorlink", ng-href="{{change.errorlink}}") | {{ "Errors" }}   - a(ng-if="change.loglink", ng-href="{{change.loglink}}") - | {{ "WikiLog" }}   a(ng-if="change.publishurl", ng-href="{{change.publishurl}}") | {{ "Output" }}   span(ng-if="!change.revlink", uib-tooltip="{{change.comments}}") diff --git a/yocto_console_view/yocto_console_view/static/scripts.js b/yocto_console_view/yocto_console_view/static/scripts.js index 362c1c7..90bfbc9 100644 --- a/yocto_console_view/yocto_console_view/static/scripts.js +++ b/yocto_console_view/yocto_console_view/static/scripts.js @@ -1,2 +1,2 @@ -!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{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);i0){this.filtered_changes.push(t);break}}}}sortBuildersByTags(e){for(var t=[],i="",s=0,l=Array.from(e);se(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);ct.builders.length-e.builders.length);for(var u=[],h={},c=0,g=Array.from(d);c1)for(var C=0,B=Array.from(u);Ct.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);te}})}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"]||'

loading

No changes. Console view needs changesource to be setup, andchangesto be in the system.

{{tag.tag}}
{{ build.number }}
\";","module.exports = window.T['console_view/views/modal.html'] || \"

Build summary

\";","/*\n * decaffeinate suggestions:\n * DS102: Remove unnecessary code created because of implicit returns\n * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md\n */\nclass ConsoleModal {\n constructor($scope, $uibModalInstance, selectedBuild) {\n this.$uibModalInstance = $uibModalInstance;\n this.selectedBuild = selectedBuild;\n $scope.$on('$stateChangeStart', () => {\n return this.close();\n });\n }\n\n close() {\n return this.$uibModalInstance.close();\n }\n}\n\n\nangular.module('yocto_console_view')\n.controller('consoleModalController', ['$scope', '$uibModalInstance', 'selectedBuild', ConsoleModal]);\n","/*\n * decaffeinate suggestions:\n * DS002: Fix invalid constructor\n * DS101: Remove unnecessary use of Array.from\n * DS102: Remove unnecessary code created because of implicit returns\n * DS205: Consider reworking code to avoid use of IIFEs\n * DS207: Consider shorter variations of null checks\n * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md\n */\n\nclass Releaseselectorfield {\n constructor() {\n return {\n replace: false,\n restrict: 'E',\n scope: false,\n template: require('./releaseselectorfield.tpl.jade'),\n controller: '_ReleaseselectorfieldController'\n };\n }\n}\n\nclass _releaseselectorfield {\n constructor($scope, $http) {\n // HACK: we find the rootfield by doing $scope.$parent.$parent\n let rootfield = $scope;\n while ((rootfield != null) && (rootfield.rootfield == null)) {\n rootfield = rootfield.$parent;\n }\n\n if ((rootfield == null)) {\n console.log(\"rootfield not found!?!?\");\n return;\n }\n\n // copy paste of code in forcedialog, which flatten the fields to be able to find easily\n const fields_ref = {};\n var gatherFields = fields => Array.from(fields).map((field) =>\n (field.fields != null) ?\n gatherFields(field.fields)\n :\n (fields_ref[field.fullName] = field));\n\n gatherFields(rootfield.rootfield.fields);\n\n // when our field change, we update the fields that we are suppose to\n $scope.$watch(\"field.value\", function(n, o) {\n\n const selector = $scope.field.selectors[n];\n if (selector != null) {\n return (() => {\n const result = [];\n for (let k in selector) {\n const v = selector[k];\n if (k in fields_ref) {\n result.push(fields_ref[k].value = v);\n }\n }\n return result;\n })();\n }\n });\n }\n}\n\nangular.module('yocto_console_view')\n.directive('releaseselectorfield', [Releaseselectorfield])\n.controller('_ReleaseselectorfieldController', ['$scope', '$http', _releaseselectorfield])\n","module.exports = window.T['console_view/views/releaseselectorfield.html'] || \"
\";","/*\n * decaffeinate suggestions:\n * DS002: Fix invalid constructor\n * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md\n */\nclass Yoctochangedetails {\n constructor() {\n return {\n replace: true,\n restrict: 'E',\n scope: {\n change: '=',\n compact: '=?'\n },\n template: require('./yoctochangedetails.tpl.jade')\n };\n }\n}\n\nangular.module('yocto_console_view')\n.directive('yoctochangedetails', [Yoctochangedetails])\n","module.exports = window.T['console_view/views/yoctochangedetails.html'] || \"
{{ change.caption }}  {{ \\\"Errors\\\" }}  {{ \\\"WikiLog\\\" }}  {{ \\\"Output\\\" }}  {{ change.caption }}  ({{ change.when_timestamp | timeago }})  
Reason{{ change.reason }}
Author{{ change.author }}
Date{{ change.when_timestamp | dateformat:'LLL'}} ({{ change.when_timestamp | timeago }})
Repository{{ change.repository }}
Branch{{ change.branch }}
Revision {{ change.revision }}
Comment
{{ change.comments }}
Changed files
  • {{file}}

No files

\";"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://yocto-console-view/webpack/universalModuleDefinition","webpack://yocto-console-view/webpack/bootstrap","webpack://yocto-console-view/./src/module/main.module.js","webpack://yocto-console-view/external \"angular-animate\"","webpack://yocto-console-view/external \"@uirouter/angularjs\"","webpack://yocto-console-view/external \"guanlecoja-ui\"","webpack://yocto-console-view/external \"buildbot-data-js\"","webpack://yocto-console-view/./src/module/console.tpl.jade","webpack://yocto-console-view/./src/module/view/modal/modal.tpl.jade","webpack://yocto-console-view/./src/module/view/modal/modal.controller.js","webpack://yocto-console-view/./src/module/releaseselectorfield.directive.js","webpack://yocto-console-view/./src/module/releaseselectorfield.tpl.jade","webpack://yocto-console-view/./src/module/yoctochangedetails.directive.js","webpack://yocto-console-view/./src/module/yoctochangedetails.tpl.jade"],"names":["root","factory","exports","module","require","define","amd","self","this","__WEBPACK_EXTERNAL_MODULE__1__","__WEBPACK_EXTERNAL_MODULE__2__","__WEBPACK_EXTERNAL_MODULE__3__","__WEBPACK_EXTERNAL_MODULE__4__","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","angular","config","ConsoleState","constructor","$stateProvider","glMenuServiceProvider","bbSettingsServiceProvider","addGroup","caption","icon","order","cfg","group","state","controller","concat","controllerAs","template","url","data","addSettingsGroup","items","type","default_value","Console","$scope","$q","$window","dataService","bbSettingsService","resultsService","$uibModal","$timeout","onChange","_onChange","matchBuildWithChange","makeFakeChange","extend","settings","getSettingsGroup","buildLimit","changeLimit","dataAccessor","open","closeOnDestroy","_infoIsExpanded","all_builders","getBuilders","builders","Intl","collator","Collator","undefined","numeric","sensitivity","strcompare","compare","a","b","revmapping","branchmapping","builds","getBuilds","limit","changes","getChanges","fakechanges","buildrequests","getBuildrequests","buildsets","getBuildsets","onNew","build","change","buildid","properties","yp_build_revision","yp_build_branch","complete_at","getProperties","endpoint","split","rev","getBuildProperty","branch","onchange_debounce","length","$resolved","_i","_Array$from","Array","from","builderid","hasBuild","sortBuildersByTags","changesBySSID","changesByRevision","_i2","_Array$from2","sourcestamp","ssid","revision","populateChange","_i3","_Array$from3","_i4","_Array$from4","filtered_changes","comments","subject","_i5","_Array$from5","push","builders_with_builds","builderids_with_builds","_i6","_Array$from6","builder","last_builderids_with_builds","tag_line","_sortBuildersByTags","tag_lines","sorted_builders","set_tag_line","depth","tag","colspan","_tag_line","last_tag","walk_tree","map","_tag","sort","_i7","_Array$from7","_i8","_Array$from8","builders_by_tags","_i9","_Array$from9","tags","_i10","_Array$from10","chosen_builderids","_i11","_Array$from11","excluded","_i12","_Array$from12","_i13","_Array$from13","remaining_builders","_i14","_Array$from14","_i15","_Array$from15","buildersById","_i16","_Array$from16","buildrequest","buildrequestid","buildset","buildsetid","started_at","revlink","errorlink","parent_buildid","reason","publish_destination","publishurl","replace","when_timestamp","changeid","openAll","show_details","closeAll","getRowHeaderWidth","hasExpanded","getColHeaderHeight","max_buildername","_i17","_Array$from17","Math","max","isBigTable","padding","innerWidth","_i18","_Array$from18","infoIsExpanded","selectBuild","windowClass","resolve","selectedBuild","toggleInfo","window","T","ConsoleModal","$uibModalInstance","$on","close","directive","Releaseselectorfield","restrict","scope","_releaseselectorfield","$http","rootfield","$parent","fields_ref","gatherFields","fields","field","fullName","$watch","selector","selectors","result","k","v","console","log","Yoctochangedetails","compact"],"mappings":"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","file":"scripts.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"angular-animate\"), require(\"@uirouter/angularjs\"), require(\"guanlecoja-ui\"), require(\"buildbot-data-js\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"yocto-console-view\", [\"angular-animate\", \"@uirouter/angularjs\", \"guanlecoja-ui\", \"buildbot-data-js\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"yocto-console-view\"] = factory(require(\"angular-animate\"), require(\"@uirouter/angularjs\"), require(\"guanlecoja-ui\"), require(\"buildbot-data-js\"));\n\telse\n\t\troot[\"yocto-console-view\"] = factory(root[\"angular-animate\"], root[\"@uirouter/angularjs\"], root[\"guanlecoja-ui\"], root[\"buildbot-data-js\"]);\n})((typeof self !== 'undefined' ? self : this), function(__WEBPACK_EXTERNAL_MODULE__1__, __WEBPACK_EXTERNAL_MODULE__2__, __WEBPACK_EXTERNAL_MODULE__3__, __WEBPACK_EXTERNAL_MODULE__4__) {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","/*\n * decaffeinate suggestions:\n * DS101: Remove unnecessary use of Array.from\n * DS102: Remove unnecessary code created because of implicit returns\n * DS205: Consider reworking code to avoid use of IIFEs\n * DS207: Consider shorter variations of null checks\n * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md\n */\n\nimport 'angular-animate';\nimport '@uirouter/angularjs';\nimport 'guanlecoja-ui';\nimport 'buildbot-data-js';\n\nclass ConsoleState {\n constructor($stateProvider, glMenuServiceProvider, bbSettingsServiceProvider) {\n\n // Name of the state\n const name = 'console';\n\n // Menu configuration\n glMenuServiceProvider.addGroup({\n name,\n caption: 'Yocto Console View',\n icon: 'exclamation-circle',\n order: 5\n });\n\n // Configuration\n const cfg = {\n group: name,\n caption: 'Yocto Console View'\n };\n\n // Register new state\n const state = {\n controller: `${name}Controller`,\n controllerAs: \"c\",\n template: require('./console.tpl.jade'),\n name,\n url: `/${name}`,\n data: cfg\n };\n\n $stateProvider.state(state);\n\n bbSettingsServiceProvider.addSettingsGroup({\n name: 'Console',\n caption: 'Console related settings',\n items: [{\n type: 'integer',\n name: 'buildLimit',\n caption: 'Number of builds to fetch',\n default_value: 200\n }\n , {\n type: 'integer',\n name: 'changeLimit',\n caption: 'Number of changes to fetch',\n default_value: 30\n }\n ]});\n }\n}\n\nclass Console {\n constructor($scope, $q, $window, dataService, bbSettingsService, resultsService,\n $uibModal, $timeout) {\n this.onChange = this.onChange.bind(this);\n this._onChange = this._onChange.bind(this);\n this.matchBuildWithChange = this.matchBuildWithChange.bind(this);\n this.makeFakeChange = this.makeFakeChange.bind(this);\n this.$scope = $scope;\n this.$window = $window;\n this.$uibModal = $uibModal;\n this.$timeout = $timeout;\n angular.extend(this, resultsService);\n const settings = bbSettingsService.getSettingsGroup('Console');\n this.buildLimit = settings.buildLimit.value;\n this.changeLimit = settings.changeLimit.value;\n this.dataAccessor = dataService.open().closeOnDestroy(this.$scope);\n this._infoIsExpanded = {};\n this.$scope.all_builders = (this.all_builders = this.dataAccessor.getBuilders());\n this.$scope.builders = (this.builders = []);\n if (typeof Intl !== 'undefined' && Intl !== null) {\n const collator = new Intl.Collator(undefined, {numeric: true, sensitivity: 'base'});\n this.strcompare = collator.compare;\n } else {\n this.strcompare = function(a, b) {\n if (a < b) {\n return -1;\n }\n if (a === b) {\n return 0;\n }\n return 1;\n };\n }\n\n this.$scope.revmapping = (this.revmapping = {});\n this.$scope.branchmapping = (this.branchmapping = {});\n\n this.$scope.builds = (this.builds = this.dataAccessor.getBuilds({\n property: [\"yp_build_revision\", \"yp_build_branch\", \"reason\", \"publish_destination\"],\n limit: this.buildLimit,\n order: '-started_at'\n }));\n this.changes = this.dataAccessor.getChanges({limit: this.changeLimit, order: '-changeid'});\n this.$scope.fakechanges = (this.fakechanges = []);\n this.buildrequests = this.dataAccessor.getBuildrequests({limit: this.buildLimit, order: '-submitted_at'});\n this.buildsets = this.dataAccessor.getBuildsets({limit: this.buildLimit, order: '-submitted_at'});\n\n this.builds.onChange = this.onChange;\n this.changes.onChange = this.onChange;\n this.buildrequests.onChange = this.onChange;\n this.buildsets.onChange = this.onChange;\n\n this.builds.onNew = build => {\n let change = false;\n let {\n buildid\n } = build;\n if ((build.properties != null ? build.properties.yp_build_revision : undefined) != null) {\n this.revmapping[build.buildid] = build.properties.yp_build_revision[0];\n change = true;\n }\n if ((build.properties != null ? build.properties.yp_build_branch : undefined) != null) {\n this.branchmapping[build.buildid] = build.properties.yp_build_branch[0];\n change = true;\n }\n if ((!this.revmapping[buildid] || !this.branchmapping[buildid]) && !build.complete_at) {\n build.getProperties().onChange = properties => {\n change = false;\n buildid = properties.endpoint.split('/')[1];\n if (!this.revmapping[buildid]) {\n const rev = this.getBuildProperty(properties[0], 'yp_build_revision');\n if (rev != null) {\n this.revmapping[buildid] = rev;\n change = true;\n }\n }\n if (!this.branchmapping[buildid]) {\n const branch = this.getBuildProperty(properties[0], 'yp_build_branch');\n if (branch != null) {\n this.branchmapping[buildid] = branch;\n change = true;\n }\n }\n if (change && (this.onchange_debounce == null)) {\n this.onchange_debounce = this.$timeout(this._onChange, 100);\n }\n };\n }\n if (change && (this.onchange_debounce == null)) {\n this.onchange_debounce = this.$timeout(this._onChange, 100);\n }\n };\n }\n\n getBuildProperty(properties, property) {\n const hasProperty = properties && properties.hasOwnProperty(property);\n if (hasProperty) { return properties[property][0]; } else { return null; }\n }\n\n onChange(s) {\n // if there is no data, no need to try and build something.\n if ((this.builds.length === 0) || (this.all_builders.length === 0) || !this.changes.$resolved ||\n (this.buildsets.length === 0) || (this.buildrequests === 0)) {\n return;\n }\n if ((this.onchange_debounce == null)) {\n this.onchange_debounce = this.$timeout(this._onChange, 100);\n }\n }\n\n _onChange() {\n let build, change;\n this.onchange_debounce = undefined;\n // we only display builders who actually have builds\n for (build of Array.from(this.builds)) {\n this.all_builders.get(build.builderid).hasBuild = true;\n }\n\n this.sortBuildersByTags(this.all_builders);\n\n if (this.changesBySSID == null) { this.changesBySSID = {}; }\n if (this.changesByRevision == null) { this.changesByRevision = {}; }\n for (change of Array.from(this.changes)) {\n this.changesBySSID[change.sourcestamp.ssid] = change;\n this.changesByRevision[change.revision] = change;\n this.populateChange(change);\n }\n for (change of Array.from(this.fakechanges)) {\n this.populateChange(change);\n }\n\n for (build of Array.from(this.builds)) {\n this.matchBuildWithChange(build);\n }\n\n this.filtered_changes = [];\n\n for (let ssid in this.changesBySSID) {\n change = this.changesBySSID[ssid];\n if (change.comments) {\n change.subject = change.comments.split(\"\\n\")[0];\n }\n for (let builder of Array.from(change.builders)) {\n if (builder.builds.length > 0) {\n this.filtered_changes.push(change);\n break;\n }\n }\n }\n }\n /*\n * Sort builders by tags\n * Buildbot eight has the category option, but it was only limited to one category per builder,\n * which make it easy to sort by category\n * Here, we have multiple tags per builder, we need to try to group builders with same tags together\n * The algorithm is rather twisted. It is a first try at the concept of grouping builders by tags..\n */\n\n sortBuildersByTags(all_builders) {\n // first we only want builders with builds\n let tag;\n const builders_with_builds = [];\n let builderids_with_builds = \"\";\n for (let builder of Array.from(all_builders)) {\n if (builder.hasBuild) {\n builders_with_builds.push(builder);\n builderids_with_builds += `.${builder.builderid}`;\n }\n }\n\n if (builderids_with_builds === this.last_builderids_with_builds) {\n // don't recalculate if it hasn't changed!\n return;\n }\n // we call recursive function, which finds non-overlapping groups\n let tag_line = this._sortBuildersByTags(builders_with_builds);\n // we get a tree of builders grouped by tags\n // we now need to flatten the tree, in order to build several lines of tags\n // (each line is representing a depth in the tag tree)\n // we walk the tree left to right and build the list of builders in the tree order, and the tag_lines\n // in the tree, there are groups of remaining builders, which could not be grouped together,\n // those have the empty tag ''\n const tag_lines = [];\n\n let sorted_builders = [];\n const set_tag_line = function(depth, tag, colspan) {\n // we build the tag lines by using a sparse array\n let _tag_line = tag_lines[depth];\n if ((_tag_line == null)) {\n // initialize the sparse array\n _tag_line = (tag_lines[depth] = []);\n } else {\n // if we were already initialized, look at the last tag if this is the same\n // we merge the two entries\n const last_tag = _tag_line[_tag_line.length - 1];\n if (last_tag.tag === tag) {\n last_tag.colspan += colspan;\n return;\n }\n }\n return _tag_line.push({tag, colspan});\n };\n const self = this;\n // recursive tree walking\n var walk_tree = function(tag, depth) {\n set_tag_line(depth, tag.tag, tag.builders.length);\n if ((tag.tag_line == null) || (tag.tag_line.length === 0)) {\n // this is the leaf of the tree, sort by buildername, and add them to the\n // list of sorted builders\n tag.builders.sort((a, b) => self.strcompare(a.name, b.name));\n sorted_builders = sorted_builders.concat(tag.builders);\n for (let i = 1; i <= 100; i++) { // set the remaining depth of the tree to the same colspan\n // (we hardcode the maximum depth for now :/ )\n set_tag_line(depth + i, '', tag.builders.length);\n }\n return;\n }\n return Array.from(tag.tag_line).map((_tag) =>\n walk_tree(_tag, depth + 1));\n };\n\n for (tag of Array.from(tag_line)) {\n walk_tree(tag, 0);\n }\n\n this.builders = sorted_builders;\n this.tag_lines = [];\n // make a new array to avoid it to be sparse, and to remove lines filled with null tags\n for (tag_line of Array.from(tag_lines)) {\n if (!((tag_line.length === 1) && (tag_line[0].tag === \"\"))) {\n this.tag_lines.push(tag_line);\n }\n }\n return this.last_builderids_with_builds = builderids_with_builds;\n }\n /*\n * recursive function which sorts the builders by tags\n * call recursively with groups of builders smaller and smaller\n */\n _sortBuildersByTags(all_builders) {\n\n // first find out how many builders there is by tags in that group\n let builder, builders, tag;\n const builders_by_tags = {};\n for (builder of Array.from(all_builders)) {\n if (builder.tags != null) {\n for (tag of Array.from(builder.tags)) {\n if ((builders_by_tags[tag] == null)) {\n builders_by_tags[tag] = [];\n }\n builders_by_tags[tag].push(builder);\n }\n }\n }\n const tags = [];\n for (tag in builders_by_tags) {\n // we don't want the tags that are on all the builders\n builders = builders_by_tags[tag];\n if (builders.length < all_builders.length) {\n tags.push({tag, builders});\n }\n }\n\n // sort the tags to first look at tags with the larger number of builders\n // @FIXME maybe this is not the best method to find the best groups\n tags.sort((a, b) => b.builders.length - a.builders.length);\n\n const tag_line = [];\n const chosen_builderids = {};\n // pick the tags one by one, by making sure we make non-overalaping groups\n for (tag of Array.from(tags)) {\n let excluded = false;\n for (builder of Array.from(tag.builders)) {\n if (chosen_builderids.hasOwnProperty(builder.builderid)) {\n excluded = true;\n break;\n }\n }\n if (!excluded) {\n for (builder of Array.from(tag.builders)) {\n chosen_builderids[builder.builderid] = tag.tag;\n }\n tag_line.push(tag);\n }\n }\n\n // some builders do not have tags, we put them in another group\n const remaining_builders = [];\n for (builder of Array.from(all_builders)) {\n if (!chosen_builderids.hasOwnProperty(builder.builderid)) {\n remaining_builders.push(builder);\n }\n }\n\n if (remaining_builders.length) {\n tag_line.push({tag: \"\", builders: remaining_builders});\n }\n\n // if there is more than one tag in this line, we need to recurse\n if (tag_line.length > 1) {\n for (tag of Array.from(tag_line)) {\n tag.tag_line = this._sortBuildersByTags(tag.builders);\n }\n }\n return tag_line;\n }\n\n /*\n * fill a change with a list of builders\n */\n populateChange(change) {\n change.builders = [];\n change.buildersById = {};\n for (let builder of Array.from(this.builders)) {\n builder = {builderid: builder.builderid, name: builder.name, builds: []};\n change.builders.push(builder);\n change.buildersById[builder.builderid] = builder;\n }\n }\n /*\n * Match builds with a change\n */\n matchBuildWithChange(build) {\n let change, oldrev, rev;\n const buildrequest = this.buildrequests.get(build.buildrequestid);\n if ((buildrequest == null)) {\n return;\n }\n const buildset = this.buildsets.get(buildrequest.buildsetid);\n if ((buildset == null)) {\n return;\n }\n\n if (((build.properties != null ? build.properties.yp_build_revision : undefined) != null) || this.revmapping[build.buildid]) {\n if ((build.properties != null ? build.properties.yp_build_revision : undefined) != null) {\n rev = build.properties.yp_build_revision[0];\n } else {\n rev = this.revmapping[build.buildid];\n }\n change = this.changesByRevision[rev];\n if ((change == null)) {\n change = this.changesBySSID[rev];\n }\n if ((change == null)) {\n change = this.makeFakeChange(rev, build.started_at, rev);\n this.fakechanges.push(change)\n }\n\n change.caption = \"Commit\";\n if ((build.properties != null ? build.properties.yp_build_branch : undefined) != null) {\n change.caption = build.properties.yp_build_branch[0];\n }\n if (this.branchmapping[build.buildid]) {\n change.caption = this.branchmapping[build.buildid];\n }\n change.revlink = \"http://git.yoctoproject.org/cgit.cgi/poky/commit/?id=\" + rev;\n change.errorlink = \"http://errors.yoctoproject.org/Errors/Latest/?filter=\" + rev + \"&type=commit&limit=150\";\n let bid = build.buildid;\n if ((buildset != null) && (buildset.parent_buildid != null)) {\n bid = buildset.parent_buildid;\n }\n if ((build.properties != null ? build.properties.reason : undefined) != null) {\n change.reason = build.properties.reason[0];\n }\n if ((build.properties != null ? build.properties.publish_destination : undefined) != null) {\n change.publishurl = build.properties.publish_destination[0].replace(\"/srv/autobuilder/autobuilder.yoctoproject.org/\", \"https://autobuilder.yocto.io/\");\n change.publishurl = change.publishurl.replace(\"/srv/autobuilder/autobuilder.yocto.io/\", \"https://autobuilder.yocto.io/\");\n }\n\n } else {\n rev = `Unresolved Revision`;\n if ((change == null)) {\n change = this.changesBySSID[rev];\n }\n if ((change == null)) {\n change = this.makeFakeChange(rev, build.started_at, rev);\n change.caption = rev;\n this.fakechanges.push(change)\n }\n\n }\n\n change.buildersById[build.builderid].builds.push(build);\n }\n\n makeFakeChange(revision, when_timestamp, comments) {\n const change = {\n revision,\n changeid: revision,\n when_timestamp,\n comments\n };\n this.changesBySSID[revision] = change;\n this.populateChange(change);\n return change;\n }\n /*\n * Open all change row information\n */\n openAll() {\n return Array.from(this.filtered_changes).map((change) =>\n (change.show_details = true));\n }\n\n /*\n * Close all change row information\n */\n closeAll() {\n return Array.from(this.filtered_changes).map((change) =>\n (change.show_details = false));\n }\n\n /*\n * Calculate row header (aka first column) width\n * depending if we display commit comment, we reserve more space\n */\n getRowHeaderWidth() {\n if (this.hasExpanded()) {\n return 400; // magic value enough to hold 78 characters lines\n } else {\n return 200;\n }\n }\n /*\n * Calculate col header (aka first row) height\n * It depends on the length of the longest builder\n */\n getColHeaderHeight() {\n let max_buildername = 0;\n for (let builder of Array.from(this.builders)) {\n max_buildername = Math.max(builder.name.length, max_buildername);\n }\n return Math.max(100, max_buildername * 3);\n }\n\n /*\n *\n * Determine if we use a 100% width table or if we allow horizontal scrollbar\n * depending on number of builders, and size of window, we need a fixed column size or a 100% width table\n *\n */\n isBigTable() {\n const padding = this.getRowHeaderWidth();\n if (((this.$window.innerWidth - padding) / this.builders.length) < 40) {\n return true;\n }\n return false;\n }\n /*\n *\n * do we have at least one change expanded?\n *\n */\n hasExpanded() {\n for (let change of Array.from(this.changes)) {\n if (this.infoIsExpanded(change)) {\n return true;\n }\n }\n return false;\n }\n\n /*\n *\n * display build details\n *\n */\n selectBuild(build) {\n let modal;\n return modal = this.$uibModal.open({\n template: require('./view/modal/modal.tpl.jade'),\n controller: 'consoleModalController as modal',\n windowClass: 'modal-big',\n resolve: {\n selectedBuild() { return build; }\n }\n });\n }\n\n /*\n *\n * toggle display of additional info for that change\n *\n */\n toggleInfo(change) {\n return change.show_details = !change.show_details;\n }\n infoIsExpanded(change) {\n return change.show_details;\n }\n}\n\n\nangular.module('yocto_console_view', [\n 'ui.router', 'ui.bootstrap', 'ngAnimate', 'guanlecoja.ui', 'bbData'])\n.config(['$stateProvider', 'glMenuServiceProvider', 'bbSettingsServiceProvider', ConsoleState])\n.controller('consoleController', ['$scope', '$q', '$window', 'dataService', 'bbSettingsService', 'resultsService', '$uibModal', '$timeout', Console]);\n\nrequire('./view/modal/modal.controller.js');\nrequire('./releaseselectorfield.directive.js');\nrequire('./yoctochangedetails.directive.js');\n","module.exports = __WEBPACK_EXTERNAL_MODULE__1__;","module.exports = __WEBPACK_EXTERNAL_MODULE__2__;","module.exports = __WEBPACK_EXTERNAL_MODULE__3__;","module.exports = __WEBPACK_EXTERNAL_MODULE__4__;","module.exports = window.T['console_view/views/console.html'] || \"

loading

No changes. Console view needs changesource to be setup, andchangesto be in the system.

{{tag.tag}}
{{ build.number }}
\";","module.exports = window.T['console_view/views/modal.html'] || \"

Build summary

\";","/*\n * decaffeinate suggestions:\n * DS102: Remove unnecessary code created because of implicit returns\n * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md\n */\nclass ConsoleModal {\n constructor($scope, $uibModalInstance, selectedBuild) {\n this.$uibModalInstance = $uibModalInstance;\n this.selectedBuild = selectedBuild;\n $scope.$on('$stateChangeStart', () => {\n return this.close();\n });\n }\n\n close() {\n return this.$uibModalInstance.close();\n }\n}\n\n\nangular.module('yocto_console_view')\n.controller('consoleModalController', ['$scope', '$uibModalInstance', 'selectedBuild', ConsoleModal]);\n","/*\n * decaffeinate suggestions:\n * DS002: Fix invalid constructor\n * DS101: Remove unnecessary use of Array.from\n * DS102: Remove unnecessary code created because of implicit returns\n * DS205: Consider reworking code to avoid use of IIFEs\n * DS207: Consider shorter variations of null checks\n * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md\n */\n\nclass Releaseselectorfield {\n constructor() {\n return {\n replace: false,\n restrict: 'E',\n scope: false,\n template: require('./releaseselectorfield.tpl.jade'),\n controller: '_ReleaseselectorfieldController'\n };\n }\n}\n\nclass _releaseselectorfield {\n constructor($scope, $http) {\n // HACK: we find the rootfield by doing $scope.$parent.$parent\n let rootfield = $scope;\n while ((rootfield != null) && (rootfield.rootfield == null)) {\n rootfield = rootfield.$parent;\n }\n\n if ((rootfield == null)) {\n console.log(\"rootfield not found!?!?\");\n return;\n }\n\n // copy paste of code in forcedialog, which flatten the fields to be able to find easily\n const fields_ref = {};\n var gatherFields = fields => Array.from(fields).map((field) =>\n (field.fields != null) ?\n gatherFields(field.fields)\n :\n (fields_ref[field.fullName] = field));\n\n gatherFields(rootfield.rootfield.fields);\n\n // when our field change, we update the fields that we are suppose to\n $scope.$watch(\"field.value\", function(n, o) {\n\n const selector = $scope.field.selectors[n];\n if (selector != null) {\n return (() => {\n const result = [];\n for (let k in selector) {\n const v = selector[k];\n if (k in fields_ref) {\n result.push(fields_ref[k].value = v);\n }\n }\n return result;\n })();\n }\n });\n }\n}\n\nangular.module('yocto_console_view')\n.directive('releaseselectorfield', [Releaseselectorfield])\n.controller('_ReleaseselectorfieldController', ['$scope', '$http', _releaseselectorfield])\n","module.exports = window.T['console_view/views/releaseselectorfield.html'] || \"
\";","/*\n * decaffeinate suggestions:\n * DS002: Fix invalid constructor\n * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md\n */\nclass Yoctochangedetails {\n constructor() {\n return {\n replace: true,\n restrict: 'E',\n scope: {\n change: '=',\n compact: '=?'\n },\n template: require('./yoctochangedetails.tpl.jade')\n };\n }\n}\n\nangular.module('yocto_console_view')\n.directive('yoctochangedetails', [Yoctochangedetails])\n","module.exports = window.T['console_view/views/yoctochangedetails.html'] || \"
{{ change.caption }}  {{ \\\"Errors\\\" }}  {{ \\\"Output\\\" }}  {{ change.caption }}  ({{ change.when_timestamp | timeago }})  
Reason{{ change.reason }}
Author{{ change.author }}
Date{{ change.when_timestamp | dateformat:'LLL'}} ({{ change.when_timestamp | timeago }})
Repository{{ change.repository }}
Branch{{ change.branch }}
Revision {{ change.revision }}
Comment
{{ change.comments }}
Changed files
  • {{file}}

No files

\";"],"sourceRoot":""} \ No newline at end of file