Você está certo de que a extensão de conversão não suporta isso de uma maneira boa atualmente. Ou seja, você não pode pedir para recodificar a partir da 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
com
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)
Em seguida, execute
$ hg manifest --all | python rename.py > rename.txt
Isso cria seu mapa de arquivos. Agora você pode usar
$ hg convert --filemap rename.txt cp1251-repo utf-8-repo
para converter o repositório em um novo repositório. No novo repositório, parecerá que os arquivos sempre foram salvos usando nomes de arquivos UTF-8.
Nota: Os nomes dos arquivos agora são armazenados como UTF-8 no repositório. Isso significa que os checkouts 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 com que o Mercurial converta os nomes dos arquivos UTF-8 em UTF-16 em tempo real. Isso também criará nomes de arquivos legíveis no Windows.
Nota: Todos terão de voltar a clonar o novo repositório! Alterar qualquer parte do histórico inevitavelmente altera todos os hashes de changesets também. Então, para isso, você precisa
- faça todo mundo empurrar para o servidor,
- converta os repositórios no servidor,
- as pessoas re-clonam
ou
- faça todo mundo executar os comandos acima em seus repositórios locais
- converta os repositórios no servidor
De qualquer maneira, funciona, pois a conversão é determinística e, portanto, os usuários podem executá-la por conta própria, se tiverem Python disponível. Se eles só tiverem uma instalação do TortoiseHg, provavelmente será mais fácil se você converter para eles no seu servidor.
Eu olhei para tornar o suporte à extensão convertida mais diretamente e enviei um patch para o Mercurial lista de discussão para mais suporte direto para isso.