10d24de9dSSimon Glass# Copyright (c) 2011 The Chromium OS Authors. 20d24de9dSSimon Glass# 31a459660SWolfgang 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 24*5c8fdd91SAlbert ARIBAUD notes: List of lines in the commit (not series) notes 250d24de9dSSimon Glass """ 260d24de9dSSimon Glass def __init__(self, hash): 270d24de9dSSimon Glass self.hash = hash 280d24de9dSSimon Glass self.subject = None 290d24de9dSSimon Glass self.tags = [] 300d24de9dSSimon Glass self.changes = {} 310d24de9dSSimon Glass self.cc_list = [] 32*5c8fdd91SAlbert 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 75