Mercurial > public > mercurial-scm > hg
comparison mercurial/commandserver.py @ 29543:d74b8a4fde3b
commandserver: extract function that serves for the current connection
This will be used by new server implementation.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Sun, 22 May 2016 12:49:22 +0900 |
parents | 6011ad3b0a42 |
children | 024e8f82f3de |
comparison
equal
deleted
inserted
replaced
29542:6011ad3b0a42 | 29543:d74b8a4fde3b |
---|---|
336 return sv.serve() | 336 return sv.serve() |
337 finally: | 337 finally: |
338 sv.cleanup() | 338 sv.cleanup() |
339 _restoreio(ui, fin, fout) | 339 _restoreio(ui, fin, fout) |
340 | 340 |
341 class _requesthandler(socketserver.BaseRequestHandler): | 341 def _serverequest(ui, repo, conn, createcmdserver): |
342 def handle(self): | 342 if True: # TODO: unindent |
343 # use a different process group from the master process, making this | 343 # use a different process group from the master process, making this |
344 # process pass kernel "is_current_pgrp_orphaned" check so signals like | 344 # process pass kernel "is_current_pgrp_orphaned" check so signals like |
345 # SIGTSTP, SIGTTIN, SIGTTOU are not ignored. | 345 # SIGTSTP, SIGTTIN, SIGTTOU are not ignored. |
346 os.setpgid(0, 0) | 346 os.setpgid(0, 0) |
347 # change random state otherwise forked request handlers would have a | 347 # change random state otherwise forked request handlers would have a |
348 # same state inherited from parent. | 348 # same state inherited from parent. |
349 random.seed() | 349 random.seed() |
350 ui = self.server.ui | 350 |
351 | |
352 conn = self.request | |
353 fin = conn.makefile('rb') | 351 fin = conn.makefile('rb') |
354 fout = conn.makefile('wb') | 352 fout = conn.makefile('wb') |
355 sv = None | 353 sv = None |
356 try: | 354 try: |
357 sv = self._createcmdserver(conn, fin, fout) | 355 sv = createcmdserver(repo, conn, fin, fout) |
358 try: | 356 try: |
359 sv.serve() | 357 sv.serve() |
360 # handle exceptions that may be raised by command server. most of | 358 # handle exceptions that may be raised by command server. most of |
361 # known exceptions are caught by dispatch. | 359 # known exceptions are caught by dispatch. |
362 except error.Abort as inst: | 360 except error.Abort as inst: |
385 if inst.errno != errno.EPIPE: | 383 if inst.errno != errno.EPIPE: |
386 raise | 384 raise |
387 # trigger __del__ since ForkingMixIn uses os._exit | 385 # trigger __del__ since ForkingMixIn uses os._exit |
388 gc.collect() | 386 gc.collect() |
389 | 387 |
390 def _createcmdserver(self, conn, fin, fout): | 388 class _requesthandler(socketserver.BaseRequestHandler): |
389 def handle(self): | |
390 _serverequest(self.server.ui, self.server.repo, self.request, | |
391 self._createcmdserver) | |
392 | |
393 def _createcmdserver(self, repo, conn, fin, fout): | |
391 ui = self.server.ui | 394 ui = self.server.ui |
392 repo = self.server.repo | |
393 return server(ui, repo, fin, fout) | 395 return server(ui, repo, fin, fout) |
394 | 396 |
395 class unixservice(object): | 397 class unixservice(object): |
396 """ | 398 """ |
397 Listens on unix domain socket and forks server per connection | 399 Listens on unix domain socket and forks server per connection |