cli: Optimize for large multi-line string outputs

This commit is contained in:
Alisdair McDiarmid 2021-02-11 10:42:06 -05:00
parent 14936e6550
commit 943df48491
1 changed files with 28 additions and 16 deletions

View File

@ -901,6 +901,17 @@ func (p *blockBodyDiffPrinter) writeValueDiff(old, new cty.Value, indent int, pa
}
}
// Optimization for strings which are exactly equal: just print
// directly without calculating the sequence diff. This makes a
// significant difference when this code path is reached via a
// writeValue call with a large multi-line string.
if oldS == newS {
for _, line := range newLines {
p.buf.WriteString(strings.Repeat(" ", indent+4))
p.buf.WriteString(line.AsString())
p.buf.WriteString("\n")
}
} else {
diffLines := ctySequenceDiff(oldLines, newLines)
for _, diffLine := range diffLines {
p.buf.WriteString(strings.Repeat(" ", indent+2))
@ -919,6 +930,7 @@ func (p *blockBodyDiffPrinter) writeValueDiff(old, new cty.Value, indent int, pa
}
p.buf.WriteString("\n")
}
}
p.buf.WriteString(strings.Repeat(" ", indent)) // +4 here because there's no symbol
p.buf.WriteString("EOT")