~ubuntu-branches/ubuntu/utopic/buildbot/utopic-proposed

« back to all changes in this revision

Viewing changes to buildbot/changes/pb.py

  • Committer: Bazaar Package Importer
  • Author(s): Matthias Klose
  • Date: 2006-04-15 21:20:08 UTC
  • Revision ID: james.westby@ubuntu.com-20060415212008-jfj53u29zl30jqi1
Tags: upstream-0.7.2
ImportĀ upstreamĀ versionĀ 0.7.2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# -*- test-case-name: buildbot.test.test_changes -*-
 
2
 
 
3
import os, os.path
 
4
 
 
5
from twisted.application import service
 
6
from twisted.python import log
 
7
 
 
8
from buildbot.pbutil import NewCredPerspective
 
9
from buildbot.changes import base, changes
 
10
 
 
11
class ChangePerspective(NewCredPerspective):
 
12
 
 
13
    def __init__(self, changemaster, prefix, sep="/"):
 
14
        self.changemaster = changemaster
 
15
        self.prefix = prefix
 
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="\\")
 
19
        self.sep = sep
 
20
 
 
21
    def attached(self, mind):
 
22
        return self
 
23
    def detached(self, mind):
 
24
        pass
 
25
 
 
26
    def perspective_addChange(self, changedict):
 
27
        log.msg("perspective_addChange called")
 
28
        pathnames = []
 
29
        for path in changedict['files']:
 
30
            if self.prefix:
 
31
                bits = path.split(self.sep)
 
32
                if bits[0] == self.prefix:
 
33
                    if bits[1:]:
 
34
                        path = self.sep.join(bits[1:])
 
35
                    else:
 
36
                        path = ''
 
37
                else:
 
38
                    break
 
39
            pathnames.append(path)
 
40
 
 
41
        if pathnames:
 
42
            change = changes.Change(changedict['who'],
 
43
                                    pathnames,
 
44
                                    changedict['comments'],
 
45
                                    branch=changedict.get('branch'),
 
46
                                    revision=changedict.get('revision'),
 
47
                                    )
 
48
            self.changemaster.addChange(change)
 
49
 
 
50
class PBChangeSource(base.ChangeSource):
 
51
    compare_attrs = ["user", "passwd", "port", "prefix", "sep"]
 
52
 
 
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"
 
58
        assert port == None
 
59
        self.user = user
 
60
        self.passwd = passwd
 
61
        self.port = port
 
62
        self.prefix = prefix
 
63
        self.sep = sep
 
64
 
 
65
    def describe(self):
 
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
 
71
        return d
 
72
 
 
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)
 
80
 
 
81
    def stopService(self):
 
82
        base.ChangeSource.stopService(self)
 
83
        # unregister our username
 
84
        master = self.parent.parent
 
85
        master.dispatcher.unregister(self.user)
 
86
 
 
87
    def getPerspective(self):
 
88
        return ChangePerspective(self.parent, self.prefix, self.sep)
 
89