@@ -18,6 +18,8 @@ import (
18
18
"context"
19
19
"encoding/json"
20
20
"fmt"
21
+ "sort"
22
+ "strings"
21
23
22
24
"github.com/blang/semver"
23
25
pbempty "github.com/golang/protobuf/ptypes/empty"
@@ -76,13 +78,15 @@ func (p *providerServer) checkNYI(method string, err error) error {
76
78
return err
77
79
}
78
80
79
- func (p * providerServer ) marshalDiff (diff pl .DiffResult ) (* pulumirpc.DiffResponse , error ) {
80
- changes := pulumirpc .DiffResponse_DIFF_UNKNOWN
81
+ func (p * providerServer ) marshalDiff (diff plugin .DiffResult ) (* pulumirpc.DiffResponse , error ) {
82
+ var changes pulumirpc.DiffResponse_DiffChanges
81
83
switch diff .Changes {
82
84
case pl .DiffNone :
83
85
changes = pulumirpc .DiffResponse_DIFF_NONE
84
86
case pl .DiffSome :
85
87
changes = pulumirpc .DiffResponse_DIFF_SOME
88
+ case pl .DiffUnknown :
89
+ changes = pulumirpc .DiffResponse_DIFF_UNKNOWN
86
90
}
87
91
88
92
// Infer the result from the detailed diff.
@@ -100,9 +104,16 @@ func (p *providerServer) marshalDiff(diff pl.DiffResult) (*pulumirpc.DiffRespons
100
104
} else {
101
105
changes = pulumirpc .DiffResponse_DIFF_SOME
102
106
107
+ properties := map [string ]struct {}{}
103
108
detailedDiff = make (map [string ]* pulumirpc.PropertyDiff )
104
109
for path , diff := range diff .DetailedDiff {
105
- diffs = append (diffs , path )
110
+ for k := range detailedDiff {
111
+ // Turn the attribute name into a top-level property name by trimming everything after the first dot.
112
+ if firstSep := strings .IndexAny (k , ".[" ); firstSep != - 1 {
113
+ k = k [:firstSep ]
114
+ }
115
+ properties [k ] = struct {}{}
116
+ }
106
117
107
118
var kind pulumirpc.PropertyDiff_Kind
108
119
switch diff .Kind {
@@ -125,6 +136,11 @@ func (p *providerServer) marshalDiff(diff pl.DiffResult) (*pulumirpc.DiffRespons
125
136
InputDiff : diff .InputDiff ,
126
137
}
127
138
}
139
+ diffs = make ([]string , 0 , len (properties ))
140
+ for k := range properties {
141
+ diffs = append (diffs , k )
142
+ }
143
+ sort .Strings (diffs )
128
144
}
129
145
130
146
return & pulumirpc.DiffResponse {
@@ -133,6 +149,7 @@ func (p *providerServer) marshalDiff(diff pl.DiffResult) (*pulumirpc.DiffRespons
133
149
Changes : changes ,
134
150
Diffs : diffs ,
135
151
DetailedDiff : detailedDiff ,
152
+ HasDetailedDiff : len (detailedDiff ) > 0 ,
136
153
}, nil
137
154
}
138
155
0 commit comments