aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Sunshine <sunshine@sunshineco.com>2015-01-13 10:57:13 +0100
committerAlberto Bertogli <albertito@blitiri.com.ar>2015-01-13 20:51:44 +0100
commit09c2f33f5a1f7137d50b3638e1a3f937e0701a6e (patch)
tree37aa3b557931b053616dabe086cf7fe84647ba86
parent58037e57c591b1c55594a0adb637d1880bfacaee (diff)
downloadgit-arr-fork-09c2f33f5a1f7137d50b3638e1a3f937e0701a6e.zip
blob: render binary blob summary information rather than raw content
Binary blobs are currently rendered as raw data directly into the HTML output, looking much like "line noise". This is rarely, if ever, meaningful, and consumes considerable storage space since the entire raw blob content is embedded in the generated HTML file. Address this issue by instead emitting summary information about the blob, such as its classification ("binary") and its size. Other information can be added as needed. As in Git itself, a blob is considered binary if a NUL is present in the first ~8KB. Signed-off-by: Eric Sunshine <sunshine@sunshineco.com> Signed-off-by: Alberto Bertogli <albertito@blitiri.com.ar>
-rwxr-xr-xgit-arr1
-rw-r--r--utils.py3
-rw-r--r--views/blob.html8
3 files changed, 12 insertions, 0 deletions
diff --git a/git-arr b/git-arr
index f559af4..d3f1151 100755
--- a/git-arr
+++ b/git-arr
@@ -187,6 +187,7 @@ def with_utils(f):
'markdown_blob': utils.markdown_blob,
'can_embed_image': utils.can_embed_image,
'embed_image_blob': utils.embed_image_blob,
+ 'is_binary': utils.is_binary,
'abort': bottle.abort,
'smstr': git.smstr,
}
diff --git a/utils.py b/utils.py
index a68836f..5bea961 100644
--- a/utils.py
+++ b/utils.py
@@ -103,3 +103,6 @@ def embed_image_blob(fname, image_data):
return '<img style="max-width:100%;" src="data:{0};base64,{1}" />'.format( \
mimetype, base64.b64encode(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]
diff --git a/views/blob.html b/views/blob.html
index 1849260..4526c99 100644
--- a/views/blob.html
+++ b/views/blob.html
@@ -41,6 +41,14 @@
% if can_embed_image(repo, fname.unicode):
{{!embed_image_blob(fname.raw, blob.raw_content)}}
+% elif is_binary(blob.raw_content):
+<table class="nice">
+ <tr>
+ <td>
+ binary &mdash; {{'{:,}'.format(len(blob.raw_content))}} bytes
+ </td>
+ </tr>
+</table>
% elif can_markdown(repo, fname.unicode):
{{!markdown_blob(blob.utf8_content)}}
% elif can_colorize(blob.utf8_content):