From 2d0349d9a4b107a567e353a9efb3582fcb491360 Mon Sep 17 00:00:00 2001 From: Alisdair McDiarmid Date: Fri, 19 Nov 2021 11:53:36 -0500 Subject: [PATCH 1/2] cli: Fix diff for nested set unchanged elements Unchanged elements in nested attributes backed by sets were previously misrendered as empty objects. This commit removes the additional brackets and adds a count of unchanged elements. --- internal/command/format/diff.go | 10 +++++++++- internal/command/format/diff_test.go | 9 +++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/internal/command/format/diff.go b/internal/command/format/diff.go index 4aafe9dbe..b8e97c7c7 100644 --- a/internal/command/format/diff.go +++ b/internal/command/format/diff.go @@ -569,6 +569,8 @@ func (p *blockBodyDiffPrinter) writeNestedAttrDiff( p.buf.WriteString(" = [") + var unchanged int + for it := all.ElementIterator(); it.Next(); { _, val := it.Element() var action plans.Action @@ -598,12 +600,17 @@ func (p *blockBodyDiffPrinter) writeNestedAttrDiff( newValue = val } + if action == plans.NoOp { + unchanged++ + continue + } + p.buf.WriteString("\n") p.buf.WriteString(strings.Repeat(" ", indent+4)) p.writeActionSymbol(action) p.buf.WriteString("{") - if action != plans.NoOp && (p.pathForcesNewResource(path) || p.pathForcesNewResource(path[:len(path)-1])) { + if p.pathForcesNewResource(path) || p.pathForcesNewResource(path[:len(path)-1]) { p.buf.WriteString(p.color.Color(forcesNewResourceCaption)) } @@ -615,6 +622,7 @@ func (p *blockBodyDiffPrinter) writeNestedAttrDiff( p.buf.WriteString("},") } p.buf.WriteString("\n") + p.writeSkippedElems(unchanged, indent+4) p.buf.WriteString(strings.Repeat(" ", indent+2)) p.buf.WriteString("]") diff --git a/internal/command/format/diff_test.go b/internal/command/format/diff_test.go index 3ac77b110..fd7f16163 100644 --- a/internal/command/format/diff_test.go +++ b/internal/command/format/diff_test.go @@ -2822,6 +2822,10 @@ func TestResourceChange_nestedSet(t *testing.T) { "mount_point": cty.StringVal("/var/diska"), "size": cty.NullVal(cty.String), }), + cty.ObjectVal(map[string]cty.Value{ + "mount_point": cty.StringVal("/var/diskb"), + "size": cty.StringVal("100GB"), + }), }), "root_block_device": cty.SetVal([]cty.Value{ cty.ObjectVal(map[string]cty.Value{ @@ -2838,6 +2842,10 @@ func TestResourceChange_nestedSet(t *testing.T) { "mount_point": cty.StringVal("/var/diska"), "size": cty.StringVal("50GB"), }), + cty.ObjectVal(map[string]cty.Value{ + "mount_point": cty.StringVal("/var/diskb"), + "size": cty.StringVal("100GB"), + }), }), "root_block_device": cty.SetVal([]cty.Value{ cty.ObjectVal(map[string]cty.Value{ @@ -2859,6 +2867,7 @@ func TestResourceChange_nestedSet(t *testing.T) { - { - mount_point = "/var/diska" -> null }, + # (1 unchanged element hidden) ] id = "i-02ae66f368e8518a9" From b562c4fb84922d1e802a6cb2c7ff1b60a8c10031 Mon Sep 17 00:00:00 2001 From: Alisdair McDiarmid Date: Fri, 19 Nov 2021 13:06:34 -0500 Subject: [PATCH 2/2] cli: Fix nested set diff rendering indentation --- internal/command/format/diff.go | 6 ++-- internal/command/format/diff_test.go | 46 ++++++++++++++-------------- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/internal/command/format/diff.go b/internal/command/format/diff.go index b8e97c7c7..0179bb2d7 100644 --- a/internal/command/format/diff.go +++ b/internal/command/format/diff.go @@ -615,14 +615,14 @@ func (p *blockBodyDiffPrinter) writeNestedAttrDiff( } path := append(path, cty.IndexStep{Key: val}) - p.writeAttrsDiff(objS.Attributes, oldValue, newValue, indent+6, path, result) + p.writeAttrsDiff(objS.Attributes, oldValue, newValue, indent+8, path, result) p.buf.WriteString("\n") - p.buf.WriteString(strings.Repeat(" ", indent+4)) + p.buf.WriteString(strings.Repeat(" ", indent+6)) p.buf.WriteString("},") } p.buf.WriteString("\n") - p.writeSkippedElems(unchanged, indent+4) + p.writeSkippedElems(unchanged, indent+6) p.buf.WriteString(strings.Repeat(" ", indent+2)) p.buf.WriteString("]") diff --git a/internal/command/format/diff_test.go b/internal/command/format/diff_test.go index fd7f16163..79ef60ff8 100644 --- a/internal/command/format/diff_test.go +++ b/internal/command/format/diff_test.go @@ -2800,8 +2800,8 @@ func TestResourceChange_nestedSet(t *testing.T) { ~ ami = "ami-BEFORE" -> "ami-AFTER" ~ disks = [ + { - + mount_point = "/var/diska" - }, + + mount_point = "/var/diska" + }, ] id = "i-02ae66f368e8518a9" @@ -2861,13 +2861,13 @@ func TestResourceChange_nestedSet(t *testing.T) { ~ ami = "ami-BEFORE" -> "ami-AFTER" ~ disks = [ + { - + mount_point = "/var/diska" - + size = "50GB" - }, + + mount_point = "/var/diska" + + size = "50GB" + }, - { - - mount_point = "/var/diska" -> null - }, - # (1 unchanged element hidden) + - mount_point = "/var/diska" -> null + }, + # (1 unchanged element hidden) ] id = "i-02ae66f368e8518a9" @@ -2925,13 +2925,13 @@ func TestResourceChange_nestedSet(t *testing.T) { ~ ami = "ami-BEFORE" -> "ami-AFTER" ~ disks = [ - { # forces replacement - - mount_point = "/var/diska" -> null - - size = "50GB" -> null - }, + - mount_point = "/var/diska" -> null + - size = "50GB" -> null + }, + { # forces replacement - + mount_point = "/var/diskb" - + size = "50GB" - }, + + mount_point = "/var/diskb" + + size = "50GB" + }, ] id = "i-02ae66f368e8518a9" @@ -2982,9 +2982,9 @@ func TestResourceChange_nestedSet(t *testing.T) { ~ ami = "ami-BEFORE" -> "ami-AFTER" ~ disks = [ - { - - mount_point = "/var/diska" -> null - - size = "50GB" -> null - }, + - mount_point = "/var/diska" -> null + - size = "50GB" -> null + }, ] id = "i-02ae66f368e8518a9" @@ -3071,9 +3071,9 @@ func TestResourceChange_nestedSet(t *testing.T) { ~ ami = "ami-BEFORE" -> "ami-AFTER" + disks = [ + { - + mount_point = "/var/diska" - + size = "50GB" - }, + + mount_point = "/var/diska" + + size = "50GB" + }, ] id = "i-02ae66f368e8518a9" @@ -3127,9 +3127,9 @@ func TestResourceChange_nestedSet(t *testing.T) { ~ ami = "ami-BEFORE" -> "ami-AFTER" ~ disks = [ - { - - mount_point = "/var/diska" -> null - - size = "50GB" -> null - }, + - mount_point = "/var/diska" -> null + - size = "50GB" -> null + }, ] -> (known after apply) id = "i-02ae66f368e8518a9"