Browse Source
Doc updates. * jt/long-running-process-doc: Docs: split out long-running subprocess handshakemaint
Junio C Hamano
7 years ago
4 changed files with 61 additions and 48 deletions
@ -0,0 +1,50 @@
@@ -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. |
Loading…
Reference in new issue