xref: /rk3399_rockchip-uboot/tools/patman/commit.py (revision 05d134b084590684bcf4d832c0035952727b7cd9)
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
245c8fdd91SAlbert 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*102061bdSSimon Glass        self.signoff_set = set()
335c8fdd91SAlbert ARIBAUD        self.notes = []
340d24de9dSSimon Glass
350d24de9dSSimon Glass    def AddChange(self, version, info):
360d24de9dSSimon Glass        """Add a new change line to the change list for a version.
370d24de9dSSimon Glass
380d24de9dSSimon Glass        Args:
390d24de9dSSimon Glass            version: Patch set version (integer: 1, 2, 3)
400d24de9dSSimon Glass            info: Description of change in this version
410d24de9dSSimon Glass        """
420d24de9dSSimon Glass        if not self.changes.get(version):
430d24de9dSSimon Glass            self.changes[version] = []
440d24de9dSSimon Glass        self.changes[version].append(info)
450d24de9dSSimon Glass
460d24de9dSSimon Glass    def CheckTags(self):
470d24de9dSSimon Glass        """Create a list of subject tags in the commit
480d24de9dSSimon Glass
490d24de9dSSimon Glass        Subject tags look like this:
500d24de9dSSimon Glass
510d99fe0fSSimon Glass            propounder: fort: Change the widget to propound correctly
520d24de9dSSimon Glass
530d99fe0fSSimon Glass        Here the tags are propounder and fort. Multiple tags are supported.
540d99fe0fSSimon Glass        The list is updated in self.tag.
550d24de9dSSimon Glass
560d24de9dSSimon Glass        Returns:
570d24de9dSSimon Glass            None if ok, else the name of a tag with no email alias
580d24de9dSSimon Glass        """
590d24de9dSSimon Glass        str = self.subject
600d24de9dSSimon Glass        m = True
610d24de9dSSimon Glass        while m:
620d24de9dSSimon Glass            m = re_subject_tag.match(str)
630d24de9dSSimon Glass            if m:
640d24de9dSSimon Glass                tag = m.group(1)
650d24de9dSSimon Glass                self.tags.append(tag)
660d24de9dSSimon Glass                str = m.group(2)
670d24de9dSSimon Glass        return None
680d24de9dSSimon Glass
690d24de9dSSimon Glass    def AddCc(self, cc_list):
700d24de9dSSimon Glass        """Add a list of people to Cc when we send this patch.
710d24de9dSSimon Glass
720d24de9dSSimon Glass        Args:
730d24de9dSSimon Glass            cc_list:    List of aliases or email addresses
740d24de9dSSimon Glass        """
750d24de9dSSimon Glass        self.cc_list += cc_list
76*102061bdSSimon Glass
77*102061bdSSimon Glass    def CheckDuplicateSignoff(self, signoff):
78*102061bdSSimon Glass        """Check a list of signoffs we have send for this patch
79*102061bdSSimon Glass
80*102061bdSSimon Glass        Args:
81*102061bdSSimon Glass            signoff:    Signoff line
82*102061bdSSimon Glass        Returns:
83*102061bdSSimon Glass            True if this signoff is new, False if we have already seen it.
84*102061bdSSimon Glass        """
85*102061bdSSimon Glass        if signoff in self.signoff_set:
86*102061bdSSimon Glass          return False
87*102061bdSSimon Glass        self.signoff_set.add(signoff)
88*102061bdSSimon Glass        return True
89