mercurial/commandserver.py
changeset 29512 538d0003c9e0
parent 29511 540c01a18bb7
child 29513 e5b4d79a9140
equal deleted inserted replaced
29511:540c01a18bb7 29512:538d0003c9e0
   176         self.cout = channeledoutput(fout, 'o')
   176         self.cout = channeledoutput(fout, 'o')
   177         self.cin = channeledinput(fin, fout, 'I')
   177         self.cin = channeledinput(fin, fout, 'I')
   178         self.cresult = channeledoutput(fout, 'r')
   178         self.cresult = channeledoutput(fout, 'r')
   179 
   179 
   180         self.client = fin
   180         self.client = fin
       
   181 
       
   182     def cleanup(self):
       
   183         """release and restore resources taken during server session"""
       
   184         pass
   181 
   185 
   182     def _read(self, size):
   186     def _read(self, size):
   183         if not size:
   187         if not size:
   184             return ''
   188             return ''
   185 
   189 
   327         fin, fout = _protectio(ui)
   331         fin, fout = _protectio(ui)
   328         try:
   332         try:
   329             sv = server(ui, self.repo, fin, fout)
   333             sv = server(ui, self.repo, fin, fout)
   330             return sv.serve()
   334             return sv.serve()
   331         finally:
   335         finally:
       
   336             sv.cleanup()
   332             _restoreio(ui, fin, fout)
   337             _restoreio(ui, fin, fout)
   333 
   338 
   334 class _requesthandler(socketserver.StreamRequestHandler):
   339 class _requesthandler(socketserver.StreamRequestHandler):
   335     def handle(self):
   340     def handle(self):
   336         ui = self.server.ui
   341         ui = self.server.ui
   346             except IOError as inst:
   351             except IOError as inst:
   347                 if inst.errno != errno.EPIPE:
   352                 if inst.errno != errno.EPIPE:
   348                     raise
   353                     raise
   349             except KeyboardInterrupt:
   354             except KeyboardInterrupt:
   350                 pass
   355                 pass
       
   356             finally:
       
   357                 sv.cleanup()
   351         except: # re-raises
   358         except: # re-raises
   352             # also write traceback to error channel. otherwise client cannot
   359             # also write traceback to error channel. otherwise client cannot
   353             # see it because it is written to server's stderr by default.
   360             # see it because it is written to server's stderr by default.
   354             if sv:
   361             if sv:
   355                 cerr = sv.cerr
   362                 cerr = sv.cerr