diff options
-rw-r--r-- | git.py | 20 | ||||
-rw-r--r-- | utils.py | 4 |
2 files changed, 14 insertions, 10 deletions
@@ -339,12 +339,12 @@ class Repo: ref = self.branch return Tree(self, ref) - def blob(self, path, ref = None, raw = False): + def blob(self, path, ref = None): """Returns a Blob instance for the given path.""" if not ref: ref = self.branch cmd = self.cmd('cat-file') - cmd.raw(raw) + cmd.raw(True) cmd.batch = None if isinstance(ref, unicode): @@ -356,7 +356,7 @@ class Repo: if not head or head.strip().endswith('missing'): return None - return Blob(out.read(), raw) + return Blob(out.read()) def last_commit_timestamp(self): """Return the timestamp of the last commit.""" @@ -559,8 +559,12 @@ class Tree: class Blob: """A git blob.""" - def __init__(self, content, raw): - if raw: - self.raw_content = content - else: - self.utf8_content = content + def __init__(self, raw_content): + self.raw_content = raw_content + self._utf8_content = None + + @property + def utf8_content(self): + if not self._utf8_content: + self._utf8_content = self.raw_content.decode('utf8', 'replace') + return self._utf8_content @@ -102,9 +102,9 @@ def embed_image_blob(repo, dirname, fname): mimetype = mimetypes.guess_type(fname)[0] # Unfortunately, bottle seems to require utf-8 encoded data. - # We have to refetch the blob with raw=True, because the utf-8 encoded + # We have to refetch the blob as raw data, because the utf-8 encoded # version of the blob available in the bottle template discards binary data. - raw_blob = repo.blob(dirname + fname, raw = True) + raw_blob = repo.blob(dirname + fname) return '<img style="max-width:100%;" src="data:{0};base64,{1}" />'.format( \ mimetype, base64.b64encode(raw_blob.raw_content)) |