comparison mercurial/chgserver.py @ 30740:493935e0327a

chgserver: implement chgui._runpager This patch implements chgui._runpager in a relatively simple way. A more clean way is to move the core logic of "attachio" to "ui", which will be done later after chg runs uisetup per request.
author Jun Wu <quark@fb.com>
date Tue, 10 Jan 2017 06:59:31 +0800
parents 815e1cefd082
children fde9692a02c0
comparison
equal deleted inserted replaced
30739:815e1cefd082 30740:493935e0327a
209 if usepager: 209 if usepager:
210 ui.setconfig('ui', 'formatted', ui.formatted(), 'pager') 210 ui.setconfig('ui', 'formatted', ui.formatted(), 'pager')
211 ui.setconfig('ui', 'interactive', False, 'pager') 211 ui.setconfig('ui', 'interactive', False, 'pager')
212 return p 212 return p
213 213
214 def _newchgui(srcui, csystem): 214 def _newchgui(srcui, csystem, attachio):
215 class chgui(srcui.__class__): 215 class chgui(srcui.__class__):
216 def __init__(self, src=None): 216 def __init__(self, src=None):
217 super(chgui, self).__init__(src) 217 super(chgui, self).__init__(src)
218 if src: 218 if src:
219 self._csystem = getattr(src, '_csystem', csystem) 219 self._csystem = getattr(src, '_csystem', csystem)
239 if errprefix: 239 if errprefix:
240 errmsg = '%s: %s' % (errprefix, errmsg) 240 errmsg = '%s: %s' % (errprefix, errmsg)
241 raise onerr(errmsg) 241 raise onerr(errmsg)
242 return rc 242 return rc
243 243
244 def _runpager(self, cmd):
245 self._csystem(cmd, util.shellenviron(), type='pager',
246 cmdtable={'attachio': attachio})
247
244 return chgui(srcui) 248 return chgui(srcui)
245 249
246 def _loadnewui(srcui, args): 250 def _loadnewui(srcui, args):
247 from . import dispatch # avoid cycle 251 from . import dispatch # avoid cycle
248 252
333 ] 337 ]
334 338
335 class chgcmdserver(commandserver.server): 339 class chgcmdserver(commandserver.server):
336 def __init__(self, ui, repo, fin, fout, sock, hashstate, baseaddress): 340 def __init__(self, ui, repo, fin, fout, sock, hashstate, baseaddress):
337 super(chgcmdserver, self).__init__( 341 super(chgcmdserver, self).__init__(
338 _newchgui(ui, channeledsystem(fin, fout, 'S')), repo, fin, fout) 342 _newchgui(ui, channeledsystem(fin, fout, 'S'), self.attachio),
343 repo, fin, fout)
339 self.clientsock = sock 344 self.clientsock = sock
340 self._oldios = [] # original (self.ch, ui.fp, fd) before "attachio" 345 self._oldios = [] # original (self.ch, ui.fp, fd) before "attachio"
341 self.hashstate = hashstate 346 self.hashstate = hashstate
342 self.baseaddress = baseaddress 347 self.baseaddress = baseaddress
343 if hashstate is not None: 348 if hashstate is not None: