Class: Gitlab::Chat::Output
- Inherits:
-
Object
- Object
- Gitlab::Chat::Output
- Defined in:
- lib/gitlab/chat/output.rb
Overview
Class for gathering and formatting the output of a Ci::Build.
Constant Summary collapse
- MissingBuildSectionError =
Class.new(StandardError)
- PRIMARY_SECTION =
The primary trace section to look for.
'chat_reply'- FALLBACK_SECTION =
The backup trace section in case the primary one could not be found.
'step_script'- LEGACY_SECTION =
step_scriptused to bebuild_scriptbefore runner 13.1 'build_script'
Instance Attribute Summary collapse
-
#build ⇒ Object
readonly
Returns the value of attribute build.
Instance Method Summary collapse
-
#find_build_trace_section(name) ⇒ Object
Returns the trace section for the given name, or
nilif the section could not be found. -
#initialize(build) ⇒ Output
constructor
build - The
Ci::Buildto obtain the output from. -
#to_s ⇒ Object
Returns a
Stringcontaining the output of the build. - #trace ⇒ Object
- #trace_sections ⇒ Object
-
#without_executed_command_line(output) ⇒ Object
Removes the line containing the executed command from the build output.
Constructor Details
#initialize(build) ⇒ Output
build - The Ci::Build to obtain the output from.
21 22 23 |
# File 'lib/gitlab/chat/output.rb', line 21 def initialize(build) @build = build end |
Instance Attribute Details
#build ⇒ Object (readonly)
Returns the value of attribute build.
7 8 9 |
# File 'lib/gitlab/chat/output.rb', line 7 def build @build end |
Instance Method Details
#find_build_trace_section(name) ⇒ Object
Returns the trace section for the given name, or nil if the section
could not be found.
name - The name of the trace section to find.
65 66 67 |
# File 'lib/gitlab/chat/output.rb', line 65 def find_build_trace_section(name) trace_sections.find { |s| s[:name] == name } end |
#to_s ⇒ Object
Returns a String containing the output of the build.
The output does not include the command that was executed.
28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/gitlab/chat/output.rb', line 28 def to_s offset, length = read_offset_and_length trace.read do |stream| stream.seek(offset) output = stream .stream .read(length) .force_encoding(Encoding.default_external) without_executed_command_line(output) end end |
#trace ⇒ Object
73 74 75 |
# File 'lib/gitlab/chat/output.rb', line 73 def trace @trace ||= build.trace end |
#trace_sections ⇒ Object
69 70 71 |
# File 'lib/gitlab/chat/output.rb', line 69 def trace_sections @trace_sections ||= trace.extract_sections end |
#without_executed_command_line(output) ⇒ Object
Removes the line containing the executed command from the build output.
output - A String containing the output of a trace section.
46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/gitlab/chat/output.rb', line 46 def without_executed_command_line(output) # If `output.split("\n")` produces an empty Array then the slicing that # follows it will produce a nil. For example: # # "\n".split("\n") # => [] # "\n".split("\n")[1..] # => nil # # To work around this we only "join" if we're given an Array. if (converted = output.split("\n")[1..]) converted.join("\n") else '' end end |