Merge "Check out implicit branch in timer jobs" into feature/zuulv3

This commit is contained in:
Jenkins
2017-07-21 03:49:52 +00:00
committed by Gerrit Code Review
17 changed files with 373 additions and 102 deletions

View File

@@ -26,7 +26,7 @@ import queue
import voluptuous as v
from zuul.connection import BaseConnection
from zuul.model import Ref
from zuul.model import Ref, Tag, Branch
from zuul import exceptions
from zuul.driver.gerrit.gerritmodel import GerritChange, GerritTriggerEvent
@@ -293,7 +293,34 @@ class GerritConnection(BaseConnection):
if event.change_number:
change = self._getChange(event.change_number, event.patch_number,
refresh=refresh)
elif event.ref and event.ref.startswith('refs/tags/'):
project = self.source.getProject(event.project_name)
change = Tag(project)
change.tag = event.ref[len('refs/tags/'):]
change.ref = event.ref
change.oldrev = event.oldrev
change.newrev = event.newrev
change.url = self._getGitwebUrl(project, sha=event.newrev)
elif event.ref and not event.ref.startswith('refs/'):
# Gerrit ref-updated events don't have branch prefixes.
project = self.source.getProject(event.project_name)
change = Branch(project)
change.branch = event.ref
change.ref = 'refs/heads/' + event.ref
change.oldrev = event.oldrev
change.newrev = event.newrev
change.url = self._getGitwebUrl(project, sha=event.newrev)
elif event.ref and event.ref.startswith('refs/heads/'):
# From the timer trigger
project = self.source.getProject(event.project_name)
change = Branch(project)
change.ref = event.ref
change.branch = event.branch
change.oldrev = event.oldrev
change.newrev = event.newrev
change.url = self._getGitwebUrl(project, sha=event.newrev)
elif event.ref:
# catch-all ref (ie, not a branch or head)
project = self.source.getProject(event.project_name)
change = Ref(project)
change.ref = event.ref
@@ -301,14 +328,8 @@ class GerritConnection(BaseConnection):
change.newrev = event.newrev
change.url = self._getGitwebUrl(project, sha=event.newrev)
else:
project = self.source.getProject(event.project_name)
change = Ref(project)
branch = event.branch or 'master'
change.ref = 'refs/heads/%s' % branch
refs = self.getInfoRefs(project)
change.oldrev = refs[change.ref]
change.newrev = refs[change.ref]
change.url = self._getGitwebUrl(project, sha=change.newrev)
self.log.warning("Unable to get change for %s" % (event,))
change = None
return change
def _getChange(self, number, patchset, refresh=False, history=None):

View File

@@ -32,7 +32,7 @@ import github3
from github3.exceptions import MethodNotAllowed
from zuul.connection import BaseConnection
from zuul.model import Ref
from zuul.model import Ref, Branch, Tag
from zuul.exceptions import MergeFailure
from zuul.driver.github.githubmodel import PullRequest, GithubTriggerEvent
@@ -506,16 +506,21 @@ class GithubConnection(BaseConnection):
change.source_event = event
change.is_current_patchset = (change.pr.get('head').get('sha') ==
event.patch_number)
elif event.ref:
change = Ref(project)
else:
if event.ref and event.ref.startswith('refs/tags/'):
change = Tag(project)
change.tag = event.ref[len('refs/tags/'):]
elif event.ref and event.ref.startswith('refs/heads/'):
change = Branch(project)
change.branch = event.ref[len('refs/heads/'):]
else:
change = Ref(project)
change.ref = event.ref
change.oldrev = event.oldrev
change.newrev = event.newrev
change.url = self.getGitwebUrl(project, sha=event.newrev)
change.source_event = event
change.files = self.getPushedFileNames(event)
else:
change = Ref(project)
return change
def _getChange(self, project, number, patchset=None, refresh=False,

View File

@@ -80,15 +80,18 @@ class TimerDriver(Driver, TriggerInterface):
def _onTrigger(self, tenant, pipeline_name, timespec):
for project_name in tenant.layout.project_configs.keys():
project_hostname, project_name = project_name.split('/', 1)
event = TimerTriggerEvent()
event.type = 'timer'
event.timespec = timespec
event.forced_pipeline = pipeline_name
event.project_hostname = project_hostname
event.project_name = project_name
self.log.debug("Adding event %s" % event)
self.sched.addEvent(event)
(trusted, project) = tenant.getProject(project_name)
for branch in project.source.getProjectBranches(project):
event = TimerTriggerEvent()
event.type = 'timer'
event.timespec = timespec
event.forced_pipeline = pipeline_name
event.project_hostname = project.canonical_hostname
event.project_name = project.name
event.ref = 'refs/heads/%s' % branch
event.branch = branch
self.log.debug("Adding event %s" % event)
self.sched.addEvent(event)
def stop(self):
if self.apsched: