diff --git a/master/buildbot/status/master.py b/master/buildbot/status/master.py index 82adfce5865..c1b6810c345 100644 --- a/master/buildbot/status/master.py +++ b/master/buildbot/status/master.py @@ -144,7 +144,7 @@ def getMetrics(self): def getURLForBuild(self, builderid, build_number): prefix = self.getBuildbotURL() - return prefix + "#builders/%d/builds/%d" % ( + return prefix + "#builders/%d/build/%d" % ( builderid, build_number) @@ -152,7 +152,7 @@ def _getURLForBuildWithBuildername(self, builder_name, build_number): # dont use this API. this URL is not supported # its here waiting for getURLForThing removal or switch to deferred prefix = self.getBuildbotURL() - return prefix + "#builders/%s/builds/%d" % ( + return prefix + "#builders/%s/build/%d" % ( urllib.quote(builder_name, safe=''), build_number) diff --git a/www/base/src/app/builders/buildrequest/buildrequest.controller.coffee b/www/base/src/app/builders/buildrequest/buildrequest.controller.coffee index 85f11694253..d313afee723 100644 --- a/www/base/src/app/builders/buildrequest/buildrequest.controller.coffee +++ b/www/base/src/app/builders/buildrequest/buildrequest.controller.coffee @@ -1,5 +1,5 @@ class Buildrequest extends Controller - constructor: ($scope, buildbotService, $stateParams, findBuilds) -> + constructor: ($scope, buildbotService, $stateParams, findBuilds, glBreadcrumbService) -> $scope.$watch "buildrequest.claimed", (n, o) -> if n # if it is unclaimed, then claimed, we need to try again findBuilds $scope, @@ -8,5 +8,17 @@ class Buildrequest extends Controller buildbotService.bindHierarchy($scope, $stateParams, ['buildrequests']) .then ([buildrequest]) -> - buildbotService.one("buildsets", buildrequest.buildsetid) - .bind($scope) \ No newline at end of file + buildbotService.one("builders", buildrequest.builderid).bind($scope).then (builder) -> + breadcrumb = [ + caption: "buildrequests" + sref: "buildrequests" + , + caption: builder.name + sref: "builder({builder:#{buildrequest.builderid}})" + , + caption: buildrequest.id + sref: "buildrequest({buildrequest:#{buildrequest.id}})" + ] + + glBreadcrumbService.setBreadcrumb(breadcrumb) + buildbotService.one("buildsets", buildrequest.buildsetid).bind($scope) diff --git a/www/base/src/app/builders/buildrequest/buildrequest.controller.spec.coffee b/www/base/src/app/builders/buildrequest/buildrequest.controller.spec.coffee index bd47427cc20..d25864f87b4 100644 --- a/www/base/src/app/builders/buildrequest/buildrequest.controller.spec.coffee +++ b/www/base/src/app/builders/buildrequest/buildrequest.controller.spec.coffee @@ -31,14 +31,15 @@ describe 'buildrequest controller', -> createController = -> return $controller 'buildrequestController', $scope: $scope + $httpBackend.expectDataGET('buildrequests/1') + $httpBackend.expectDataGET('builders/1') + $httpBackend.expectDataGET('buildsets/1') beforeEach(inject(injected)) afterEach -> $httpBackend.verifyNoOutstandingExpectation() $httpBackend.verifyNoOutstandingRequest() it 'should query for buildrequest', -> - $httpBackend.expectDataGET('buildrequests/1') - $httpBackend.expectDataGET('buildsets/1') controller = createController() $httpBackend.flush() $scope.buildrequest.claimed = true @@ -49,8 +50,6 @@ describe 'buildrequest controller', -> $httpBackend.verifyNoOutstandingRequest() it 'should query for builds again if first query returns 0', -> - $httpBackend.expectDataGET('buildrequests/1') - $httpBackend.expectDataGET('buildsets/1') controller = createController() $httpBackend.flush() $scope.buildrequest.claimed = true @@ -73,8 +72,6 @@ describe 'buildrequest controller', -> it 'should go to build page if build started', -> $stateParams.redirect_to_build = 1 - $httpBackend.expectDataGET('buildrequests/1') - $httpBackend.expectDataGET('buildsets/1') controller = createController() $httpBackend.flush() $scope.buildrequest.claimed = true @@ -89,4 +86,4 @@ describe 'buildrequest controller', -> expect($scope.builds[0].buildid).toBeDefined() $timeout.flush() $httpBackend.verifyNoOutstandingRequest() - expect(goneto).toEqual([ 'build', { builder : 2, build : 1 } ]) + expect(goneto).toEqual([ 'build', { builder : 3, build : 1 } ]) diff --git a/www/base/src/app/builders/buildrequest/buildrequest.tpl.jade b/www/base/src/app/builders/buildrequest/buildrequest.tpl.jade index 9c352164ac0..600a4238a2f 100644 --- a/www/base/src/app/builders/buildrequest/buildrequest.tpl.jade +++ b/www/base/src/app/builders/buildrequest/buildrequest.tpl.jade @@ -1,24 +1,16 @@ .container - .row(ng-repeat="build in builds") - .col-sm-4 - ul.breadcrumb - li - a(href="#/builders") - | Builders - li - a(href="#/builders/{{build.builderid}}") - | {{buildrequest.buildername}} - li - a(href="#/builders/{{build.builderid}}/build/{{build.number}}") - | {{build.number}} .row - .col-sm-8 - tabset(justified="true") - tab(heading="build {{build.number}}", ng-repeat="build in builds") - rawdata(data="build") - tab(heading="buildrequest") - rawdata(data="buildrequest") - tab(heading="properties") - rawdata(data="buildset.properties") - tab(heading="buildset") - rawdata(data="buildset") + .col-sm-5 + h3 Associated builds: + .row(ng-repeat="build in builds") + buildsummary(buildid="build.buildid", condensed='1') + .col-sm-7 + tabset(justified="true") + tab(heading="build {{build.number}}", ng-repeat="build in builds") + rawdata(data="build") + tab(heading="buildrequest") + rawdata(data="buildrequest") + tab(heading="properties") + rawdata(data="buildset.properties") + tab(heading="buildset") + rawdata(data="buildset") diff --git a/www/base/src/app/common/directives/buildsummary/buildsummary.directive.coffee b/www/base/src/app/common/directives/buildsummary/buildsummary.directive.coffee index ae7f7226b88..b8979dc0239 100644 --- a/www/base/src/app/common/directives/buildsummary/buildsummary.directive.coffee +++ b/www/base/src/app/common/directives/buildsummary/buildsummary.directive.coffee @@ -10,12 +10,12 @@ class Buildsummary extends Directive('common') } class _buildsummary extends Controller('common') - constructor: ($scope, buildbotService, config, resultsService, $urlMatcherFactory) -> - + constructor: ($scope, buildbotService, resultsService, $urlMatcherFactory, $location) -> + baseurl = $location.absUrl().split("#")[0] buildrequestURLMatcher = $urlMatcherFactory.compile( - "#{config.url}#buildrequests/{buildrequestid:[0-9]+}") + "#{baseurl}#buildrequests/{buildrequestid:[0-9]+}") buildURLMatcher = $urlMatcherFactory.compile( - "#{config.url}#builders/{builderid:[0-9]+}/builds/{buildid:[0-9]+}") + "#{baseurl}#builders/{builderid:[0-9]+}/builds/{buildid:[0-9]+}") NONE = 0 ONLY_NOT_SUCCESS = 1 diff --git a/www/base/src/app/common/directives/buildsummary/buildsummary.directive.spec.coffee b/www/base/src/app/common/directives/buildsummary/buildsummary.directive.spec.coffee index e86347f79af..786af97c51a 100644 --- a/www/base/src/app/common/directives/buildsummary/buildsummary.directive.spec.coffee +++ b/www/base/src/app/common/directives/buildsummary/buildsummary.directive.spec.coffee @@ -2,12 +2,12 @@ beforeEach module 'app' describe 'buildsummary controller', -> buildbotService = mqService = $scope = $httpBackend = $rootScope = null - $timeout = createController = $stateParams = results = config = null + $timeout = createController = $stateParams = results = baseurl = null goneto = null injected = ($injector) -> $httpBackend = $injector.get('$httpBackend') - config = $injector.get('config') + $location = $injector.get('$location') decorateHttpBackend($httpBackend) results = $injector.get('RESULTS') $rootScope = $injector.get('$rootScope') @@ -25,6 +25,8 @@ describe 'buildsummary controller', -> $stateParams = $injector.get('$stateParams') $controller = $injector.get('$controller') $q = $injector.get('$q') + baseurl = $location.absUrl().split("#")[0] + # stub out the actual backend of mqservice spyOn(mqService,"setBaseUrl").and.returnValue(null) spyOn(mqService,"startConsuming").and.returnValue($q.when( -> )) @@ -78,30 +80,27 @@ describe 'buildsummary controller', -> $scope.toggleDetails() it 'should provide correct getBuildRequestIDFromURL', -> - config.url = 'http://localhost:5000/' controller = createController() $httpBackend.flush() - expect($scope.getBuildRequestIDFromURL("http://localhost:5000/#buildrequests/123")) + expect($scope.getBuildRequestIDFromURL("#{baseurl}#buildrequests/123")) .toBe(123) it 'should provide correct isBuildRequestURL', -> - config.url = 'http://localhost:5000/' controller = createController() $httpBackend.flush() - expect($scope.isBuildRequestURL("http://localhost:5000/#buildrequests/123")) + expect($scope.isBuildRequestURL("#{baseurl}#buildrequests/123")) .toBe(true) expect($scope.isBuildRequestURL("http://otherdomain:5000/#buildrequests/123")) .toBe(false) - expect($scope.isBuildRequestURL("http://localhost:5000/#build/123")) + expect($scope.isBuildRequestURL("#{baseurl}#build/123")) .toBe(false) - expect($scope.isBuildRequestURL("http://localhost:5000/#buildrequests/bla")) + expect($scope.isBuildRequestURL("#{baseurl}#buildrequests/bla")) .toBe(false) it 'should provide correct isBuildURL', -> - config.url = 'http://localhost:5000/' controller = createController() $httpBackend.flush() - expect($scope.isBuildURL("http://localhost:5000/#builders/123/builds/123")) + expect($scope.isBuildURL("#{baseurl}#builders/123/builds/123")) .toBe(true) - expect($scope.isBuildURL("http://localhost:5000/#builders/sdf/builds/123")) + expect($scope.isBuildURL("#{baseurl}#builders/sdf/builds/123")) .toBe(false) diff --git a/www/base/src/app/common/directives/loginbar/loginbar.directive.coffee b/www/base/src/app/common/directives/loginbar/loginbar.directive.coffee index d974e65b2ed..e35f94eeccf 100644 --- a/www/base/src/app/common/directives/loginbar/loginbar.directive.coffee +++ b/www/base/src/app/common/directives/loginbar/loginbar.directive.coffee @@ -9,7 +9,8 @@ class Loginbar extends Directive('common') } class _loginbar extends Controller('common') - constructor: ($scope, config, $http) -> + constructor: ($scope, config, $http, $location) -> + baseurl = $location.absUrl().split("#")[0] $scope.username = "" $scope.password = "" $scope.loginCollapsed = 1 @@ -22,7 +23,7 @@ class _loginbar extends Controller('common') $http.defaults.headers.common['Authorization'] = auth $http method: "GET" - url: "#{config.url}auth/login" + url: "#{baseurl}auth/login" .success (data, status) -> window.location.reload() @@ -30,14 +31,14 @@ class _loginbar extends Controller('common') $http.defaults.headers.common = {} $http method: "GET" - url: "#{config.url}auth/logout" + url: "#{baseurl}auth/logout" .success (data, status) -> window.location.reload() $scope.loginoauth2 = -> $http method: "GET" - url: "#{config.url}auth/login" + url: "#{baseurl}auth/login" .success (data, status) -> document.location = data if config.auth.autologin and config.user.anonymous and config.auth.oauth2 - $scope.loginoauth2() \ No newline at end of file + $scope.loginoauth2() diff --git a/www/codeparameter/src/module/codefield.directive.coffee b/www/codeparameter/src/module/codefield.directive.coffee index b4262b29b33..7cb133da99b 100644 --- a/www/codeparameter/src/module/codefield.directive.coffee +++ b/www/codeparameter/src/module/codefield.directive.coffee @@ -7,8 +7,9 @@ class Codeparameter extends App # setup ace to fetch its module from the plugin baseURL class AceConfig extends Run - constructor: (config) -> - window.ace.config.set("basePath", config.url + "codeparameter") + constructor: ($location) -> + baseurl = $location.absUrl().split("#")[0] + window.ace.config.set("basePath", "#{baseurl}codeparameter") # defines custom field directives which only have templates class Codefield extends Directive @@ -18,4 +19,4 @@ class Codefield extends Directive restrict: 'E' scope: false templateUrl: "codeparameter/views/codefield.html" - } \ No newline at end of file + }