]>
Commit | Line | Data |
---|---|---|
83d290c5 | 1 | # SPDX-License-Identifier: GPL-2.0+ |
0d24de9d SG |
2 | # Copyright (c) 2011 The Chromium OS Authors. |
3 | # | |
0d24de9d SG |
4 | |
5 | import re | |
6 | ||
7 | # Separates a tag: at the beginning of the subject from the rest of it | |
ed922275 | 8 | re_subject_tag = re.compile('([^:\s]*):\s*(.*)') |
0d24de9d SG |
9 | |
10 | class Commit: | |
11 | """Holds information about a single commit/patch in the series. | |
12 | ||
13 | Args: | |
14 | hash: Commit hash (as a string) | |
15 | ||
16 | Variables: | |
17 | hash: Commit hash | |
18 | subject: Subject line | |
19 | tags: List of maintainer tag strings | |
20 | changes: Dict containing a list of changes (single line strings). | |
21 | The dict is indexed by change version (an integer) | |
22 | cc_list: List of people to aliases/emails to cc on this commit | |
5c8fdd91 | 23 | notes: List of lines in the commit (not series) notes |
833e4192 DA |
24 | change_id: the Change-Id: tag that was stripped from this commit |
25 | and can be used to generate the Message-Id. | |
0d24de9d SG |
26 | """ |
27 | def __init__(self, hash): | |
28 | self.hash = hash | |
29 | self.subject = None | |
30 | self.tags = [] | |
31 | self.changes = {} | |
32 | self.cc_list = [] | |
102061bd | 33 | self.signoff_set = set() |
5c8fdd91 | 34 | self.notes = [] |
833e4192 | 35 | self.change_id = None |
0d24de9d SG |
36 | |
37 | def AddChange(self, version, info): | |
38 | """Add a new change line to the change list for a version. | |
39 | ||
40 | Args: | |
41 | version: Patch set version (integer: 1, 2, 3) | |
42 | info: Description of change in this version | |
43 | """ | |
44 | if not self.changes.get(version): | |
45 | self.changes[version] = [] | |
46 | self.changes[version].append(info) | |
47 | ||
48 | def CheckTags(self): | |
49 | """Create a list of subject tags in the commit | |
50 | ||
51 | Subject tags look like this: | |
52 | ||
0d99fe0f | 53 | propounder: fort: Change the widget to propound correctly |
0d24de9d | 54 | |
0d99fe0f SG |
55 | Here the tags are propounder and fort. Multiple tags are supported. |
56 | The list is updated in self.tag. | |
0d24de9d SG |
57 | |
58 | Returns: | |
59 | None if ok, else the name of a tag with no email alias | |
60 | """ | |
61 | str = self.subject | |
62 | m = True | |
63 | while m: | |
64 | m = re_subject_tag.match(str) | |
65 | if m: | |
66 | tag = m.group(1) | |
67 | self.tags.append(tag) | |
68 | str = m.group(2) | |
69 | return None | |
70 | ||
71 | def AddCc(self, cc_list): | |
72 | """Add a list of people to Cc when we send this patch. | |
73 | ||
74 | Args: | |
75 | cc_list: List of aliases or email addresses | |
76 | """ | |
77 | self.cc_list += cc_list | |
102061bd SG |
78 | |
79 | def CheckDuplicateSignoff(self, signoff): | |
80 | """Check a list of signoffs we have send for this patch | |
81 | ||
82 | Args: | |
83 | signoff: Signoff line | |
84 | Returns: | |
85 | True if this signoff is new, False if we have already seen it. | |
86 | """ | |
87 | if signoff in self.signoff_set: | |
88 | return False | |
89 | self.signoff_set.add(signoff) | |
90 | return True |