plugin merge-requests, mercurial merge-requests: merge request import implementation

This commit is contained in:
Goffi 2018-03-30 17:53:11 +02:00
commit 60043be6b4

View file

@ -21,6 +21,7 @@ from sat.core.i18n import _
from sat.core.constants import Const as C
from sat.core import exceptions
from twisted.internet import defer
from twisted.words.protocols.jabber import jid
from collections import namedtuple
from sat.tools import utils
from sat.core.log import getLogger
@ -89,6 +90,11 @@ class MergeRequests(object):
in_sign='ss', out_sign='aa{ss}',
method=self._parseData,
async=True)
host.bridge.addMethod("mergeRequestsImport", ".plugin",
in_sign='ssssa{ss}s', out_sign='',
method=self._import,
async=True
)
def register(self, name, handler, data_types, short_desc, priority=0):
"""register an merge request handler
@ -251,3 +257,36 @@ class MergeRequests(object):
except KeyError:
raise exceptions.NotFound(_(u'No handler can handle data type "{type}"').format(type=data_type))
return defer.maybeDeferred(handler.handler.parse, data, data_type)
def _import(self, repository, item_id, service=None, node=None, extra=None, profile_key=C.PROF_KEY_NONE):
client = self.host.getClient(profile_key)
service = jid.JID(service) if service else None
d = self.import_request(client, repository, item_id, service, node or None, extra=extra or None)
return d
@defer.inlineCallbacks
def import_request(self, client, repository, item, service=None, node=None, extra=None):
"""Import a merge request in specified directory
@param repository(unicode): path to the repository where the code stands
"""
if not node:
node = NS_MERGE_REQUESTS
tickets_xmlui, metadata = yield self._s.getDataFormItems(
client,
service,
node,
max_items=1,
item_ids=[item],
form_ns=NS_MERGE_REQUESTS)
ticket_xmlui = tickets_xmlui[0]
data = ticket_xmlui.named_widgets[FIELD_DATA].value
data_type = ticket_xmlui.named_widgets[FIELD_DATA_TYPE].value
try:
handler = self._type_handlers[data_type]
except KeyError:
raise exceptions.NotFound(_(u'No handler found to import {data_type}').format(data_type=data_type))
log.info(_(u"Importing patch [{item_id}] using {name} handler").format(
item_id = item,
name = handler.name))
yield handler.handler.import_(repository, data, data_type, item, service, node, extra)