diff --git a/hgext/fsmonitor/watchmanclient.py b/hgext/fsmonitor/watchmanclient.py --- a/hgext/fsmonitor/watchmanclient.py +++ b/hgext/fsmonitor/watchmanclient.py @@ -9,8 +9,14 @@ import getpass -from mercurial import util -from mercurial.utils import procutil +from mercurial import ( + encoding, + util, +) +from mercurial.utils import ( + procutil, + stringutil, +) from . import pywatchman @@ -23,12 +29,14 @@ self.warn = False self.invalidate = invalidate - def __str__(self): + def __bytes__(self): if self.warn: return b'warning: Watchman unavailable: %s' % self.msg else: return b'Watchman unavailable: %s' % self.msg + __str__ = encoding.strmethod(__bytes__) + class WatchmanNoRoot(Unavailable): def __init__(self, root, msg): @@ -98,10 +106,12 @@ return self._watchmanclient.query(*watchmanargs) except pywatchman.CommandError as ex: if b'unable to resolve root' in ex.msg: - raise WatchmanNoRoot(self._root, ex.msg) + raise WatchmanNoRoot( + self._root, stringutil.forcebytestr(ex.msg) + ) raise Unavailable(ex.msg) except pywatchman.WatchmanError as ex: - raise Unavailable(str(ex)) + raise Unavailable(stringutil.forcebytestr(ex)) def command(self, *args): try: