Sophie

Sophie

distrib > Fedora > 14 > x86_64 > by-pkgid > a0995fd4c38add851d8e9994a3499e40 > files > 656

ghc-darcs-devel-2.4.4-3.fc14.x86_64.rpm

<!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/Commands.lhs</title>
<link type='text/css' rel='stylesheet' href='hscolour.css' />
</head>
<body>
%  Copyright (C) 2002,2003,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-keyword'>module</span> <span class='hs-conid'>Darcs</span><span class='hs-varop'>.</span><span class='hs-conid'>Commands</span> <span class='hs-layout'>(</span> <span class='hs-conid'>CommandControl</span><span class='hs-layout'>(</span> <span class='hs-conid'>CommandData</span><span class='hs-layout'>,</span> <span class='hs-conid'>HiddenCommand</span><span class='hs-layout'>,</span> <span class='hs-conid'>GroupName</span> <span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-2"></a>                       <span class='hs-conid'>DarcsCommand</span><span class='hs-layout'>(</span> <span class='hs-conid'>DarcsCommand</span><span class='hs-layout'>,</span> <span class='hs-varid'>commandName</span><span class='hs-layout'>,</span>
<a name="line-3"></a>                                     <span class='hs-varid'>commandHelp</span><span class='hs-layout'>,</span> <span class='hs-varid'>commandDescription</span><span class='hs-layout'>,</span>
<a name="line-4"></a>                                     <span class='hs-varid'>commandBasicOptions</span><span class='hs-layout'>,</span> <span class='hs-varid'>commandAdvancedOptions</span><span class='hs-layout'>,</span>
<a name="line-5"></a>                                     <span class='hs-varid'>commandCommand</span><span class='hs-layout'>,</span>
<a name="line-6"></a>                                     <span class='hs-varid'>commandPrereq</span><span class='hs-layout'>,</span>
<a name="line-7"></a>                                     <span class='hs-varid'>commandExtraArgHelp</span><span class='hs-layout'>,</span>
<a name="line-8"></a>                                     <span class='hs-varid'>commandExtraArgs</span><span class='hs-layout'>,</span>
<a name="line-9"></a>                                     <span class='hs-varid'>commandArgdefaults</span><span class='hs-layout'>,</span>
<a name="line-10"></a>                                     <span class='hs-varid'>commandGetArgPossibilities</span><span class='hs-layout'>,</span>
<a name="line-11"></a>                                     <span class='hs-conid'>SuperCommand</span><span class='hs-layout'>,</span>
<a name="line-12"></a>                                     <span class='hs-varid'>commandSubCommands</span> <span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-13"></a>                       <span class='hs-varid'>commandAlias</span><span class='hs-layout'>,</span> <span class='hs-varid'>commandStub</span><span class='hs-layout'>,</span>
<a name="line-14"></a>                       <span class='hs-varid'>commandOptions</span><span class='hs-layout'>,</span> <span class='hs-varid'>commandAlloptions</span><span class='hs-layout'>,</span>
<a name="line-15"></a>                       <span class='hs-varid'>disambiguateCommands</span><span class='hs-layout'>,</span> <span class='hs-conid'>CommandArgs</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-16"></a>                       <span class='hs-varid'>getCommandHelp</span><span class='hs-layout'>,</span> <span class='hs-varid'>getCommandMiniHelp</span><span class='hs-layout'>,</span>
<a name="line-17"></a>                       <span class='hs-varid'>getSubcommands</span><span class='hs-layout'>,</span>
<a name="line-18"></a>                       <span class='hs-varid'>usage</span><span class='hs-layout'>,</span> <span class='hs-varid'>subusage</span><span class='hs-layout'>,</span> <span class='hs-varid'>chompNewline</span><span class='hs-layout'>,</span>
<a name="line-19"></a>                       <span class='hs-varid'>extractCommands</span><span class='hs-layout'>,</span>
<a name="line-20"></a>                       <span class='hs-varid'>superName</span><span class='hs-layout'>,</span>
<a name="line-21"></a>                       <span class='hs-varid'>nodefaults</span><span class='hs-layout'>,</span>
<a name="line-22"></a>                       <span class='hs-varid'>putInfo</span><span class='hs-layout'>,</span> <span class='hs-varid'>putVerbose</span><span class='hs-layout'>,</span> <span class='hs-varid'>putWarning</span><span class='hs-layout'>,</span> <span class='hs-varid'>abortRun</span>
<a name="line-23"></a>                     <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-24"></a>
<a name="line-25"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>System</span><span class='hs-varop'>.</span><span class='hs-conid'>Console</span><span class='hs-varop'>.</span><span class='hs-conid'>GetOpt</span><span class='hs-layout'>(</span> <span class='hs-conid'>OptDescr</span><span class='hs-layout'>,</span> <span class='hs-varid'>usageInfo</span> <span class='hs-layout'>)</span>
<a name="line-26"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span> <span class='hs-layout'>(</span><span class='hs-varid'>when</span><span class='hs-layout'>,</span> <span class='hs-varid'>unless</span><span class='hs-layout'>)</span>
<a name="line-27"></a>
<a name="line-28"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>List</span> <span class='hs-layout'>(</span> <span class='hs-varid'>sort</span><span class='hs-layout'>,</span> <span class='hs-varid'>isPrefixOf</span> <span class='hs-layout'>)</span>
<a name="line-29"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Darcs</span><span class='hs-varop'>.</span><span class='hs-conid'>Arguments</span> <span class='hs-layout'>(</span> <span class='hs-conid'>DarcsFlag</span><span class='hs-layout'>(</span><span class='hs-conid'>Quiet</span><span class='hs-layout'>,</span><span class='hs-conid'>Verbose</span><span class='hs-layout'>,</span> <span class='hs-conid'>DryRun</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-conid'>DarcsOption</span><span class='hs-layout'>,</span> <span class='hs-varid'>disable</span><span class='hs-layout'>,</span> <span class='hs-varid'>help</span><span class='hs-layout'>,</span>
<a name="line-30"></a>                         <span class='hs-varid'>anyVerbosity</span><span class='hs-layout'>,</span> <span class='hs-varid'>posthookCmd</span><span class='hs-layout'>,</span> <span class='hs-varid'>posthookPrompt</span><span class='hs-layout'>,</span>
<a name="line-31"></a>                         <span class='hs-varid'>prehookCmd</span><span class='hs-layout'>,</span> <span class='hs-varid'>prehookPrompt</span><span class='hs-layout'>,</span> <span class='hs-varid'>optionFromDarcsoption</span> <span class='hs-layout'>)</span>
<a name="line-32"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Darcs</span><span class='hs-varop'>.</span><span class='hs-conid'>RepoPath</span> <span class='hs-layout'>(</span> <span class='hs-conid'>AbsolutePath</span><span class='hs-layout'>,</span> <span class='hs-varid'>rootDirectory</span> <span class='hs-layout'>)</span>
<a name="line-33"></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'>putDocLn</span><span class='hs-layout'>,</span> <span class='hs-varid'>hPutDocLn</span><span class='hs-layout'>,</span> <span class='hs-varid'>text</span><span class='hs-layout'>,</span> <span class='hs-layout'>(</span><span class='hs-varop'>&lt;+&gt;</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-varid'>errorDoc</span> <span class='hs-layout'>)</span>
<a name="line-34"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>System</span><span class='hs-varop'>.</span><span class='hs-conid'>IO</span> <span class='hs-layout'>(</span> <span class='hs-varid'>stderr</span> <span class='hs-layout'>)</span>
</pre>\end{code}

