Eu tenho repositórios Mercurial executando no Apache com mod_wsgi. Os repositórios têm todos os nomes de arquivos codificados no windows-1251. Essa codificação é usada por razões históricas: elas foram convertidas em mercurial a partir do svn, o windows-1251 é a codificação padrão do Windows para a localidade russa.
Agora os programadores desejam usar a ferramenta Crisol para revisão de código. Não pode conter nomes de arquivos em nenhuma outra codificação além de utf-8. Então, eu preciso convertê-los do windows-1251 para utf-8. Alguém sabe como fazer isso? A extensão de conversão do Mercurial não tem opções para converter codificações.
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
paraencoding = UTF-8
apenas tornar os nomes de arquivos ilegíveis. Isso ocorre porque eles são armazenados no windows-1251. "UTF-8" os.environ ["HGENCODING"] = "UTF-8" é igual a esta configuração.Respostas:
Você está certo de que a extensão convert não suporta isso de uma maneira agradável atualmente. Ou seja, você não pode pedir-lhe para recode de codificação X para codificar Y . No entanto, você pode pedir para renomear os arquivos um por um para você! Primeiro, crie um arquivo chamado
rename.py
comEntão corra
Isso cria seu mapa de arquivos. Agora você pode usar
para converter o repositório em um novo repositório. No novo repositório, parece que os arquivos sempre foram salvos usando nomes de arquivos UTF-8.
Nota: Os nomes dos arquivos agora estão armazenados como UTF-8 no repositório. Isso significa que as caixas ficarão bem nas máquinas Linux modernas. O Windows, no entanto, não usa nomes de arquivos UTF-8. A extensão FixUtf-8 deve ser usada para fazer o Mercurial converter os nomes de arquivo UTF-8 em UTF-16 em tempo real. Isso criará nomes de arquivos legíveis no Windows também.
Nota: Todo mundo terá que clonar novamente o novo repositório! Alterar qualquer parte da história inevitavelmente altera também todos os hashes dos conjuntos de alterações. Então, para fazer isso, você precisa
ou
De qualquer maneira, a conversão é determinística e, portanto, os usuários podem executá-la se tiverem o Python disponível. Se eles tiverem apenas uma instalação do TortoiseHg, provavelmente será mais fácil se você os converter no seu servidor.
Procurei fazer com que a extensão de conversão suporte isso mais diretamente e enviei um patch para a lista de discussão do Mercurial para obter suporte mais direto a isso.
fonte
Eu tive o mesmo problema. Eu precisava converter vários repositórios, então escrevi um script que converte todos os repositórios fornecidos como lista.
uso:
Você pode obter no meu repositório no BitBucket.
fonte
Apenas extração do Mercurial Wiki FYI
Assim, suponho, apenas alterar o conjunto de caracteres da apresentação
encoding =
pode fazer a espessuraSe essa suposição estiver errada (sempre é possível), tente a Extensão FixUtf8 , leia a parte Corrigindo cuidadosamente nomes de arquivos existentes no readme
fonte
encoding = windows-1251
paraencoding = UTF-8
apenas os nomes de arquivos ilegíveis. O FixUtf8 também não ajudou.AddDefaultCharset utf-8
no Apache. Outra idéia - mude o WAMP para LAMP com o UTF8 como local e não faça nada com os nomes de arquivos, mas tenhaencoding = UTF-8
novamenteencoding = windows-1251
foi definido porque os dados já estavam nessa codificação.