xref: /rk3399_rockchip-uboot/tools/patman/commit.py (revision 0d24de9d558209fa525f350d1320c343f241c3f5)
1*0d24de9dSSimon Glass# Copyright (c) 2011 The Chromium OS Authors.
2*0d24de9dSSimon Glass#
3*0d24de9dSSimon Glass# See file CREDITS for list of people who contributed to this
4*0d24de9dSSimon Glass# project.
5*0d24de9dSSimon Glass#
6*0d24de9dSSimon Glass# This program is free software; you can redistribute it and/or
7*0d24de9dSSimon Glass# modify it under the terms of the GNU General Public License as
8*0d24de9dSSimon Glass# published by the Free Software Foundation; either version 2 of
9*0d24de9dSSimon Glass# the License, or (at your option) any later version.
10*0d24de9dSSimon Glass#
11*0d24de9dSSimon Glass# This program is distributed in the hope that it will be useful,
12*0d24de9dSSimon Glass# but WITHOUT ANY WARRANTY; without even the implied warranty of
13*0d24de9dSSimon Glass# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14*0d24de9dSSimon Glass# GNU General Public License for more details.
15*0d24de9dSSimon Glass#
16*0d24de9dSSimon Glass# You should have received a copy of the GNU General Public License
17*0d24de9dSSimon Glass# along with this program; if not, write to the Free Software
18*0d24de9dSSimon Glass# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
19*0d24de9dSSimon Glass# MA 02111-1307 USA
20*0d24de9dSSimon Glass#
21*0d24de9dSSimon Glass
22*0d24de9dSSimon Glassimport re
23*0d24de9dSSimon Glass
24*0d24de9dSSimon Glass# Separates a tag: at the beginning of the subject from the rest of it
25*0d24de9dSSimon Glassre_subject_tag = re.compile('([^:]*):\s*(.*)')
26*0d24de9dSSimon Glass
27*0d24de9dSSimon Glassclass Commit:
28*0d24de9dSSimon Glass    """Holds information about a single commit/patch in the series.
29*0d24de9dSSimon Glass
30*0d24de9dSSimon Glass    Args:
31*0d24de9dSSimon Glass        hash: Commit hash (as a string)
32*0d24de9dSSimon Glass
33*0d24de9dSSimon Glass    Variables:
34*0d24de9dSSimon Glass        hash: Commit hash
35*0d24de9dSSimon Glass        subject: Subject line
36*0d24de9dSSimon Glass        tags: List of maintainer tag strings
37*0d24de9dSSimon Glass        changes: Dict containing a list of changes (single line strings).
38*0d24de9dSSimon Glass            The dict is indexed by change version (an integer)
39*0d24de9dSSimon Glass        cc_list: List of people to aliases/emails to cc on this commit
40*0d24de9dSSimon Glass    """
41*0d24de9dSSimon Glass    def __init__(self, hash):
42*0d24de9dSSimon Glass        self.hash = hash
43*0d24de9dSSimon Glass        self.subject = None
44*0d24de9dSSimon Glass        self.tags = []
45*0d24de9dSSimon Glass        self.changes = {}
46*0d24de9dSSimon Glass        self.cc_list = []
47*0d24de9dSSimon Glass
48*0d24de9dSSimon Glass    def AddChange(self, version, info):
49*0d24de9dSSimon Glass        """Add a new change line to the change list for a version.
50*0d24de9dSSimon Glass
51*0d24de9dSSimon Glass        Args:
52*0d24de9dSSimon Glass            version: Patch set version (integer: 1, 2, 3)
53*0d24de9dSSimon Glass            info: Description of change in this version
54*0d24de9dSSimon Glass        """
55*0d24de9dSSimon Glass        if not self.changes.get(version):
56*0d24de9dSSimon Glass            self.changes[version] = []
57*0d24de9dSSimon Glass        self.changes[version].append(info)
58*0d24de9dSSimon Glass
59*0d24de9dSSimon Glass    def CheckTags(self):
60*0d24de9dSSimon Glass        """Create a list of subject tags in the commit
61*0d24de9dSSimon Glass
62*0d24de9dSSimon Glass        Subject tags look like this:
63*0d24de9dSSimon Glass
64*0d24de9dSSimon Glass            propounder: Change the widget to propound correctly
65*0d24de9dSSimon Glass
66*0d24de9dSSimon Glass        Multiple tags are supported. The list is updated in self.tag
67*0d24de9dSSimon Glass
68*0d24de9dSSimon Glass        Returns:
69*0d24de9dSSimon Glass            None if ok, else the name of a tag with no email alias
70*0d24de9dSSimon Glass        """
71*0d24de9dSSimon Glass        str = self.subject
72*0d24de9dSSimon Glass        m = True
73*0d24de9dSSimon Glass        while m:
74*0d24de9dSSimon Glass            m = re_subject_tag.match(str)
75*0d24de9dSSimon Glass            if m:
76*0d24de9dSSimon Glass                tag = m.group(1)
77*0d24de9dSSimon Glass                self.tags.append(tag)
78*0d24de9dSSimon Glass                str = m.group(2)
79*0d24de9dSSimon Glass        return None
80*0d24de9dSSimon Glass
81*0d24de9dSSimon Glass    def AddCc(self, cc_list):
82*0d24de9dSSimon Glass        """Add a list of people to Cc when we send this patch.
83*0d24de9dSSimon Glass
84*0d24de9dSSimon Glass        Args:
85*0d24de9dSSimon Glass            cc_list:    List of aliases or email addresses
86*0d24de9dSSimon Glass        """
87*0d24de9dSSimon Glass        self.cc_list += cc_list
88