diff options
Diffstat (limited to 'lib/git')
-rw-r--r-- | lib/git/cmd.py | 21 | ||||
-rw-r--r-- | lib/git/objects/fun.py | 3 | ||||
-rw-r--r-- | lib/git/repo.py | 1 |
3 files changed, 19 insertions, 6 deletions
diff --git a/lib/git/cmd.py b/lib/git/cmd.py index 5cae2998..1bdf38a8 100644 --- a/lib/git/cmd.py +++ b/lib/git/cmd.py @@ -109,6 +109,12 @@ class Git(object): self._size = size self._nbr = 0 # num bytes read + # special case: if the object is empty, has null bytes, get the + # final newline right away. + if size == 0: + stream.read(1) + # END handle empty streams + def read(self, size=-1): bytes_left = self._size - self._nbr if bytes_left == 0: @@ -127,7 +133,6 @@ class Git(object): if self._size - self._nbr == 0: self._stream.read(1) # final newline # END finish reading - return data def readline(self, size=-1): @@ -146,7 +151,6 @@ class Git(object): self._nbr += len(data) # handle final byte - # we inline everything, it must be fast ! if self._size - self._nbr == 0: self._stream.read(1) # END finish reading @@ -185,8 +189,9 @@ class Git(object): def __del__(self): bytes_left = self._size - self._nbr if bytes_left: - # seek and discard - self._stream.seek(bytes_left + 1, os.SEEK_CUR) # includes terminating newline + # read and discard - seeking is impossible within a stream + # includes terminating newline + self._stream.read(bytes_left + 1) # END handle incomplete read @@ -454,7 +459,13 @@ class Git(object): """ tokens = header_line.split() if len(tokens) != 3: - raise ValueError("SHA named %s could not be resolved, git returned: %r" % (tokens[0], header_line.strip()) ) + if not tokens: + raise ValueError("SHA could not be resolved, git returned: %r" % (header_line.strip())) + else: + raise ValueError("SHA %s could not be resolved, git returned: %r" % (tokens[0], header_line.strip())) + # END handle actual return value + # END error handling + if len(tokens[0]) != 40: raise ValueError("Failed to parse header: %r" % header_line) return (tokens[0], tokens[1], int(tokens[2])) diff --git a/lib/git/objects/fun.py b/lib/git/objects/fun.py index c2e7358f..5b39ab0c 100644 --- a/lib/git/objects/fun.py +++ b/lib/git/objects/fun.py @@ -1,6 +1,7 @@ """Module with functions which are supposed to be as fast as possible""" -__all__ = ('tree_to_stream', 'tree_entries_from_data') +__all__ = ('tree_to_stream', 'tree_entries_from_data', 'traverse_trees_recursive', + 'traverse_tree_recursive') from stat import S_ISDIR diff --git a/lib/git/repo.py b/lib/git/repo.py index 79275106..d665a40c 100644 --- a/lib/git/repo.py +++ b/lib/git/repo.py @@ -42,6 +42,7 @@ def is_git_dir(d): os.readlink(headref).startswith('refs')) return False + class Repo(object): """ Represents a git repository and allows you to query references, |