hgext/fsmonitor/watchmanclient.py
branchstable
changeset 43398 9a8f8c6ed965
parent 43385 6469c23a40a2
child 44074 806d14efec8d
equal deleted inserted replaced
43397:09ab61c0ab4b 43398:9a8f8c6ed965
     7 
     7 
     8 from __future__ import absolute_import
     8 from __future__ import absolute_import
     9 
     9 
    10 import getpass
    10 import getpass
    11 
    11 
    12 from mercurial import util
    12 from mercurial import (
    13 from mercurial.utils import procutil
    13     encoding,
       
    14     util,
       
    15 )
       
    16 from mercurial.utils import (
       
    17     procutil,
       
    18     stringutil,
       
    19 )
    14 
    20 
    15 from . import pywatchman
    21 from . import pywatchman
    16 
    22 
    17 
    23 
    18 class Unavailable(Exception):
    24 class Unavailable(Exception):
    21         self.warn = warn
    27         self.warn = warn
    22         if self.msg == b'timed out waiting for response':
    28         if self.msg == b'timed out waiting for response':
    23             self.warn = False
    29             self.warn = False
    24         self.invalidate = invalidate
    30         self.invalidate = invalidate
    25 
    31 
    26     def __str__(self):
    32     def __bytes__(self):
    27         if self.warn:
    33         if self.warn:
    28             return b'warning: Watchman unavailable: %s' % self.msg
    34             return b'warning: Watchman unavailable: %s' % self.msg
    29         else:
    35         else:
    30             return b'Watchman unavailable: %s' % self.msg
    36             return b'Watchman unavailable: %s' % self.msg
       
    37 
       
    38     __str__ = encoding.strmethod(__bytes__)
    31 
    39 
    32 
    40 
    33 class WatchmanNoRoot(Unavailable):
    41 class WatchmanNoRoot(Unavailable):
    34     def __init__(self, root, msg):
    42     def __init__(self, root, msg):
    35         self.root = root
    43         self.root = root
    96                     binpath=procutil.tonativestr(watchman_exe),
   104                     binpath=procutil.tonativestr(watchman_exe),
    97                 )
   105                 )
    98             return self._watchmanclient.query(*watchmanargs)
   106             return self._watchmanclient.query(*watchmanargs)
    99         except pywatchman.CommandError as ex:
   107         except pywatchman.CommandError as ex:
   100             if b'unable to resolve root' in ex.msg:
   108             if b'unable to resolve root' in ex.msg:
   101                 raise WatchmanNoRoot(self._root, ex.msg)
   109                 raise WatchmanNoRoot(
       
   110                     self._root, stringutil.forcebytestr(ex.msg)
       
   111                 )
   102             raise Unavailable(ex.msg)
   112             raise Unavailable(ex.msg)
   103         except pywatchman.WatchmanError as ex:
   113         except pywatchman.WatchmanError as ex:
   104             raise Unavailable(str(ex))
   114             raise Unavailable(stringutil.forcebytestr(ex))
   105 
   115 
   106     def command(self, *args):
   116     def command(self, *args):
   107         try:
   117         try:
   108             try:
   118             try:
   109                 return self._command(*args)
   119                 return self._command(*args)