Mercurial > hg
diff mercurial/lock.py @ 51286:81224afd938d
lock: properly convert error to bytes
Flagged by pytype when a later changeset is applied moving typing comment to annotation.
We fix this ahead of the annotation change to make sure pytype remains happy
after the change.
We have to do fairly crazy dance for pytype to be happy. This probably comes
from the fact IOError.filename probably claims to be `str` while it is actually
`bytes` if the filename raising that `IOError` is bytes.
At the same time, `IOError.strerror` is consistently `str` and should be passed
as `str` everywhere.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Wed, 20 Dec 2023 20:13:22 +0100 |
parents | 18c8c18993f0 |
children | 9da3fcc5f70f |
line wrap: on
line diff
--- a/mercurial/lock.py Wed Dec 20 12:51:20 2023 +0100 +++ b/mercurial/lock.py Wed Dec 20 20:13:22 2023 +0100 @@ -12,6 +12,7 @@ import signal import socket import time +import typing import warnings from .i18n import _ @@ -154,8 +155,12 @@ if delay == warningidx: printwarning(ui.warn, inst.locker) if timeout <= delay: + assert isinstance(inst.filename, bytes) raise error.LockHeld( - errno.ETIMEDOUT, inst.filename, l.desc, inst.locker + errno.ETIMEDOUT, + typing.cast(bytes, inst.filename), + l.desc, + inst.locker, ) time.sleep(1) delay += 1 @@ -290,8 +295,13 @@ locker, ) else: + assert isinstance(why.filename, bytes) + assert isinstance(why.strerror, str) raise error.LockUnavailable( - why.errno, why.strerror, why.filename, self.desc + why.errno, + why.strerror, + typing.cast(bytes, why.filename), + self.desc, ) if not self.held: