Fix logs to always point to build or job view

This commit is contained in:
Piotr Sarnacki 2012-10-12 18:32:25 +02:00
parent a3ec12bda7
commit 2575218ddb
9 changed files with 55 additions and 18 deletions

View File

@ -31,5 +31,8 @@ Ember.registerBoundHelper 'formatConfig', (config, options) ->
safe Travis.Helpers.formatConfig(config)
Ember.registerBoundHelper 'formatLog', (log, options) ->
Travis.Helpers.formatLog(log) || ''
parentView = @get 'parentView'
repo = parentView.get(options.repo)
item = parentView.get(options.item)
Travis.Helpers.formatLog(log, repo, item) || ''

View File

@ -31,8 +31,15 @@ require 'config/emoij'
message = message.split(/\n/)[0] if options.short
@_emojize(@_escape(message)).replace /\n/g, '<br/>'
formatLog: (log) ->
Travis.Log.filter(log)
formatLog: (log, repo, item) ->
event = if item.constructor == Travis.Build
'showBuild'
else
'showJob'
url = Travis.app.get('router').urlForEvent(event, repo, item)
Travis.Log.filter(log, url)
pathFrom: (url) ->
(url || '').split('/').pop()

View File

@ -7,6 +7,9 @@ defaultRoute = Ember.Route.extend
lineNumberRoute = Ember.Route.extend
route: '#L:number'
index: 1
connectOutlets: (router) ->
router.saveLineNumberHash()
routeMatcher: Ember.computed(->
if route = @get 'route'
Ember._RouteMatcher.create
@ -127,6 +130,12 @@ Travis.Router = Ember.Router.extend
showAccount: Ember.Route.transitionTo('root.profile.account')
showUserProfile: Ember.Route.transitionTo('root.profile.account.profile')
saveLineNumberHash: (path) ->
Ember.run.next this, ->
path = path || @get('location').getURL()
if match = path.match(/#L\d+$/)
@set 'repoController.lineNumberHash', match[0]
reload: ->
url = @get('location').getURL()
@transitionTo 'loading'
@ -143,8 +152,7 @@ Travis.Router = Ember.Router.extend
loading: Ember.Route.extend
routePath: (router, path) ->
if match = path.match(/#.*$/)
router.set 'lineNumberHash', match[0]
router.saveLineNumberHash(path)
sessionStorage.setItem('travis.path', path)
if router.needsAuth(path)

View File

@ -4,7 +4,7 @@
<pre id="log" class="ansi"><a href="#" id="tail" {{action toggleTailing target="view"}}>
<span class="status"></span>
<label>Follow logs</label>
</a>{{{formatLog log.body}}}</pre>
</a>{{{formatLog log.body repo="repository" item="parentView.currentItem"}}}</pre>
{{#if sponsor.name}}
<p class="sponsor">

View File

@ -52,6 +52,8 @@
buildBinding: 'controller.build'
commitBinding: 'build.commit'
currentItemBinding: 'build'
loading: (->
!@get('build.isLoaded')
).property('build.isLoaded')

View File

@ -24,6 +24,8 @@
jobBinding: 'controller.job'
commitBinding: 'job.commit'
currentItemBinding: 'job'
color: (->
Travis.Helpers.colorForResult(@get('job.result'))
).property('job.result')
@ -50,12 +52,14 @@
scrollTo: (hash) ->
$('body').scrollTop $(hash).offset().top
Travis.app.router.set 'lineNumberHash', null
@set 'controller.lineNumberHash', null
didInsertElement: ->
@_super.apply this, arguments
lineNumberHashDidChange: (->
@tryScrollingToHashLineNumber()
).observes('controller.lineNumberHash')
if hash = Travis.app.router.get 'lineNumberHash'
tryScrollingToHashLineNumber: ->
if hash = @get 'controller.lineNumberHash'
self = this
checker = ->
@ -68,8 +72,20 @@
checker()
didInsertElement: ->
@_super.apply this, arguments
@tryScrollingToHashLineNumber()
click: (event) ->
$(event.target).closest('.fold').toggleClass('open')
target = $(event.target)
target.closest('.fold').toggleClass('open')
if target.is('.log-line-number')
path = target.attr 'href'
Travis.app.get('router').route(path)
event.stopPropagation()
return false
toTop: () ->
$(window).scrollTop(0)

View File

@ -5,11 +5,11 @@
bundle: /(<p.*?\/a>\$ bundle install.*<\/p>\n(<p.*?\/a>(Updating|Using|Installing|Fetching|remote:|Receiving|Resolving).*?<\/p>\n|<p.*?\/a><\/p>\n)*)/g
exec: /(<p.*?\/a>[\/\w]*.rvm\/rubies\/[\S]*?\/(ruby|rbx|jruby) .*?<\/p>)/g
filter: (log) ->
filter: (log, path) ->
log = @escape(log)
log = @deansi(log)
log = log.replace(/\r/g, '')
log = @number(log)
log = @number(log, path)
log = @fold(log)
log = log.replace(/\n/g, '')
log
@ -23,12 +23,13 @@
escapeRuby: (log) ->
log.replace /#<(\w+.*?)>/, '#&lt;$1&gt;'
number: (log) ->
number: (log, path) ->
path = "#{path}/"
result = ''
$.each log.trim().split('\n'), (ix, line) ->
number = ix + 1
path = Travis.Log.location().substr(1).replace(/L\d+/, '') + 'L' + number
result += '<p><a href=\'#%@\' id=\'%@\' name=\'L%@\'>%@</a>%@</p>\n'.fmt(path, path, number, number, line)
pathWithNumber = "#{path}#L#{number}"
result += '<p><a href="%@" id="L%@" class="log-line-number" name="L%@">%@</a>%@</p>\n'.fmt(pathWithNumber, number, number, number, line)
result.trim()
deansi: (log) ->

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long