D7214: fsmonitor: normalize exception types to bytes
indygreg (Gregory Szorc)
phabricator at mercurial-scm.org
Sat Nov 2 22:04:27 UTC 2019
indygreg created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.
REVISION SUMMARY
Unavailable.msg should now always be bytes.
We also rename Unavailable.__str__ to __bytes__ as it always
returns bytes. We make __str__ a simple wrapper that decodes that
result to str.
There's probably some excessive strutil.forcebytestr() in
fsmonitor/__init__.py now. But at least the exceptions around
type coercion should now be gone.
REPOSITORY
rHG Mercurial
BRANCH
stable
REVISION DETAIL
https://phab.mercurial-scm.org/D7214
AFFECTED FILES
hgext/fsmonitor/watchmanclient.py
CHANGE DETAILS
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:
To: indygreg, #hg-reviewers
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list