Mam repozytoria Mercurial działające na Apache z mod_wsgi. Repozytoria mają wszystkie nazwy plików zakodowane w systemie Windows-1251. To kodowanie jest używane z powodów historycznych: zostały przekonwertowane na mercurial z svn, Windows-1251 jest domyślnym kodowaniem okien dla rosyjskich ustawień regionalnych.
Teraz programiści chcą używać narzędzia Crucible do przeglądania kodu. Nie może przechodzić pod nazwy i nazwy plików w żadnym innym kodowaniu niż utf-8. Muszę więc przekonwertować je z systemu Windows-1251 na utf-8. Czy ktoś wie jak to zrobić? Rozszerzenie konwersji Mercurial nie ma opcji konwersji kodowań.
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
naencoding = UTF-8
właśnie uniemożliwiającą odczytanie nazw plików. Jest tak, ponieważ są one przechowywane w systemie Windows-1251. „UTF-8” os.environ [„HGENCODING”] = „UTF-8” jest równy temu ustawieniu.Odpowiedzi:
Masz rację, że rozszerzenie konwersji obecnie nie obsługuje tego w przyjemny sposób. Oznacza to, że nie możesz poprosić go do Recode z kodującego X do kodowania Y . Możesz jednak poprosić go o zmianę nazw plików jeden po drugim! Najpierw utwórz plik o nazwie za
rename.py
pomocąNastępnie uruchomić
Spowoduje to utworzenie mapy plików. Możesz teraz użyć
przekonwertować repozytorium na nowe repozytorium. W nowym repozytorium będzie wyglądać, jakby pliki były zawsze zapisywane przy użyciu nazw plików UTF-8.
Uwaga: Nazwy plików są teraz przechowywane w repozytorium jako UTF-8. Oznacza to, że kasy będą dobrze wyglądać na nowoczesnych maszynach z systemem Linux. System Windows nie używa jednak nazw plików UTF-8. Należy użyć rozszerzenia FixUtf-8, aby Mercurial mógł konwertować nazwy plików UTF-8 na UTF-16 w locie. Spowoduje to również utworzenie czytelnych nazw plików w systemie Windows.
Uwaga: każdy będzie musiał ponownie sklonować nowe repozytorium! Zmiana dowolnej części historii nieuchronnie zmienia również wszystkie skróty zestawów zmian. Aby to zrobić, musisz albo
lub
Tak czy inaczej działa, ponieważ konwersja jest deterministyczna, więc użytkownicy mogą ją uruchomić samodzielnie, jeśli mają dostęp do Pythona. Jeśli mają tylko instalację TortoiseHg, to prawdopodobnie najłatwiej jest przekonwertować je na serwerze.
Spojrzałem na bardziej bezpośrednie wsparcie rozszerzenia konwersji i wysłałem łatkę na listę mailingową Mercurial, aby uzyskać bardziej bezpośrednie wsparcie dla tego.
źródło
Miałem ten sam problem. Musiałem przekonwertować kilka repozytoriów, więc napisałem skrypt, który konwertuje wszystkie repozytoria podane jako lista.
stosowanie:
Możesz pobrać z mojego repozytorium na BitBucket.
źródło
Tylko ekstrakcja z Mercurial Wiki FYI
Tak więc przypuszczam, że zmiana zestawu znaków prezentacji
encoding =
może przydać sięJeśli to założenie jest błędne (zawsze jest to możliwe), spróbuj FixUtf8 Extension , przeczytaj część Naprawianie istniejących nazw plików z readme
źródło
encoding = windows-1251
naencoding = UTF-8
właśnie wprowadzone nazwy plików jest nieczytelna. FixUtf8 też nie pomógł.AddDefaultCharset utf-8
w Apache. Kolejny pomysł - zmień WAMP na LAMP z UTF8 jako locale i nie rób nic z nazwami plików, aleencoding = UTF-8
znowuencoding = windows-1251
został ustawiony, ponieważ dane były już w tym kodowaniu.