"""
raise NotImplementedError
- def fetch_objects(self, determine_wants, graph_waker, progress):
+ def fetch_objects(self, determine_wants, graph_walker, progress):
"""
Yield the objects required for a list of commits.
print "pack applied"
- def fetch_objects(self, determine_wants, graph_waker, progress):
- for sha in generate_pack_contents(determine_wants(self.get_refs()), have, self.repo.get_object):
+ def fetch_objects(self, determine_wants, graph_walker, progress):
+ shas = self.repo.find_missing_objects(determine_wants, graph_walker, progress)
+ for sha in shas:
yield self.repo.get_object(sha)
def determine_wants(heads):
keys = heads.keys()
if keys:
- self.proto.write_pkt_line("%s %s\x00%s\n" % (keys[0], heads[keys[0]], self.capabilities()))
+ self.proto.write_pkt_line("%s %s\x00%s\n" % ( heads[keys[0]], keys[0], self.capabilities()))
for k in keys[1:]:
- self.proto.write_pkt_line("%s %s\n" % (k, heads[k]))
+ self.proto.write_pkt_line("%s %s\n" % (heads[k], k))
# i'm done..
self.proto.write("0000")
want_revs = []
while want and want[:4] == 'want':
- want_rev = want[5:45]
- # FIXME: This check probably isnt needed?
- want_revs.append(want_rev)
+ want_revs.append(want[5:45])
want = self.proto.read_pkt_line()
return want_revs
progress = lambda x: self.proto.write_sideband(2, x)
+ write = lambda x: self.proto.write_sideband(1, x)
class ProtocolGraphWalker(object):
- def __init__(self):
+ def __init__(self, proto):
+ self.proto = proto
self._last_sha = None
def ack(self, have_ref):
if have[:4] == 'have':
return have[5:45]
- if have[:4] == 'done':
- return None
+ #if have[:4] == 'done':
+ # return None
if self._last_sha:
# Oddness: Git seems to resend the last ACK, without the "continue" statement
# The exchange finishes with a NAK
self.proto.write_pkt_line("NAK\n")
+ graph_walker = ProtocolGraphWalker(self.proto)
objects = list(self.backend.fetch_objects(determine_wants, graph_walker, progress))
progress("dul-daemon says what\n")
progress("counting objects: %d, done.\n" % len(objects))