Ответ 1
Это не относится к вам; прочитайте последний абзац, если он не похож на него.
Я не уверен, что это то, что вам нужно, но мне нужно было разграничить содержимое UTF-16LE больше, чем просто "двоичные файлы разные" - когда я искал несколько месяцев назад, я нашел поток и ошибка, обсуждающая его; здесь часть. Я не могу найти исходный источник этого мини-расширения (хотя он делает именно то, что делает этот патч), но я получил расширение, BOM.py
:
#!/usr/bin/env python
from mercurial import hg, util
import codecs
boms = [
codecs.BOM_UTF8,
codecs.BOM_UTF16_BE, codecs.BOM_UTF16_LE,
codecs.BOM_UTF32_BE, codecs.BOM_UTF32_LE
]
def binary(s):
if s:
for bom in boms:
if s.startswith(bom):
return False
return '\0' in s
return False
def reposetup(ui, repo):
util.binary = binary
Это загружается в .hgrc(или ваши пользователи \username\mercurial.ini) следующим образом:
[extensions]
bom = ~/.hgexts/BOM.py
Обратите внимание, что путь будет отличаться между Windows и Linux; на моей копии Windows я поместил путь как \...\whatever
(он на USB-диске, где буква диска может измениться). К сожалению, относительные пути берутся относительно текущего рабочего каталога, а не корня репозитория или любой такой вещи, но если вы сохраняете его на своем диске C: вы можете просто поместить полный путь.
В Linux (моя основная среда разработки) это работает хорошо; в командной строке (который я все еще использую регулярно), он обычно работает хорошо. Я никогда не пробовал это в PowerShell, но я ожидал бы, что это будет лучше, чем Command Prompt в его поддержке произвольных нулевых байтов в командной строке.
Я не уверен, что это то, чего вы хотите вообще; кстати, вы сказали "двоичные различия". Я подозреваю, что вы уже можете либо иметь это, либо делать hg diff -a
, который достигает того же самого. В этом случае все, что я могу представить, это написать другое расширение, которое берет UTF-16LE и пытается его декодировать в UTF-8. Я не уверен в синтаксисе для такого расширения, но я мог бы попробовать это.
Изменить:, теперь травляя источник mercurial с помощью команд .py, cmdutil.py, patch.py и mdiff.py, я вижу, что двоичные разности выполняются с помощью кодировки base85 (patch.b85diff), а не нормальный diff. Я не знал об этом, я думал, что это просто заставило его разобраться. В этом случае, возможно, этот текст имеет значение в конце концов. Я жду ответа, чтобы убедиться, что это!