diff --git a/dulwich/objects.py b/dulwich/objects.py index 47fdc67..02d8d4b 100644 --- a/dulwich/objects.py +++ b/dulwich/objects.py @@ -430,6 +430,7 @@ def __delitem__(self, name): self._needs_serialization = True def __len__(self): + self._ensure_parsed() return len(self._entries) def add(self, mode, name, hexsha): diff --git a/dulwich/pack.py b/dulwich/pack.py index 21db78c..f56b43b 100644 --- a/dulwich/pack.py +++ b/dulwich/pack.py @@ -774,9 +774,9 @@ def write_pack_object(f, type, object): """ offset = f.tell() packed_data_hdr = "" - if type == 6: # ref delta + if type == 6: # offset delta (delta_base_offset, object) = object - elif type == 7: # offset delta + elif type == 7: # ref delta (basename, object) = object size = len(object) c = (type << 4) | (size & 15) @@ -891,7 +891,7 @@ def write_pack_index_v1(filename, entries, pack_checksum): def create_delta(base_buf, target_buf): """Use python difflib to work out how to transform base_buf to target_buf. - + :param base_buf: Base buffer :param target_buf: Target buffer """ @@ -925,12 +925,12 @@ def encode_size(size): o = i1 for i in range(4): if o & 0xff << i*8: - scratch += chr(o >> i) + scratch += chr((o >> i*8) & 0xff) op |= 1 << i s = i2 - i1 for i in range(2): if s & 0xff << i*8: - scratch += chr(s >> i) + scratch += chr((s >> i*8) & 0xff) op |= 1 << (4+i) out_buf += chr(op) out_buf += scratch