Python OSError: [Errno 84] , when there is (or was) unsupported character in a the name of a workingcopy entry
The shown abort (and many similar) will show up, if there is (or was) a character unsupported by the python filesystem support in any of the file or directory names within a working copy. In this case it was a o-Umlaut (ö) in a NTFS-partition mounted with ntfs3g in Ubuntu 12.10.
** Mercurial version (2.3). TortoiseHg version (2.4.3) ** Command: log ** CWD: /home/... ** Encoding: UTF-8 ** Extensions loaded: qct ** Python version: 2.7.3 (default, Aug 1 2012, 05:14:39) [GCC 4.6.3] ** Qt-4.8.1 PyQt-4.9.1 Traceback (most recent call last): File "/usr/lib/python2.7/dist-packages/tortoisehg/hgqt/repowidget.py", line 1681, in visualDiffRevision dlg = visdiff.visualdiff(self.repo.ui, self.repo, , opts) File "/usr/lib/python2.7/dist-packages/tortoisehg/hgqt/visdiff.py", line 208, in visualdiff mod_a, add_a, rem_a = map(set, repo.status(ctx1a.node(), n2, m)[:3]) File "/usr/lib/python2.7/dist-packages/mercurial/localrepo.py", line 1567, in status listclean, listunknown) File "/usr/lib/python2.7/dist-packages/mercurial/dirstate.py", line 752, in status listignored).iteritems(): File "/usr/lib/python2.7/dist-packages/mercurial/dirstate.py", line 698, in walk for nf, st in zip(visit, util.statfiles([join(i) for i in visit])): File "/usr/lib/python2.7/dist-packages/mercurial/posix.py", line 351, in statfiles st = lstat(nf) OSError: [Errno 84] Ungültiges oder unvollständiges Multi-Byte- oder Wide-Zeichen: '/ (...) /examples/aufl\xf6sungen'
Interestingly, the directory was created within Ubuntu (from within Java) and there was no problem displaying the directory with standard OS tools, e. g. ls, Thunar, etc. Even removing it from the working copy and committing was successfull.
Up to then, even pushing the WC to another repo seemed OK, but after that any other operation requiring a traversal of this directory failed, which means: It is possible to render a working copy and a connected repo unusuable by having a funny character somewhere