*******
Oprávky
*******

.. module:: patches
    :synopsis: Describe patch operations

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


* `Problém správy oprávek <http://tortoisehg.bitbucket.org/hgbook/1.7/managing-change-with-mercurial-queues.html#sec:mq:patch-mgmt>`_
* `Pochopení oprávek <http://tortoisehg.bitbucket.org/hgbook/1.7/managing-change-with-mercurial-queues.html#sec:mq:patch>`_
* `Více o oprávkách <http://tortoisehg.bitbucket.org/hgbook/1.7/managing-change-with-mercurial-queues.html#sec:mq:adv-patch>`_

Úskalí
======

Standardní formát oprávky neumí popsat binární soubory, změnu jmen 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á varování, když jsou potřebné git diffy nebo se někdy do formágu git nastaví automaticky - `diff section <http://www.selenic.com/mercurial/hgrc.5.html#diff>`_.

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

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

.. note::
	Je-li EOL nastaveno na *auto*, zachová procedura oprávek původní  konce řádků 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 <http://www.selenic.com/mercurial/hgrc.5.html#patch>`_
dokumentace hgrc.
	
Použití oprávky není blbuvzdorná operace. Pokud se zdrojový soubor odchýlil od souboru, použitého pro vytvoření oprávky, mohou při jejím použití vzniknout konflikty. Tyto se zapisují do souboru s příponou .rej. TortoiseHg obsahuje příkaz :command:`thg rejects`, který může pomoci při včleňování odmítnutých porcí (chunks) do zdrojového souboru.

Export oprávek
==============

Changeset
---------

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


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 bázové a cílové changesety.


Email
-----

.. figure:: figures/email.png
	:alt: Email dialog
	
	E-mailová pošta v Průzkumníku repozitáře

Pro odeslání changesetu jako emailu použijete kontextové menu ve Verpánku :menuselection:`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íme :menuselection:`Email selected...` nebo :menuselection:`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 :guilabel:`Email` v synchronizační liště Verpánku .

.. note::
	Pro posílání oprávek emailem nutno nastavit
	`SMTP <http://www.selenic.com/mercurial/hgrc.5.html#smtp>`_


Import oprávek
==============

.. figure:: figures/import.png
	:alt: Import tool
	
	Dialog pro import v Průzkumníku repozitáře

Dialog pro import oprávky lze otevřít v menu Verpánku :guilabel:`Repozitory`  nebo porostřednictvím příkazu :command:`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, almárkového (shelf) souboru nebo do své fronty oprávek. 

.. note::
	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.
	
.. note::
	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).

.. warning::
	Pokud importovaná oprávka nemá komentář 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 GUI aplikace.


Fronty oprávek
==============

.. figure:: figures/patchqueue.png
	:alt: Patch Queue
	
	Fronta oprávek v grafu repozitáře

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 seznamu changesetů, fronta oprávek je zobrazena spolu s historií repozitáře a je aktivována zadávací karta Patch Queue
	
.. figure:: figures/mq-tasktab.png
	:alt: Patch Queue Task Tab

	MQ tool or task tab
	
Zadávací kartu (okno) :guilabel:`Patch Queue` můžeme také aktivovat příkazem :command:`thg mq` z příkazového řádku. Většina procedur MQ je přístupná ze zadávacího okna Patch Queue. Několik málo procedur (qimport -r/qfinish) je dostupných pouze z kontextového menu ve Verpánku.

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.

V předchozích vydáních byl nástroj Commit ústřední procedurou při použití MQ. V TortoiseHg 2.0 si nástroj Commit téměř vůbec MQ nevšímá. Pouze ví, že komit není dovolen, je-li rodič aktuální revize aplikovanou oprávkou. Místo toho je fukcionalita MQ soustředěna do Verpánku, zadávacího okna Patch Queue a do odkládacího (shelve) nástroje.

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

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


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.


.. figure:: figures/rejects.png
	:alt: 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 :guilabel: `Save` sensitivní.

	
.. vim: noet ts=4
