11a459660SWolfgang Denk# SPDX-License-Identifier: GPL-2.0+ 2*83d290c5STom Rini# Copyright (c) 2011 The Chromium OS Authors. 30d24de9dSSimon Glass# 40d24de9dSSimon Glass 50d24de9dSSimon Glassimport re 60d24de9dSSimon Glass 70d24de9dSSimon Glass# Separates a tag: at the beginning of the subject from the rest of it 8ed922275SSimon Glassre_subject_tag = re.compile('([^:\s]*):\s*(.*)') 90d24de9dSSimon Glass 100d24de9dSSimon Glassclass Commit: 110d24de9dSSimon Glass """Holds information about a single commit/patch in the series. 120d24de9dSSimon Glass 130d24de9dSSimon Glass Args: 140d24de9dSSimon Glass hash: Commit hash (as a string) 150d24de9dSSimon Glass 160d24de9dSSimon Glass Variables: 170d24de9dSSimon Glass hash: Commit hash 180d24de9dSSimon Glass subject: Subject line 190d24de9dSSimon Glass tags: List of maintainer tag strings 200d24de9dSSimon Glass changes: Dict containing a list of changes (single line strings). 210d24de9dSSimon Glass The dict is indexed by change version (an integer) 220d24de9dSSimon Glass cc_list: List of people to aliases/emails to cc on this commit 235c8fdd91SAlbert ARIBAUD notes: List of lines in the commit (not series) notes 240d24de9dSSimon Glass """ 250d24de9dSSimon Glass def __init__(self, hash): 260d24de9dSSimon Glass self.hash = hash 270d24de9dSSimon Glass self.subject = None 280d24de9dSSimon Glass self.tags = [] 290d24de9dSSimon Glass self.changes = {} 300d24de9dSSimon Glass self.cc_list = [] 31102061bdSSimon Glass self.signoff_set = set() 325c8fdd91SAlbert ARIBAUD self.notes = [] 330d24de9dSSimon Glass 340d24de9dSSimon Glass def AddChange(self, version, info): 350d24de9dSSimon Glass """Add a new change line to the change list for a version. 360d24de9dSSimon Glass 370d24de9dSSimon Glass Args: 380d24de9dSSimon Glass version: Patch set version (integer: 1, 2, 3) 390d24de9dSSimon Glass info: Description of change in this version 400d24de9dSSimon Glass """ 410d24de9dSSimon Glass if not self.changes.get(version): 420d24de9dSSimon Glass self.changes[version] = [] 430d24de9dSSimon Glass self.changes[version].append(info) 440d24de9dSSimon Glass 450d24de9dSSimon Glass def CheckTags(self): 460d24de9dSSimon Glass """Create a list of subject tags in the commit 470d24de9dSSimon Glass 480d24de9dSSimon Glass Subject tags look like this: 490d24de9dSSimon Glass 500d99fe0fSSimon Glass propounder: fort: Change the widget to propound correctly 510d24de9dSSimon Glass 520d99fe0fSSimon Glass Here the tags are propounder and fort. Multiple tags are supported. 530d99fe0fSSimon Glass The list is updated in self.tag. 540d24de9dSSimon Glass 550d24de9dSSimon Glass Returns: 560d24de9dSSimon Glass None if ok, else the name of a tag with no email alias 570d24de9dSSimon Glass """ 580d24de9dSSimon Glass str = self.subject 590d24de9dSSimon Glass m = True 600d24de9dSSimon Glass while m: 610d24de9dSSimon Glass m = re_subject_tag.match(str) 620d24de9dSSimon Glass if m: 630d24de9dSSimon Glass tag = m.group(1) 640d24de9dSSimon Glass self.tags.append(tag) 650d24de9dSSimon Glass str = m.group(2) 660d24de9dSSimon Glass return None 670d24de9dSSimon Glass 680d24de9dSSimon Glass def AddCc(self, cc_list): 690d24de9dSSimon Glass """Add a list of people to Cc when we send this patch. 700d24de9dSSimon Glass 710d24de9dSSimon Glass Args: 720d24de9dSSimon Glass cc_list: List of aliases or email addresses 730d24de9dSSimon Glass """ 740d24de9dSSimon Glass self.cc_list += cc_list 75102061bdSSimon Glass 76102061bdSSimon Glass def CheckDuplicateSignoff(self, signoff): 77102061bdSSimon Glass """Check a list of signoffs we have send for this patch 78102061bdSSimon Glass 79102061bdSSimon Glass Args: 80102061bdSSimon Glass signoff: Signoff line 81102061bdSSimon Glass Returns: 82102061bdSSimon Glass True if this signoff is new, False if we have already seen it. 83102061bdSSimon Glass """ 84102061bdSSimon Glass if signoff in self.signoff_set: 85102061bdSSimon Glass return False 86102061bdSSimon Glass self.signoff_set.add(signoff) 87102061bdSSimon Glass return True 88