Mercurial > public > mercurial-scm > hg
comparison mercurial/commandserver.py @ 29548:9da1adc18639
commandserver: drop old unixservice implementation
It's been superseded by unixforkingservice.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Sun, 22 May 2016 13:45:09 +0900 |
parents | 024e8f82f3de |
children | ee8186457516 |
comparison
equal
deleted
inserted
replaced
29547:300318b7d66d | 29548:9da1adc18639 |
---|---|
22 from . import ( | 22 from . import ( |
23 encoding, | 23 encoding, |
24 error, | 24 error, |
25 util, | 25 util, |
26 ) | 26 ) |
27 | |
28 socketserver = util.socketserver | |
29 | 27 |
30 logfile = None | 28 logfile = None |
31 | 29 |
32 def log(*args): | 30 def log(*args): |
33 if not logfile: | 31 if not logfile: |
421 def createcmdserver(self, repo, conn, fin, fout): | 419 def createcmdserver(self, repo, conn, fin, fout): |
422 """Create new command server instance; called in the process that | 420 """Create new command server instance; called in the process that |
423 serves for the current connection""" | 421 serves for the current connection""" |
424 return server(self.ui, repo, fin, fout) | 422 return server(self.ui, repo, fin, fout) |
425 | 423 |
426 class _requesthandler(socketserver.BaseRequestHandler): | 424 class unixforkingservice(object): |
427 def handle(self): | |
428 _serverequest(self.server.ui, self.server.repo, self.request, | |
429 self._createcmdserver) | |
430 | |
431 def _createcmdserver(self, repo, conn, fin, fout): | |
432 ui = self.server.ui | |
433 return server(ui, repo, fin, fout) | |
434 | |
435 class unixservice(object): | |
436 """ | 425 """ |
437 Listens on unix domain socket and forks server per connection | 426 Listens on unix domain socket and forks server per connection |
438 """ | 427 """ |
439 def __init__(self, ui, repo, opts): | 428 |
429 def __init__(self, ui, repo, opts, handler=None): | |
440 self.ui = ui | 430 self.ui = ui |
441 self.repo = repo | 431 self.repo = repo |
442 self.address = opts['address'] | 432 self.address = opts['address'] |
443 if not util.safehasattr(socketserver, 'UnixStreamServer'): | 433 if not util.safehasattr(socket, 'AF_UNIX'): |
444 raise error.Abort(_('unsupported platform')) | 434 raise error.Abort(_('unsupported platform')) |
445 if not self.address: | 435 if not self.address: |
446 raise error.Abort(_('no socket path specified with --address')) | 436 raise error.Abort(_('no socket path specified with --address')) |
447 | |
448 def init(self): | |
449 class cls(socketserver.ForkingMixIn, socketserver.UnixStreamServer): | |
450 ui = self.ui | |
451 repo = self.repo | |
452 self.server = cls(self.address, _requesthandler) | |
453 self.ui.status(_('listening at %s\n') % self.address) | |
454 self.ui.flush() # avoid buffering of status message | |
455 | |
456 def _cleanup(self): | |
457 os.unlink(self.address) | |
458 | |
459 def run(self): | |
460 try: | |
461 self.server.serve_forever() | |
462 finally: | |
463 self._cleanup() | |
464 | |
465 class unixforkingservice(unixservice): | |
466 def __init__(self, ui, repo, opts, handler=None): | |
467 super(unixforkingservice, self).__init__(ui, repo, opts) | |
468 self._servicehandler = handler or unixservicehandler(ui) | 437 self._servicehandler = handler or unixservicehandler(ui) |
469 self._sock = None | 438 self._sock = None |
470 self._oldsigchldhandler = None | 439 self._oldsigchldhandler = None |
471 self._workerpids = set() # updated by signal handler; do not iterate | 440 self._workerpids = set() # updated by signal handler; do not iterate |
472 | 441 |