Add tenants

Change-Id: Ia6c21152c00c9380c17c559290ed98ff22cf767b
This commit is contained in:
James E. Blair
2015-12-07 17:08:06 -08:00
parent 509cada14b
commit 59fdbac119
11 changed files with 326 additions and 150 deletions

View File

@@ -31,6 +31,7 @@ class BaseSource(object):
self.source_config = source_config
self.sched = sched
self.connection = connection
self.projects = {}
def stop(self):
"""Stop the source."""
@@ -60,7 +61,7 @@ class BaseSource(object):
"""Called after configuration has been processed."""
@abc.abstractmethod
def getChange(self, event, project):
def getChange(self, event):
"""Get the change representing an event."""
@abc.abstractmethod
@@ -70,3 +71,7 @@ class BaseSource(object):
@abc.abstractmethod
def getGitUrl(self, project):
"""Get the git url for a project."""
@abc.abstractmethod
def getProject(self, name):
"""Get a project."""

View File

@@ -16,7 +16,7 @@ import logging
import re
import time
from zuul import exceptions
from zuul.model import Change, Ref, NullChange
from zuul.model import Change, Ref, NullChange, Project
from zuul.source import BaseSource
@@ -126,7 +126,12 @@ class GerritSource(BaseSource):
def postConfig(self):
pass
def getChange(self, event, project):
def getProject(self, name):
if name not in self.projects:
self.projects[name] = Project(name)
return self.projects[name]
def getChange(self, event):
if event.change_number:
refresh = False
if event._needs_refresh:
@@ -135,12 +140,14 @@ class GerritSource(BaseSource):
change = self._getChange(event.change_number, event.patch_number,
refresh=refresh)
elif event.ref:
project = self.getProject(event.project_name)
change = Ref(project)
change.ref = event.ref
change.oldrev = event.oldrev
change.newrev = event.newrev
change.url = self._getGitwebUrl(project, sha=event.newrev)
else:
# TODOv3(jeblair): we need to get the project from the event
change = NullChange(project)
return change
@@ -227,11 +234,7 @@ class GerritSource(BaseSource):
if 'project' not in data:
raise exceptions.ChangeNotFound(change.number, change.patchset)
# If updated changed came as a dependent on
# and its project is not defined,
# then create a 'foreign' project for it in layout
change.project = self.sched.getProject(data['project'],
create_foreign=bool(history))
change.project = self.getProject(data['project'])
change.branch = data['branch']
change.url = data['url']
max_ps = 0