Ve Fedoře 20 je představena nová utilitka zvaná rebase-helper. K čemu je vlastně rebase-helper určen? Rebase-helper má za cíl usnadnit práci vývojářům balíčků updatovat na poslední upstreamovou verzi.
Rebase-helper se skládá z následujících kroků:
- stažení upstreamové verze balíčku
- aplikace patchů na starší verzi a po té na novou upstreamovou verzi.
- buildování staré a nové verze
- porovnání staré a nové verze RPM balíčků
Pojďme si představit, jak rebase-helper funguje v praxi. Řekněme, že chceme updatovat balíček iproute z verze iproute2-3.12.0 na verzi iproute2-3.14.0.
Za tímto účelem budeme potřebovat vědět buď poslední upstreamovou verzi, nebo zadat na příkazový řádek název tarballu poslední upstreamové verze. V našem případě iproute2-3.14.0.tar.gz. V případě, že nový tarball na systému neexistuje, je stažen z URL adresy specifikované ve SPEC souboru. Pro update na poslední upstreamovou verzi použijme příkaz rebase-helper iproute2-3.14.0.tar.gz
.
Po kontrole, zda-li je nová upstreamová verze na systému, se aplikují patche na staré a na nové zdrojové soubory.
K aplikaci patchů používá rebase-helper v současné době příkaz patch. Na obrázku vidíme, že některé patche byly úspěšně aplikovány jak na nové, tak i na staré zdrojáky. V případě, že patche není možné aplikovat na nové zdrojové soubory, uživatel uvidí hlášku, že patch se nepodařilo aplikovat a bude spuštěn merge tool pro opravení dotyčného patche.
Výchozí merge tool používaný rebase-helperem je meld a zobrazuje 3 taby.
- První tab zobrazuje porovnání mezi starou a novou verzí balíčku pro dotyčný soubor (v našem případě
ip/link_veth.c
). Uživatel tak vidí, jak se dotyčný patchovaný soubor změnil oproti upstreamu. - Prostřední tab ukazuje, jakým způsobem byl patch aplikován na zdrojový soubor ve staré verzi. V našem případě byly parametry inicializovány na NULL.
- Na posledním tabu uživatel vidí konkrétní merge mezi novou upstreamovou verzi zdrojového souboru a starou opatchovanou verzi zdrojového souboru. Uživatel si může vybrat, jestli bude používat svůj patch, a nebo zvolí upstreamovou verzi.
V našem případě jsme si samozřejmě vybrali upstreamovou verzi patche.
Jakmile je vše hotovo, je potřeba opravený zdrojový soubor uložit a zavřít program meld.
Následně bude vygenerován nový patch, který nám ukáže, jak byl patch změněn.
Na obrázku lze vidět, že patch bude kompletně odstraněn.
Tím jsme úspěšně opravili patch na poslední upstreamovou verzi. Následně jsme dotázáni, zda-li chceme pokračovat v aplikaci dalších patchů. V případě, že nebudeme chtít pokračovat, rebase-helper skončí.
Jelikož bychom rádi dokončili update na poslední verzi, budeme pokračovat. Jakmile jsou všechny patche hotové, začnou se automaticky buildovat balíčky. Nejprve se vygeneruje z patchů a SPEC souboru SRPM balíček a následně se vygenerují RPM balíčky. Balíčky jsou vytvořeny jak pro starší, tak i pro novou verzi.
V rebase-helperu se ve výchozím nastavení používá pro buildování balíčků mock.
V současné době je poslední krok rebase-helperu porovnání RPM balíčků příkazem pkgdiff. Jakmile je vše hotovo, zobrazí se podrobné informace o tom, co se v průběhu rebasu na poslední verzi změnilo.
- dva patche byly odstraněny,
- kde jsou uložené SRPM a RPM balíčky,
- kde je uložený výstup z program pkgdiff.
Jakmile otevřeme výstup programu pkgdiff, můžeme zkontrolovat, co se změnilo oproti starší verzi.
Co dál do budoucna s rebase-helperem?
- report uživateli z programu pkgdiff, jako změna soname a změna v hlavičkových a binárních souborech
- buildování balíčků pomocí příkazu fedpkg
- podpora více merge nástrojů (vimdiff, ...)
- rebase balíčku pomocí repositáře git
- automatický rebase na základě monitorování upstreamu
- a další
Zdroje
https://github.com/phracek/rebase-helper
YouTube: Rebase-helper in Fedora 20