1
# -*- test-case-name: buildbot.test.test_changes -*-
5
from twisted.application import service
6
from twisted.python import log
8
from buildbot.pbutil import NewCredPerspective
9
from buildbot.changes import base, changes
11
class ChangePerspective(NewCredPerspective):
13
def __init__(self, changemaster, prefix, sep="/"):
14
self.changemaster = changemaster
16
# this is the separator as used by the VC system, not the local host.
17
# If for some reason you're running your CVS repository under
18
# windows, you'll need to use a PBChangeSource(sep="\\")
21
def attached(self, mind):
23
def detached(self, mind):
26
def perspective_addChange(self, changedict):
27
log.msg("perspective_addChange called")
29
for path in changedict['files']:
31
bits = path.split(self.sep)
32
if bits[0] == self.prefix:
34
path = self.sep.join(bits[1:])
39
pathnames.append(path)
42
change = changes.Change(changedict['who'],
44
changedict['comments'],
45
branch=changedict.get('branch'),
46
revision=changedict.get('revision'),
48
self.changemaster.addChange(change)
50
class PBChangeSource(base.ChangeSource):
51
compare_attrs = ["user", "passwd", "port", "prefix", "sep"]
53
def __init__(self, user="change", passwd="changepw", port=None,
54
prefix=None, sep="/"):
55
# TODO: current limitations
56
assert user == "change"
57
assert passwd == "changepw"
66
# TODO: when the dispatcher is fixed, report the specific port
67
#d = "PB listener on port %d" % self.port
68
d = "PBChangeSource listener on all-purpose slaveport"
69
if self.prefix is not None:
70
d += " (prefix '%s')" % self.prefix
73
def startService(self):
74
base.ChangeSource.startService(self)
75
# our parent is the ChangeMaster object
76
# find the master's Dispatch object and register our username
77
# TODO: the passwd should be registered here too
78
master = self.parent.parent
79
master.dispatcher.register(self.user, self)
81
def stopService(self):
82
base.ChangeSource.stopService(self)
83
# unregister our username
84
master = self.parent.parent
85
master.dispatcher.unregister(self.user)
87
def getPerspective(self):
88
return ChangePerspective(self.parent, self.prefix, self.sep)