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.

rebase-helper-12Po kontrole, zda-li je nová upstreamová verze na systému, se aplikují patche na staré a na nové zdrojové soubory.

rebase-helper-11K 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.rebase-helper-08
  • 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.rebase-helper-10
  • 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.rebase-helper-09

V našem případě jsme si samozřejmě vybrali upstreamovou verzi patche.

rebase-helper-05Jakmile je vše hotovo, je potřeba opravený zdrojový soubor uložit a zavřít program meld.

rebase-helper-01Následně bude vygenerován nový patch, který nám ukáže, jak byl patch změněn.

rebase-helper-02Na 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čí.

rebase-helper-04Jelikož 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.

rebase-helper-06V 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.

rebase-helper-03Můžeme zde například vidět:

  • 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.

rebase-helper-07Co 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