Fixes incorrect wrapping in styled log lines
What does this MR do and why?
Fixes #465945 (closed)
This change fixes the wrapping of text in long lines that are incorrectly shown side-by-side instead of inline.
Changelog: fixed
MR acceptance checklist
Please evaluate this MR against the MR acceptance checklist. It helps you analyze changes to reduce risks in quality, performance, reliability, security, and maintainability.
Screenshots or screen recordings
Before | After |
---|---|
How to set up and validate locally
Simple verification
This problem occurs when a a log line is both long and contains several ANSI styles.
Using a a bash shell (I tested in macOS, but Linux should work), it's possible to render such a long line with the following .gitlab-ci.yml
stages:
- build
job:
stage: build
before_script:
- TXT_RED="\033[31m" && TXT_CLEAR="\033[0m"
script:
- echo -e "${TXT_RED}This is a long line of text, and this text is red, and this text is red, and this text is red,${TXT_CLEAR} but this part isn't${TXT_RED} however this part is red once more in this long line."
- echo "This text is not colored"
After this you can run a job using a runner with a shell executor.
Extended verification
It's possible to replace the entire contents of a log shown locally by downloading a raw file locally and using the following patch:
diff --git a/lib/gitlab/ci/ansi2json.rb b/lib/gitlab/ci/ansi2json.rb
index 79114d35916c..a0256ca5d2c9 100644
--- a/lib/gitlab/ci/ansi2json.rb
+++ b/lib/gitlab/ci/ansi2json.rb
@@ -5,7 +5,10 @@ module Gitlab
module Ci
module Ansi2json
def self.convert(ansi, state = nil)
- Converter.new.convert(ansi, state)
+ # Converter.new.convert(ansi, state)
+ File.open("/Users/miguelrincon/Downloads/jobs-7009875344.txt", "r") do |stream|
+ Converter.new.convert(stream, state)
+ end
end
end
end
In particular, I was able to reproduce this with https://gitlab.com/gitlab-org/gitlab/-/jobs/7009875344#L3134.
current | locally replaced |
---|---|