Portál AbcLinuxu, 3. května 2025 22:10

Skript pro kontinuální konverzi repozitáře z bzr do git

20.3.2011 02:44 | Přečteno: 1050× | Za vším hledej Linux | Výběrový blog | poslední úprava: 21.3.2011 11:15

Při sepisování manuálu pro GRUB2 na naší wiki, jsem definitivně zlomil nad jeho vývojáři hůl, zatratil je do horoucích pekel a v návalu zoufalství se poohlédnul po nějakém nástroji, který by slušně konvertoval repozitory z bazaaru do gitu.

Možná že nějaký takový slušný tool existuje, ale já na něj nenarazil. Bazaar má nějaké rozšíření, které mu umožňuje spolupracovat s git repozitářem, ale já potřeboval něco trochu jiného. Nástroj, který by naopak bzr repozitář převedl na git, aniž bych přitom přišel o veškerou historii.

Nejdříve jsem zkoušel tailor. Jenže to je jednak další verzovací systém mezi a pak.. když jsem zkoušel konvertovat repozitář GRUB2, tak v půlce zkolaboval a konečná. Pak jsem narazil na skript Henrika Nilssena. Prima. Ten fungoval jak jsem čekal. Jenže ouha! Po přerušení začal git repozitář ládovat znova. No uznejte. Mám čekat pokaždé přes tři hodiny, než se provede konverze na aktuální verzi? To fakt ne. Také měl ten skript další neduhy - kupř. neodstraňoval duplicity, takže git repozitář pro GRUB2 měl po konverzi téměř 750MB(!).

No, nebudu napínat. Skript jsem trochu dopsal. Zároveň k němu přidal i pár souborů, ať se z toho dá udělat debianí balík. A stejně jako konverovaný repozitář grub2, jej dal - pod názvem bzr2git na náš git server.

Nedělní update..

Především bych chtěl poděkovat za nakopnutí správným směrem uživateli chrono, neboť o možnosti využít balíku bzr-fastimport i pro export repository jsem nevěděl.

Jak už to tak bývá, celá věc je natolik triviální, že není vůbec nutné na to používat nějaký extra skript. stačí jen vědět jak na to, že? ;-) Takže pro budoucí čtenáře: Git repozitář se skriptem bzr2git jsem sice ponechal veřejně dostupný, ale pouze proto, kdyby někdo - podobně jako já včera - řešil jak zabalit svůj vlastní shellový skript do deb balíku. Konvertovat bzr repozitáře je mnohem jednodušší a rychlejší následujícím způsobem (demonstruji na výše zmíněném repozitáři pro grub2):

user@stroj:~$ bzr branch http://bzr.savannah.gnu.org/r/grub/trunk/grub
user@stroj:~$ ls
grub
user@stroj:~$ mkdir grub-git
user@stroj:~$ pushd grub-git
~/grub-git ~
user@stroj:~/grub-git$ bzr fast-export --plain -r 1..15 ../grub | git fast-import

Pokud chcete narvat do gitu repozitář celý se vším všudy, tak stačí vypustit parametr -r. Při aktualizaci git repozitáře z bzr se nemusíte obávat, že by při importu došlo k nějakým duplicitám. Také můžete pustit příkaz bez udání revize. Vymezením rozsahu revize si však můžete do gitu převést jen to co vás zajímá a krom toho nebude s importem problém, pokud máte v git repozitáři už nějaké své větve. Takže jen doplním jak zjistit v bzr číslo poslední revize a číslo poslední revize odpovídající té, která byla naposled naimportovaná do gitu..

user@stroj:~$ bzr log -r revno:-1.. http://bzr.savannah.gnu.org/r/grub/trunk/grub | grep revno
revno: 3096
user@stroj:~$ pushd grub-git
~/grub-git ~
user@stroj:~/grub-git$ git checkout master
Switched to branch 'master'
user@stroj:~/grub-git$ popd
user@stroj:~$ LASTTIMESTAMP="$(git log -1 | grep Date 2> /dev/null)"
user@stroj:~$ TIMESTAMP="${LASTTIMESTAMP#* }"
user@stroj:~$ TIMEREVISION="$(date --date="${TIMESTAMP%%\ +*}" "+%F %T")"
user@stroj:~$ pushd grub
~/grub ~
user@stroj:~/grub$ bzr log -r date:"$TIMEREVISION" | grep revno | awk '{print $2}'
3096
       

Hodnocení: 80 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

20.3.2011 10:02 chrono
Rozbalit Rozbalit vše Re: Skript pro kontinuální konverzi repozitáře z bzr do git
Odpovědět | Sbalit | Link | Blokovat | Admin
Nebolo by na začiatku jednoduchšie naklonovať si ten bzr repozitár a použiť fast-export (a potom fast-import v git)?
20.3.2011 10:46 Aleš Kapica | skóre: 52 | blog: kenyho_stesky | Ostrava
Rozbalit Rozbalit vše Re: Skript pro kontinuální konverzi repozitáře z bzr do git
Bylo by možno nějak konkrétněji? Kupř. uvést příklad. A dá se pak ten git repozitář průběžně aktualizovat stejně jako je aktualizován ten bzr?
20.3.2011 11:00 Aleš Kapica | skóre: 52 | blog: kenyho_stesky | Ostrava
Rozbalit Rozbalit vše Re: Skript pro kontinuální konverzi repozitáře z bzr do git
Vypadá to dobře. Kdybych s tím měl zkušenost dřív, pravděpodobně bych to použil jako základ toho skriptu. Jak se říká - nikdy není pozdě, a lépe pozdě než nikdy.
21.3.2011 08:57 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
Rozbalit Rozbalit vše Re: Skript pro kontinuální konverzi repozitáře z bzr do git
Odpovědět | Sbalit | Link | Blokovat | Admin
Co vlastně dělá bazaar tak strašného?
When your hammer is C++, everything begins to look like a thumb.
21.3.2011 08:59 Aleš Kapica | skóre: 52 | blog: kenyho_stesky | Ostrava
Rozbalit Rozbalit vše Re: Skript pro kontinuální konverzi repozitáře z bzr do git
Nic. Jen nemá tak pěkné nástroje jako git. A taky - z mého subjektivního hlediska - mnohem pomaleji zjišťuje aktualizace.
21.3.2011 21:28 Jan Včelák | skóre: 28 | blog: Fcelda
Rozbalit Rozbalit vše Re: Skript pro kontinuální konverzi repozitáře z bzr do git

Založit nové vláknoNahoru

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.