]> git.ipfire.org Git - people/ms/u-boot.git/blob - tools/patman/commit.py
buildman: Allow branch names which conflict with directories
[people/ms/u-boot.git] / tools / patman / commit.py
1 # Copyright (c) 2011 The Chromium OS Authors.
2 #
3 # SPDX-License-Identifier: GPL-2.0+
4 #
5
6 import re
7
8 # Separates a tag: at the beginning of the subject from the rest of it
9 re_subject_tag = re.compile('([^:\s]*):\s*(.*)')
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
24 notes: List of lines in the commit (not series) notes
25 """
26 def __init__(self, hash):
27 self.hash = hash
28 self.subject = None
29 self.tags = []
30 self.changes = {}
31 self.cc_list = []
32 self.signoff_set = set()
33 self.notes = []
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
51 propounder: fort: Change the widget to propound correctly
52
53 Here the tags are propounder and fort. Multiple tags are supported.
54 The list is updated in self.tag.
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
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