Reposerve protocol v1 ===================== Commands are variable-length strings ending with a newline character (10), with a maximum length of 256 characters, including the newline. Responses always start with a result line with either "OK", followed by a byte count of response data to follow, or an "ERR" followed by silence. All binary values in response data are in little-endian byte order (LSB-first). On connection establishment, the server sends a string of the form: - protocol: DOS filename mode ----------------- Request: "dos" Description: When the client sends a dos request, the server enables DOS filename translation. Filename path components are automatically converted to DOS 8.3 form when transmitted to the client. File lists transmitted by the client are translated back to the original names, capital letters for new untracked files are converted to lowercase, except for specific files such as "Makefile*", "GNUmakefile", "README*", and "COPYING*", otherwise for tracked files, the existing capitalization is maintained. File list --------- Request: "flist" Response data: offset | size | description 0 | 4 | number of file entries (N) 4 | 32 | file entry 0 4+32 | 32 | file entry 1 ... 4+i*32 | 32 | file entry i ... 4+N*32 | ?? | file name table File entry (32 bytes): offset | size | description 0 | 16 | md5 checksum 16 | 4 | last modification timestamp 20 | 4 | file size 24 | 4 | name string offset (from the start of the name table) 28 | 4 | name string length Description: Provides a list of files managed by the repo server, with all the relevant metadata about each file. Push files ---------- Request: "push" Request data: Exactly the same as the "flist" response data, except that after each file name in the name table, the contents of the corresponding file are transmitted. Description: Although potentially every file can be sent using this request, the intent is to only push modified files according to either the modification timestamp or the checksum provided in the file list. Pull files ---------- Request: "pull" Request data: Exactly the same as the "flist" response data. Response data: Exactly the same as the "flist" response data, except that after the file name in the name table, the contents of the corresponding file are transmitted. Description: The server compares file checksums or modification timestamps in the request file list, and sends back only those files which are modified.