The general format of a darcs command is
\begin{verbatim}
% darcs COMMAND OPTIONS ARGUMENTS ...
\end{verbatim}
Here \verb|COMMAND| is a command such as \verb|add| or \verb|record|, which of
course may have one or more arguments.  Options have the form
\verb!--option! or \verb!-o!, while arguments vary from command to
command.  There are many options which are common to a number of different
commands, which will be summarized here.

If you wish, you may use any unambiguous beginning of a command name as a
shortcut: for \verb!darcs record!, you could type \verb!darcs recor! or
\verb!darcs rec!, but not \verb!darcs re! since that could be confused with
\verb!darcs replace!, \verb!darcs revert! and \verb!darcs remove!.

In some cases, \verb|COMMAND| actually consists of two words, a
super-command and a subcommand.  For example, the ``display the
manifest'' command has the form \verb|darcs query manifest|.

\paragraph{Command overview}

Not all commands modify the ``patches'' of your repository (that
is, the named patches which other users can pull); some commands only
affect the copy of the source tree you're working on (your ``working
directory''), and some affect both. This table summarizes what you should
expect from each one and will hopefully serve as guide when you're having
doubts about which command to use.

\begin{center}
\footnotetext[1]{But it affects the repository and working directory targeted
  by the push}
\footnotetext[2]{As for the other end, see apply}
\begin{tabular}{|c|c|c|}
\hline
affects & patches & working directory\\
\hline
record & yes & no\\
\hline
unrecord & yes & no\\
\hline
rollback & yes & yes\\
\hline
revert & no & yes\\
\hline
unrevert & no & yes\\
\hline
pull & yes & yes\\
\hline
obliterate & yes & yes\\
\hline
apply & yes & yes\\
\hline
push\footnote{But it affects the repository and working directory targeted by
the push} & no & no\\
\hline
send\footnote{As for the other end, see apply} & no & no\\
\hline
put\footnote{Creates a new repository} & no & no\\
\hline
\end{tabular}
\end{center}

\begin{code}
<pre><a name="line-1"></a><a name="extractCommands"></a><span class='hs-definition'>extractCommands</span><span class='hs-layout'>,</span> <span class='hs-varid'>extractHiddenCommands</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>CommandControl</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>DarcsCommand</span><span class='hs-keyglyph'>]</span>
<a name="line-2"></a><span class='hs-definition'>extractCommands</span> <span class='hs-varid'>cs</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>concatMap</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>x</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyword'>case</span> <span class='hs-varid'>x</span> <span class='hs-keyword'>of</span> <span class='hs-layout'>{</span> <span class='hs-conid'>CommandData</span> <span class='hs-varid'>cmd_d</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-varid'>cmd_d</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>;</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>[]</span><span class='hs-layout'>}</span><span class='hs-layout'>)</span> <span class='hs-varid'>cs</span>
<a name="line-3"></a><a name="extractHiddenCommands"></a><span class='hs-definition'>extractHiddenCommands</span> <span class='hs-varid'>cs</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>concatMap</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>x</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyword'>case</span> <span class='hs-varid'>x</span> <span class='hs-keyword'>of</span> <span class='hs-layout'>{</span> <span class='hs-conid'>HiddenCommand</span> <span class='hs-varid'>cmd_d</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-varid'>cmd_d</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>;</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>[]</span><span class='hs-layout'>}</span><span class='hs-layout'>)</span> <span class='hs-varid'>cs</span>
</pre>\end{code}

\input{Darcs/Arguments.lhs}

