Skip to content

Commit 90e7cdd

Browse files
authored
Improve output description for SetRequest diff. (#796)
1 parent b519912 commit 90e7cdd

File tree

4 files changed

+33
-11
lines changed

4 files changed

+33
-11
lines changed

gnmidiff/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ $ go install ./gnmidiff
66
$ gnmidiff setrequest cmd/demo/setrequest.textproto cmd/demo/setrequest2.textproto
77

88
SetRequestIntentDiff(-A, +B):
9-
-------- deletes --------
10-
+ /network-instances/network-instance[name=VrfBlue]: deleted
9+
-------- deletes/replaces --------
10+
+ /network-instances/network-instance[name=VrfBlue]: deleted or replaced only in B
1111
-------- updates --------
1212
m /system/config/hostname:
1313
- "violetsareblue"

gnmidiff/diff.go

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,12 @@ type Format struct {
9292
aName string
9393
// bName is an optional custom name for B in the diff.
9494
bName string
95+
// deleteTitle is an optional custom name when titling the diff section
96+
// with delete paths.
97+
deleteTitle string
98+
// deleteDesc is an optional custom description when describing a
99+
// delete path in the diff.
100+
deleteDesc string
95101
}
96102

97103
func formatJSONValue(value interface{}) interface{} {
@@ -115,11 +121,17 @@ func (diff StructuredDiff) Format(f Format) string {
115121
if f.bName == "" {
116122
f.bName = "B"
117123
}
124+
if f.deleteTitle == "" {
125+
f.deleteDesc = "deletes"
126+
}
127+
if f.deleteDesc == "" {
128+
f.deleteTitle = "deleted only in %s"
129+
}
118130
b.WriteString(fmt.Sprintf("%s(-%s, +%s):\n", f.title, f.aName, f.bName))
119131

120132
deleteDiff := diff.DeleteDiff.format(f)
121133
if deleteDiff != "" {
122-
b.WriteString("-------- deletes --------\n")
134+
b.WriteString(fmt.Sprintf("-------- %s --------\n", f.deleteTitle))
123135
b.WriteString(deleteDiff)
124136
b.WriteString("-------- updates --------\n")
125137
}
@@ -177,7 +189,15 @@ func (diff DeleteDiff) format(f Format) string {
177189
}
178190
sort.Strings(paths)
179191
for _, path := range paths {
180-
b.WriteString(fmt.Sprintf("%c %s: deleted\n", symbol, path))
192+
b.WriteString(fmt.Sprintf("%c %s: "+f.deleteDesc, symbol, path))
193+
switch symbol {
194+
case '-':
195+
b.WriteString(fmt.Sprintf(" only in %s\n", f.aName))
196+
case '+':
197+
b.WriteString(fmt.Sprintf(" only in %s\n", f.bName))
198+
default:
199+
b.WriteString("\n")
200+
}
181201
}
182202
}
183203

gnmidiff/setrequest.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ func (diff SetRequestIntentDiff) Format(f Format) string {
3737
f.title = "SetRequestIntentDiff"
3838
f.aName = "A"
3939
f.bName = "B"
40+
f.deleteTitle = "deletes/replaces"
41+
f.deleteDesc = "deleted or replaced"
4042
return StructuredDiff(diff).Format(f)
4143
}
4244

gnmidiff/setrequest_test.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -80,9 +80,9 @@ func TestSetRequestDiffFormat(t *testing.T) {
8080
},
8181
inFormat: Format{},
8282
want: `SetRequestIntentDiff(-A, +B):
83-
-------- deletes --------
84-
- /interfaces/interface[name=eth1]: deleted
85-
+ /interfaces/interface[name=eth2]: deleted
83+
-------- deletes/replaces --------
84+
- /interfaces/interface[name=eth1]: deleted or replaced only in A
85+
+ /interfaces/interface[name=eth2]: deleted or replaced only in B
8686
-------- updates --------
8787
- /interfaces/interface[name=eth1]/config/name: "eth1"
8888
- /interfaces/interface[name=eth1]/name: "eth1"
@@ -146,10 +146,10 @@ m /interfaces/interface[name=eth0]/subinterfaces/subinterface[index=0]/state/nam
146146
Full: true,
147147
},
148148
want: `SetRequestIntentDiff(-A, +B):
149-
-------- deletes --------
150-
/interfaces/interface[name=eth0]: deleted
151-
- /interfaces/interface[name=eth1]: deleted
152-
+ /interfaces/interface[name=eth2]: deleted
149+
-------- deletes/replaces --------
150+
/interfaces/interface[name=eth0]: deleted or replaced
151+
- /interfaces/interface[name=eth1]: deleted or replaced only in A
152+
+ /interfaces/interface[name=eth2]: deleted or replaced only in B
153153
-------- updates --------
154154
/interfaces/interface[name=eth0]/config/description: "I am an eth port"
155155
/interfaces/interface[name=eth0]/config/name: "eth0"

0 commit comments

Comments
 (0)