From ceb9688d9289e185b925f8e7447f5dd2a326fd29 Mon Sep 17 00:00:00 2001 From: Ohad Lutzky Date: Fri, 14 Apr 2023 13:39:06 +0100 Subject: Fix rendering for multi-line commands Heredocs can be used to create multi-line commands, which broke rendering. Details about heredocs: https://www.docker.com/blog/introduction-to-heredocs-in-dockerfiles/ --- dive/image/layer.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/dive/image/layer.go b/dive/image/layer.go index ac96363..8c7fa6a 100644 --- a/dive/image/layer.go +++ b/dive/image/layer.go @@ -33,6 +33,12 @@ func (l *Layer) ShortId() string { return id } +func (l *Layer) commandPreview() string { + // Layers using heredocs can be multiple lines; rendering relies on + // Layer.String to be a single line. + return strings.Replace(l.Command, "\n", "↵", -1) +} + func (l *Layer) String() string { if l.Index == 0 { return fmt.Sprintf(LayerFormat, @@ -41,5 +47,5 @@ func (l *Layer) String() string { } return fmt.Sprintf(LayerFormat, humanize.Bytes(l.Size), - strings.Split(l.Command, "\n")[0]) + l.commandPreview()) } -- cgit v1.2.3