J'ai des référentiels Mercurial fonctionnant sur Apache avec mod_wsgi. Les référentiels ont tous les noms de fichiers encodés dans windows-1251. Cet encodage est utilisé pour des raisons historiques: ils ont été convertis en mercurial à partir de svn, windows-1251 est l'encodage Windows par défaut pour les paramètres régionaux russes.
Maintenant, les programmeurs veulent utiliser l' outil Crucible pour la révision du code. Il ne peut pas comprendre les noms de fichiers dans un autre encodage que utf-8. J'ai donc besoin de les convertir de windows-1251 en utf-8. Est-ce que quelqu'un sait comment faire ça? L'extension de conversion Mercurial n'a pas d'options pour convertir les encodages.
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
pourencoding = UTF-8
juste rendre les noms de fichiers illisibles. C'est parce qu'ils sont stockés dans windows-1251. "UTF-8" os.environ ["HGENCODING"] = "UTF-8" est égal à ce paramètre.Réponses:
Vous avez raison de dire que l'extension convertie ne prend pas cela en charge actuellement. Autrement dit, vous ne pouvez pas demander à recodage de coder X à l' encodage Y . Cependant, vous pouvez lui demander de renommer les fichiers un par un pour vous! Créez d'abord un fichier appelé
rename.py
avecExécutez ensuite
Cela crée votre carte de fichiers. Vous pouvez maintenant utiliser
pour convertir le référentiel en un nouveau référentiel. Dans le nouveau référentiel, il semblera que les fichiers ont toujours été enregistrés en utilisant des noms de fichiers UTF-8.
Remarque: Les noms de fichiers sont désormais stockés au format UTF-8 dans le référentiel. Cela signifie que les extractions seront correctes sur les machines Linux modernes. Windows, cependant, n'utilise pas les noms de fichiers UTF-8. L' extension FixUtf-8 doit être utilisée pour que Mercurial convertisse les noms de fichiers UTF-8 en UTF-16 à la volée. Cela créera également des noms de fichiers lisibles sous Windows.
Remarque: Tout le monde devra recloner le nouveau référentiel! La modification d'une partie de l'historique modifie inévitablement tous les hachages des ensembles de modifications. Donc, pour réussir, vous devez soit
ou
Dans les deux cas, la conversion est déterministe et vos utilisateurs peuvent l'exécuter eux-mêmes s'ils disposent de Python. S'ils n'ont qu'une installation TortoiseHg, alors c'est probablement plus facile si vous les convertissez sur votre serveur.
J'ai cherché à rendre l'extension de conversion prise en charge plus directement et j'ai envoyé un correctif à la liste de diffusion Mercurial pour une assistance plus directe.
la source
J'ai eu le même problème. J'avais besoin de convertir un tas de référentiels, j'ai donc écrit un script qui convertit tous les référentiels donnés en liste.
usage:
Vous pouvez obtenir de mon référentiel sur BitBucket.
la source
Juste extraction de Mercurial Wiki FYI
Ainsi, je suppose que changer simplement le jeu de caractères de présentation
encoding =
peut faire l'épaisseurSi cette hypothèse est erronée (c'est toujours possible), essayez l' extension FixUtf8 , lisez attentivement la partie Fixation des noms de fichiers existants à partir du fichier Lisez-moi
la source
encoding = windows-1251
pourencoding = UTF-8
rendre les noms de fichiers juste illisibles. FixUtf8 n'a pas aidé non plus.AddDefaultCharset utf-8
dans Apache. Une autre idée - changer WAMP en LAMP avec UTF8 comme locale et ne rien faire avec les noms de fichiers mais avoir àencoding = UTF-8
nouveauencoding = windows-1251
a été défini car les données étaient déjà dans cet encodage.