Pythonコア開発者の稲田です。
MecurialがPython 3に対応して、Windows上でのUTF-8パス利用に新しい方法ができました。
前提として、Python 3.6 から PEP 529 が有効になって、Windows上でbytesでパスを扱う時はUTF-8を使うようになっています。なので、そのままPythonを使っていたらMercurialもUTF-8を使うことになります。
もちろんそれでは後方互換性が壊れます。PEP 529は後方互換性のためにmbcsを使ってパスを扱うオプションを残していて、Mercurialは後方互換性のためにこのオプションを使っています。
具体的には pycompat.py モジュールで、_enablelegacywindowsfsencoding() を実行しています。
しかしこの関数にはバグがあり、 os.fsencode()/fsdecode() が utf-8 を使うままになってしまっています。
Mercurial はこのバグの回避のために pycompat.py で a.encode("mbcs", "ignore") を使って sys.argv をエンコードしています。
しかしそのほかの部分では fsencode/fsdecode を使ってるところがいくつかあり、その一部では Windowsでの非ASCIIパスの扱いのサポートが壊れているかもしれません。
このPython側のバグの対処として、 _enablelegacywindowsfsencoding() 自体を deprecate してしまって、Pythonの起動時からレガシーファイルシステムエンコーディングを有効にする方法 (pythonのコマンドライン引数、環境変数、Python/C API)に移行してもらおうと思っています。
* 環境変数を使うパッチ
残念ながら私はMercurialもWindowsもほぼ使わないので、興味がある方はパッチを試してみてMercurialのissueにコメントをくれると嬉しいです。
パッチの中で、 hg.bat で set PYTHONLEGACYWINDOWSFSENCODING=1 しているところを消すと、UTF-8でパスを扱うようになるはずです。