diff options
author | Eric Sunshine <sunshine@sunshineco.com> | 2015-01-13 10:57:14 +0100 |
---|---|---|
committer | Alberto Bertogli <albertito@blitiri.com.ar> | 2015-01-13 20:51:44 +0100 |
commit | 6f3942ce38d0417baf57188eebf9bc2075f2f59a (patch) | |
tree | 90293d87633bfa3f16ba972ffc1314370e833f6f /utils.py | |
parent | 09c2f33f5a1f7137d50b3638e1a3f937e0701a6e (diff) | |
download | git-arr-fork-6f3942ce38d0417baf57188eebf9bc2075f2f59a.zip |
blob: render hexdump(1)-style binary blob content
Raw binary blob content tends to look like "line noise" and is rarely,
if ever, meaningful. A hexdump(1)-style rendering (specifically,
"hexdump -C"), on the other hand, showing runs of hexadecimal byte
values along with an ASCII representation of those bytes can sometimes
reveal useful information about the data.
(A subsequent patch will add the ability to cap the amount of data
rendered in order to reduce storage space requirements.)
Signed-off-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Alberto Bertogli <albertito@blitiri.com.ar>
Diffstat (limited to 'utils.py')
-rw-r--r-- | utils.py | 12 |
1 files changed, 12 insertions, 0 deletions
@@ -19,6 +19,7 @@ except ImportError: import base64 import mimetypes +import string def shorten(s, width = 60): if len(s) < 60: @@ -106,3 +107,14 @@ def embed_image_blob(fname, image_data): def is_binary(s): # Git considers a blob binary if NUL in first ~8KB, so do the same. return '\0' in s[:8192] + +def hexdump(s): + graph = string.ascii_letters + string.digits + string.punctuation + ' ' + offset = 0 + while s: + t = s[:16] + hexvals = ['%.2x' % ord(c) for c in t] + text = ''.join(c if c in graph else '.' for c in t) + yield offset, ' '.join(hexvals[:8]), ' '.join(hexvals[8:]), text + offset += 16 + s = s[16:] |