Skip to content
Snippets Groups Projects
Commit 102061bd authored by Simon Glass's avatar Simon Glass
Browse files

patman: Avoid duplicate sign-offs


Keep track of all Signed-off-by tags in a commit and silently suppress any
duplicates.

Signed-off-by: default avatarSimon Glass <sjg@chromium.org>
parent 757f64a8
No related branches found
No related tags found
No related merge requests found
...@@ -192,6 +192,7 @@ END ...@@ -192,6 +192,7 @@ END
A sign-off is added automatically to your patches (this is A sign-off is added automatically to your patches (this is
probably a bug). If you put this tag in your patches, it will probably a bug). If you put this tag in your patches, it will
override the default signoff that patman automatically adds. override the default signoff that patman automatically adds.
Multiple duplicate signoffs will be removed.
Tested-by: Their Name <email> Tested-by: Their Name <email>
Reviewed-by: Their Name <email> Reviewed-by: Their Name <email>
......
...@@ -29,6 +29,7 @@ class Commit: ...@@ -29,6 +29,7 @@ class Commit:
self.tags = [] self.tags = []
self.changes = {} self.changes = {}
self.cc_list = [] self.cc_list = []
self.signoff_set = set()
self.notes = [] self.notes = []
def AddChange(self, version, info): def AddChange(self, version, info):
...@@ -72,3 +73,16 @@ class Commit: ...@@ -72,3 +73,16 @@ class Commit:
cc_list: List of aliases or email addresses cc_list: List of aliases or email addresses
""" """
self.cc_list += cc_list self.cc_list += cc_list
def CheckDuplicateSignoff(self, signoff):
"""Check a list of signoffs we have send for this patch
Args:
signoff: Signoff line
Returns:
True if this signoff is new, False if we have already seen it.
"""
if signoff in self.signoff_set:
return False
self.signoff_set.add(signoff)
return True
...@@ -21,7 +21,7 @@ re_remove = re.compile('^BUG=|^TEST=|^BRANCH=|^Change-Id:|^Review URL:' ...@@ -21,7 +21,7 @@ re_remove = re.compile('^BUG=|^TEST=|^BRANCH=|^Change-Id:|^Review URL:'
re_allowed_after_test = re.compile('^Signed-off-by:') re_allowed_after_test = re.compile('^Signed-off-by:')
# Signoffs # Signoffs
re_signoff = re.compile('^Signed-off-by:') re_signoff = re.compile('^Signed-off-by: *(.*)')
# The start of the cover letter # The start of the cover letter
re_cover = re.compile('^Cover-letter:') re_cover = re.compile('^Cover-letter:')
...@@ -159,6 +159,7 @@ class PatchStream: ...@@ -159,6 +159,7 @@ class PatchStream:
commit_tag_match = re_commit_tag.match(line) commit_tag_match = re_commit_tag.match(line)
commit_match = re_commit.match(line) if self.is_log else None commit_match = re_commit.match(line) if self.is_log else None
cover_cc_match = re_cover_cc.match(line) cover_cc_match = re_cover_cc.match(line)
signoff_match = re_signoff.match(line)
tag_match = None tag_match = None
if self.state == STATE_PATCH_HEADER: if self.state == STATE_PATCH_HEADER:
tag_match = re_tag.match(line) tag_match = re_tag.match(line)
...@@ -223,7 +224,7 @@ class PatchStream: ...@@ -223,7 +224,7 @@ class PatchStream:
if is_blank: if is_blank:
# Blank line ends this change list # Blank line ends this change list
self.in_change = 0 self.in_change = 0
elif line == '---' or re_signoff.match(line): elif line == '---':
self.in_change = 0 self.in_change = 0
out = self.ProcessLine(line) out = self.ProcessLine(line)
else: else:
...@@ -272,6 +273,11 @@ class PatchStream: ...@@ -272,6 +273,11 @@ class PatchStream:
else: else:
self.tags.append(line); self.tags.append(line);
# Suppress duplicate signoffs
elif signoff_match:
if self.commit.CheckDuplicateSignoff(signoff_match.group(1)):
out = [line]
# Well that means this is an ordinary line # Well that means this is an ordinary line
else: else:
pos = 1 pos = 1
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment