class _ProtocolGraphWalker:
Constructor: _ProtocolGraphWalker(handler, object_store, get_peeled, get_symrefs)
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__ |
Initialize a ProtocolGraphWalker. |
| Method | ack |
Acknowledge a have reference. |
| Method | all |
Check whether all the current wants are satisfied by a set of haves. |
| Method | determine |
Determine the wants for a set of heads. |
| Method | handle |
Handle the 'done' command. |
| Method | nak |
Send a NAK response. |
| Method | next |
Get the next SHA from the graph walker. |
| Method | notify |
Notify that the client sent 'done'. |
| Method | read |
Read a line from the wire. |
| Method | reset |
Reset the graph walker cache. |
| Method | send |
Send an ACK to the client. |
| Method | send |
Send a NAK to the client. |
| Method | set |
Set the acknowledgment type for the graph walker. |
| Method | set |
Set the list of wanted objects. |
| Method | unread |
Push a command back to be read again. |
| Method | update |
Update shallow/unshallow information to the client. |
| Instance Variable | advertise |
Undocumented |
| Instance Variable | client |
Undocumented |
| Instance Variable | get |
Undocumented |
| Instance Variable | get |
Undocumented |
| Instance Variable | handler |
Undocumented |
| Instance Variable | proto |
Undocumented |
| Instance Variable | shallow |
Undocumented |
| Instance Variable | stateless |
Undocumented |
| Instance Variable | store |
Undocumented |
| Instance Variable | unshallow |
Undocumented |
| Method | _handle |
Handle shallow clone requests from the client. |
| Instance Variable | _cache |
Undocumented |
| Instance Variable | _cache |
Undocumented |
| Instance Variable | _cached |
Undocumented |
| Instance Variable | _impl |
Undocumented |
| Instance Variable | _wants |
Undocumented |
UploadPackHandler, object_store: ObjectContainer, get_peeled: Callable[ [ bytes], ObjectID | None], get_symrefs: Callable[ [], dict[ Ref, Ref]]):
¶
Initialize a ProtocolGraphWalker.
| Parameters | |
handler:UploadPackHandler | Protocol handler instance |
objectObjectContainer | Object store for retrieving objects |
getCallable[ | Function to get peeled refs |
getCallable[ | Function to get symbolic refs |
Acknowledge a have reference.
| Parameters | |
haveObjectID | SHA to acknowledge (40 bytes hex for SHA-1, 64 bytes for SHA-256) |
| Raises | |
ValueError | If have_ref is not a valid length |
Check whether all the current wants are satisfied by a set of haves.
- Note: Wants are specified with set_wants rather than passed in since
- in the current interface they are determined outside this class.
| Parameters | |
haves:AbstractSet[ | A set of commits we know the client has. |
| Returns | |
bool | Undocumented |
Mapping[ Ref, ObjectID], depth: int | None = None) -> list[ ObjectID]:
¶
Determine the wants for a set of heads.
The given heads are advertised to the client, who then specifies which refs they want 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.
Returns: a list of SHA1s requested by the client
| Parameters | |
heads:Mapping[ | a dict of refname->SHA1 to advertise |
depth:int | None | Maximum depth for shallow clones |
| Returns | |
list[ | Undocumented |
Iterable[ bytes | None] | None) -> tuple[ bytes | None, bytes | int | None]:
¶
Read a line from the wire.
Returns: A tuple of (command, value); see _split_proto_line.
| Parameters | |
allowed:Iterable[ | An iterable of command names that should be allowed. |
| Returns | |
tuple[ | Undocumented |
| Raises | |
UnexpectedCommandError | If an error occurred reading the line. |
Set the acknowledgment type for the graph walker.
| Parameters | |
ackint | One of SINGLE_ACK, MULTI_ACK, or MULTI_ACK_DETAILED |
Update shallow/unshallow information to the client.
| Parameters | |
newAbstractSet[ | Set of newly shallow commits |
unshallow:AbstractSet[ | Set of commits to unshallow |