Merge branch 'jt/long-running-process-doc'
Doc updates. * jt/long-running-process-doc: Docs: split out long-running subprocess handshake
This commit is contained in:
50
Documentation/technical/long-running-process-protocol.txt
Normal file
50
Documentation/technical/long-running-process-protocol.txt
Normal file
@ -0,0 +1,50 @@
|
||||
Long-running process protocol
|
||||
=============================
|
||||
|
||||
This protocol is used when Git needs to communicate with an external
|
||||
process throughout the entire life of a single Git command. All
|
||||
communication is in pkt-line format (see technical/protocol-common.txt)
|
||||
over standard input and standard output.
|
||||
|
||||
Handshake
|
||||
---------
|
||||
|
||||
Git starts by sending a welcome message (for example,
|
||||
"git-filter-client"), a list of supported protocol version numbers, and
|
||||
a flush packet. Git expects to read the welcome message with "server"
|
||||
instead of "client" (for example, "git-filter-server"), exactly one
|
||||
protocol version number from the previously sent list, and a flush
|
||||
packet. All further communication will be based on the selected version.
|
||||
The remaining protocol description below documents "version=2". Please
|
||||
note that "version=42" in the example below does not exist and is only
|
||||
there to illustrate how the protocol would look like with more than one
|
||||
version.
|
||||
|
||||
After the version negotiation Git sends a list of all capabilities that
|
||||
it supports and a flush packet. Git expects to read a list of desired
|
||||
capabilities, which must be a subset of the supported capabilities list,
|
||||
and a flush packet as response:
|
||||
------------------------
|
||||
packet: git> git-filter-client
|
||||
packet: git> version=2
|
||||
packet: git> version=42
|
||||
packet: git> 0000
|
||||
packet: git< git-filter-server
|
||||
packet: git< version=2
|
||||
packet: git< 0000
|
||||
packet: git> capability=clean
|
||||
packet: git> capability=smudge
|
||||
packet: git> capability=not-yet-invented
|
||||
packet: git> 0000
|
||||
packet: git< capability=clean
|
||||
packet: git< capability=smudge
|
||||
packet: git< 0000
|
||||
------------------------
|
||||
|
||||
Shutdown
|
||||
--------
|
||||
|
||||
Git will close
|
||||
the command pipe on exit. The filter is expected to detect EOF
|
||||
and exit gracefully on its own. Git will wait until the filter
|
||||
process has stopped.
|
Reference in New Issue
Block a user