diff options
author | James E. Blair <jeblair@redhat.com> | 2016-10-04 14:19:57 -0700 |
---|---|---|
committer | James E. Blair <jeblair@redhat.com> | 2016-10-04 15:01:31 -0700 |
commit | 51b7492e95bce924efdbafbac996d746a6b9cb18 (patch) | |
tree | 794053209f134fc98ce01fd2a41c26d4a97966d6 | |
parent | 0eaad558b5d02625b75ba772aceafcb03c4ed2b5 (diff) | |
download | zuul-51b7492e95bce924efdbafbac996d746a6b9cb18.tar.gz |
Add getProjectBranches to Source
This lets us ask a source for all of the branches for a project.
This uses the git protocol for now, but this can get much nicer
in the future if we switch to using Gerrit's REST API. It should
also be easy to do with github.
The included comment indicates why it's being added -- implementation
to follow in subsequent changes.
Change-Id: I0dfcd61f343a235dcf935aea434b9772d6e746d9
-rw-r--r-- | zuul/configloader.py | 6 | ||||
-rw-r--r-- | zuul/connection/gerrit.py | 6 | ||||
-rw-r--r-- | zuul/source/__init__.py | 4 | ||||
-rw-r--r-- | zuul/source/gerrit.py | 3 |
4 files changed, 18 insertions, 1 deletions
diff --git a/zuul/configloader.py b/zuul/configloader.py index b41dcc17a..063889b5f 100644 --- a/zuul/configloader.py +++ b/zuul/configloader.py @@ -550,7 +550,11 @@ class TenantParser(object): # Get in-project-repo config files which have a restricted # set of options. url = source.getGitUrl(project) - # TODOv3(jeblair): config should be branch specific + # TODOv3(jeblair): config should be branch specific. For + # each branch in the repo, get the zuul.yaml for that + # branch. Remember the branch and then implicitly add a + # branch selector to each job there. + source.getProjectBranches(project) job = merger.getFiles(project.name, url, 'master', files=['.zuul.yaml']) job.project = project diff --git a/zuul/connection/gerrit.py b/zuul/connection/gerrit.py index bf77bff21..5edc9a5ef 100644 --- a/zuul/connection/gerrit.py +++ b/zuul/connection/gerrit.py @@ -572,6 +572,12 @@ class GerritConnection(BaseConnection): (record.get('number'),)) return changes + def getProjectBranches(self, project): + refs = self.getInfoRefs(project) + heads = [str(k[len('refs/heads/'):]) for k in refs.keys() + if k.startswith('refs/heads/')] + return heads + def addEvent(self, data): return self.event_queue.put((time.time(), data)) diff --git a/zuul/source/__init__.py b/zuul/source/__init__.py index d92d47af9..69dc16255 100644 --- a/zuul/source/__init__.py +++ b/zuul/source/__init__.py @@ -63,3 +63,7 @@ class BaseSource(object): @abc.abstractmethod def getProject(self, name): """Get a project.""" + + @abc.abstractmethod + def getProjectBranches(self, project): + """Get branches for a project""" diff --git a/zuul/source/gerrit.py b/zuul/source/gerrit.py index 0d28898d3..8b85a4676 100644 --- a/zuul/source/gerrit.py +++ b/zuul/source/gerrit.py @@ -41,6 +41,9 @@ class GerritSource(BaseSource): def getProjectOpenChanges(self, project): return self.connection.getProjectOpenChanges(project) + def getProjectBranches(self, project): + return self.connection.getProjectBranches(project) + def getGitUrl(self, project): return self.connection.getGitUrl(project) |