\begin{code}
<pre><a name="line-1"></a><a name="CommandControl"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>CommandControl</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>CommandData</span> <span class='hs-conid'>DarcsCommand</span>
<a name="line-2"></a>                    <span class='hs-keyglyph'>|</span> <span class='hs-conid'>HiddenCommand</span> <span class='hs-conid'>DarcsCommand</span>
<a name="line-3"></a>                    <span class='hs-keyglyph'>|</span> <span class='hs-conid'>GroupName</span> <span class='hs-conid'>String</span>
<a name="line-4"></a>
<a name="line-5"></a><a name="DarcsCommand"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>DarcsCommand</span> <span class='hs-keyglyph'>=</span>
<a name="line-6"></a>    <span class='hs-conid'>DarcsCommand</span> <span class='hs-layout'>{</span><span class='hs-varid'>commandName</span><span class='hs-layout'>,</span> <span class='hs-varid'>commandHelp</span><span class='hs-layout'>,</span> <span class='hs-varid'>commandDescription</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>String</span><span class='hs-layout'>,</span>
<a name="line-7"></a>                  <span class='hs-varid'>commandExtraArgs</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Int</span><span class='hs-layout'>,</span>
<a name="line-8"></a>                  <span class='hs-varid'>commandExtraArgHelp</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>String</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>,</span>
<a name="line-9"></a>                  <span class='hs-varid'>commandCommand</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>DarcsFlag</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>String</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span><span class='hs-layout'>,</span>
<a name="line-10"></a>                  <span class='hs-varid'>commandPrereq</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>DarcsFlag</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Either</span> <span class='hs-conid'>String</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-11"></a>                  <span class='hs-varid'>commandGetArgPossibilities</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IO</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>String</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>,</span>
<a name="line-12"></a>                  <span class='hs-varid'>commandArgdefaults</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>DarcsFlag</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>AbsolutePath</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>String</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>String</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>,</span>
<a name="line-13"></a>                  <span class='hs-varid'>commandBasicOptions</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>DarcsOption</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>,</span>
<a name="line-14"></a>                  <span class='hs-varid'>commandAdvancedOptions</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>DarcsOption</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>}</span>
<a name="line-15"></a>  <span class='hs-keyglyph'>|</span> <span class='hs-conid'>SuperCommand</span> <span class='hs-layout'>{</span><span class='hs-varid'>commandName</span><span class='hs-layout'>,</span> <span class='hs-varid'>commandHelp</span><span class='hs-layout'>,</span> <span class='hs-varid'>commandDescription</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>String</span><span class='hs-layout'>,</span>
<a name="line-16"></a>                  <span class='hs-varid'>commandPrereq</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>DarcsFlag</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Either</span> <span class='hs-conid'>String</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-17"></a>                  <span class='hs-varid'>commandSubCommands</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>CommandControl</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>}</span>
<a name="line-18"></a>
<a name="line-19"></a><a name="commandAlloptions"></a><span class='hs-definition'>commandAlloptions</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>DarcsCommand</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>[</span><span class='hs-conid'>DarcsOption</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>,</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>DarcsOption</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>)</span>
<a name="line-20"></a><span class='hs-definition'>commandAlloptions</span> <span class='hs-conid'>DarcsCommand</span> <span class='hs-layout'>{</span> <span class='hs-varid'>commandBasicOptions</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>opts1</span>
<a name="line-21"></a>                                <span class='hs-layout'>,</span> <span class='hs-varid'>commandAdvancedOptions</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>opts2</span> <span class='hs-layout'>}</span>
<a name="line-22"></a>    <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-varid'>opts1</span> <span class='hs-varop'>++</span> <span class='hs-keyglyph'>[</span><span class='hs-varid'>disable</span><span class='hs-layout'>,</span> <span class='hs-varid'>help</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>,</span>
<a name="line-23"></a>       <span class='hs-varid'>anyVerbosity</span> <span class='hs-varop'>++</span> <span class='hs-varid'>opts2</span> <span class='hs-varop'>++</span>
<a name="line-24"></a>                <span class='hs-keyglyph'>[</span><span class='hs-varid'>posthookCmd</span><span class='hs-layout'>,</span> <span class='hs-varid'>posthookPrompt</span>
<a name="line-25"></a>                <span class='hs-layout'>,</span><span class='hs-varid'>prehookCmd</span><span class='hs-layout'>,</span> <span class='hs-varid'>prehookPrompt</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>)</span>
<a name="line-26"></a>
<a name="line-27"></a><span class='hs-comment'>--  Supercommands cannot be disabled.</span>
<a name="line-28"></a><span class='hs-definition'>commandAlloptions</span> <span class='hs-conid'>SuperCommand</span> <span class='hs-layout'>{</span> <span class='hs-layout'>}</span> <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>[</span><span class='hs-varid'>help</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>,</span><span class='hs-conid'>[]</span><span class='hs-layout'>)</span>
<a name="line-29"></a>
<a name="line-30"></a><a name="commandOptions"></a><span class='hs-comment'>--  Obtain options suitable as input to</span>
<a name="line-31"></a><span class='hs-comment'>--  System.Console.Getopt, including the --disable option (which is</span>
<a name="line-32"></a><span class='hs-comment'>--  not listed explicitly in the DarcsCommand definitions).</span>
<a name="line-33"></a><span class='hs-definition'>commandOptions</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>AbsolutePath</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>DarcsCommand</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>[</span><span class='hs-conid'>OptDescr</span> <span class='hs-conid'>DarcsFlag</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>,</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>OptDescr</span> <span class='hs-conid'>DarcsFlag</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>)</span>
<a name="line-34"></a><span class='hs-definition'>commandOptions</span> <span class='hs-varid'>cwd</span> <span class='hs-varid'>c</span> <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-varid'>convert</span> <span class='hs-varid'>basic</span><span class='hs-layout'>,</span> <span class='hs-varid'>convert</span> <span class='hs-varid'>advanced</span><span class='hs-layout'>)</span>
<a name="line-35"></a> <span class='hs-keyword'>where</span> <span class='hs-layout'>(</span><span class='hs-varid'>basic</span><span class='hs-layout'>,</span> <span class='hs-varid'>advanced</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>commandAlloptions</span> <span class='hs-varid'>c</span>
<a name="line-36"></a>       <span class='hs-varid'>convert</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>concatMap</span> <span class='hs-layout'>(</span><span class='hs-varid'>optionFromDarcsoption</span> <span class='hs-varid'>cwd</span><span class='hs-layout'>)</span>
<a name="line-37"></a>
<a name="line-38"></a><a name="nodefaults"></a><span class='hs-definition'>nodefaults</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>DarcsFlag</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>AbsolutePath</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>String</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>String</span><span class='hs-keyglyph'>]</span>
<a name="line-39"></a><span class='hs-definition'>nodefaults</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-varid'>xs</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>return</span> <span class='hs-varid'>xs</span>
<a name="line-40"></a>
<a name="line-41"></a><a name="getSubcommands"></a><span class='hs-definition'>getSubcommands</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>DarcsCommand</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>CommandControl</span><span class='hs-keyglyph'>]</span>
<a name="line-42"></a><span class='hs-definition'>getSubcommands</span> <span class='hs-varid'>c</span><span class='hs-keyglyph'>@</span><span class='hs-layout'>(</span><span class='hs-conid'>SuperCommand</span> <span class='hs-layout'>{</span><span class='hs-layout'>}</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>commandSubCommands</span> <span class='hs-varid'>c</span>
<a name="line-43"></a><span class='hs-definition'>getSubcommands</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>[]</span>
<a name="line-44"></a>
<a name="line-45"></a><a name="commandAlias"></a><span class='hs-definition'>commandAlias</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>DarcsCommand</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>DarcsCommand</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>DarcsCommand</span>
<a name="line-46"></a><span class='hs-definition'>commandAlias</span> <span class='hs-varid'>n</span> <span class='hs-varid'>msuper</span> <span class='hs-varid'>c</span> <span class='hs-keyglyph'>=</span>
<a name="line-47"></a>  <span class='hs-varid'>c</span> <span class='hs-layout'>{</span> <span class='hs-varid'>commandName</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>n</span>
<a name="line-48"></a>    <span class='hs-layout'>,</span> <span class='hs-varid'>commandDescription</span> <span class='hs-keyglyph'>=</span> <span class='hs-str'>"Alias for `darcs "</span> <span class='hs-varop'>++</span> <span class='hs-varid'>cmdName</span> <span class='hs-varop'>++</span> <span class='hs-str'>"'."</span>
<a name="line-49"></a>    <span class='hs-layout'>,</span> <span class='hs-varid'>commandHelp</span> <span class='hs-keyglyph'>=</span> <span class='hs-str'>"The `darcs "</span> <span class='hs-varop'>++</span> <span class='hs-varid'>n</span> <span class='hs-varop'>++</span> <span class='hs-str'>"' command is an alias for "</span> <span class='hs-varop'>++</span>
<a name="line-50"></a>                     <span class='hs-str'>"`darcs "</span> <span class='hs-varop'>++</span> <span class='hs-varid'>cmdName</span> <span class='hs-varop'>++</span> <span class='hs-str'>"'.\n"</span> <span class='hs-varop'>++</span>
<a name="line-51"></a>                     <span class='hs-varid'>commandHelp</span> <span class='hs-varid'>c</span>
<a name="line-52"></a>    <span class='hs-layout'>}</span>
<a name="line-53"></a> <span class='hs-keyword'>where</span>
<a name="line-54"></a>  <span class='hs-varid'>cmdName</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>unwords</span> <span class='hs-varop'>.</span> <span class='hs-varid'>map</span> <span class='hs-varid'>commandName</span> <span class='hs-varop'>.</span> <span class='hs-varid'>maybe</span> <span class='hs-varid'>id</span> <span class='hs-layout'>(</span><span class='hs-conop'>:</span><span class='hs-layout'>)</span> <span class='hs-varid'>msuper</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>[</span> <span class='hs-varid'>c</span> <span class='hs-keyglyph'>]</span>
<a name="line-55"></a>
<a name="line-56"></a><a name="commandStub"></a><span class='hs-definition'>commandStub</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>DarcsCommand</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>DarcsCommand</span>
<a name="line-57"></a><span class='hs-definition'>commandStub</span> <span class='hs-varid'>n</span> <span class='hs-varid'>h</span> <span class='hs-varid'>d</span> <span class='hs-varid'>c</span> <span class='hs-keyglyph'>=</span>
<a name="line-58"></a>  <span class='hs-varid'>c</span> <span class='hs-layout'>{</span> <span class='hs-varid'>commandName</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>n</span>
<a name="line-59"></a>    <span class='hs-layout'>,</span> <span class='hs-varid'>commandHelp</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>h</span>
<a name="line-60"></a>    <span class='hs-layout'>,</span> <span class='hs-varid'>commandDescription</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>d</span>
<a name="line-61"></a>    <span class='hs-layout'>,</span> <span class='hs-varid'>commandCommand</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyglyph'>\</span><span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>putStr</span> <span class='hs-varid'>h</span>
<a name="line-62"></a>    <span class='hs-layout'>}</span>
<a name="line-63"></a>
<a name="line-64"></a><a name="usage"></a><span class='hs-definition'>usage</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>CommandControl</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>String</span>
<a name="line-65"></a><span class='hs-definition'>usage</span> <span class='hs-varid'>cs</span> <span class='hs-keyglyph'>=</span> <span class='hs-str'>"Usage: darcs COMMAND ...\n\nCommands:\n"</span> <span class='hs-varop'>++</span>
<a name="line-66"></a>           <span class='hs-varid'>usageHelper</span> <span class='hs-varid'>cs</span> <span class='hs-varop'>++</span> <span class='hs-str'>"\n"</span> <span class='hs-varop'>++</span>
<a name="line-67"></a>           <span class='hs-str'>"Use 'darcs COMMAND --help' for help on a single command.\n"</span> <span class='hs-varop'>++</span>
<a name="line-68"></a>           <span class='hs-str'>"Use 'darcs --version' to see the darcs version number.\n"</span> <span class='hs-varop'>++</span>
<a name="line-69"></a>           <span class='hs-str'>"Use 'darcs --exact-version' to get the exact version of this darcs instance.\n"</span> <span class='hs-varop'>++</span>
<a name="line-70"></a>           <span class='hs-str'>"Use 'darcs help patterns' for help on patch matching.\n"</span> <span class='hs-varop'>++</span>
<a name="line-71"></a>           <span class='hs-str'>"Use 'darcs help environment' for help on environment variables.\n"</span> <span class='hs-varop'>++</span>
<a name="line-72"></a>           <span class='hs-str'>"\n"</span> <span class='hs-varop'>++</span>
<a name="line-73"></a>           <span class='hs-str'>"Check bug reports at http://bugs.darcs.net/\n"</span>
<a name="line-74"></a>
<a name="line-75"></a><a name="subusage"></a><span class='hs-definition'>subusage</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>DarcsCommand</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>String</span>
<a name="line-76"></a><span class='hs-definition'>subusage</span> <span class='hs-varid'>super</span> <span class='hs-keyglyph'>=</span>
<a name="line-77"></a>    <span class='hs-layout'>(</span><span class='hs-varid'>usageInfo</span>
<a name="line-78"></a>     <span class='hs-layout'>(</span><span class='hs-str'>"Usage: darcs "</span><span class='hs-varop'>++</span><span class='hs-varid'>commandName</span> <span class='hs-varid'>super</span><span class='hs-varop'>++</span><span class='hs-str'>" SUBCOMMAND ... "</span> <span class='hs-varop'>++</span>
<a name="line-79"></a>      <span class='hs-str'>"\n\n"</span><span class='hs-varop'>++</span> <span class='hs-varid'>commandDescription</span> <span class='hs-varid'>super</span><span class='hs-varop'>++</span>
<a name="line-80"></a>      <span class='hs-str'>"\n\nSubcommands:\n"</span> <span class='hs-varop'>++</span> <span class='hs-varid'>usageHelper</span> <span class='hs-layout'>(</span><span class='hs-varid'>getSubcommands</span> <span class='hs-varid'>super</span><span class='hs-layout'>)</span> <span class='hs-varop'>++</span> <span class='hs-str'>"\nOptions:"</span><span class='hs-layout'>)</span>
<a name="line-81"></a>     <span class='hs-layout'>(</span><span class='hs-varid'>optionFromDarcsoption</span> <span class='hs-varid'>rootDirectory</span> <span class='hs-varid'>help</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-82"></a>    <span class='hs-varop'>++</span> <span class='hs-str'>"\n"</span> <span class='hs-varop'>++</span> <span class='hs-varid'>commandHelp</span> <span class='hs-varid'>super</span>
<a name="line-83"></a>
<a name="line-84"></a><a name="usageHelper"></a><span class='hs-definition'>usageHelper</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>CommandControl</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>String</span>
<a name="line-85"></a><span class='hs-definition'>usageHelper</span> <span class='hs-conid'>[]</span> <span class='hs-keyglyph'>=</span> <span class='hs-str'>""</span>
<a name="line-86"></a><span class='hs-definition'>usageHelper</span> <span class='hs-layout'>(</span><span class='hs-conid'>HiddenCommand</span> <span class='hs-keyword'>_</span><span class='hs-conop'>:</span><span class='hs-varid'>cs</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>usageHelper</span> <span class='hs-varid'>cs</span>
<a name="line-87"></a><span class='hs-definition'>usageHelper</span> <span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-conid'>CommandData</span> <span class='hs-varid'>c</span><span class='hs-layout'>)</span><span class='hs-conop'>:</span><span class='hs-varid'>cs</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-str'>"  "</span><span class='hs-varop'>++</span><span class='hs-varid'>padSpaces</span> <span class='hs-layout'>(</span><span class='hs-varid'>commandName</span> <span class='hs-varid'>c</span><span class='hs-layout'>)</span> <span class='hs-num'>15</span> <span class='hs-varop'>++</span>
<a name="line-88"></a>                      <span class='hs-varid'>chompNewline</span> <span class='hs-layout'>(</span><span class='hs-varid'>commandDescription</span> <span class='hs-varid'>c</span><span class='hs-layout'>)</span><span class='hs-varop'>++</span><span class='hs-str'>"\n"</span><span class='hs-varop'>++</span><span class='hs-varid'>usageHelper</span> <span class='hs-varid'>cs</span>
<a name="line-89"></a><span class='hs-definition'>usageHelper</span> <span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-conid'>GroupName</span> <span class='hs-varid'>n</span><span class='hs-layout'>)</span><span class='hs-conop'>:</span><span class='hs-varid'>cs</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-str'>"\n"</span> <span class='hs-varop'>++</span> <span class='hs-varid'>n</span> <span class='hs-varop'>++</span> <span class='hs-str'>"\n"</span> <span class='hs-varop'>++</span> <span class='hs-varid'>usageHelper</span> <span class='hs-varid'>cs</span>
<a name="line-90"></a>
<a name="line-91"></a><a name="chompNewline"></a><span class='hs-definition'>chompNewline</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>String</span>
<a name="line-92"></a><span class='hs-definition'>chompNewline</span> <span class='hs-str'>""</span> <span class='hs-keyglyph'>=</span> <span class='hs-str'>""</span>
<a name="line-93"></a><span class='hs-definition'>chompNewline</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>if</span> <span class='hs-varid'>last</span> <span class='hs-varid'>s</span> <span class='hs-varop'>==</span> <span class='hs-chr'>'\n'</span> <span class='hs-keyword'>then</span> <span class='hs-varid'>init</span> <span class='hs-varid'>s</span> <span class='hs-keyword'>else</span> <span class='hs-varid'>s</span>
<a name="line-94"></a>
<a name="line-95"></a><a name="padSpaces"></a><span class='hs-definition'>padSpaces</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Int</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>String</span>
<a name="line-96"></a><span class='hs-definition'>padSpaces</span> <span class='hs-varid'>s</span> <span class='hs-varid'>n</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>s</span> <span class='hs-varop'>++</span> <span class='hs-varid'>replicate</span> <span class='hs-layout'>(</span><span class='hs-varid'>n</span> <span class='hs-comment'>-</span> <span class='hs-varid'>length</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span> <span class='hs-chr'>' '</span>
<a name="line-97"></a>
<a name="line-98"></a><a name="superName"></a><span class='hs-definition'>superName</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>DarcsCommand</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>String</span>
<a name="line-99"></a><span class='hs-definition'>superName</span> <span class='hs-conid'>Nothing</span>  <span class='hs-keyglyph'>=</span> <span class='hs-str'>""</span>
<a name="line-100"></a><span class='hs-definition'>superName</span> <span class='hs-layout'>(</span><span class='hs-conid'>Just</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>commandName</span> <span class='hs-varid'>x</span> <span class='hs-varop'>++</span> <span class='hs-str'>" "</span>
<a name="line-101"></a>
<a name="line-102"></a><a name="getCommandMiniHelp"></a><span class='hs-definition'>getCommandMiniHelp</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>DarcsCommand</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>DarcsCommand</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>String</span>
<a name="line-103"></a><span class='hs-definition'>getCommandMiniHelp</span> <span class='hs-varid'>msuper</span> <span class='hs-varid'>cmd</span> <span class='hs-keyglyph'>=</span>
<a name="line-104"></a>  <span class='hs-varid'>getCommandHelpCore</span> <span class='hs-varid'>msuper</span> <span class='hs-varid'>cmd</span> <span class='hs-varop'>++</span>
<a name="line-105"></a>  <span class='hs-str'>"\n\nSee darcs help "</span>
<a name="line-106"></a>  <span class='hs-varop'>++</span> <span class='hs-layout'>(</span><span class='hs-varid'>maybe</span> <span class='hs-str'>""</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>c</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>commandName</span> <span class='hs-varid'>c</span> <span class='hs-varop'>++</span> <span class='hs-str'>" "</span><span class='hs-layout'>)</span> <span class='hs-varid'>msuper</span><span class='hs-layout'>)</span>
<a name="line-107"></a>  <span class='hs-varop'>++</span> <span class='hs-varid'>commandName</span> <span class='hs-varid'>cmd</span> <span class='hs-varop'>++</span> <span class='hs-str'>" for details."</span>
<a name="line-108"></a>
<a name="line-109"></a><a name="getCommandHelp"></a><span class='hs-definition'>getCommandHelp</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>DarcsCommand</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>DarcsCommand</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>String</span>
<a name="line-110"></a><span class='hs-definition'>getCommandHelp</span> <span class='hs-varid'>msuper</span> <span class='hs-varid'>cmd</span> <span class='hs-keyglyph'>=</span>
<a name="line-111"></a>    <span class='hs-varid'>unlines</span> <span class='hs-layout'>(</span><span class='hs-varid'>reverse</span> <span class='hs-varid'>basicR</span><span class='hs-layout'>)</span>
<a name="line-112"></a>    <span class='hs-varop'>++</span> <span class='hs-layout'>(</span><span class='hs-keyword'>if</span> <span class='hs-varid'>null</span> <span class='hs-varid'>advanced</span> <span class='hs-keyword'>then</span> <span class='hs-str'>""</span>
<a name="line-113"></a>        <span class='hs-keyword'>else</span> <span class='hs-str'>"\nAdvanced options:\n"</span> <span class='hs-varop'>++</span> <span class='hs-varid'>unlines</span> <span class='hs-layout'>(</span><span class='hs-varid'>reverse</span> <span class='hs-varid'>advancedR</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-114"></a>    <span class='hs-varop'>++</span> <span class='hs-str'>"\n"</span> <span class='hs-varop'>++</span> <span class='hs-varid'>commandHelp</span> <span class='hs-varid'>cmd</span>
<a name="line-115"></a>    <span class='hs-keyword'>where</span> <span class='hs-comment'>-- we could just call usageInfo twice, but then the advanced</span>
<a name="line-116"></a>          <span class='hs-comment'>-- options might not line up with the basic ones (no short flags)</span>
<a name="line-117"></a>          <span class='hs-layout'>(</span><span class='hs-varid'>advancedR</span><span class='hs-layout'>,</span> <span class='hs-varid'>basicR</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-118"></a>             <span class='hs-varid'>splitAt</span> <span class='hs-layout'>(</span><span class='hs-varid'>length</span> <span class='hs-varid'>advanced</span><span class='hs-layout'>)</span> <span class='hs-varop'>$</span> <span class='hs-varid'>reverse</span> <span class='hs-varop'>$</span> <span class='hs-varid'>lines</span> <span class='hs-varid'>combinedUsage</span>
<a name="line-119"></a>          <span class='hs-varid'>combinedUsage</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>usageInfo</span>
<a name="line-120"></a>            <span class='hs-layout'>(</span><span class='hs-varid'>getCommandHelpCore</span> <span class='hs-varid'>msuper</span> <span class='hs-varid'>cmd</span> <span class='hs-varop'>++</span> <span class='hs-varid'>subcommands</span> <span class='hs-varop'>++</span> <span class='hs-str'>"\n\nOptions:"</span><span class='hs-layout'>)</span>
<a name="line-121"></a>            <span class='hs-layout'>(</span><span class='hs-varid'>basic</span> <span class='hs-varop'>++</span> <span class='hs-varid'>advanced</span><span class='hs-layout'>)</span>
<a name="line-122"></a>          <span class='hs-layout'>(</span><span class='hs-varid'>basic</span><span class='hs-layout'>,</span> <span class='hs-varid'>advanced</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>commandOptions</span> <span class='hs-varid'>rootDirectory</span> <span class='hs-varid'>cmd</span>
<a name="line-123"></a>          <span class='hs-varid'>subcommands</span> <span class='hs-keyglyph'>=</span>
<a name="line-124"></a>            <span class='hs-keyword'>case</span> <span class='hs-varid'>msuper</span> <span class='hs-keyword'>of</span>
<a name="line-125"></a>            <span class='hs-conid'>Nothing</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyword'>case</span> <span class='hs-varid'>getSubcommands</span> <span class='hs-varid'>cmd</span> <span class='hs-keyword'>of</span>
<a name="line-126"></a>                       <span class='hs-conid'>[]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>[]</span>
<a name="line-127"></a>                       <span class='hs-varid'>s</span>  <span class='hs-keyglyph'>-&gt;</span> <span class='hs-str'>"\n\nSubcommands:\n"</span> <span class='hs-varop'>++</span> <span class='hs-layout'>(</span><span class='hs-varid'>usageHelper</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span>
<a name="line-128"></a>            <span class='hs-comment'>-- we don't want to list subcommands if we're already specifying them</span>
<a name="line-129"></a>            <span class='hs-conid'>Just</span> <span class='hs-keyword'>_</span>  <span class='hs-keyglyph'>-&gt;</span> <span class='hs-str'>""</span>
<a name="line-130"></a>
<a name="line-131"></a><a name="getCommandHelpCore"></a><span class='hs-definition'>getCommandHelpCore</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>DarcsCommand</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>DarcsCommand</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>String</span>
<a name="line-132"></a><span class='hs-definition'>getCommandHelpCore</span> <span class='hs-varid'>msuper</span> <span class='hs-varid'>cmd</span> <span class='hs-keyglyph'>=</span>
<a name="line-133"></a>    <span class='hs-str'>"Usage: darcs "</span><span class='hs-varop'>++</span><span class='hs-varid'>superName</span> <span class='hs-varid'>msuper</span><span class='hs-varop'>++</span><span class='hs-varid'>commandName</span> <span class='hs-varid'>cmd</span><span class='hs-varop'>++</span>
<a name="line-134"></a>    <span class='hs-str'>" [OPTION]... "</span> <span class='hs-varop'>++</span> <span class='hs-varid'>unwords</span> <span class='hs-varid'>args_help</span> <span class='hs-varop'>++</span>
<a name="line-135"></a>    <span class='hs-str'>"\n"</span><span class='hs-varop'>++</span> <span class='hs-varid'>commandDescription</span> <span class='hs-varid'>cmd</span>
<a name="line-136"></a>    <span class='hs-keyword'>where</span> <span class='hs-varid'>args_help</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>case</span> <span class='hs-varid'>cmd</span> <span class='hs-keyword'>of</span>
<a name="line-137"></a>            <span class='hs-layout'>(</span><span class='hs-conid'>DarcsCommand</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span>
<a name="line-138"></a>              <span class='hs-varid'>commandExtraArgHelp</span> <span class='hs-varid'>cmd</span>
<a name="line-139"></a>            <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>[]</span>
<a name="line-140"></a>
<a name="line-141"></a><a name="CommandArgs"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>CommandArgs</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>CommandOnly</span>      <span class='hs-conid'>DarcsCommand</span>
<a name="line-142"></a>                 <span class='hs-keyglyph'>|</span> <span class='hs-conid'>SuperCommandOnly</span> <span class='hs-conid'>DarcsCommand</span>
<a name="line-143"></a>                 <span class='hs-keyglyph'>|</span> <span class='hs-conid'>SuperCommandSub</span>  <span class='hs-conid'>DarcsCommand</span> <span class='hs-conid'>DarcsCommand</span>
<a name="line-144"></a>
<a name="line-145"></a><a name="disambiguateCommands"></a><span class='hs-comment'>-- Parses a darcs command line with potentially abbreviated commands</span>
<a name="line-146"></a><span class='hs-definition'>disambiguateCommands</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>CommandControl</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>String</span><span class='hs-keyglyph'>]</span>
<a name="line-147"></a>                      <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Either</span> <span class='hs-conid'>String</span> <span class='hs-layout'>(</span><span class='hs-conid'>CommandArgs</span><span class='hs-layout'>,</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>String</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>)</span>
<a name="line-148"></a><span class='hs-definition'>disambiguateCommands</span> <span class='hs-varid'>allcs</span> <span class='hs-varid'>cmd</span> <span class='hs-varid'>args</span> <span class='hs-keyglyph'>=</span>
<a name="line-149"></a> <span class='hs-keyword'>do</span> <span class='hs-varid'>c</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>extract</span> <span class='hs-varid'>cmd</span> <span class='hs-varid'>allcs</span>
<a name="line-150"></a>    <span class='hs-keyword'>case</span> <span class='hs-layout'>(</span><span class='hs-varid'>getSubcommands</span> <span class='hs-varid'>c</span><span class='hs-layout'>,</span> <span class='hs-varid'>args</span><span class='hs-layout'>)</span> <span class='hs-keyword'>of</span>
<a name="line-151"></a>      <span class='hs-layout'>(</span><span class='hs-conid'>[]</span><span class='hs-layout'>,</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span>         <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-conid'>CommandOnly</span> <span class='hs-varid'>c</span><span class='hs-layout'>,</span> <span class='hs-varid'>args</span><span class='hs-layout'>)</span>
<a name="line-152"></a>      <span class='hs-layout'>(</span><span class='hs-keyword'>_</span> <span class='hs-layout'>,</span><span class='hs-conid'>[]</span><span class='hs-layout'>)</span>         <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-conid'>SuperCommandOnly</span> <span class='hs-varid'>c</span><span class='hs-layout'>,</span> <span class='hs-varid'>args</span><span class='hs-layout'>)</span>
<a name="line-153"></a>      <span class='hs-layout'>(</span><span class='hs-varid'>subcs</span><span class='hs-layout'>,</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span><span class='hs-conop'>:</span><span class='hs-keyword'>as</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyword'>case</span> <span class='hs-varid'>extract</span> <span class='hs-varid'>a</span> <span class='hs-varid'>subcs</span> <span class='hs-keyword'>of</span>
<a name="line-154"></a>                         <span class='hs-conid'>Left</span> <span class='hs-keyword'>_</span>   <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-conid'>SuperCommandOnly</span> <span class='hs-varid'>c</span><span class='hs-layout'>,</span> <span class='hs-varid'>args</span><span class='hs-layout'>)</span>
<a name="line-155"></a>                         <span class='hs-conid'>Right</span> <span class='hs-varid'>sc</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-conid'>SuperCommandSub</span> <span class='hs-varid'>c</span> <span class='hs-varid'>sc</span><span class='hs-layout'>,</span> <span class='hs-keyword'>as</span><span class='hs-layout'>)</span>
<a name="line-156"></a>
<a name="line-157"></a><a name="extract"></a><span class='hs-definition'>extract</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>CommandControl</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Either</span> <span class='hs-conid'>String</span> <span class='hs-conid'>DarcsCommand</span>
<a name="line-158"></a><span class='hs-definition'>extract</span> <span class='hs-varid'>cmd</span> <span class='hs-varid'>cs</span> <span class='hs-keyglyph'>=</span>
<a name="line-159"></a> <span class='hs-keyword'>case</span> <span class='hs-keyglyph'>[</span> <span class='hs-varid'>c</span> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>c</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>extractCommands</span> <span class='hs-varid'>cs</span><span class='hs-layout'>,</span> <span class='hs-varid'>cmd</span> <span class='hs-varop'>`isPrefixOf`</span> <span class='hs-varid'>commandName</span> <span class='hs-varid'>c</span> <span class='hs-keyglyph'>]</span> <span class='hs-varop'>++</span>
<a name="line-160"></a>      <span class='hs-keyglyph'>[</span> <span class='hs-varid'>h</span> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>h</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>extractHiddenCommands</span> <span class='hs-varid'>cs</span><span class='hs-layout'>,</span>    <span class='hs-varid'>cmd</span> <span class='hs-varop'>==</span> <span class='hs-varid'>commandName</span> <span class='hs-varid'>h</span> <span class='hs-keyglyph'>]</span> <span class='hs-keyword'>of</span>
<a name="line-161"></a>   <span class='hs-conid'>[]</span>  <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Left</span> <span class='hs-varop'>$</span> <span class='hs-str'>"No such command '"</span> <span class='hs-varop'>++</span> <span class='hs-varid'>cmd</span> <span class='hs-varop'>++</span> <span class='hs-str'>"'\n"</span>
<a name="line-162"></a>   <span class='hs-keyglyph'>[</span><span class='hs-varid'>c</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Right</span> <span class='hs-varid'>c</span>
<a name="line-163"></a>   <span class='hs-varid'>cs'</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Left</span> <span class='hs-varop'>$</span> <span class='hs-str'>"Ambiguous command...\n\n"</span> <span class='hs-varop'>++</span>
<a name="line-164"></a>                    <span class='hs-str'>"The command '"</span><span class='hs-varop'>++</span><span class='hs-varid'>cmd</span><span class='hs-varop'>++</span><span class='hs-str'>"' could mean one of:\n"</span> <span class='hs-varop'>++</span>
<a name="line-165"></a>                    <span class='hs-varid'>unwords</span> <span class='hs-layout'>(</span><span class='hs-varid'>sort</span> <span class='hs-varop'>$</span> <span class='hs-varid'>map</span> <span class='hs-varid'>commandName</span> <span class='hs-varid'>cs'</span><span class='hs-layout'>)</span>
<a name="line-166"></a>
<a name="line-167"></a><a name="amVerbose"></a><span class='hs-definition'>amVerbose</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>DarcsFlag</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Bool</span>
<a name="line-168"></a><span class='hs-definition'>amVerbose</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>elem</span> <span class='hs-conid'>Verbose</span>
<a name="line-169"></a>
<a name="line-170"></a><a name="amQuiet"></a><span class='hs-definition'>amQuiet</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>DarcsFlag</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Bool</span>
<a name="line-171"></a><span class='hs-definition'>amQuiet</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>elem</span> <span class='hs-conid'>Quiet</span>
<a name="line-172"></a>
<a name="line-173"></a><a name="putVerbose"></a><span class='hs-definition'>putVerbose</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>DarcsFlag</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Doc</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span>
<a name="line-174"></a><span class='hs-definition'>putVerbose</span> <span class='hs-varid'>opts</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>when</span> <span class='hs-layout'>(</span><span class='hs-varid'>amVerbose</span> <span class='hs-varid'>opts</span><span class='hs-layout'>)</span> <span class='hs-varop'>.</span> <span class='hs-varid'>putDocLn</span>
<a name="line-175"></a>     
<a name="line-176"></a><a name="putInfo"></a><span class='hs-definition'>putInfo</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>DarcsFlag</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Doc</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span>
<a name="line-177"></a><span class='hs-definition'>putInfo</span> <span class='hs-varid'>opts</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>unless</span> <span class='hs-layout'>(</span><span class='hs-varid'>amQuiet</span> <span class='hs-varid'>opts</span><span class='hs-layout'>)</span> <span class='hs-varop'>.</span> <span class='hs-varid'>putDocLn</span>
<a name="line-178"></a>
<a name="line-179"></a><a name="putWarning"></a><span class='hs-definition'>putWarning</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>DarcsFlag</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Doc</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span>
<a name="line-180"></a><span class='hs-definition'>putWarning</span> <span class='hs-varid'>opts</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>unless</span> <span class='hs-layout'>(</span><span class='hs-varid'>amQuiet</span> <span class='hs-varid'>opts</span><span class='hs-layout'>)</span> <span class='hs-varop'>.</span> <span class='hs-varid'>hPutDocLn</span> <span class='hs-varid'>stderr</span>
<a name="line-181"></a>
<a name="line-182"></a><a name="abortRun"></a><span class='hs-definition'>abortRun</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>DarcsFlag</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Doc</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span>
<a name="line-183"></a><span class='hs-definition'>abortRun</span> <span class='hs-varid'>opts</span> <span class='hs-varid'>msg</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>if</span> <span class='hs-conid'>DryRun</span> <span class='hs-varop'>`elem`</span> <span class='hs-varid'>opts</span>
<a name="line-184"></a>                    <span class='hs-keyword'>then</span> <span class='hs-varid'>putInfo</span> <span class='hs-varid'>opts</span> <span class='hs-varop'>$</span> <span class='hs-varid'>text</span> <span class='hs-str'>"NOTE:"</span> <span class='hs-varop'>&lt;+&gt;</span> <span class='hs-varid'>msg</span>
<a name="line-185"></a>                    <span class='hs-keyword'>else</span> <span class='hs-varid'>errorDoc</span> <span class='hs-varid'>msg</span>
</pre>\end{code}
</body>
</html>