vfs: simplify the `abstractvfs.rename()` implementation
PyCharm was yapping about `util.rename()` not returning anything, because it is
typed to return `None`, but the value was captured and returned after calling
`_avoidambig()`. Instead, drop all of that, unconditionally rename, and then
call `_avoidambig()` if appropriate.
While we're here, convert the ersatz ternary operator into a modern one to help
pytype. When a variable is initialized the old way, pytype tends to assign the
type of the LHS of the `and`. In this case, that's a bool, and it will get
confused that bool doesn't have a `stat` attribute once this method gets more
type annotations. (Currently it thinks the `checkambig` arg is `Any`, so it
doesn't care.)
--- a/mercurial/vfs.py Fri Sep 20 00:07:39 2024 -0400
+++ b/mercurial/vfs.py Fri Sep 20 01:16:16 2024 -0400
@@ -273,12 +273,12 @@
self._auditpath(dst, b'w')
srcpath = self.join(src)
dstpath = self.join(dst)
- oldstat = checkambig and util.filestat.frompath(dstpath)
+ oldstat = util.filestat.frompath(dstpath) if checkambig else None
+
+ util.rename(srcpath, dstpath)
+
if oldstat and oldstat.stat:
- ret = util.rename(srcpath, dstpath)
_avoidambig(dstpath, oldstat)
- return ret
- return util.rename(srcpath, dstpath)
def readlink(self, path: bytes) -> bytes:
return util.readlink(self.join(path))