Tengo repositorios Mercurial ejecutándose en Apache con mod_wsgi. Los repositorios tienen todos los nombres de archivo codificados en windows-1251. Esta codificación se utiliza por razones históricas: se convirtieron a mercurial desde svn, windows-1251 es la codificación predeterminada de Windows para la configuración regional rusa.
Ahora los programadores quieren usar la herramienta Crucible para revisar el código. No puede comprender los nombres de archivo en ninguna otra codificación que no sea utf-8. Entonces necesito convertirlos de windows-1251 a utf-8. ¿Alguien sabe como hacer esto? La extensión de conversión de Mercurial no tiene opciones para convertir codificaciones.
hgweb.config:
[web]
#encoding = UTF-8
encoding = windows-1251
#allow_archive = gz, zip, bz2
allow_archive = zip
allow_push = *
push_ssl = false
[extensions]
[collections]
/data/mercurial = /data/mercurial
encoding = windows-1251
aencoding = UTF-8
nombres de archivo que no se pueden leer. Esto se debe a que están almacenados en windows-1251. "UTF-8" os.environ ["HGENCODING"] = "UTF-8" es igual a esta configuración.Respuestas:
Tienes razón en que la extensión de conversión no admite esto de una manera agradable actualmente. Es decir, no se puede pedir a recodificar de codificación de X a la codificación Y . Sin embargo, puede pedirle que cambie el nombre de los archivos uno por uno. Primero cree un archivo llamado
rename.py
conEntonces corre
Esto crea su mapa de archivos. Ahora puedes usar
para convertir el repositorio en un nuevo repositorio. En el nuevo repositorio, parecerá que los archivos siempre se han guardado utilizando nombres de archivo UTF-8.
Nota: Los nombres de los archivos ahora se almacenan como UTF-8 en el repositorio. Esto significa que los pagos se verán bien en las máquinas Linux modernas. Windows, sin embargo, no utiliza nombres de archivo UTF-8. La extensión FixUtf-8 debe usarse para hacer que Mercurial convierta los nombres de archivo UTF-8 en UTF-16 sobre la marcha. Esto también creará nombres de archivo legibles en Windows.
Nota: ¡ Todos tendrán que volver a clonar el nuevo repositorio! Cambiar cualquier parte de la historia cambia inevitablemente todos los hashes de conjuntos de cambios también. Entonces, para lograr esto, necesitas
o
De cualquier forma funciona, ya que la conversión es determinista y sus usuarios pueden ejecutarla ellos mismos si tienen Python disponible. Si solo tienen una instalación de TortoiseHg, entonces probablemente sea más fácil si los convierte en su servidor.
Busqué hacer que la extensión de conversión admita esto más directamente y envié un parche a la lista de correo de Mercurial para obtener un soporte más directo para esto.
fuente
Yo tuve el mismo problema. Necesitaba convertir un montón de repositorios, así que escribí un script que convierte todos los repositorios dados como lista.
uso:
Puedes obtenerlo desde mi repositorio en BitBucket.
fuente
Solo extracción de Mercurial Wiki FYI
Por lo tanto, supongo, sólo cambiando charset presentación en
encoding =
puede hacer la gruesaSi esta suposición es incorrecta (siempre es posible), intente FixUtf8 Extension , lea la parte Reparar cuidadosamente los nombres de archivo existentes del archivo Léame
fuente
encoding = windows-1251
aencoding = UTF-8
nombres de archivo recién ilegibles. FixUtf8 tampoco ayudó.AddDefaultCharset utf-8
en Apache. Otra idea: cambiar WAMP a LAMP con UTF8 como configuración regional y no hacer nada con los nombres de archivo, pero lo tengoencoding = UTF-8
nuevamenteencoding = windows-1251
se configuró porque los datos ya estaban en esta codificación.