diff --git a/mercurial/scmutil.py b/mercurial/scmutil.py --- a/mercurial/scmutil.py +++ b/mercurial/scmutil.py @@ -261,6 +261,13 @@ class abstractvfs(object): def islink(self, path=None): return os.path.islink(self.join(path)) + def reljoin(self, *paths): + """join various elements of a path together (as os.path.join would do) + + The vfs base is not injected so that path stay relative. This exists + to allow handling of strange encoding if needed.""" + return os.path.join(*paths) + def lexists(self, path=None): return os.path.lexists(self.join(path)) diff --git a/mercurial/transaction.py b/mercurial/transaction.py --- a/mercurial/transaction.py +++ b/mercurial/transaction.py @@ -200,8 +200,8 @@ class transaction(object): return dirname, filename = os.path.split(file) backupfilename = "%s.backup.%s" % (self.journal, filename) - backupfile = os.path.join(dirname, backupfilename) vfs = self._vfsmap[location] + backupfile = vfs.reljoin(dirname, backupfilename) if vfs.exists(file): filepath = vfs.join(file) backuppath = vfs.join(backupfile)