xref: /rk3399_rockchip-uboot/tools/patman/commit.py (revision 1a4596601fd395f3afb8f82f3f840c5e00bdd57a)
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