diff options
Diffstat (limited to 'app')
-rw-r--r-- | app/controllers/projects/builds_controller.rb | 4 | ||||
-rw-r--r-- | app/models/ci/build.rb | 20 |
2 files changed, 14 insertions, 10 deletions
diff --git a/app/controllers/projects/builds_controller.rb b/app/controllers/projects/builds_controller.rb index f13fb1df373..6069e620ba2 100644 --- a/app/controllers/projects/builds_controller.rb +++ b/app/controllers/projects/builds_controller.rb @@ -43,7 +43,9 @@ class Projects::BuildsController < Projects::ApplicationController def trace respond_to do |format| format.json do - render json: @build.trace_with_state(params[:state].presence).merge!(id: @build.id, status: @build.status) + state = params[:state].presence + render json: @build.trace_with_state(state: state). + merge!(id: @build.id, status: @build.status) end end end diff --git a/app/models/ci/build.rb b/app/models/ci/build.rb index f9aa1984c1f..13f101cbecb 100644 --- a/app/models/ci/build.rb +++ b/app/models/ci/build.rb @@ -128,13 +128,14 @@ module Ci latest_builds.where('stage_idx < ?', stage_idx) end - def trace_html - trace_with_state[:html] || '' + def trace_html(**args) + trace_with_state(**args)[:html] || '' end - def trace_with_state(state = nil) - if trace.present? - Ci::Ansi2html.convert(trace, state) + def trace_with_state(state: nil, last_lines: nil) + trace_ansi = trace(last_lines) + if trace_ansi.present? + Ci::Ansi2html.convert(trace_ansi, state) else {} end @@ -220,9 +221,10 @@ module Ci raw_trace.present? end - def raw_trace + def raw_trace(last_lines: nil) if File.exist?(trace_file_path) - File.read(trace_file_path) + Gitlab::Ci::TraceReader.new(trace_file_path). + read(last_lines: last_lines) else # backward compatibility read_attribute :trace @@ -237,8 +239,8 @@ module Ci project.ci_id && File.exist?(old_path_to_trace) end - def trace - result = raw_trace + def trace(last_lines: nil) + result = raw_trace(last_lines) if project && result.present? && project.runners_token.present? result.gsub(project.runners_token, 'xxxxxx') else |