Show More
@@ -313,10 +313,11 b' class channeledsystem(object):' | |||||
313 | ] |
|
313 | ] | |
314 |
|
314 | |||
315 | class chgcmdserver(commandserver.server): |
|
315 | class chgcmdserver(commandserver.server): | |
316 |
def __init__(self, ui, repo, fin, fout, sock, |
|
316 | def __init__(self, ui, repo, fin, fout, sock, prereposetups, | |
|
317 | hashstate, baseaddress): | |||
317 | super(chgcmdserver, self).__init__( |
|
318 | super(chgcmdserver, self).__init__( | |
318 | _newchgui(ui, channeledsystem(fin, fout, 'S'), self.attachio), |
|
319 | _newchgui(ui, channeledsystem(fin, fout, 'S'), self.attachio), | |
319 | repo, fin, fout) |
|
320 | repo, fin, fout, prereposetups) | |
320 | self.clientsock = sock |
|
321 | self.clientsock = sock | |
321 | self._ioattached = False |
|
322 | self._ioattached = False | |
322 | self._oldios = [] # original (self.ch, ui.fp, fd) before "attachio" |
|
323 | self._oldios = [] # original (self.ch, ui.fp, fd) before "attachio" | |
@@ -617,8 +618,8 b' class chgunixservicehandler(object):' | |||||
617 | def newconnection(self): |
|
618 | def newconnection(self): | |
618 | self._lastactive = time.time() |
|
619 | self._lastactive = time.time() | |
619 |
|
620 | |||
620 | def createcmdserver(self, repo, conn, fin, fout): |
|
621 | def createcmdserver(self, repo, conn, fin, fout, prereposetups): | |
621 | return chgcmdserver(self.ui, repo, fin, fout, conn, |
|
622 | return chgcmdserver(self.ui, repo, fin, fout, conn, prereposetups, | |
622 | self._hashstate, self._baseaddress) |
|
623 | self._hashstate, self._baseaddress) | |
623 |
|
624 | |||
624 | def chgunixservice(ui, repo, opts): |
|
625 | def chgunixservice(ui, repo, opts): |
@@ -196,7 +196,7 b' class server(object):' | |||||
196 | Listens for commands on fin, runs them and writes the output on a channel |
|
196 | Listens for commands on fin, runs them and writes the output on a channel | |
197 | based stream to fout. |
|
197 | based stream to fout. | |
198 | """ |
|
198 | """ | |
199 | def __init__(self, ui, repo, fin, fout): |
|
199 | def __init__(self, ui, repo, fin, fout, prereposetups=None): | |
200 | self.cwd = encoding.getcwd() |
|
200 | self.cwd = encoding.getcwd() | |
201 |
|
201 | |||
202 | if repo: |
|
202 | if repo: | |
@@ -208,6 +208,7 b' class server(object):' | |||||
208 | else: |
|
208 | else: | |
209 | self.ui = ui |
|
209 | self.ui = ui | |
210 | self.repo = self.repoui = None |
|
210 | self.repo = self.repoui = None | |
|
211 | self._prereposetups = prereposetups | |||
211 |
|
212 | |||
212 | self.cdebug = channeledoutput(fout, 'd') |
|
213 | self.cdebug = channeledoutput(fout, 'd') | |
213 | self.cerr = channeledoutput(fout, 'e') |
|
214 | self.cerr = channeledoutput(fout, 'e') | |
@@ -294,7 +295,8 b' class server(object):' | |||||
294 | ui.setconfig('ui', 'nontty', 'true', 'commandserver') |
|
295 | ui.setconfig('ui', 'nontty', 'true', 'commandserver') | |
295 |
|
296 | |||
296 | req = dispatch.request(args[:], copiedui, self.repo, self.cin, |
|
297 | req = dispatch.request(args[:], copiedui, self.repo, self.cin, | |
297 |
self.cout, self.cerr, self.cmsg |
|
298 | self.cout, self.cerr, self.cmsg, | |
|
299 | prereposetups=self._prereposetups) | |||
298 |
|
300 | |||
299 | try: |
|
301 | try: | |
300 | ret = dispatch.dispatch(req) & 255 |
|
302 | ret = dispatch.dispatch(req) & 255 | |
@@ -420,12 +422,12 b' def _initworkerprocess():' | |||||
420 | # same state inherited from parent. |
|
422 | # same state inherited from parent. | |
421 | random.seed() |
|
423 | random.seed() | |
422 |
|
424 | |||
423 | def _serverequest(ui, repo, conn, createcmdserver): |
|
425 | def _serverequest(ui, repo, conn, createcmdserver, prereposetups): | |
424 | fin = conn.makefile(r'rb') |
|
426 | fin = conn.makefile(r'rb') | |
425 | fout = conn.makefile(r'wb') |
|
427 | fout = conn.makefile(r'wb') | |
426 | sv = None |
|
428 | sv = None | |
427 | try: |
|
429 | try: | |
428 | sv = createcmdserver(repo, conn, fin, fout) |
|
430 | sv = createcmdserver(repo, conn, fin, fout, prereposetups) | |
429 | try: |
|
431 | try: | |
430 | sv.serve() |
|
432 | sv.serve() | |
431 | # handle exceptions that may be raised by command server. most of |
|
433 | # handle exceptions that may be raised by command server. most of | |
@@ -484,10 +486,10 b' class unixservicehandler(object):' | |||||
484 | def newconnection(self): |
|
486 | def newconnection(self): | |
485 | """Called when main process notices new connection""" |
|
487 | """Called when main process notices new connection""" | |
486 |
|
488 | |||
487 | def createcmdserver(self, repo, conn, fin, fout): |
|
489 | def createcmdserver(self, repo, conn, fin, fout, prereposetups): | |
488 | """Create new command server instance; called in the process that |
|
490 | """Create new command server instance; called in the process that | |
489 | serves for the current connection""" |
|
491 | serves for the current connection""" | |
490 | return server(self.ui, repo, fin, fout) |
|
492 | return server(self.ui, repo, fin, fout, prereposetups) | |
491 |
|
493 | |||
492 | class unixforkingservice(object): |
|
494 | class unixforkingservice(object): | |
493 | """ |
|
495 | """ | |
@@ -619,6 +621,7 b' class unixforkingservice(object):' | |||||
619 | _initworkerprocess() |
|
621 | _initworkerprocess() | |
620 | h = self._servicehandler |
|
622 | h = self._servicehandler | |
621 | try: |
|
623 | try: | |
622 |
_serverequest(self.ui, self.repo, conn, h.createcmdserver |
|
624 | _serverequest(self.ui, self.repo, conn, h.createcmdserver, | |
|
625 | prereposetups=None) # TODO: pass in hook functions | |||
623 | finally: |
|
626 | finally: | |
624 | gc.collect() # trigger __del__ since worker process uses os._exit |
|
627 | gc.collect() # trigger __del__ since worker process uses os._exit |
@@ -848,10 +848,10 b' unix domain socket:' | |||||
848 |
|
848 | |||
849 | $ cat <<'EOF' > ../earlycrasher.py |
|
849 | $ cat <<'EOF' > ../earlycrasher.py | |
850 | > from mercurial import commandserver, extensions |
|
850 | > from mercurial import commandserver, extensions | |
851 | > def _serverequest(orig, ui, repo, conn, createcmdserver): |
|
851 | > def _serverequest(orig, ui, repo, conn, createcmdserver, prereposetups): | |
852 | > def createcmdserver(*args, **kwargs): |
|
852 | > def createcmdserver(*args, **kwargs): | |
853 | > raise Exception('crash') |
|
853 | > raise Exception('crash') | |
854 | > return orig(ui, repo, conn, createcmdserver) |
|
854 | > return orig(ui, repo, conn, createcmdserver, prereposetups) | |
855 | > def extsetup(ui): |
|
855 | > def extsetup(ui): | |
856 | > extensions.wrapfunction(commandserver, b'_serverequest', _serverequest) |
|
856 | > extensions.wrapfunction(commandserver, b'_serverequest', _serverequest) | |
857 | > EOF |
|
857 | > EOF |
General Comments 0
You need to be logged in to leave comments.
Login now