From: William Chargin Date: Sun, 23 Dec 2018 22:41:20 GMT Subject: Parsing trailers Message-ID: I'm interested in parsing the output of `git-interpret-trailers` in a script. I had hoped that the `--parse` option would make this easy, but it seems that the `trailer.separators` configuration option is used to specify both the input format (which separators may indicate a trailer) and the output format of `git interpret-trailers --parse`. Given that `trailer.separators` may contain any (non-NUL) characters, including whitespace, parsing the output is not straightforward. Here's what I've come up with. The output format is " ", where "" and "" have been trimmed and so have no leading or trailing whitespace, but "" may have internal whitespace while "" may not. Thus, the first space character in the output may correspond to either "" or the fixed space, but we should be able to determine which is the case: the first space is immediately followed by a second space if and only if the first space corresponds to "". Assuming that the above analysis is correct, the following procedure should suffice to safely parse the output: - Let `i` be the index of the first space in `s`. - If `s[i+1]` is a space, let `sep_pos` be `i`. Otherwise, let `sep_pos` be `i - 1`. - The substring `s[:sep_pos]` is the token. - The character at index `sep_pos` is the separator. - The character at index `sep_pos + 1` is the fixed space. - The substring `s[sep_pos+2:nl]` is the value, where `nl` is the index of the first newline in `s` after `sep_pos`. (It seems unfortunately complicated when all we want to do is parse the output of `--parse`, but I don't see a better approach!) My questions: - Is this accurate? - Is this algorithm guaranteed to remain correct in future versions of Git? - Is there a simpler way to extract the token-value pairs from a commit message string? Would appreciate any advice. Thanks! WC