xref: /openbmc/u-boot/tools/patman/commit.py (revision 5c8fdd91)
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