332 ('cout', 'fout', 'wb'), |
332 ('cout', 'fout', 'wb'), |
333 ('cerr', 'ferr', 'wb'), |
333 ('cerr', 'ferr', 'wb'), |
334 ] |
334 ] |
335 |
335 |
336 class chgcmdserver(commandserver.server): |
336 class chgcmdserver(commandserver.server): |
337 def __init__(self, ui, repo, fin, fout, sock): |
337 def __init__(self, ui, repo, fin, fout, sock, hashstate, baseaddress): |
338 super(chgcmdserver, self).__init__( |
338 super(chgcmdserver, self).__init__( |
339 _newchgui(ui, channeledsystem(fin, fout, 'S')), repo, fin, fout) |
339 _newchgui(ui, channeledsystem(fin, fout, 'S')), repo, fin, fout) |
340 self.clientsock = sock |
340 self.clientsock = sock |
341 self._oldios = [] # original (self.ch, ui.fp, fd) before "attachio" |
341 self._oldios = [] # original (self.ch, ui.fp, fd) before "attachio" |
|
342 self.hashstate = hashstate |
|
343 self.baseaddress = baseaddress |
342 |
344 |
343 def cleanup(self): |
345 def cleanup(self): |
344 # dispatch._runcatch() does not flush outputs if exception is not |
346 # dispatch._runcatch() does not flush outputs if exception is not |
345 # handled by dispatch._dispatch() |
347 # handled by dispatch._dispatch() |
346 self.ui.flush() |
348 self.ui.flush() |
491 # process pass kernel "is_current_pgrp_orphaned" check so signals like |
493 # process pass kernel "is_current_pgrp_orphaned" check so signals like |
492 # SIGTSTP, SIGTTIN, SIGTTOU are not ignored. |
494 # SIGTSTP, SIGTTIN, SIGTTOU are not ignored. |
493 os.setpgid(0, 0) |
495 os.setpgid(0, 0) |
494 ui = self.server.ui |
496 ui = self.server.ui |
495 repo = self.server.repo |
497 repo = self.server.repo |
496 sv = chgcmdserver(ui, repo, self.rfile, self.wfile, self.connection) |
498 sv = chgcmdserver(ui, repo, self.rfile, self.wfile, self.connection, |
|
499 self.server.hashstate, self.server.baseaddress) |
497 try: |
500 try: |
498 try: |
501 try: |
499 sv.serve() |
502 sv.serve() |
500 # handle exceptions that may be raised by command server. most of |
503 # handle exceptions that may be raised by command server. most of |
501 # known exceptions are caught by dispatch. |
504 # known exceptions are caught by dispatch. |
586 self._inithashstate() |
589 self._inithashstate() |
587 class cls(AutoExitMixIn, SocketServer.ForkingMixIn, |
590 class cls(AutoExitMixIn, SocketServer.ForkingMixIn, |
588 SocketServer.UnixStreamServer): |
591 SocketServer.UnixStreamServer): |
589 ui = self.ui |
592 ui = self.ui |
590 repo = self.repo |
593 repo = self.repo |
|
594 hashstate = self.hashstate |
|
595 baseaddress = self.baseaddress |
591 self.server = cls(self.address, _requesthandler) |
596 self.server = cls(self.address, _requesthandler) |
592 self.server.idletimeout = self.ui.configint( |
597 self.server.idletimeout = self.ui.configint( |
593 'chgserver', 'idletimeout', self.server.idletimeout) |
598 'chgserver', 'idletimeout', self.server.idletimeout) |
594 self.server.startautoexitthread() |
599 self.server.startautoexitthread() |
595 self._createsymlink() |
600 self._createsymlink() |