Don't require loading repos when dislaying queues and workers

This commit is contained in:
Piotr Sarnacki 2012-11-27 22:36:13 +01:00
parent df69a4a221
commit 834e45ceb5
6 changed files with 34 additions and 11 deletions

View File

@ -14,11 +14,21 @@ require 'travis/model'
finishedAt: DS.attr('string') finishedAt: DS.attr('string')
allowFailure: DS.attr('boolean', key: 'allow_failure') allowFailure: DS.attr('boolean', key: 'allow_failure')
repositorySlug: DS.attr('string')
repo: DS.belongsTo('Travis.Repo', key: 'repository_id') repo: DS.belongsTo('Travis.Repo', key: 'repository_id')
build: DS.belongsTo('Travis.Build', key: 'build_id') build: DS.belongsTo('Travis.Build', key: 'build_id')
commit: DS.belongsTo('Travis.Commit', key: 'commit_id') commit: DS.belongsTo('Travis.Commit', key: 'commit_id')
log: DS.belongsTo('Travis.Artifact', key: 'log_id') log: DS.belongsTo('Travis.Artifact', key: 'log_id')
repoSlug: (->
@get('repositorySlug')
).property('repositorySlug')
repoData: (->
{ id: @get('repoId'), slug: @get('repoSlug') }
).property('repoSlug', 'repoId')
config: (-> config: (->
Travis.Helpers.compact(@get('data.config')) Travis.Helpers.compact(@get('data.config'))
).property('data.config') ).property('data.config')

View File

@ -84,11 +84,12 @@ require 'travis/model'
).property('lastBuildFinishedAt', 'lastBuildId') ).property('lastBuildFinishedAt', 'lastBuildId')
stats: (-> stats: (->
if @get('slug')
@get('_stats') || $.get("https://api.github.com/repos/#{@get('slug')}", (data) => @get('_stats') || $.get("https://api.github.com/repos/#{@get('slug')}", (data) =>
@set('_stats', data) @set('_stats', data)
@notifyPropertyChange 'stats' @notifyPropertyChange 'stats'
) && {} ) && {}
).property() ).property('slug')
updateTimes: -> updateTimes: ->
@notifyPropertyChange 'lastBuildDuration' @notifyPropertyChange 'lastBuildDuration'

View File

@ -26,6 +26,10 @@ require 'travis/model'
Travis.Job.find @get('job_id') Travis.Job.find @get('job_id')
).property('jobId') ).property('jobId')
repoData: (->
{ id: @get('repoId'), slug: @get('repoSlug') }
).property('repoSlug', 'repoId')
repo: (-> repo: (->
Travis.Repo.find(@get('payload.repository.id') || @get('payload.repo.id')) Travis.Repo.find(@get('payload.repository.id') || @get('payload.repo.id'))
).property('payload.repository.id', 'payload.repo.id') ).property('payload.repository.id', 'payload.repo.id')
@ -34,6 +38,10 @@ require 'travis/model'
@get('payload.repo.slug') || @get('payload.repository.slug') @get('payload.repo.slug') || @get('payload.repository.slug')
).property('payload.repo.slug', 'payload.repository.slug') ).property('payload.repo.slug', 'payload.repository.slug')
repoId: (->
@get('payload.repo.id') || @get('payload.repository.id')
).property('payload.repo.id', 'payload.repository.id')
nameForSort: (-> nameForSort: (->
if name = @get('name') if name = @get('name')
match = name.match /(.*?)-(\d+)/ match = name.match /(.*?)-(\d+)/

View File

@ -202,6 +202,8 @@ Travis.Router = Ember.Router.extend
dynamicSegmentPattern: "([^/#]+)" dynamicSegmentPattern: "([^/#]+)"
connectOutlets: (router, repo) -> connectOutlets: (router, repo) ->
unless repo.constructor == Travis.Repo
repo = Travis.Repo.find(repo.id)
router.get('repoController').set 'repo', repo router.get('repoController').set 'repo', repo
deserialize: (router, params) -> deserialize: (router, params) ->
@ -225,8 +227,11 @@ Travis.Router = Ember.Router.extend
if typeof repo == 'string' if typeof repo == 'string'
[owner, name] = repo.split '/' [owner, name] = repo.split '/'
{ owner: owner, name: name } { owner: owner, name: name }
else if repo else if repo && repo.constructor == Travis.Repo
{ owner: repo.get('owner'), name: repo.get('name') } { owner: repo.get('owner'), name: repo.get('name') }
else if repo && repo.id && repo.slug
[owner, name] = repo.slug.split '/'
{ owner: owner, name: name }
else else
# TODO: it would be nice to handle 404 somehow # TODO: it would be nice to handle 404 somehow
{} {}

View File

@ -5,11 +5,10 @@
<ul {{bindAttr id="queue.id"}}> <ul {{bindAttr id="queue.id"}}>
{{#each job in queue}} {{#each job in queue}}
{{#view Travis.QueueItemView jobBinding="job"}} {{#view Travis.QueueItemView jobBinding="job"}}
{{#if job.repoSlug}}
{{#if job.repo.slug}} <a {{action showJob job.repoData job target="Travis.app.router" href=true}}>
<a {{action showJob job.repo job target="Travis.app.router" href=true}}>
<span class="slug"> <span class="slug">
{{job.repo.slug}} {{job.repoSlug}}
</span> </span>
#{{job.number}} #{{job.number}}
</a> </a>

View File

@ -17,7 +17,7 @@
<div class="status"></div> <div class="status"></div>
{{#if worker.isWorking}} {{#if worker.isWorking}}
{{#if worker.jobId}} {{#if worker.jobId}}
<a {{action showJob worker.repo worker.jobId target="Travis.app.router" href=true}} {{bindAttr title="worker.lastSeenAt"}}> <a {{action showJob worker.repoData worker.jobId target="Travis.app.router" href=true}} {{bindAttr title="worker.lastSeenAt"}}>
{{view.display}} {{view.display}}
</a> </a>
{{/if}} {{/if}}