You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
1.9 KiB
50 lines
1.9 KiB
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.
|
|
|