diff --git a/git.py b/git.py index 78f5b1e..9f73fd1 100644 --- a/git.py +++ b/git.py @@ -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 diff --git a/utils.py b/utils.py index be6ab78..7223303 100644 --- a/utils.py +++ b/utils.py @@ -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 ''.format( \ mimetype, base64.b64encode(raw_blob.raw_content))