Sveiki,
Visa tai jei kam nors prisireiktų tiesiogiai perkelti CVS repozitoriją
(su visa istorija) į hg išsaugant korektišką CVS log'ų koduotę (kad ir
kokia ji bebūtų -- cp1257, cp1251, cp1252, kt.), t.y. korektiškai
perkoduojant į utf-8, nes pagal Mercurial fromcvs how-to:
http://www.selenic.com/mercurial/wiki/index.cgi/fromcvs
*nepavyks*, juoba, jei tai daroma Windows OS.
Be Mercurial (TortoiseHg), reikės:
Cygwin'o, Ruby (cygwin; native suknistas (neveikia) rcsparse
kompiliavimas, o jei dar ir MS kompiliatoriaus neturite...), Python'o
(native).
Rubygems:
http://www.rubygems.org/
ruby-rbtree
(gem install rbtree)
rcsparse
http://ww2.fs.ei.tum.de/~corecode/hg/rcsparse
fromcvs:
http://ww2.fs.ei.tum.de/~corecode/hg/fromcvs
Redaguojam fromcvs/tohg.rb; pačioje pradžioje pridedam
"require 'rubygems'" eilutę.
Atridename Python'ui Mercurial kiaušinį. Pradžioje tam (easy_install)
reikės setuptools:
http://pypi.python.org/pypi/setuptools/
http://pypi.python.org/pypi/setuptools/#windows
(*Cygwin note*)
Tuomet:
easy_install.exe mercurial
Būtinai nustatome aplinkos (environment) kintamąjį (tą jau turbūt
padarėme anksčiau, naudodamiesi hg; antraip hg log'ai gali būti tik ascii):
HGENCODING=utf-8
Atrodytų lyg ir viskas, lyg ir galima būtų pradėti (pagal hg fromcvs
how-to)...:
"
export LANG=en_US.UTF-8
cd fromcvs
hg init /path/to/hgdest
ruby tohg.rb /path/to/cvsroot modulename /path/to/hgdest
"
STOP. Lokalę liesti/keisti beprasmiška, reikia taisyti kelius (nors mes
cygwin'e, tačiau aktualų darbą atlieka native python'as):
ruby tohg.rb C:\\path\\to\\cvsroot modulename C:\\path\\to\\hgdest
Na, na...? Važiuoja! Tačiau ir nuvažiuoja (su išdarkytais log'ais)...
Taigis taigis, kaipgis... Ir ką gi mes randame (po gana prailgusio
krapštymosi):
fromcvs/fromcvs.rb::convtooutf8()
def convtoutf8(str)
encs = ['utf-8', 'iso8859-15']
encs.each do |enc|
begin
return Iconv::conv('utf-8', enc, str)
rescue StandardError
end
end
Tai bent užslėptas perliukas! Log'ai kažkodėl įsiūtai perkoduojami iš
'utf-8' (nors labai tikėtina yra visiškai kitokioje, 8 bitų koduotėje),
arba dar "geriau" (iso-8859-15) į 'utf-8'. Artūrai Šlajau, užsiimk,
juk/kai mokslai tokie nemieli... ;-)
Čia greitai (iki kol tai bus ištaisyta), pačią pirmą ir reikia įsiūti
CVS log'ų koduotę, t.y. iš kurios konvertuojama į 'utf-8' (manuoju
atveju tai buvo 'cp1257'):
encs = ['cp1257', 'utf-8', 'iso8859-15']
Viskas, dabar jau tikrai (nu)važiuos.
Žinoma, galima buvo tiesiog (vienkartiniam importui būtų kur kas
greičiau) perkoduoti CVS repozitorijos RCS failus, arba bandyti kitą
kelią (CVS->SVN->HG -- ar tikrai nebūtų panašių problemų?), tačiau
pradėjus krapšytis norėjosi pabaigti.
Tikiuosi kam nors bus naudinga.