A graph walker that knows the git protocol.

As a graph walker, this class implements ack(), next(), and reset(). It also contains some base methods for interacting with the wire and walking the commit tree.

The work of determining which acks to send is passed on to the implementation instance stored in _impl. The reason for this is that we do not know at object creation time what ack level the protocol requires. A call to set_ack_type() is required to set up the implementation, before any calls to next() or ack() are made.

Method __init__ Undocumented
Method determine_wants Determine the wants for a set of heads.
Method unread_proto_line Undocumented
Method ack Undocumented
Method reset Undocumented
Method next Undocumented
Method read_proto_line Read a line from the wire.
Method notify_done Undocumented
Method send_ack Undocumented
Method send_nak Undocumented
Method handle_done Undocumented
Method set_wants Undocumented
Method all_wants_satisfied Check whether all the current wants are satisfied by a set of haves.
Method set_ack_type Undocumented
Method _handle_shallow_request Undocumented
def __init__(self, handler, object_store, get_peeled, get_symrefs):
def determine_wants(self, heads):

Determine the wants for a set of heads.

The given heads are advertised to the client, who then specifies which refs he wants using 'want' lines. This portion of the protocol is the same regardless of ack type, and in fact is used to set the ack type of the ProtocolGraphWalker.

If the client has the 'shallow' capability, this method also reads and responds to the 'shallow' and 'deepen' lines from the client. These are not part of the wants per se, but they set up necessary state for walking the graph. Additionally, later code depends on this method consuming everything up to the first 'have' line.

Parametersheadsa dict of refname->SHA1 to advertise
Returnsa list of SHA1s requested by the client
def unread_proto_line(self, command, value):
def ack(self, have_ref):
def reset(self):
def next(self):
def read_proto_line(self, allowed):
Read a line from the wire.
ParametersallowedAn iterable of command names that should be allowed.
ReturnsA tuple of (command, value); see _split_proto_line.
RaisesUnexpectedCommandErrorIf an error occurred reading the line.
def _handle_shallow_request(self, wants):
def notify_done(self):
def send_ack(self, sha, ack_type=''):
def send_nak(self):
def handle_done(self, done_required, done_received):
def set_wants(self, wants):
def all_wants_satisfied(self, haves):
Check whether all the current wants are satisfied by a set of haves.
ParametershavesA set of commits we know the client has.
NoteWants are specified with set_wants rather than passed in since in the current interface they are determined outside this class.
def set_ack_type(self, ack_type):
API Documentation for Dulwich, generated by pydoctor at 2018-11-17 19:05:54.