10d24de9dSSimon Glass# Copyright (c) 2011 The Chromium OS Authors. 20d24de9dSSimon Glass# 3*1a459660SWolfgang Denk# SPDX-License-Identifier: GPL-2.0+ 40d24de9dSSimon Glass# 50d24de9dSSimon Glass 60d24de9dSSimon Glassimport re 70d24de9dSSimon Glass 80d24de9dSSimon Glass# Separates a tag: at the beginning of the subject from the rest of it 9ed922275SSimon Glassre_subject_tag = re.compile('([^:\s]*):\s*(.*)') 100d24de9dSSimon Glass 110d24de9dSSimon Glassclass Commit: 120d24de9dSSimon Glass """Holds information about a single commit/patch in the series. 130d24de9dSSimon Glass 140d24de9dSSimon Glass Args: 150d24de9dSSimon Glass hash: Commit hash (as a string) 160d24de9dSSimon Glass 170d24de9dSSimon Glass Variables: 180d24de9dSSimon Glass hash: Commit hash 190d24de9dSSimon Glass subject: Subject line 200d24de9dSSimon Glass tags: List of maintainer tag strings 210d24de9dSSimon Glass changes: Dict containing a list of changes (single line strings). 220d24de9dSSimon Glass The dict is indexed by change version (an integer) 230d24de9dSSimon Glass cc_list: List of people to aliases/emails to cc on this commit 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 = [] 310d24de9dSSimon Glass 320d24de9dSSimon Glass def AddChange(self, version, info): 330d24de9dSSimon Glass """Add a new change line to the change list for a version. 340d24de9dSSimon Glass 350d24de9dSSimon Glass Args: 360d24de9dSSimon Glass version: Patch set version (integer: 1, 2, 3) 370d24de9dSSimon Glass info: Description of change in this version 380d24de9dSSimon Glass """ 390d24de9dSSimon Glass if not self.changes.get(version): 400d24de9dSSimon Glass self.changes[version] = [] 410d24de9dSSimon Glass self.changes[version].append(info) 420d24de9dSSimon Glass 430d24de9dSSimon Glass def CheckTags(self): 440d24de9dSSimon Glass """Create a list of subject tags in the commit 450d24de9dSSimon Glass 460d24de9dSSimon Glass Subject tags look like this: 470d24de9dSSimon Glass 480d99fe0fSSimon Glass propounder: fort: Change the widget to propound correctly 490d24de9dSSimon Glass 500d99fe0fSSimon Glass Here the tags are propounder and fort. Multiple tags are supported. 510d99fe0fSSimon Glass The list is updated in self.tag. 520d24de9dSSimon Glass 530d24de9dSSimon Glass Returns: 540d24de9dSSimon Glass None if ok, else the name of a tag with no email alias 550d24de9dSSimon Glass """ 560d24de9dSSimon Glass str = self.subject 570d24de9dSSimon Glass m = True 580d24de9dSSimon Glass while m: 590d24de9dSSimon Glass m = re_subject_tag.match(str) 600d24de9dSSimon Glass if m: 610d24de9dSSimon Glass tag = m.group(1) 620d24de9dSSimon Glass self.tags.append(tag) 630d24de9dSSimon Glass str = m.group(2) 640d24de9dSSimon Glass return None 650d24de9dSSimon Glass 660d24de9dSSimon Glass def AddCc(self, cc_list): 670d24de9dSSimon Glass """Add a list of people to Cc when we send this patch. 680d24de9dSSimon Glass 690d24de9dSSimon Glass Args: 700d24de9dSSimon Glass cc_list: List of aliases or email addresses 710d24de9dSSimon Glass """ 720d24de9dSSimon Glass self.cc_list += cc_list 73