diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py
index ef377f2e0ab9e6615b8d00119fc1b1c9c504844b_bWVyY3VyaWFsL2xvY2FscmVwby5weQ==..37cdf1fca1b27ae970c7d5ea9a6abf5f39d95c6f_bWVyY3VyaWFsL2xvY2FscmVwby5weQ== 100644
--- a/mercurial/localrepo.py
+++ b/mercurial/localrepo.py
@@ -862,7 +862,7 @@
                 (self.svfs, 'journal.phaseroots'))
 
     def undofiles(self):
-        return [vfs.join(undoname(x)) for vfs, x in self._journalfiles()]
+        return [(vfs, undoname(x)) for vfs, x in self._journalfiles()]
 
     def _writejournal(self, desc):
         self.opener.write("journal.dirstate",
diff --git a/mercurial/repair.py b/mercurial/repair.py
index ef377f2e0ab9e6615b8d00119fc1b1c9c504844b_bWVyY3VyaWFsL3JlcGFpci5weQ==..37cdf1fca1b27ae970c7d5ea9a6abf5f39d95c6f_bWVyY3VyaWFsL3JlcGFpci5weQ== 100644
--- a/mercurial/repair.py
+++ b/mercurial/repair.py
@@ -157,5 +157,5 @@
                 os.unlink(chgrpfile)
 
         # remove undo files
-        for undofile in repo.undofiles():
+        for undovfs, undofile in repo.undofiles():
             try:
@@ -161,4 +161,4 @@
             try:
-                os.unlink(undofile)
+                undovfs.unlink(undofile)
             except OSError, e:
                 if e.errno != errno.ENOENT:
@@ -163,6 +163,7 @@
             except OSError, e:
                 if e.errno != errno.ENOENT:
-                    ui.warn(_('error removing %s: %s\n') % (undofile, str(e)))
+                    ui.warn(_('error removing %s: %s\n') %
+                            (undovfs.join(undofile), str(e)))
 
         for m in updatebm:
             bm[m] = repo[newbmtarget].node()