##// END OF EJS Templates
commandserver: pass around option to hook repo instance creation...
Yuya Nishihara -
r40911:e7110f44 default
parent child Browse files
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, hashstate, baseaddress):
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