29592c9531
On GitHub we cannot reliably update all information that's needed for doing a canmerge check using events. Namely completely missing events on branch protection changes and ambiguous status events that might match several changes due to its data model to have statuses on the commit instead the pr. This was no problem in the past since this information was only used during the enqueue phase which is directly after the event preprocessing phase. However with circular dependencies we re-do the can merge check just before merging again and need to act on recent data. Therefore add an allow_refresh flag that makes it possible to refresh the volatile parts of the data we don't get events for. This is only used on GitHub for now as the other drivers are either correctly updating their states using events or didn't yet optimize to not do api calls within the main loop yet (pagure). Change-Id: I89ff158642fe32c5004ef62c2e25399110564252
74 lines
2.2 KiB
Python
74 lines
2.2 KiB
Python
# Copyright 2012 Hewlett-Packard Development Company, L.P.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
# not use this file except in compliance with the License. You may obtain
|
|
# a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
import logging
|
|
from zuul.source import BaseSource
|
|
from zuul.model import Project
|
|
|
|
|
|
class GitSource(BaseSource):
|
|
name = 'git'
|
|
log = logging.getLogger("zuul.source.Git")
|
|
|
|
def __init__(self, driver, connection, config=None):
|
|
hostname = connection.canonical_hostname
|
|
super(GitSource, self).__init__(driver, connection,
|
|
hostname, config)
|
|
|
|
def getRefSha(self, project, ref):
|
|
raise NotImplementedError()
|
|
|
|
def isMerged(self, change, head=None):
|
|
raise NotImplementedError()
|
|
|
|
def canMerge(self, change, allow_needs, event=None, allow_refresh=False):
|
|
raise NotImplementedError()
|
|
|
|
def getChange(self, event, refresh=False):
|
|
return self.connection.getChange(event, refresh)
|
|
|
|
def getChangeByURL(self, url, event):
|
|
return None
|
|
|
|
def getChangesDependingOn(self, change, projects, tenant):
|
|
return []
|
|
|
|
def getCachedChanges(self):
|
|
return []
|
|
|
|
def getProject(self, name):
|
|
p = self.connection.getProject(name)
|
|
if not p:
|
|
p = Project(name, self)
|
|
self.connection.addProject(p)
|
|
return p
|
|
|
|
def getProjectBranches(self, project, tenant):
|
|
return self.connection.getProjectBranches(project, tenant)
|
|
|
|
def getGitUrl(self, project):
|
|
return self.connection.getGitUrl(project)
|
|
|
|
def getProjectOpenChanges(self, project):
|
|
raise NotImplementedError()
|
|
|
|
def getRequireFilters(self, config):
|
|
return []
|
|
|
|
def getRejectFilters(self, config):
|
|
return []
|
|
|
|
def getRefForChange(self, change):
|
|
raise NotImplementedError()
|