mirror of https://github.com/k3s-io/k3s
Add a side-by-side diff option for verbose output
Make regular diff better by eliding pointer valuespull/6/head
parent
771c538932
commit
a636e44e3d
|
@ -17,8 +17,11 @@ limitations under the License.
|
||||||
package util
|
package util
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
"text/tabwriter"
|
||||||
|
|
||||||
"github.com/davecgh/go-spew/spew"
|
"github.com/davecgh/go-spew/spew"
|
||||||
)
|
)
|
||||||
|
@ -64,13 +67,54 @@ func ObjectDiff(a, b interface{}) string {
|
||||||
// can't figure out why reflect.DeepEqual is returning false and nothing is
|
// can't figure out why reflect.DeepEqual is returning false and nothing is
|
||||||
// showing you differences. This will.
|
// showing you differences. This will.
|
||||||
func ObjectGoPrintDiff(a, b interface{}) string {
|
func ObjectGoPrintDiff(a, b interface{}) string {
|
||||||
|
return StringDiff(
|
||||||
|
spew.Sprintf("%#v", a),
|
||||||
|
spew.Sprintf("%#v", b),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ObjectGoPrintSideBySide prints a and b as textual dumps side by side,
|
||||||
|
// enabling easy visual scanning for mismatches.
|
||||||
|
func ObjectGoPrintSideBySide(a, b interface{}) string {
|
||||||
s := spew.ConfigState{
|
s := spew.ConfigState{
|
||||||
Indent: " ",
|
Indent: " ",
|
||||||
// Extra deep spew.
|
// Extra deep spew.
|
||||||
DisableMethods: true,
|
DisableMethods: true,
|
||||||
}
|
}
|
||||||
return StringDiff(
|
sA := s.Sdump(a)
|
||||||
s.Sdump(a),
|
sB := s.Sdump(b)
|
||||||
s.Sdump(b),
|
|
||||||
)
|
linesA := strings.Split(sA, "\n")
|
||||||
|
linesB := strings.Split(sB, "\n")
|
||||||
|
width := 0
|
||||||
|
for _, s := range linesA {
|
||||||
|
l := len(s)
|
||||||
|
if l > width {
|
||||||
|
width = l
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for _, s := range linesB {
|
||||||
|
l := len(s)
|
||||||
|
if l > width {
|
||||||
|
width = l
|
||||||
|
}
|
||||||
|
}
|
||||||
|
buf := &bytes.Buffer{}
|
||||||
|
w := tabwriter.NewWriter(buf, width, 0, 1, ' ', 0)
|
||||||
|
max := len(linesA)
|
||||||
|
if len(linesB) > max {
|
||||||
|
max = len(linesB)
|
||||||
|
}
|
||||||
|
for i := 0; i < max; i++ {
|
||||||
|
var a, b string
|
||||||
|
if i < len(linesA) {
|
||||||
|
a = linesA[i]
|
||||||
|
}
|
||||||
|
if i < len(linesB) {
|
||||||
|
b = linesB[i]
|
||||||
|
}
|
||||||
|
fmt.Fprintf(w, "%s\t%s\n", a, b)
|
||||||
|
}
|
||||||
|
w.Flush()
|
||||||
|
return buf.String()
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue