mercurial/commandserver.py
changeset 26587 56b2bcea2529
parent 25832 5857be01962e
child 27351 28e50c4b15ed
equal deleted inserted replaced
26586:d51c658d3f04 26587:56b2bcea2529
     6 # GNU General Public License version 2 or any later version.
     6 # GNU General Public License version 2 or any later version.
     7 
     7 
     8 from i18n import _
     8 from i18n import _
     9 import struct
     9 import struct
    10 import sys, os, errno, traceback, SocketServer
    10 import sys, os, errno, traceback, SocketServer
    11 import dispatch, encoding, util
    11 import dispatch, encoding, util, error
    12 
    12 
    13 logfile = None
    13 logfile = None
    14 
    14 
    15 def log(*args):
    15 def log(*args):
    16     if not logfile:
    16     if not logfile:
   220             if handler:
   220             if handler:
   221                 handler(self)
   221                 handler(self)
   222             else:
   222             else:
   223                 # clients are expected to check what commands are supported by
   223                 # clients are expected to check what commands are supported by
   224                 # looking at the servers capabilities
   224                 # looking at the servers capabilities
   225                 raise util.Abort(_('unknown command %s') % cmd)
   225                 raise error.Abort(_('unknown command %s') % cmd)
   226 
   226 
   227         return cmd != ''
   227         return cmd != ''
   228 
   228 
   229     capabilities = {'runcommand'  : runcommand,
   229     capabilities = {'runcommand'  : runcommand,
   230                     'getencoding' : getencoding}
   230                     'getencoding' : getencoding}
   299         try:
   299         try:
   300             try:
   300             try:
   301                 sv.serve()
   301                 sv.serve()
   302             # handle exceptions that may be raised by command server. most of
   302             # handle exceptions that may be raised by command server. most of
   303             # known exceptions are caught by dispatch.
   303             # known exceptions are caught by dispatch.
   304             except util.Abort as inst:
   304             except error.Abort as inst:
   305                 ui.warn(_('abort: %s\n') % inst)
   305                 ui.warn(_('abort: %s\n') % inst)
   306             except IOError as inst:
   306             except IOError as inst:
   307                 if inst.errno != errno.EPIPE:
   307                 if inst.errno != errno.EPIPE:
   308                     raise
   308                     raise
   309             except KeyboardInterrupt:
   309             except KeyboardInterrupt:
   321     def __init__(self, ui, repo, opts):
   321     def __init__(self, ui, repo, opts):
   322         self.ui = ui
   322         self.ui = ui
   323         self.repo = repo
   323         self.repo = repo
   324         self.address = opts['address']
   324         self.address = opts['address']
   325         if not util.safehasattr(SocketServer, 'UnixStreamServer'):
   325         if not util.safehasattr(SocketServer, 'UnixStreamServer'):
   326             raise util.Abort(_('unsupported platform'))
   326             raise error.Abort(_('unsupported platform'))
   327         if not self.address:
   327         if not self.address:
   328             raise util.Abort(_('no socket path specified with --address'))
   328             raise error.Abort(_('no socket path specified with --address'))
   329 
   329 
   330     def init(self):
   330     def init(self):
   331         class cls(SocketServer.ForkingMixIn, SocketServer.UnixStreamServer):
   331         class cls(SocketServer.ForkingMixIn, SocketServer.UnixStreamServer):
   332             ui = self.ui
   332             ui = self.ui
   333             repo = self.repo
   333             repo = self.repo
   349 def createservice(ui, repo, opts):
   349 def createservice(ui, repo, opts):
   350     mode = opts['cmdserver']
   350     mode = opts['cmdserver']
   351     try:
   351     try:
   352         return _servicemap[mode](ui, repo, opts)
   352         return _servicemap[mode](ui, repo, opts)
   353     except KeyError:
   353     except KeyError:
   354         raise util.Abort(_('unknown mode %s') % mode)
   354         raise error.Abort(_('unknown mode %s') % mode)