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