lib/travis/client/artifact.rb in travis-1.8.11 vs lib/travis/client/artifact.rb in travis-1.8.12.pre.rc1
- old
+ new
@@ -1,8 +1,9 @@
# encoding: utf-8
require 'travis/client'
require 'travis/tools/safe_string'
+require 'ostruct'
module Travis
module Client
class Artifact < Entity
CHUNKED = "application/json; chunked=true; version=2, application/json; version=2"
@@ -42,15 +43,19 @@
log = session.get_raw("jobs/#{job_id}/log", nil, "Accept" => TEXT)
body = String === log ? log : log['log']['body']
end
body
end
+ rescue NoMethodError => e
+ # Most likely `#load_attribute` failed because the logs have already
+ # been archived and API returned a bare string, so we will use that instead
+ session.get_raw("logs/#{id}", nil, "Accept" => TEXT)
end
def body(stream = block_given?)
return current_body unless block_given? or stream
- return yield(current_body) unless stream and job.pending?
+ return yield(current_body) unless stream and raw_job.pending?
number = 0
session.listen(self) do |listener|
listener.on 'job:log' do |event|
next unless event.payload['number'] > number
@@ -76,9 +81,20 @@
end
end
def pusher_entity
job
+ end
+
+ # wrapper to rescue errors while constructing the job object
+ # https://github.com/travis-ci/travis.rb/issues/578
+ def raw_job
+ job
+ rescue
+ # Exception arises because the logs have been archived, so in this case
+ # the job is obviously no longer pending. This is the only call we have
+ # to stub
+ OpenStruct.new(:pending? => false)
end
one :log
many :logs
aka :artifact