1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 from twisted.python import log
18 from twisted.internet import defer
19
20 from buildbot.pbutil import NewCredPerspective
21 from buildbot.changes import base
22 from buildbot.util import epoch2datetime
23
25
29
34
36 log.msg("perspective_addChange called")
37
38 if 'revlink' in changedict and not changedict['revlink']:
39 changedict['revlink'] = ''
40 if 'repository' in changedict and not changedict['repository']:
41 changedict['repository'] = ''
42 if 'project' in changedict and not changedict['project']:
43 changedict['project'] = ''
44 if 'files' not in changedict or not changedict['files']:
45 changedict['files'] = []
46
47
48
49
50
51
52 if 'isdir' in changedict:
53 changedict['is_dir'] = changedict['isdir']
54 del changedict['isdir']
55 if 'who' in changedict:
56 changedict['author'] = changedict['who']
57 del changedict['who']
58 if 'when' in changedict:
59 when = None
60 if changedict['when'] is not None:
61 when = epoch2datetime(changedict['when'])
62 changedict['when_timestamp'] = when
63 del changedict['when']
64
65
66
67
68
69 for key in changedict:
70 if type(changedict[key]) == str:
71 changedict[key] = changedict[key].decode('utf8', 'replace')
72 changedict['files'] = list(changedict['files'])
73 for i, file in enumerate(changedict.get('files', [])):
74 if type(file) == str:
75 changedict['files'][i] = file.decode('utf8', 'replace')
76 for i, link in enumerate(changedict.get('links', [])):
77 if type(link) == str:
78 changedict['links'][i] = link.decode('utf8', 'replace')
79
80 files = []
81 for path in changedict['files']:
82 if self.prefix:
83 if not path.startswith(self.prefix):
84
85 continue
86 path = path[len(self.prefix):]
87 files.append(path)
88 changedict['files'] = files
89
90 if not files:
91 log.msg("No files listed in change... bit strange, but not fatal.")
92 return self.master.addChange(**changedict)
93
95 compare_attrs = ["user", "passwd", "port", "prefix", "port"]
96
97 - def __init__(self, user="change", passwd="changepw", port=None,
98 prefix=None):
99
100 self.user = user
101 self.passwd = passwd
102 self.port = port
103 self.prefix = prefix
104 self.registration = None
105
107
108 if self.port is not None:
109 portname = self.port
110 else:
111 portname = "all-purpose slaveport"
112 d = "PBChangeSource listener on " + str(portname)
113 if self.prefix is not None:
114 d += " (prefix '%s')" % self.prefix
115 return d
116
125
131 d.addCallback(unreg)
132 return d
133
137