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