7. Oprávky

7.1. Definice oprávky

Pro pochopení historie a povahy oprávek (patches) a jejich použití v Mercurialu je důležitá četba následujících odkazů (žel, v angličtině).

7.2. Úskalí

Standardní formát oprávky neumí popsat binární soubory, přejmenování souborů nebo změnu povolení. Potřebujete-li cokoliv z uvedeného zachytit, musíme povolit oprávky git zadáním:

[diff]
git=True

Mercurial 1.5 své chování v tomto směru vylepšuje. Vydá upozornění, když jsou potřebné diffy git nebo se někdy do formágu git nastaví automaticky - diff section.

Oprávkové rutiny Mercurialu nezacházejí dobře s různými EOLN u zdrojových kódů a u oprávek. Pro zlepšení situace bylo v 1.3 zavedeno nastavení patch.eol:

[patch]
eol = auto #strict, lf, or crlf

Poznámka

Je-li EOL nastaveno na auto, zachová oprávková rutina konce řádků zdrojového kódu bez ohledu na jejich ukončení v oprávce samé. Nastavení na auto použijeme ve většině případů. Nevýhodou tohoto nastavení je, že nemůžete provést oprávku, která mění ukončení řádků oproti zdrojovému souboru.

Viz také patch section dokumentace hgrc.

Aplikace oprávky není ‚omyluvzdorná‘ operace. Pokud se zdrojový soubor odchýlil od souboru, použitého pro vytvoření oprávky, mohou při její aplikaci vzniknout konflikty. Tyto se pak zapisují do souboru s příponou .rej. TortoiseHg obsahuje příkaz thg rejects, který může pomoci při slučování odmítnutých porcí (chunks) do zdrojového souboru.

7.3. Export oprávek

7.3.1. Changeset

Pro export changesetu jako oprávkového souboru použijete kontextovou nabídku pro vybranou revizi ve Verpánku Export > Export patch…. Procedura zapíše changeset do souboru v kořenovém adresáři repozitáře.

7.3.2. Rozsahy changesetů

Vyberte začátek a konec rozsahu changesetů ve Verpánku a otevřete speciální kontextové menu pro rozsah revizí. Z tohoto menu můžete generovat oprávky, svazky, poslat email nebo zobrazit diffy nahromaděných změn.

Toto je velmi účinná procedura bez omezení pro vybírané bázové a cílové changesety.

7.3.3. Email

Email dialog

Pro odeslání vybraného changesetu ve Verpánku jako emailu použijete kontextové menu Exportovat > Email oprávky…. Volba otevře okno pro odeslání vybraného changesetu.

Pro odeslání rozsahu changesetů použijete výše popsaný způsob výběru a zvolíte Email selected… nebo Email DAG range…

Konečně lze pro odeslání všech odchozích změn do vybraného vzdáleného repozitáře použít tlačítko Email v synchronizační liště úkonové karty Synchronizovat.

Poznámka

Pro posílání oprávek emailem nutno nastavit SMTP

7.4. Import oprávek

Import tool

Dialog pro import oprávky lze otevřít v menu Repoziář nebo prostřednictvím příkazu thg import. Dialog podporuje přemisťování souborů a adresářů metodou drag and drop.

Můžete importovat přímo do repozitáře, pracovního adresáře, shelfového souboru nebo do své fronty oprávek.

Poznámka

Import oprávky vyžaduje čistý stav pracovního adresáře. Před importem oprávky musíte provést commit, revert, nebo odložení (shelve) změn.

Poznámka

Když se nedaří importovat oprávku čistě do repozitáře, doporučuje se importovat oprávku do fronty oprávek (qimport) a potom provést qpush. Tato procedura používá „patch rejection“ dialog a zachovává meta-date v záhlaví oprávky. Nezapomeňte provést qrefresh po rozřešení odmítnutých porcí (chunks).

Varování

Pokud importovaná oprávka nemá zprávu komitu, pokusí se Mercurial spustit váš editor, stejně jako kdyby jste se pokoušel importovat oprávku z příkazového řádku. Pro zdárný průběh akce je zapotřebí, aby váš UI editor byla aplikace GUI.

7.5. Fronty oprávek

Je-li povolena extenze MQ, aktivuje se několik dalších procedur Verpánku. Je k dispozici rozšířená nabídka kontextového menu v přehledu revizí, kde je přítomnost oprávek graficky vyjádřena tvarem uzlů grafu DAG.

Patch Queue

Fronta oprávek v Přehledu revizí

Lze otevřít přemistitelný panel Fronta oprávek (Patch Queue), kde lze nastavit či zrušit ‚aplikovanost‘ oprávky, smazat vybranou oprávku nebo zadat guard.

Patch Queue

Dvojí poklep na neaplikované oprávce, aplikované oprávce jiné než qtip nebo qparent spouští příkaz qgoto; poklepnutá revize se stává aktuální oprávkou. Dvojí poklep na kterékoliv jiné revizi spustí zobrazení jejího diffu.

Poznámka

Po povolení nebo zapovězení extenze MQ v repozitáři je nutné restartovat Workbench. To platí pro většinu extenzí.

Poznámka

Je vřele doporučováno seznámit se s extenzí MQ před jejím používáním ve Verpánku.

Změněno ve verzi 2.10: Karta Patch Queue byla nahrazena kartou Commit a přemistitelným panelem Patch Queue.

7.6. Odmítnuté oprávky

Jak bylo již dříve poznamenáno, u oprávek není zaručeno, že se čistě aplikují na zamýšlené zdrojové soubory. Při odmítnutí porcí oprávek bylo před TortoiseHg 2.0 jedinou možností otevřít zdrojový a odmítnutý soubor v editoru a ručně uspořádat odmítnuté porce.

TortoiseHg 2.0 zavádí dialog, který tuto činnost trochu ulehčuje. Když odkládací (shelve) nástroj rozpozná odmítnutí porcí (chunks), otevře tyto porce ve zvlášním editoru. Totéž činí nástroj MQ pro příkazy qpush.

Patch Rejects Editor

Resolve rejected patch chunks

Editor odmítnutých porcí je poměrně primitivní. Zdrojový soubor je otevřen pro editování v okně QScintilla2. Pod zdrojovým souborem je seznam porcí, které se nepodařilo na tento soubor aplikovat. Poklepete-li na porci v seznamu, přeskočí editor na řádek, kde se očekává shoda kontextu porce. Uživatel musí určit proč se porce nepoužila a řešit to (možná i ignorováním porce). Stavy resolved / unresolved jsou evidovány, takže lze kdykoliv zjistit, kdy se s porcemi pracovalo. Jakmile označíte všechny porce jako rozřešené (resolved), stane se tlačítko Save sensitivní.