comparison src/plugins/plugin_misc_merge_requests.py @ 2544:a64887289931

plugin merge-requests, mercurial merge-requests: merge request import implementation
author Goffi <goffi@goffi.org>
date Fri, 30 Mar 2018 17:53:11 +0200
parents 65695b9343d3
children 48820e4a1f8a
comparison
equal deleted inserted replaced
2543:60758de1c227 2544:a64887289931
19 19
20 from sat.core.i18n import _ 20 from sat.core.i18n import _
21 from sat.core.constants import Const as C 21 from sat.core.constants import Const as C
22 from sat.core import exceptions 22 from sat.core import exceptions
23 from twisted.internet import defer 23 from twisted.internet import defer
24 from twisted.words.protocols.jabber import jid
24 from collections import namedtuple 25 from collections import namedtuple
25 from sat.tools import utils 26 from sat.tools import utils
26 from sat.core.log import getLogger 27 from sat.core.log import getLogger
27 log = getLogger(__name__) 28 log = getLogger(__name__)
28 29
87 async=True) 88 async=True)
88 host.bridge.addMethod("mergeRequestParseData", ".plugin", 89 host.bridge.addMethod("mergeRequestParseData", ".plugin",
89 in_sign='ss', out_sign='aa{ss}', 90 in_sign='ss', out_sign='aa{ss}',
90 method=self._parseData, 91 method=self._parseData,
91 async=True) 92 async=True)
93 host.bridge.addMethod("mergeRequestsImport", ".plugin",
94 in_sign='ssssa{ss}s', out_sign='',
95 method=self._import,
96 async=True
97 )
92 98
93 def register(self, name, handler, data_types, short_desc, priority=0): 99 def register(self, name, handler, data_types, short_desc, priority=0):
94 """register an merge request handler 100 """register an merge request handler
95 101
96 @param name(unicode): name of the handler 102 @param name(unicode): name of the handler
249 try: 255 try:
250 handler = self._type_handlers[data_type] 256 handler = self._type_handlers[data_type]
251 except KeyError: 257 except KeyError:
252 raise exceptions.NotFound(_(u'No handler can handle data type "{type}"').format(type=data_type)) 258 raise exceptions.NotFound(_(u'No handler can handle data type "{type}"').format(type=data_type))
253 return defer.maybeDeferred(handler.handler.parse, data, data_type) 259 return defer.maybeDeferred(handler.handler.parse, data, data_type)
260
261 def _import(self, repository, item_id, service=None, node=None, extra=None, profile_key=C.PROF_KEY_NONE):
262 client = self.host.getClient(profile_key)
263 service = jid.JID(service) if service else None
264 d = self.import_request(client, repository, item_id, service, node or None, extra=extra or None)
265 return d
266
267 @defer.inlineCallbacks
268 def import_request(self, client, repository, item, service=None, node=None, extra=None):
269 """Import a merge request in specified directory
270
271 @param repository(unicode): path to the repository where the code stands
272 """
273 if not node:
274 node = NS_MERGE_REQUESTS
275 tickets_xmlui, metadata = yield self._s.getDataFormItems(
276 client,
277 service,
278 node,
279 max_items=1,
280 item_ids=[item],
281 form_ns=NS_MERGE_REQUESTS)
282 ticket_xmlui = tickets_xmlui[0]
283 data = ticket_xmlui.named_widgets[FIELD_DATA].value
284 data_type = ticket_xmlui.named_widgets[FIELD_DATA_TYPE].value
285 try:
286 handler = self._type_handlers[data_type]
287 except KeyError:
288 raise exceptions.NotFound(_(u'No handler found to import {data_type}').format(data_type=data_type))
289 log.info(_(u"Importing patch [{item_id}] using {name} handler").format(
290 item_id = item,
291 name = handler.name))
292 yield handler.handler.import_(repository, data, data_type, item, service, node, extra)