summaryrefslogtreecommitdiff
path: root/git.py
diff options
context:
space:
mode:
authorEric Sunshine <sunshine@sunshineco.com>2015-01-13 10:57:09 +0100
committerAlberto Bertogli <albertito@blitiri.com.ar>2015-01-13 20:51:44 +0100
commit0ba89d75e6e26bf14f5b6cfb6526e601f7ad7e2d (patch)
tree2c4ec4fd595c0893f4e8d5742f08dee766d59ce3 /git.py
parent6b83e32bc1cc6adb831631e30de59b026971534a (diff)
downloadgit-arr-fork-0ba89d75e6e26bf14f5b6cfb6526e601f7ad7e2d.zip
git.py: introduce Blob abstraction
Some blob representations (such as embedded images) require raw blob content, however, the 'blob' view is unconditionally handed cooked (utf8-encoded) content, thus representations which need raw content are forced to reload the blob in raw form, which is ugly and expensive (due to shelling out to git-cat-file a second time). The ultimate goal is to eliminate the wasteful blob reloading when raw content is needed. As a first step, introduce a Blob abstraction to be returned by Repo.blob() rather than the cooked content. A subsequent change will flesh out Blob, allowing it to return raw or cooked content on demand without the client having to specify one or the other when invoking Repo.blob(). Signed-off-by: Eric Sunshine <sunshine@sunshineco.com> Signed-off-by: Alberto Bertogli <albertito@blitiri.com.ar>
Diffstat (limited to 'git.py')
-rw-r--r--git.py13
1 files changed, 11 insertions, 2 deletions
diff --git a/git.py b/git.py
index 58b0c4c..78f5b1e 100644
--- a/git.py
+++ b/git.py
@@ -340,7 +340,7 @@ class Repo:
return Tree(self, ref)
def blob(self, path, ref = None, raw = False):
- """Returns the contents of the given path."""
+ """Returns a Blob instance for the given path."""
if not ref:
ref = self.branch
cmd = self.cmd('cat-file')
@@ -356,7 +356,7 @@ class Repo:
if not head or head.strip().endswith('missing'):
return None
- return out.read()
+ return Blob(out.read(), raw)
def last_commit_timestamp(self):
"""Return the timestamp of the last commit."""
@@ -555,3 +555,12 @@ class Tree:
# manipulate otherwise.
yield otype, smstr(name), size
+
+class Blob:
+ """A git blob."""
+
+ def __init__(self, content, raw):
+ if raw:
+ self.raw_content = content
+ else:
+ self.utf8_content = content