Mercurial > public > mercurial-scm > hg
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: |