def getChanges(self, request):
        """
        Take the logic from the change hook, and then delegate it
        to the proper handler

        We use the buildbot plugin mechanisms to find out about dialects

        and call getChanges()

        the return value is a list of changes

        if DIALECT is unspecified, a sample implementation is provided
        """
        uriRE = re.search(r'^/change_hook/?([a-zA-Z0-9_]*)', bytes2unicode(request.uri))

        if not uriRE:
            log.msg("URI doesn't match change_hook regex: %s" % request.uri)
            raise ValueError(
                "URI doesn't match change_hook regex: %s" % request.uri)

        changes = []
        src = None

        # Was there a dialect provided?
        if uriRE.group(1):
            dialect = uriRE.group(1)
        else:
            dialect = 'base'

        handler = self.makeHandler(dialect)
        changes, src = yield handler.getChanges(request)
        return (changes, src)
Take the logic from the change hook, and then delegate it
        to the proper handler

        We use the buildbot plugin mechanisms to find out about dialects

        and call getChanges()

        the return value is a list of changes

        if DIALECT is unspecified, a sample implementation is provided