On Tue, Nov 06, 2018 at 05:11:18PM -0500, Jeff King wrote: > On Tue, Nov 06, 2018 at 06:48:22PM +0100, Ævar Arnfjörð Bjarmason wrote: > > > The implementation looks fine to me, but as noted in > > https://public-inbox.org/git/8736se6qyc.fsf@xxxxxxxxxxxxxxxxxxx/ I > > wonder what the plausible end-game is. That we'll turn this on by > > default in a few years, and then you can only worry about > > git-interpret-trailers for repos created as of 2020 or something? > > > > Otherwise it seems we'll need to *also* parse out the existing messages > > we've added. > > Could we help the reading scripts by normalizing old and new output via > interpret-trailers, %(trailers), etc? > > I think "(cherry picked from ...)" is already considered a trailer by > the trailer code. If the caller instructs us to, we could probably > rewrite it to: > > Cherry-picked-from: ... > > in the output. Then the end-game is that scripts should just use > interpret-trailers, etc, and old and new commits will Just Work. I.e., something like this: diff --git a/trailer.c b/trailer.c index 0796f326b3..491c7c240e 100644 --- a/trailer.c +++ b/trailer.c @@ -46,9 +46,11 @@ static int configured; #define TRAILER_ARG_STRING "$ARG" +#define CHERRY_PICK_PREFIX "(cherry picked from commit " + static const char *git_generated_prefixes[] = { "Signed-off-by: ", - "(cherry picked from commit ", + CHERRY_PICK_PREFIX, NULL }; @@ -1141,6 +1143,8 @@ static void format_trailer_info(struct strbuf *out, for (i = 0; i < info->trailer_nr; i++) { char *trailer = info->trailers[i]; ssize_t separator_pos = find_separator(trailer, separators); + const char *hex; + struct object_id oid; if (separator_pos >= 1) { struct strbuf tok = STRBUF_INIT; @@ -1154,6 +1158,12 @@ static void format_trailer_info(struct strbuf *out, strbuf_release(&tok); strbuf_release(&val); + } else if (/* should check opts->normalize_cherry_pick */1 && + skip_prefix(trailer, CHERRY_PICK_PREFIX, &hex) && + !get_oid_hex(hex, &oid)) { + strbuf_addf(out, "Cherry-picked-from: %s\n", + oid_to_hex(&oid)); + } else if (!opts->only_trailers) { strbuf_addstr(out, trailer); } That would need to add the normalize_cherry_pick flag to the options struct, and then plumb it through. But it's enough to play around with, and: git log --format='%h%n%(trailers:only)' works. -Peff