diff --git a/patch-git.lua b/patch-git.lua index 38e0ee9..7354dcd 100644 --- a/patch-git.lua +++ b/patch-git.lua @@ -1207,9 +1207,22 @@ do assert(not b and err == 'Branch must be zstream') end + -- Parser for ignored tags. + local function parse_ignore(tag, s) + return true + end + -- These are the recognized trailer tags in Git commit messages. -- (Git calls them keys, see git-interpret-trailers(1).) local recognized_trailer_tags = { + ['Acked-By']={parse=parse_ignore, duplicates=true}, + ['Assisted-By']={parse=parse_ignore, duplicates=true}, + ['Co-Authored-By']={parse=parse_ignore, duplicates=true}, + ['Reviewed-By']={parse=parse_ignore, duplicates=true}, + ['Reported-By']={parse=parse_ignore, duplicates=true}, + ['Signed-Off-By']={parse=parse_ignore, duplicates=true}, + ['Suggested-By']={parse=parse_ignore, duplicates=true}, + ['Tested-By']={parse=parse_ignore, duplicates=true}, ['Resolves']={field='tickets', parse=parse_ticket_string, duplicates=true}, @@ -1234,6 +1247,20 @@ do end end + -- Automatically support lower-cased "-by" variants of dev-attribution tags. + do + local aliases = {} + for k, v in pairs(recognized_trailer_tags) do + if string.sub(k, -3) == '-By' then + aliases[string.sub(k, 1, 1) .. string.lower(string.sub(k, 2))] = v + end + end + -- Second loop to avoid structural mutation while iterating. + for k, v in pairs(aliases) do + recognized_trailer_tags[k] = v + end + end + function parse_trailer(message) -- This holds due to the format of the input file. assert(string.sub(message, #message) == '\n') @@ -1467,6 +1494,65 @@ RPM-Release: no ]]) assert(not t) assert(err == 'malformed line in Git trailer after Resolves tag') + + -- Ignored trailers. + t, err = parse_trailer([[Fix memory leak after fdopen seek failure + +- Backport: Remove memory leak in fdopen (bug 31840) + +Resolves: RHEL-108475 +Signed-Off-By: Signed Off +Acked-by: Acked By +Assisted-by: Assisted By +Co-authored-by: Co Authored +Reviewed-by: Reviewed By +Reviewed-By: Another Reviewed By +Reported-by: Reported By +Suggested-by: Suggested By +Tested-by: Tested By +Signed-off-by: Another Signed Off +]]) + assert(t, err) + assert(t.tickets) + assert(#t.tickets == 1) + assert(t.tickets[1] == 'RHEL-108475') + assert(t.signed_off_by == true) + assert(t.acked_by == true) + assert(t.assisted_by == true) + assert(t.co_authored_by == true) + assert(t.reviewed_by == true) + assert(t.reported_by == true) + assert(t.suggested_by == true) + assert(t.tested_by == true) + + -- Lowercase/incorrect casing for other tags is rejected. + t, err = parse_trailer([[Fix memory leak after fdopen seek failure + +resolves: RHEL-108475 +]]) + assert(not t) + assert(err == 'not a recognized Git trailer tag: resolves') + + t, err = parse_trailer([[Fix memory leak after fdopen seek failure + +acked-by: Acked By +]]) + assert(not t) + assert(err == 'not a recognized Git trailer tag: acked-by') + + t, err = parse_trailer([[Fix memory leak after fdopen seek failure + +parent: 1234567890abcdef1234567890abcdef12345678 +]]) + assert(not t) + assert(err == 'not a recognized Git trailer tag: parent') + + t, err = parse_trailer([[Fix memory leak after fdopen seek failure + +Signed-off-By: Signed Off +]]) + assert(not t) + assert(err == 'not a recognized Git trailer tag: Signed-off-By') end end