<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html> <head> <!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ --> <title>src/Darcs/Patch/Show.lhs</title> <link type='text/css' rel='stylesheet' href='hscolour.css' /> </head> <body> % Copyright (C) 2002-2005 David Roundy % % This program is free software; you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation; either version 2, or (at your option) % any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program; see the file COPYING. If not, write to % the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, % Boston, MA 02110-1301, USA. \begin{code} <pre><a name="line-1"></a><span class='hs-comment'>{-# OPTIONS_GHC -cpp -fno-warn-orphans -fglasgow-exts #-}</span> <a name="line-2"></a><span class='hs-comment'>{-# LANGUAGE CPP #-}</span> <a name="line-3"></a> <a name="line-4"></a><span class='hs-keyword'>module</span> <span class='hs-conid'>Darcs</span><span class='hs-varop'>.</span><span class='hs-conid'>Patch</span><span class='hs-varop'>.</span><span class='hs-conid'>Show</span> <span class='hs-layout'>(</span> <span class='hs-varid'>showPatch_</span><span class='hs-layout'>,</span> <span class='hs-varid'>showNamedPrefix</span> <span class='hs-layout'>)</span> <a name="line-5"></a> <span class='hs-keyword'>where</span> <a name="line-6"></a> <a name="line-7"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Prelude</span> <span class='hs-varid'>hiding</span> <span class='hs-layout'>(</span> <span class='hs-varid'>pi</span> <span class='hs-layout'>)</span> <a name="line-8"></a> <a name="line-9"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Printer</span> <span class='hs-layout'>(</span> <span class='hs-conid'>Doc</span><span class='hs-layout'>,</span> <span class='hs-varid'>renderString</span><span class='hs-layout'>,</span> <span class='hs-varid'>vcat</span><span class='hs-layout'>,</span> <a name="line-10"></a> <span class='hs-varid'>text</span><span class='hs-layout'>,</span> <span class='hs-varid'>blueText</span><span class='hs-layout'>,</span> <a name="line-11"></a> <span class='hs-layout'>(</span><span class='hs-varop'>$$</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-layout'>(</span><span class='hs-varop'><+></span><span class='hs-layout'>)</span> <span class='hs-layout'>)</span> <a name="line-12"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Darcs</span><span class='hs-varop'>.</span><span class='hs-conid'>Patch</span><span class='hs-varop'>.</span><span class='hs-conid'>Core</span> <span class='hs-layout'>(</span> <span class='hs-conid'>Patch</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span> <span class='hs-layout'>)</span> <a name="line-13"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Darcs</span><span class='hs-varop'>.</span><span class='hs-conid'>Patch</span><span class='hs-varop'>.</span><span class='hs-conid'>Prim</span> <span class='hs-layout'>(</span> <span class='hs-varid'>showPrim</span><span class='hs-layout'>,</span> <span class='hs-conid'>FileNameFormat</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span> <span class='hs-layout'>)</span> <a name="line-14"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Darcs</span><span class='hs-varop'>.</span><span class='hs-conid'>Patch</span><span class='hs-varop'>.</span><span class='hs-conid'>Info</span> <span class='hs-layout'>(</span> <span class='hs-conid'>PatchInfo</span><span class='hs-layout'>,</span> <span class='hs-varid'>showPatchInfo</span> <span class='hs-layout'>)</span> <a name="line-15"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Darcs</span><span class='hs-varop'>.</span><span class='hs-conid'>Witnesses</span><span class='hs-varop'>.</span><span class='hs-conid'>Ordered</span> <span class='hs-layout'>(</span> <span class='hs-conid'>FL</span><span class='hs-layout'>(</span><span class='hs-conid'>NilFL</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-varid'>mapFL</span> <span class='hs-layout'>)</span> <a name="line-16"></a><span class='hs-cpp'>#include "gadts.h"</span> </pre>\end{code} \section{Patch string formatting} Of course, in order to store our patches in a file, we'll have to save them as some sort of strings. The convention is that each patch string will end with a newline, but on parsing we skip any amount of whitespace between patches. \begin{code} <pre><a name="line-1"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Show</span> <span class='hs-layout'>(</span><span class='hs-conid'>Patch</span> <span class='hs-conid'>C</span><span class='hs-layout'>(</span><span class='hs-varid'>x</span> <span class='hs-varid'>y</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> <a name="line-2"></a> <span class='hs-varid'>show</span> <span class='hs-varid'>p</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>renderString</span> <span class='hs-layout'>(</span><span class='hs-varid'>showPatch_</span> <span class='hs-varid'>p</span><span class='hs-layout'>)</span> <span class='hs-varop'>++</span> <span class='hs-str'>"\n"</span> <a name="line-3"></a> <a name="line-4"></a><a name="showPatch_"></a><span class='hs-definition'>showPatch_</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Patch</span> <span class='hs-conid'>C</span><span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Doc</span> <a name="line-5"></a><span class='hs-definition'>showPatch_</span> <span class='hs-layout'>(</span><span class='hs-conid'>PP</span> <span class='hs-varid'>p</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>showPrim</span> <span class='hs-conid'>OldFormat</span> <span class='hs-varid'>p</span> <a name="line-6"></a><span class='hs-definition'>showPatch_</span> <span class='hs-layout'>(</span><span class='hs-conid'>ComP</span> <span class='hs-conid'>NilFL</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>blueText</span> <span class='hs-str'>"{"</span> <span class='hs-varop'>$$</span> <span class='hs-varid'>blueText</span> <span class='hs-str'>"}"</span> <a name="line-7"></a><span class='hs-definition'>showPatch_</span> <span class='hs-layout'>(</span><span class='hs-conid'>ComP</span> <span class='hs-varid'>ps</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>blueText</span> <span class='hs-str'>"{"</span> <a name="line-8"></a> <span class='hs-varop'>$$</span> <span class='hs-varid'>vcat</span> <span class='hs-layout'>(</span><span class='hs-varid'>mapFL</span> <span class='hs-varid'>showPatch_</span> <span class='hs-varid'>ps</span><span class='hs-layout'>)</span> <a name="line-9"></a> <span class='hs-varop'>$$</span> <span class='hs-varid'>blueText</span> <span class='hs-str'>"}"</span> <a name="line-10"></a><span class='hs-definition'>showPatch_</span> <span class='hs-layout'>(</span><span class='hs-conid'>Merger</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-varid'>p1</span> <span class='hs-varid'>p2</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>showMerger</span> <span class='hs-str'>"merger"</span> <span class='hs-varid'>p1</span> <span class='hs-varid'>p2</span> <a name="line-11"></a><span class='hs-definition'>showPatch_</span> <span class='hs-layout'>(</span><span class='hs-conid'>Regrem</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-varid'>p1</span> <span class='hs-varid'>p2</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>showMerger</span> <span class='hs-str'>"regrem"</span> <span class='hs-varid'>p1</span> <span class='hs-varid'>p2</span> </pre>\end{code} \paragraph{Merger patches} Merge two patches. The MERGERVERSION is included to allow some degree of backwards compatibility if the merger algorithm needs to be changed. \begin{verbatim} merger MERGERVERSION <first patch> <second patch> \end{verbatim} \begin{code} <pre><a name="line-1"></a><a name="showMerger"></a><span class='hs-definition'>showMerger</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Patch</span> <span class='hs-conid'>C</span><span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Patch</span> <span class='hs-conid'>C</span><span class='hs-layout'>(</span><span class='hs-varid'>d</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Doc</span> <a name="line-2"></a><span class='hs-definition'>showMerger</span> <span class='hs-varid'>merger_name</span> <span class='hs-varid'>p1</span> <span class='hs-varid'>p2</span> <span class='hs-keyglyph'>=</span> <a name="line-3"></a> <span class='hs-varid'>blueText</span> <span class='hs-varid'>merger_name</span> <span class='hs-varop'><+></span> <span class='hs-varid'>text</span> <span class='hs-str'>"0.0"</span> <span class='hs-varop'><+></span> <span class='hs-varid'>blueText</span> <span class='hs-str'>"("</span> <a name="line-4"></a> <span class='hs-varop'>$$</span> <span class='hs-varid'>showPatch_</span> <span class='hs-varid'>p1</span> <a name="line-5"></a> <span class='hs-varop'>$$</span> <span class='hs-varid'>showPatch_</span> <span class='hs-varid'>p2</span> <a name="line-6"></a> <span class='hs-varop'>$$</span> <span class='hs-varid'>blueText</span> <span class='hs-str'>")"</span> </pre>\end{code} \paragraph{Named patches} Named patches are displayed as a ``patch id'' which is in square brackets, followed by a patch. Optionally, after the patch id (but before the patch itself) can come a list of dependencies surrounded by angle brackets. Each dependency consists of a patch id. \begin{code} <pre><a name="line-1"></a><a name="showNamedPrefix"></a><span class='hs-definition'>showNamedPrefix</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>PatchInfo</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>PatchInfo</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Doc</span> <a name="line-2"></a><span class='hs-definition'>showNamedPrefix</span> <span class='hs-varid'>n</span> <span class='hs-varid'>d</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>showPatchInfo</span> <span class='hs-varid'>n</span> <a name="line-3"></a> <span class='hs-varop'>$$</span> <span class='hs-varid'>blueText</span> <span class='hs-str'>"<"</span> <a name="line-4"></a> <span class='hs-varop'>$$</span> <span class='hs-varid'>vcat</span> <span class='hs-layout'>(</span><span class='hs-varid'>map</span> <span class='hs-varid'>showPatchInfo</span> <span class='hs-varid'>d</span><span class='hs-layout'>)</span> <a name="line-5"></a> <span class='hs-varop'>$$</span> <span class='hs-varid'>blueText</span> <span class='hs-str'>">"</span> <a name="line-6"></a> </pre>\end{code} </body> </html>