ES6 позволяет «сжатые методы» , которые, как вы обнаружили, еще не совместимы с кросс-браузером.
Если мой другой ответ не делает то, что вы хотите, я думаю, что этот может; хотя я еще не тестировал его на Windows, он хорошо работает в Linux. Он делает то, что потенциально неприятно, заключая в mercurial.mdiff.unidiff
новую функцию, которая конвертирует utf-16le в utf-8. Это не повлияет на hg st
, но повлияет на hg diff
. Одна потенциальная ловушка заключается в том, что спецификация будет также изменена с спецификации UTF-16LE на спецификацию UTF-8.
Во всяком случае, я думаю, что это может быть полезно для вас, так что вот оно.
Расширение файла utf16decodediff.py
:
import codecs
from mercurial import mdiff
unidiff = mdiff.unidiff
def new_unidiff(a, ad, b, bd, fn1, fn2, r=None, opts=mdiff.defaultopts):
"""
A simple wrapper around mercurial.mdiff.unidiff which first decodes
UTF-16LE text.
"""
if a.startswith(codecs.BOM_UTF16_LE):
try:
# Gets reencoded as utf-8 to be a str rather than a unicode; some
# extensions may expect a str and may break if it's wrong.
a = a.decode('utf-16le').encode('utf-8')
except UnicodeDecodeError:
pass
if b.startswith(codecs.BOM_UTF16_LE):
try:
b = b.decode('utf-16le').encode('utf-8')
except UnicodeDecodeError:
pass
return unidiff(a, ad, b, bd, fn1, fn2, r, opts)
mdiff.unidiff = new_unidiff
В .hgrc
:
[extensions]
utf16decodediff = ~/.hgexts/utf16decodediff.py
(или эквивалентные пути.)