12 votos

Codificación de nombre de archivo de convertir Mercurial

He Mercurial repositorios corriendo en Apache con mod_wsgi. Los repositorios de tener todos los nombres de ficheros codificados en windows-1251. Esta codificación se utiliza para históricamente razones: ellos fueron convertidos a mercurial desde el svn, windows-1251 es el predeterminado de windows codificación de rusia de la configuración regional.

Ahora los programadores desea utilizar Crisol herramienta para la revisión de código. No puede undersand los nombres de archivo en cualquier otra codificación de utf-8. Así que tengo que convertirlos a partir de windows-1251 a utf-8. ¿Alguien sabe cómo hacer esto? Mercurial convertir la extensión no tiene opciones para convertir las 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

6voto

Jared Burrows Puntos 210

Tienes razón en que el convertir la extensión no admite esta en un buen camino en la actualidad. Es decir, no se le puede pedir a la recodificación de la codificación de X para la codificación Y. Sin embargo, usted puede pedir que se cambie el nombre los archivos uno por uno para usted! Primero, cree un archivo llamado rename.py con

import sys
for path in sys.stdin:
    old = path[:-1] # strip newline
    new = old.decode("cp1251").encode("utf-8")
    print 'rename "%s" "%s"' % (old, new)

A continuación, ejecute

$ hg manifest --all | python rename.py > rename.txt

Esto crea el archivo de mapa. Ahora puede utilizar

$ hg convert --filemap rename.txt cp1251-repo utf-8-repo

para convertir el repositorio en un nuevo repositorio. En el nuevo repositorio, se verá como los archivos siempre han sido salvados mediante la codificación UTF-8 de los nombres de archivo.

Nota: Los nombres de archivo se almacenan ahora como UTF-8 en el repositorio. Esto significa que las cajas se ve bien en los modernos equipos de Linux. De Windows, sin embargo, no utiliza UTF-8 nombres de archivo. El FixUtf-8 de extensión debe ser utilizado para hacer Mercurial convertir el formato UTF-8 nombres de archivo en UTF-16 sobre la marcha. Esto creará legible los nombres de archivo en Windows también.

Nota: todo el mundo tendrá que volver a clonar el repositorio nuevo! Cambiar cualquier parte de la historia, inevitablemente, cambia todos los conjuntos de cambios de hashes. Así que para lograrlo, es necesario

  1. hacer que todo el mundo empuje para el servidor,
  2. convertir los repositorios en el servidor,
  3. tienen a la gente a re-clon

o

  1. hacer que todo el mundo ejecute los comandos anteriores en sus repositorios
  2. convertir los repositorios en el servidor

De cualquier manera funciona puesto que la conversión es determinista y para que los usuarios puedan ejecutar ellos mismos si tienen Python disponibles. Si sólo tienen un TortoiseHg la instalación, entonces es probablemente más fácil si se convierte para ellos en su servidor.

Miré a hacer el converso de apoyo a la extensión de esta forma más directa y han enviado un parche para el Mercurial lista de correo para un apoyo más directo a esta.

2voto

Bryan Puntos 16

Yo tenía el mismo problema. Lo que necesitaba para convertir montón de repositorios, así que escribí un script que convierte todos los repositorios dado como lista.

uso:

python hg_convert_filenames_encoding.py [-h] [-i INPUT_ENCODING] [-o OUTPUT_ENCODING] [-b] [-u] [repositories [repositories ...]]

Usted puede obtener esta secuencia de comandos de mi "Scripts" repositorio en BitBucket.

0voto

Lazy Badger Puntos 2403

Sólo la extracción de Mercurial Wiki FYI

Los siguientes son explícitamente tratados como datos binarios en un desconocido codificación:

  • el contenido del archivo
  • los nombres de archivo

Estos elementos deben ser tratados como datos binarios y en conserva sin pérdida siempre que sea posible.

Por lo tanto, supongo que, simplemente cambiando la presentación del conjunto de caracteres en encoding = puede hacer el espesor

Si esta suposición es incorrecta (siempre que sea posible), intente FixUtf8 Extensión, lea la parte de Fijación existentes nombres de archivo de readme cuidadosamente

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: