Re: [PATCH/RFC] Support --append-trailer in cherry-pick and revert
From: Jeff King <hidden>
Date: 2018-11-06 22:29:16
Subsystem:
the rest · Maintainer:
Linus Torvalds
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:quoted
The implementation looks fine to me, but as noted in https://public-inbox.org/git/8736se6qyc.fsf@evledraar.gmail.com/ 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