From e17405d7544d35cf87694f2abff36a2a906bd9d1 Mon Sep 17 00:00:00 2001 From: Joe Tsai Date: Fri, 18 Sep 2015 14:30:15 -0700 Subject: [PATCH] archive/tar: simplify bytediff logic The encoding/hex package provides a nice Dump formatter that prints both hex and ASCII. Use that instead for better visual debugging of binary diffs. Change-Id: Iad1084e8e52d7d523595e97ae20912657cea2ab5 Reviewed-on: https://go-review.googlesource.com/14729 Run-TryBot: Joe Tsai Reviewed-by: Ian Lance Taylor --- src/archive/tar/writer_test.go | 46 ++++++++++++---------------------- 1 file changed, 16 insertions(+), 30 deletions(-) diff --git a/src/archive/tar/writer_test.go b/src/archive/tar/writer_test.go index d88b8f41ca..7712217cd8 100644 --- a/src/archive/tar/writer_test.go +++ b/src/archive/tar/writer_test.go @@ -6,7 +6,7 @@ package tar import ( "bytes" - "fmt" + "encoding/hex" "io" "io/ioutil" "os" @@ -18,40 +18,26 @@ import ( "time" ) -// Render byte array in a two-character hexadecimal string, spaced for easy visual inspection. -func bytestr(offset int, b []byte) string { - const rowLen = 32 - s := fmt.Sprintf("%04x ", offset) - for _, ch := range b { - switch { - case '0' <= ch && ch <= '9', 'A' <= ch && ch <= 'Z', 'a' <= ch && ch <= 'z': - s += fmt.Sprintf(" %c", ch) - default: - s += fmt.Sprintf(" %02x", ch) - } - } - return s -} - // Render a pseudo-diff between two blocks of bytes. -func bytediff(a []byte, b []byte) string { - const rowLen = 32 - s := fmt.Sprintf("(%d bytes vs. %d bytes)\n", len(a), len(b)) - for offset := 0; len(a)+len(b) > 0; offset += rowLen { - na, nb := rowLen, rowLen - if na > len(a) { - na = len(a) +func bytediff(a []byte, b []byte) (s string) { + var ax = strings.Split(hex.Dump(a), "\n") + var bx = strings.Split(hex.Dump(b), "\n") + for i := 0; i < len(ax) || i < len(bx); i++ { + var sa, sb = "", "" + if i < len(ax) { + sa = ax[i] } - if nb > len(b) { - nb = len(b) + if i < len(bx) { + sb = bx[i] } - sa := bytestr(offset, a[0:na]) - sb := bytestr(offset, b[0:nb]) if sa != sb { - s += fmt.Sprintf("-%v\n+%v\n", sa, sb) + if len(sa) > 0 { + s += "+" + sa + "\n" + } + if len(sb) > 0 { + s += "-" + sb + "\n" + } } - a = a[na:] - b = b[nb:] } return s } -- 2.48.1