Sophie

Sophie

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

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/Send.lhs</title>
<link type='text/css' rel='stylesheet' href='hscolour.css' />
</head>
<body>
%  Copyright (C) 2002-2004 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.

\darcsCommand{send}
\begin{code}
<pre><a name="line-1"></a><span class='hs-comment'>{-# OPTIONS_GHC -cpp #-}</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'>Commands</span><span class='hs-varop'>.</span><span class='hs-conid'>Send</span> <span class='hs-layout'>(</span> <span class='hs-varid'>send</span> <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-5"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Char</span> <span class='hs-layout'>(</span> <span class='hs-varid'>isAlpha</span><span class='hs-layout'>,</span> <span class='hs-varid'>isDigit</span><span class='hs-layout'>,</span> <span class='hs-varid'>isSpace</span><span class='hs-layout'>,</span> <span class='hs-varid'>toLower</span> <span class='hs-layout'>)</span>
<a name="line-6"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>System</span><span class='hs-varop'>.</span><span class='hs-conid'>Exit</span> <span class='hs-layout'>(</span> <span class='hs-varid'>exitWith</span><span class='hs-layout'>,</span> <span class='hs-conid'>ExitCode</span><span class='hs-layout'>(</span> <span class='hs-conid'>ExitSuccess</span> <span class='hs-layout'>)</span> <span class='hs-layout'>)</span>
<a name="line-7"></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-varop'>.</span><span class='hs-conid'>Error</span> <span class='hs-layout'>(</span> <span class='hs-varid'>ioeGetErrorString</span> <span class='hs-layout'>)</span>
<a name="line-8"></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'>hClose</span> <span class='hs-layout'>)</span>
<a name="line-9"></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> <span class='hs-varid'>forM_</span> <span class='hs-layout'>)</span>
<a name="line-10"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Maybe</span> <span class='hs-layout'>(</span> <span class='hs-varid'>isJust</span><span class='hs-layout'>,</span> <span class='hs-varid'>isNothing</span> <span class='hs-layout'>)</span>
<a name="line-11"></a>
<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'>Commands</span> <span class='hs-layout'>(</span> <span class='hs-conid'>DarcsCommand</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-varid'>putInfo</span><span class='hs-layout'>,</span> <span class='hs-varid'>putVerbose</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'>Arguments</span> <span class='hs-layout'>(</span> <span class='hs-conid'>DarcsFlag</span><span class='hs-layout'>(</span> <span class='hs-conid'>EditDescription</span><span class='hs-layout'>,</span> <span class='hs-conid'>LogFile</span><span class='hs-layout'>,</span>
<a name="line-14"></a>                                    <span class='hs-conid'>Target</span><span class='hs-layout'>,</span> <span class='hs-conid'>OutputAutoName</span><span class='hs-layout'>,</span> <span class='hs-conid'>Output</span><span class='hs-layout'>,</span> <span class='hs-conid'>Context</span><span class='hs-layout'>,</span>
<a name="line-15"></a>                                    <span class='hs-conid'>DryRun</span><span class='hs-layout'>,</span> <span class='hs-conid'>Quiet</span><span class='hs-layout'>,</span> <span class='hs-conid'>Unified</span>
<a name="line-16"></a>                                  <span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-17"></a>                         <span class='hs-varid'>fixUrl</span><span class='hs-layout'>,</span> <span class='hs-varid'>definePatches</span><span class='hs-layout'>,</span>
<a name="line-18"></a>                         <span class='hs-varid'>getCc</span><span class='hs-layout'>,</span> <span class='hs-varid'>getAuthor</span><span class='hs-layout'>,</span> <span class='hs-varid'>workingRepoDir</span><span class='hs-layout'>,</span>
<a name="line-19"></a>                         <span class='hs-varid'>editDescription</span><span class='hs-layout'>,</span> <span class='hs-varid'>logfile</span><span class='hs-layout'>,</span> <span class='hs-varid'>rmlogfile</span><span class='hs-layout'>,</span>
<a name="line-20"></a>                         <span class='hs-varid'>sign</span><span class='hs-layout'>,</span> <span class='hs-varid'>getSubject</span><span class='hs-layout'>,</span> <span class='hs-varid'>depsSel</span><span class='hs-layout'>,</span> <span class='hs-varid'>getInReplyTo</span><span class='hs-layout'>,</span>
<a name="line-21"></a>                         <span class='hs-varid'>matchSeveral</span><span class='hs-layout'>,</span> <span class='hs-varid'>setDefault</span><span class='hs-layout'>,</span> <span class='hs-varid'>outputAutoName</span><span class='hs-layout'>,</span>
<a name="line-22"></a>                         <span class='hs-varid'>output</span><span class='hs-layout'>,</span> <span class='hs-varid'>ccSend</span><span class='hs-layout'>,</span> <span class='hs-varid'>subject</span><span class='hs-layout'>,</span> <span class='hs-varid'>target</span><span class='hs-layout'>,</span> <span class='hs-varid'>author</span><span class='hs-layout'>,</span> <span class='hs-varid'>sendmailCmd</span><span class='hs-layout'>,</span>
<a name="line-23"></a>                         <span class='hs-varid'>inReplyTo</span><span class='hs-layout'>,</span> <span class='hs-varid'>remoteRepo</span><span class='hs-layout'>,</span> <span class='hs-varid'>networkOptions</span><span class='hs-layout'>,</span>
<a name="line-24"></a>                         <span class='hs-varid'>allInteractive</span><span class='hs-layout'>,</span> <span class='hs-varid'>getSendmailCmd</span><span class='hs-layout'>,</span>
<a name="line-25"></a>                         <span class='hs-varid'>printDryRunMessageAndExit</span><span class='hs-layout'>,</span>
<a name="line-26"></a>                         <span class='hs-varid'>summary</span><span class='hs-layout'>,</span> <span class='hs-varid'>allowUnrelatedRepos</span><span class='hs-layout'>,</span>
<a name="line-27"></a>                         <span class='hs-varid'>fromOpt</span><span class='hs-layout'>,</span> <span class='hs-varid'>dryRun</span><span class='hs-layout'>,</span> <span class='hs-varid'>sendToContext</span><span class='hs-layout'>,</span>
<a name="line-28"></a>                       <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'>Flags</span> <span class='hs-layout'>(</span> <span class='hs-varid'>willRemoveLogFile</span> <span class='hs-layout'>)</span>
<a name="line-30"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Darcs</span><span class='hs-varop'>.</span><span class='hs-conid'>Hopefully</span> <span class='hs-layout'>(</span> <span class='hs-conid'>PatchInfoAnd</span><span class='hs-layout'>,</span> <span class='hs-varid'>hopefully</span><span class='hs-layout'>,</span> <span class='hs-varid'>info</span> <span class='hs-layout'>)</span>
<a name="line-31"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Darcs</span><span class='hs-varop'>.</span><span class='hs-conid'>Repository</span> <span class='hs-layout'>(</span> <span class='hs-conid'>PatchSet</span><span class='hs-layout'>,</span> <span class='hs-conid'>Repository</span><span class='hs-layout'>,</span>
<a name="line-32"></a>                          <span class='hs-varid'>amInRepository</span><span class='hs-layout'>,</span> <span class='hs-varid'>identifyRepositoryFor</span><span class='hs-layout'>,</span> <span class='hs-varid'>withRepoReadLock</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-33"></a>                          <span class='hs-varid'>read_repo</span><span class='hs-layout'>,</span> <span class='hs-varid'>readRecorded</span><span class='hs-layout'>,</span> <span class='hs-varid'>prefsUrl</span><span class='hs-layout'>,</span> <span class='hs-varid'>checkUnrelatedRepos</span> <span class='hs-layout'>)</span>
<a name="line-34"></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-layout'>(</span> <span class='hs-conid'>RepoPatch</span><span class='hs-layout'>,</span> <span class='hs-varid'>description</span><span class='hs-layout'>,</span> <span class='hs-varid'>applyToTree</span><span class='hs-layout'>,</span> <span class='hs-varid'>invert</span> <span class='hs-layout'>)</span>
<a name="line-35"></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-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-conid'>RL</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-layout'>(</span><span class='hs-conop'>:&gt;</span><span class='hs-layout'>)</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-layout'>(</span><span class='hs-conop'>:\/:</span><span class='hs-layout'>)</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-36"></a>                       <span class='hs-varid'>mapRL_RL</span><span class='hs-layout'>,</span> <span class='hs-varid'>mapFL</span><span class='hs-layout'>,</span> <span class='hs-varid'>mapRL</span><span class='hs-layout'>,</span> <span class='hs-varid'>reverseRL</span><span class='hs-layout'>,</span> <span class='hs-varid'>mapFL_FL</span><span class='hs-layout'>,</span> <span class='hs-varid'>lengthFL</span><span class='hs-layout'>,</span> <span class='hs-varid'>nullFL</span> <span class='hs-layout'>)</span>
<a name="line-37"></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'>Bundle</span> <span class='hs-layout'>(</span> <span class='hs-varid'>make_bundle</span><span class='hs-layout'>,</span> <span class='hs-varid'>scan_context</span> <span class='hs-layout'>)</span>
<a name="line-38"></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-varid'>just_name</span> <span class='hs-layout'>)</span>
<a name="line-39"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Darcs</span><span class='hs-varop'>.</span><span class='hs-conid'>Repository</span><span class='hs-varop'>.</span><span class='hs-conid'>Prefs</span> <span class='hs-layout'>(</span> <span class='hs-varid'>defaultrepo</span><span class='hs-layout'>,</span> <span class='hs-varid'>setDefaultrepo</span><span class='hs-layout'>,</span> <span class='hs-varid'>getPreflist</span> <span class='hs-layout'>)</span>
<a name="line-40"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Darcs</span><span class='hs-varop'>.</span><span class='hs-conid'>External</span> <span class='hs-layout'>(</span> <span class='hs-varid'>signString</span><span class='hs-layout'>,</span> <span class='hs-varid'>sendEmailDoc</span><span class='hs-layout'>,</span> <span class='hs-varid'>fetchFilePS</span><span class='hs-layout'>,</span> <span class='hs-conid'>Cachable</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-varid'>generateEmail</span> <span class='hs-layout'>)</span>
<a name="line-41"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>ByteStringUtils</span> <span class='hs-layout'>(</span> <span class='hs-varid'>mmapFilePS</span> <span class='hs-layout'>)</span>
<a name="line-42"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>ByteString</span><span class='hs-varop'>.</span><span class='hs-conid'>Char8</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>BC</span> <span class='hs-layout'>(</span><span class='hs-varid'>unpack</span><span class='hs-layout'>)</span>
<a name="line-43"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Darcs</span><span class='hs-varop'>.</span><span class='hs-conid'>Lock</span> <span class='hs-layout'>(</span> <span class='hs-varid'>withOpenTemp</span><span class='hs-layout'>,</span> <span class='hs-varid'>writeDocBinFile</span><span class='hs-layout'>,</span> <span class='hs-varid'>readDocBinFile</span><span class='hs-layout'>,</span> <span class='hs-varid'>world_readable_temp</span><span class='hs-layout'>,</span> <span class='hs-varid'>removeFileMayNotExist</span> <span class='hs-layout'>)</span>
<a name="line-44"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Darcs</span><span class='hs-varop'>.</span><span class='hs-conid'>SelectChanges</span> <span class='hs-layout'>(</span> <span class='hs-varid'>with_selected_changes</span> <span class='hs-layout'>)</span>
<a name="line-45"></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'>Depends</span> <span class='hs-layout'>(</span> <span class='hs-varid'>get_common_and_uncommon</span> <span class='hs-layout'>)</span>
<a name="line-46"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Darcs</span><span class='hs-varop'>.</span><span class='hs-conid'>Utils</span> <span class='hs-layout'>(</span> <span class='hs-varid'>askUser</span><span class='hs-layout'>,</span> <span class='hs-varid'>catchall</span><span class='hs-layout'>,</span> <span class='hs-varid'>edit_file</span><span class='hs-layout'>,</span> <span class='hs-varid'>formatPath</span> <span class='hs-layout'>)</span>
<a name="line-47"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Progress</span> <span class='hs-layout'>(</span> <span class='hs-varid'>debugMessage</span> <span class='hs-layout'>)</span>
<a name="line-48"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Darcs</span><span class='hs-varop'>.</span><span class='hs-conid'>Email</span> <span class='hs-layout'>(</span> <span class='hs-varid'>make_email</span> <span class='hs-layout'>)</span>
<a name="line-49"></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'>vsep</span><span class='hs-layout'>,</span> <span class='hs-varid'>vcat</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'>$$</span><span class='hs-layout'>)</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-layout'>(</span><span class='hs-varop'>&lt;&gt;</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-varid'>putDoc</span> <span class='hs-layout'>)</span>
<a name="line-50"></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'>FilePathLike</span><span class='hs-layout'>,</span> <span class='hs-varid'>toFilePath</span><span class='hs-layout'>,</span> <span class='hs-conid'>AbsolutePath</span><span class='hs-layout'>,</span> <span class='hs-conid'>AbsolutePathOrStd</span><span class='hs-layout'>,</span>
<a name="line-51"></a>                        <span class='hs-varid'>getCurrentDirectory</span><span class='hs-layout'>,</span> <span class='hs-varid'>makeAbsoluteOrStd</span><span class='hs-layout'>,</span> <span class='hs-varid'>useAbsoluteOrStd</span> <span class='hs-layout'>)</span>
<a name="line-52"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>HTTP</span> <span class='hs-layout'>(</span> <span class='hs-varid'>postUrl</span> <span class='hs-layout'>)</span>
<a name="line-53"></a><span class='hs-cpp'>#include "impossible.h"</span>
<a name="line-54"></a>
<a name="line-55"></a><span class='hs-cpp'>#include "gadts.h"</span>
<a name="line-56"></a>
<a name="line-57"></a><a name="sendDescription"></a><span class='hs-definition'>sendDescription</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>String</span>
<a name="line-58"></a><span class='hs-definition'>sendDescription</span> <span class='hs-keyglyph'>=</span>
<a name="line-59"></a> <span class='hs-str'>"Send by email a bundle of one or more patches."</span>
<a name="line-60"></a>
<a name="line-61"></a><a name="sendHelp"></a><span class='hs-definition'>sendHelp</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>String</span>
<a name="line-62"></a><span class='hs-definition'>sendHelp</span> <span class='hs-keyglyph'>=</span>
<a name="line-63"></a> <span class='hs-str'>"Send is used to prepare a bundle of patches that can be applied to a target\n"</span><span class='hs-varop'>++</span>
<a name="line-64"></a> <span class='hs-str'>"repository.  Send accepts the URL of the repository as an argument.  When\n"</span><span class='hs-varop'>++</span>
<a name="line-65"></a> <span class='hs-str'>"called without an argument, send will use the most recent repository that\n"</span><span class='hs-varop'>++</span>
<a name="line-66"></a> <span class='hs-str'>"was either pushed to, pulled from or sent to.  By default, the patch bundle\n"</span><span class='hs-varop'>++</span>
<a name="line-67"></a> <span class='hs-str'>"is sent by email, although you may save it to a file.\n"</span>
</pre>\end{code}

Do not confuse the \verb!--author! options with the return address
that \verb!darcs send! will set for your patch bundle.

For example, if you have two email addresses A and B:
\begin{description}
\item  If you use
\verb!--author A! but your machine is configured to send mail from
address B by default, then the return address on your message will be B.

\item If you use \verb!--from A! and your mail client supports setting the
From: address arbitrarily (some non-Unix-like mail clients, especially,
may not support this), then the return address will be A; if it does
not support this, then the return address will be B.

\item If you supply neither \verb!--from! nor \verb!--author!, then the return
address will be B.
\end{description}

In addition, unless you specify the sendmail command with
\verb!--sendmail-command!, darcs sends email using the default email
command on your computer. This default command is determined by the
\verb!configure! script. Thus, on some non-Unix-like OSes,
\verb!--from! is likely to not work at all.

\begin{code}
<pre><a name="line-1"></a><a name="send"></a><span class='hs-definition'>send</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>DarcsCommand</span>
<a name="line-2"></a><span class='hs-definition'>send</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>DarcsCommand</span> <span class='hs-layout'>{</span><span class='hs-varid'>commandName</span> <span class='hs-keyglyph'>=</span> <span class='hs-str'>"send"</span><span class='hs-layout'>,</span>
<a name="line-3"></a>                     <span class='hs-varid'>commandHelp</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>sendHelp</span><span class='hs-layout'>,</span>
<a name="line-4"></a>                     <span class='hs-varid'>commandDescription</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>sendDescription</span><span class='hs-layout'>,</span>
<a name="line-5"></a>                     <span class='hs-varid'>commandExtraArgs</span> <span class='hs-keyglyph'>=</span> <span class='hs-num'>1</span><span class='hs-layout'>,</span>
<a name="line-6"></a>                     <span class='hs-varid'>commandExtraArgHelp</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyglyph'>[</span><span class='hs-str'>"[REPOSITORY]"</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>,</span>
<a name="line-7"></a>                     <span class='hs-varid'>commandCommand</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>sendCmd</span><span class='hs-layout'>,</span>
<a name="line-8"></a>                     <span class='hs-varid'>commandPrereq</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>amInRepository</span><span class='hs-layout'>,</span>
<a name="line-9"></a>                     <span class='hs-varid'>commandGetArgPossibilities</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>getPreflist</span> <span class='hs-str'>"repos"</span><span class='hs-layout'>,</span>
<a name="line-10"></a>                     <span class='hs-varid'>commandArgdefaults</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>defaultrepo</span><span class='hs-layout'>,</span>
<a name="line-11"></a>                     <span class='hs-varid'>commandAdvancedOptions</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyglyph'>[</span><span class='hs-varid'>logfile</span><span class='hs-layout'>,</span> <span class='hs-varid'>rmlogfile</span><span class='hs-layout'>,</span>
<a name="line-12"></a>                                                 <span class='hs-varid'>remoteRepo</span><span class='hs-layout'>,</span>
<a name="line-13"></a>                                                 <span class='hs-varid'>sendToContext</span><span class='hs-keyglyph'>]</span> <span class='hs-varop'>++</span>
<a name="line-14"></a>                                                <span class='hs-varid'>networkOptions</span><span class='hs-layout'>,</span>
<a name="line-15"></a>                     <span class='hs-varid'>commandBasicOptions</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyglyph'>[</span><span class='hs-varid'>matchSeveral</span><span class='hs-layout'>,</span> <span class='hs-varid'>depsSel</span><span class='hs-layout'>,</span>
<a name="line-16"></a>                                              <span class='hs-varid'>allInteractive</span><span class='hs-layout'>,</span>
<a name="line-17"></a>                                              <span class='hs-varid'>fromOpt</span><span class='hs-layout'>,</span> <span class='hs-varid'>author</span><span class='hs-layout'>,</span>
<a name="line-18"></a>                                              <span class='hs-varid'>target</span><span class='hs-layout'>,</span><span class='hs-varid'>ccSend</span><span class='hs-layout'>,</span><span class='hs-varid'>subject</span><span class='hs-layout'>,</span> <span class='hs-varid'>inReplyTo</span><span class='hs-layout'>,</span>
<a name="line-19"></a>                                              <span class='hs-varid'>output</span><span class='hs-layout'>,</span><span class='hs-varid'>outputAutoName</span><span class='hs-layout'>,</span><span class='hs-varid'>sign</span><span class='hs-keyglyph'>]</span>
<a name="line-20"></a>                                              <span class='hs-varop'>++</span><span class='hs-varid'>dryRun</span><span class='hs-varop'>++</span><span class='hs-keyglyph'>[</span><span class='hs-varid'>summary</span><span class='hs-layout'>,</span>
<a name="line-21"></a>                                              <span class='hs-varid'>editDescription</span><span class='hs-layout'>,</span>
<a name="line-22"></a>                                              <span class='hs-varid'>setDefault</span><span class='hs-layout'>,</span> <span class='hs-varid'>workingRepoDir</span><span class='hs-layout'>,</span>
<a name="line-23"></a>                                              <span class='hs-varid'>sendmailCmd</span><span class='hs-layout'>,</span>
<a name="line-24"></a>                                              <span class='hs-varid'>allowUnrelatedRepos</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>}</span>
<a name="line-25"></a>
<a name="line-26"></a><a name="sendCmd"></a><span class='hs-definition'>sendCmd</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>
<a name="line-27"></a><span class='hs-definition'>sendCmd</span> <span class='hs-varid'>input_opts</span> <span class='hs-keyglyph'>[</span><span class='hs-str'>""</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>sendCmd</span> <span class='hs-varid'>input_opts</span> <span class='hs-conid'>[]</span>
<a name="line-28"></a><span class='hs-definition'>sendCmd</span> <span class='hs-varid'>input_opts</span> <span class='hs-keyglyph'>[</span><span class='hs-varid'>unfixedrepodir</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>withRepoReadLock</span> <span class='hs-varid'>input_opts</span> <span class='hs-varop'>$-</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>repository</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyword'>do</span>
<a name="line-29"></a>  <span class='hs-varid'>context_ps</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>the_context</span> <span class='hs-varid'>input_opts</span>
<a name="line-30"></a>  <span class='hs-keyword'>case</span> <span class='hs-varid'>context_ps</span> <span class='hs-keyword'>of</span>
<a name="line-31"></a>    <span class='hs-conid'>Just</span> <span class='hs-varid'>them</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>sendToThem</span> <span class='hs-varid'>repository</span> <span class='hs-varid'>input_opts</span> <span class='hs-conid'>[]</span> <span class='hs-str'>"CONTEXT"</span> <span class='hs-varid'>them</span>
<a name="line-32"></a>    <span class='hs-conid'>Nothing</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyword'>do</span>
<a name="line-33"></a>        <span class='hs-varid'>repodir</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>fixUrl</span> <span class='hs-varid'>input_opts</span> <span class='hs-varid'>unfixedrepodir</span>
<a name="line-34"></a>        <span class='hs-comment'>-- Test to make sure we aren't trying to push to the current repo</span>
<a name="line-35"></a>        <span class='hs-varid'>here</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>getCurrentDirectory</span>
<a name="line-36"></a>        <span class='hs-varid'>when</span> <span class='hs-layout'>(</span><span class='hs-varid'>repodir</span> <span class='hs-varop'>==</span> <span class='hs-varid'>toFilePath</span> <span class='hs-varid'>here</span><span class='hs-layout'>)</span> <span class='hs-varop'>$</span>
<a name="line-37"></a>           <span class='hs-varid'>fail</span> <span class='hs-layout'>(</span><span class='hs-str'>"Can't send to current repository! Did you mean send -"</span><span class='hs-varop'>++</span><span class='hs-str'>"-context?"</span><span class='hs-layout'>)</span>
<a name="line-38"></a>        <span class='hs-varid'>repo</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>identifyRepositoryFor</span> <span class='hs-varid'>repository</span> <span class='hs-varid'>repodir</span>
<a name="line-39"></a>        <span class='hs-varid'>them</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>read_repo</span> <span class='hs-varid'>repo</span>
<a name="line-40"></a>        <span class='hs-varid'>old_default</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>getPreflist</span> <span class='hs-str'>"defaultrepo"</span>
<a name="line-41"></a>        <span class='hs-varid'>setDefaultrepo</span> <span class='hs-varid'>repodir</span> <span class='hs-varid'>input_opts</span>
<a name="line-42"></a>        <span class='hs-varid'>when</span> <span class='hs-layout'>(</span><span class='hs-varid'>old_default</span> <span class='hs-varop'>==</span> <span class='hs-keyglyph'>[</span><span class='hs-varid'>repodir</span><span class='hs-keyglyph'>]</span> <span class='hs-varop'>&amp;&amp;</span> <span class='hs-varid'>not</span> <span class='hs-layout'>(</span><span class='hs-conid'>Quiet</span> <span class='hs-varop'>`elem`</span> <span class='hs-varid'>input_opts</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-varop'>$</span>
<a name="line-43"></a>             <span class='hs-varid'>putStrLn</span> <span class='hs-varop'>$</span> <span class='hs-str'>"Creating patch to "</span><span class='hs-varop'>++</span><span class='hs-varid'>formatPath</span> <span class='hs-varid'>repodir</span><span class='hs-varop'>++</span><span class='hs-str'>"..."</span>
<a name="line-44"></a>        <span class='hs-varid'>wtds</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>decideOnBehavior</span> <span class='hs-varid'>input_opts</span> <span class='hs-varid'>repo</span>
<a name="line-45"></a>        <span class='hs-varid'>sendToThem</span> <span class='hs-varid'>repository</span> <span class='hs-varid'>input_opts</span> <span class='hs-varid'>wtds</span> <span class='hs-varid'>repodir</span> <span class='hs-varid'>them</span>
<a name="line-46"></a>    <span class='hs-keyword'>where</span> <span class='hs-varid'>the_context</span> <span class='hs-conid'>[]</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>return</span> <span class='hs-conid'>Nothing</span>
<a name="line-47"></a>          <span class='hs-varid'>the_context</span> <span class='hs-layout'>(</span><span class='hs-conid'>Context</span> <span class='hs-varid'>foo</span><span class='hs-conop'>:</span><span class='hs-keyword'>_</span><span class='hs-layout'>)</span>
<a name="line-48"></a>              <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-conid'>Just</span> <span class='hs-varop'>.</span> <span class='hs-varid'>scan_context</span> <span class='hs-layout'>)</span><span class='hs-varop'>`fmap`</span> <span class='hs-varid'>mmapFilePS</span> <span class='hs-layout'>(</span><span class='hs-varid'>toFilePath</span> <span class='hs-varid'>foo</span><span class='hs-layout'>)</span>
<a name="line-49"></a>          <span class='hs-varid'>the_context</span> <span class='hs-layout'>(</span><span class='hs-keyword'>_</span><span class='hs-conop'>:</span><span class='hs-varid'>fs</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>the_context</span> <span class='hs-varid'>fs</span>
<a name="line-50"></a><span class='hs-definition'>sendCmd</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>impossible</span>
<a name="line-51"></a>
<a name="line-52"></a><a name="sendToThem"></a><span class='hs-definition'>sendToThem</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>RepoPatch</span> <span class='hs-varid'>p</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>Repository</span> <span class='hs-varid'>p</span> <span class='hs-conid'>C</span><span class='hs-layout'>(</span><span class='hs-varid'>r</span> <span class='hs-varid'>u</span> <span class='hs-varid'>t</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</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'>WhatToDo</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-conid'>PatchSet</span> <span class='hs-varid'>p</span> <span class='hs-conid'>C</span><span class='hs-layout'>(</span><span class='hs-varid'>x</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span>
<a name="line-53"></a><span class='hs-definition'>sendToThem</span> <span class='hs-varid'>repo</span> <span class='hs-varid'>opts</span> <span class='hs-varid'>wtds</span> <span class='hs-varid'>their_name</span> <span class='hs-varid'>them</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>
<a name="line-54"></a>  <span class='hs-varid'>us</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>read_repo</span> <span class='hs-varid'>repo</span>
<a name="line-55"></a>  <span class='hs-keyword'>case</span> <span class='hs-varid'>get_common_and_uncommon</span> <span class='hs-layout'>(</span><span class='hs-varid'>us</span><span class='hs-layout'>,</span> <span class='hs-varid'>them</span><span class='hs-layout'>)</span> <span class='hs-keyword'>of</span>
<a name="line-56"></a>    <span class='hs-layout'>(</span><span class='hs-varid'>common</span><span class='hs-layout'>,</span> <span class='hs-varid'>us'</span> <span class='hs-conop'>:\/:</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyword'>do</span>
<a name="line-57"></a>     <span class='hs-varid'>checkUnrelatedRepos</span> <span class='hs-varid'>opts</span> <span class='hs-varid'>common</span> <span class='hs-varid'>us</span> <span class='hs-varid'>them</span>
<a name="line-58"></a>     <span class='hs-layout'>(</span><span class='hs-keyword'>case</span> <span class='hs-varid'>us'</span> <span class='hs-keyword'>of</span>
<a name="line-59"></a>         <span class='hs-conid'>NilRL</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyword'>do</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'>"No recorded local changes to send!"</span>
<a name="line-60"></a>                     <span class='hs-varid'>exitWith</span> <span class='hs-conid'>ExitSuccess</span>
<a name="line-61"></a>         <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>putVerbose</span> <span class='hs-varid'>opts</span> <span class='hs-varop'>$</span> <span class='hs-varid'>text</span> <span class='hs-str'>"We have the following patches to send:"</span>
<a name="line-62"></a>                        <span class='hs-varop'>$$</span> <span class='hs-layout'>(</span><span class='hs-varid'>vcat</span> <span class='hs-varop'>$</span> <span class='hs-varid'>mapRL</span> <span class='hs-varid'>description</span> <span class='hs-varid'>us'</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span>
<a name="line-63"></a>     <span class='hs-varid'>pristine</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>readRecorded</span> <span class='hs-varid'>repo</span>
<a name="line-64"></a>     <span class='hs-keyword'>let</span> <span class='hs-varid'>our_ps</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>reverseRL</span> <span class='hs-varid'>us'</span>
<a name="line-65"></a>     <span class='hs-varid'>with_selected_changes</span> <span class='hs-str'>"send"</span> <span class='hs-varid'>opts</span> <span class='hs-conid'>Nothing</span> <span class='hs-varid'>our_ps</span> <span class='hs-varop'>$</span>
<a name="line-66"></a>      <span class='hs-keyglyph'>\</span> <span class='hs-layout'>(</span><span class='hs-varid'>to_be_sent</span> <span class='hs-conop'>:&gt;</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyword'>do</span>
<a name="line-67"></a>      <span class='hs-varid'>printDryRunMessageAndExit</span> <span class='hs-str'>"send"</span> <span class='hs-varid'>opts</span> <span class='hs-varid'>to_be_sent</span>
<a name="line-68"></a>      <span class='hs-varid'>when</span> <span class='hs-layout'>(</span><span class='hs-varid'>nullFL</span> <span class='hs-varid'>to_be_sent</span><span class='hs-layout'>)</span> <span class='hs-varop'>$</span> <span class='hs-keyword'>do</span>
<a name="line-69"></a>          <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'>"You don't want to send any patches, and that's fine with me!"</span>
<a name="line-70"></a>          <span class='hs-varid'>exitWith</span> <span class='hs-conid'>ExitSuccess</span>
<a name="line-71"></a>      <span class='hs-varid'>definePatches</span> <span class='hs-varid'>to_be_sent</span>
<a name="line-72"></a>      <span class='hs-varid'>pristine'</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>applyToTree</span> <span class='hs-layout'>(</span><span class='hs-varid'>invert</span> <span class='hs-varop'>$</span> <span class='hs-varid'>mapRL_RL</span> <span class='hs-varid'>hopefully</span> <span class='hs-varid'>us'</span><span class='hs-layout'>)</span> <span class='hs-varid'>pristine</span>
<a name="line-73"></a>      <span class='hs-varid'>unsig_bundle</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>make_bundle</span> <span class='hs-layout'>(</span><span class='hs-conid'>Unified</span><span class='hs-conop'>:</span><span class='hs-varid'>opts</span><span class='hs-layout'>)</span> <span class='hs-varid'>pristine'</span> <span class='hs-varid'>common</span> <span class='hs-layout'>(</span><span class='hs-varid'>mapFL_FL</span> <span class='hs-varid'>hopefully</span> <span class='hs-varid'>to_be_sent</span><span class='hs-layout'>)</span>
<a name="line-74"></a>      <span class='hs-varid'>bundle</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>signString</span> <span class='hs-varid'>opts</span> <span class='hs-varid'>unsig_bundle</span>
<a name="line-75"></a>      <span class='hs-keyword'>let</span> <span class='hs-varid'>make_fname</span> <span class='hs-layout'>(</span><span class='hs-varid'>tb</span><span class='hs-conop'>:&gt;:</span><span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>patchFilename</span> <span class='hs-varop'>$</span> <span class='hs-varid'>patchDesc</span> <span class='hs-varid'>tb</span>
<a name="line-76"></a>          <span class='hs-varid'>make_fname</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>impossible</span>
<a name="line-77"></a>          <span class='hs-varid'>fname</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>make_fname</span> <span class='hs-varid'>to_be_sent</span>
<a name="line-78"></a>          <span class='hs-varid'>outname</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>getOutput</span> <span class='hs-varid'>opts</span> <span class='hs-varid'>fname</span>
<a name="line-79"></a>      <span class='hs-keyword'>case</span> <span class='hs-varid'>outname</span> <span class='hs-keyword'>of</span>
<a name="line-80"></a>        <span class='hs-conid'>Just</span> <span class='hs-varid'>fname'</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>writeBundleToFile</span> <span class='hs-varid'>opts</span> <span class='hs-varid'>to_be_sent</span> <span class='hs-varid'>bundle</span> <span class='hs-varid'>fname'</span> <span class='hs-varid'>their_name</span>
<a name="line-81"></a>        <span class='hs-conid'>Nothing</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>sendBundle</span> <span class='hs-varid'>opts</span> <span class='hs-varid'>to_be_sent</span> <span class='hs-varid'>bundle</span> <span class='hs-varid'>fname</span> <span class='hs-varid'>wtds</span> <span class='hs-varid'>their_name</span>
<a name="line-82"></a>
<a name="line-83"></a><a name="patchDesc"></a><span class='hs-definition'>patchDesc</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyword'>forall</span> <span class='hs-varid'>p</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-varop'>.</span> <span class='hs-conid'>PatchInfoAnd</span> <span class='hs-varid'>p</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-keyglyph'>-&gt;</span> <span class='hs-conid'>String</span>
<a name="line-84"></a><span class='hs-definition'>patchDesc</span> <span class='hs-varid'>p</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>just_name</span> <span class='hs-varop'>$</span> <span class='hs-varid'>info</span> <span class='hs-varid'>p</span>
<a name="line-85"></a>
<a name="line-86"></a><a name="sendBundle"></a><span class='hs-definition'>sendBundle</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyword'>forall</span> <span class='hs-varid'>p</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-varop'>.</span> <span class='hs-layout'>(</span><span class='hs-conid'>RepoPatch</span> <span class='hs-varid'>p</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=&gt;</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'>FL</span> <span class='hs-layout'>(</span><span class='hs-conid'>PatchInfoAnd</span> <span class='hs-varid'>p</span><span class='hs-layout'>)</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>
<a name="line-87"></a>             <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Doc</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'>WhatToDo</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-conid'>IO</span> <span class='hs-conid'>()</span>
<a name="line-88"></a><span class='hs-definition'>sendBundle</span> <span class='hs-varid'>opts</span> <span class='hs-varid'>to_be_sent</span> <span class='hs-varid'>bundle</span> <span class='hs-varid'>fname</span> <span class='hs-varid'>wtds</span> <span class='hs-varid'>their_name</span><span class='hs-keyglyph'>=</span>
<a name="line-89"></a>         <span class='hs-keyword'>let</span>
<a name="line-90"></a>           <span class='hs-varid'>auto_subject</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyword'>forall</span> <span class='hs-varid'>pp</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-varop'>.</span> <span class='hs-conid'>FL</span> <span class='hs-layout'>(</span><span class='hs-conid'>PatchInfoAnd</span> <span class='hs-varid'>pp</span><span class='hs-layout'>)</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-keyglyph'>-&gt;</span> <span class='hs-conid'>String</span>
<a name="line-91"></a>           <span class='hs-varid'>auto_subject</span> <span class='hs-layout'>(</span><span class='hs-varid'>p</span><span class='hs-conop'>:&gt;:</span><span class='hs-conid'>NilFL</span><span class='hs-layout'>)</span>  <span class='hs-keyglyph'>=</span> <span class='hs-str'>"darcs patch: "</span> <span class='hs-varop'>++</span> <span class='hs-varid'>trim</span> <span class='hs-layout'>(</span><span class='hs-varid'>patchDesc</span> <span class='hs-varid'>p</span><span class='hs-layout'>)</span> <span class='hs-num'>57</span>
<a name="line-92"></a>           <span class='hs-varid'>auto_subject</span> <span class='hs-layout'>(</span><span class='hs-varid'>p</span><span class='hs-conop'>:&gt;:</span><span class='hs-varid'>ps</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-str'>"darcs patch: "</span> <span class='hs-varop'>++</span> <span class='hs-varid'>trim</span> <span class='hs-layout'>(</span><span class='hs-varid'>patchDesc</span> <span class='hs-varid'>p</span><span class='hs-layout'>)</span> <span class='hs-num'>43</span> <span class='hs-varop'>++</span>
<a name="line-93"></a>                            <span class='hs-str'>" (and "</span> <span class='hs-varop'>++</span> <span class='hs-varid'>show</span> <span class='hs-layout'>(</span><span class='hs-varid'>lengthFL</span> <span class='hs-varid'>ps</span><span class='hs-layout'>)</span> <span class='hs-varop'>++</span> <span class='hs-str'>" more)"</span>
<a name="line-94"></a>           <span class='hs-varid'>auto_subject</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>error</span> <span class='hs-str'>"Tried to get a name from empty patch list."</span>
<a name="line-95"></a>           <span class='hs-varid'>trim</span> <span class='hs-varid'>st</span> <span class='hs-varid'>n</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>if</span> <span class='hs-varid'>length</span> <span class='hs-varid'>st</span> <span class='hs-varop'>&lt;=</span> <span class='hs-varid'>n</span> <span class='hs-keyword'>then</span> <span class='hs-varid'>st</span>
<a name="line-96"></a>                       <span class='hs-keyword'>else</span> <span class='hs-varid'>take</span> <span class='hs-layout'>(</span><span class='hs-varid'>n</span><span class='hs-comment'>-</span><span class='hs-num'>3</span><span class='hs-layout'>)</span> <span class='hs-varid'>st</span> <span class='hs-varop'>++</span> <span class='hs-str'>"..."</span>
<a name="line-97"></a>           <span class='hs-keyword'>in</span> <span class='hs-keyword'>do</span>
<a name="line-98"></a>           <span class='hs-varid'>thetargets</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>getTargets</span> <span class='hs-varid'>wtds</span>
<a name="line-99"></a>           <span class='hs-varid'>from</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>getAuthor</span> <span class='hs-varid'>opts</span>
<a name="line-100"></a>           <span class='hs-keyword'>let</span> <span class='hs-varid'>thesubject</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>case</span> <span class='hs-varid'>getSubject</span> <span class='hs-varid'>opts</span> <span class='hs-keyword'>of</span>
<a name="line-101"></a>                            <span class='hs-conid'>Nothing</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>auto_subject</span> <span class='hs-varid'>to_be_sent</span>
<a name="line-102"></a>                            <span class='hs-conid'>Just</span> <span class='hs-varid'>subj</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>subj</span>
<a name="line-103"></a>           <span class='hs-layout'>(</span><span class='hs-varid'>mailcontents</span><span class='hs-layout'>,</span> <span class='hs-varid'>mailfile</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>getDescription</span> <span class='hs-varid'>opts</span> <span class='hs-varid'>their_name</span> <span class='hs-varid'>to_be_sent</span>
<a name="line-104"></a>           <span class='hs-keyword'>let</span> <span class='hs-varid'>body</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>make_email</span> <span class='hs-varid'>their_name</span>
<a name="line-105"></a>                        <span class='hs-layout'>(</span><span class='hs-varid'>maybe</span> <span class='hs-conid'>[]</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-keyglyph'>[</span><span class='hs-layout'>(</span><span class='hs-str'>"In-Reply-To"</span><span class='hs-layout'>,</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-layout'>(</span><span class='hs-str'>"References"</span><span class='hs-layout'>,</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>)</span> <span class='hs-varop'>.</span> <span class='hs-varid'>getInReplyTo</span> <span class='hs-varop'>$</span> <span class='hs-varid'>opts</span><span class='hs-layout'>)</span>
<a name="line-106"></a>                        <span class='hs-layout'>(</span><span class='hs-conid'>Just</span> <span class='hs-varid'>mailcontents</span><span class='hs-layout'>)</span>
<a name="line-107"></a>                        <span class='hs-varid'>bundle</span>
<a name="line-108"></a>                        <span class='hs-layout'>(</span><span class='hs-conid'>Just</span> <span class='hs-varid'>fname</span><span class='hs-layout'>)</span>
<a name="line-109"></a>               <span class='hs-varid'>contentAndBundle</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Just</span> <span class='hs-layout'>(</span><span class='hs-varid'>mailcontents</span><span class='hs-layout'>,</span> <span class='hs-varid'>bundle</span><span class='hs-layout'>)</span>
<a name="line-110"></a>               
<a name="line-111"></a>               <span class='hs-varid'>sendmail</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>
<a name="line-112"></a>                 <span class='hs-varid'>sm_cmd</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>getSendmailCmd</span> <span class='hs-varid'>opts</span>
<a name="line-113"></a>                 <span class='hs-layout'>(</span><span class='hs-varid'>sendEmailDoc</span> <span class='hs-varid'>from</span> <span class='hs-layout'>(</span><span class='hs-varid'>lt</span> <span class='hs-keyglyph'>[</span><span class='hs-varid'>t</span> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>SendMail</span> <span class='hs-varid'>t</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>thetargets</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>thesubject</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>getCc</span> <span class='hs-varid'>opts</span><span class='hs-layout'>)</span>
<a name="line-114"></a>                               <span class='hs-varid'>sm_cmd</span> <span class='hs-varid'>contentAndBundle</span> <span class='hs-varid'>body</span> <span class='hs-varop'>&gt;&gt;</span>
<a name="line-115"></a>                  <span class='hs-layout'>(</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-varop'>$</span> <span class='hs-layout'>(</span><span class='hs-str'>"Successfully sent patch bundle to: "</span>
<a name="line-116"></a>                            <span class='hs-varop'>++</span> <span class='hs-varid'>lt</span> <span class='hs-keyglyph'>[</span> <span class='hs-varid'>t</span> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>SendMail</span> <span class='hs-varid'>t</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>thetargets</span> <span class='hs-keyglyph'>]</span>
<a name="line-117"></a>                            <span class='hs-varop'>++</span> <span class='hs-varid'>ccs</span> <span class='hs-layout'>(</span><span class='hs-varid'>getCc</span> <span class='hs-varid'>opts</span><span class='hs-layout'>)</span> <span class='hs-varop'>++</span><span class='hs-str'>"."</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-118"></a>                 <span class='hs-varop'>`catch`</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyword'>let</span> <span class='hs-varid'>msg</span> <span class='hs-keyglyph'>=</span> <span class='hs-str'>"Email body left in "</span> <span class='hs-keyword'>in</span>
<a name="line-119"></a>                               <span class='hs-keyword'>do</span> <span class='hs-keyword'>case</span> <span class='hs-varid'>mailfile</span> <span class='hs-keyword'>of</span>
<a name="line-120"></a>                                    <span class='hs-conid'>Just</span> <span class='hs-varid'>mf</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>putStrLn</span> <span class='hs-varop'>$</span> <span class='hs-varid'>msg</span><span class='hs-varop'>++</span><span class='hs-varid'>mf</span><span class='hs-varop'>++</span><span class='hs-str'>"."</span>
<a name="line-121"></a>                                    <span class='hs-conid'>Nothing</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>return</span> <span class='hs-conid'>()</span>
<a name="line-122"></a>                                  <span class='hs-varid'>fail</span> <span class='hs-varop'>$</span> <span class='hs-varid'>ioeGetErrorString</span> <span class='hs-varid'>e</span>
<a name="line-123"></a>               <span class='hs-varid'>ccs</span> <span class='hs-conid'>[]</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>[]</span>
<a name="line-124"></a>               <span class='hs-varid'>ccs</span> <span class='hs-varid'>cs</span>  <span class='hs-keyglyph'>=</span> <span class='hs-str'>" and cc'ed "</span> <span class='hs-varop'>++</span> <span class='hs-varid'>cs</span>
<a name="line-125"></a>
<a name="line-126"></a>           <span class='hs-varid'>when</span> <span class='hs-layout'>(</span><span class='hs-varid'>null</span> <span class='hs-keyglyph'>[</span> <span class='hs-varid'>p</span> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Post</span> <span class='hs-varid'>p</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>thetargets</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>)</span> <span class='hs-varid'>sendmail</span>
<a name="line-127"></a>           <span class='hs-varid'>nbody</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>withOpenTemp</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span> <span class='hs-layout'>(</span><span class='hs-varid'>fh</span><span class='hs-layout'>,</span><span class='hs-varid'>fn</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyword'>do</span>
<a name="line-128"></a>               <span class='hs-varid'>generateEmail</span> <span class='hs-varid'>fh</span> <span class='hs-varid'>from</span> <span class='hs-layout'>(</span><span class='hs-varid'>lt</span> <span class='hs-keyglyph'>[</span><span class='hs-varid'>t</span> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>SendMail</span> <span class='hs-varid'>t</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>thetargets</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>)</span> <span class='hs-varid'>thesubject</span> <span class='hs-layout'>(</span><span class='hs-varid'>getCc</span> <span class='hs-varid'>opts</span><span class='hs-layout'>)</span> <span class='hs-varid'>body</span>
<a name="line-129"></a>               <span class='hs-varid'>hClose</span> <span class='hs-varid'>fh</span>
<a name="line-130"></a>               <span class='hs-varid'>mmapFilePS</span> <span class='hs-varid'>fn</span>
<a name="line-131"></a>           <span class='hs-varid'>forM_</span> <span class='hs-keyglyph'>[</span> <span class='hs-varid'>p</span> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Post</span> <span class='hs-varid'>p</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>thetargets</span><span class='hs-keyglyph'>]</span>
<a name="line-132"></a>             <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>url</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyword'>do</span>
<a name="line-133"></a>                <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-varop'>$</span> <span class='hs-str'>"Posting patch to "</span> <span class='hs-varop'>++</span> <span class='hs-varid'>url</span>
<a name="line-134"></a>                <span class='hs-varid'>postUrl</span> <span class='hs-varid'>url</span> <span class='hs-layout'>(</span><span class='hs-conid'>BC</span><span class='hs-varop'>.</span><span class='hs-varid'>unpack</span> <span class='hs-varid'>nbody</span><span class='hs-layout'>)</span> <span class='hs-str'>"message/rfc822"</span><span class='hs-layout'>)</span>
<a name="line-135"></a>             <span class='hs-varop'>`catch`</span> <span class='hs-varid'>const</span> <span class='hs-varid'>sendmail</span>
<a name="line-136"></a>           <span class='hs-varid'>cleanup</span> <span class='hs-varid'>opts</span> <span class='hs-varid'>mailfile</span>
<a name="line-137"></a>         <span class='hs-keyword'>where</span>
<a name="line-138"></a>          <span class='hs-varid'>lt</span> <span class='hs-keyglyph'>[</span><span class='hs-varid'>t</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>t</span>
<a name="line-139"></a>          <span class='hs-varid'>lt</span> <span class='hs-keyglyph'>[</span><span class='hs-varid'>t</span><span class='hs-layout'>,</span><span class='hs-str'>""</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>t</span>
<a name="line-140"></a>          <span class='hs-varid'>lt</span> <span class='hs-layout'>(</span><span class='hs-varid'>t</span><span class='hs-conop'>:</span><span class='hs-varid'>ts</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>t</span><span class='hs-varop'>++</span><span class='hs-str'>" , "</span><span class='hs-varop'>++</span><span class='hs-varid'>lt</span> <span class='hs-varid'>ts</span>
<a name="line-141"></a>          <span class='hs-varid'>lt</span> <span class='hs-conid'>[]</span> <span class='hs-keyglyph'>=</span> <span class='hs-str'>""</span>
<a name="line-142"></a>
<a name="line-143"></a><a name="cleanup"></a><span class='hs-definition'>cleanup</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-conid'>FilePathLike</span> <span class='hs-varid'>t</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=&gt;</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'>Maybe</span> <span class='hs-varid'>t</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span>
<a name="line-144"></a><span class='hs-definition'>cleanup</span> <span class='hs-varid'>opts</span> <span class='hs-layout'>(</span><span class='hs-conid'>Just</span> <span class='hs-varid'>mailfile</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>when</span> <span class='hs-layout'>(</span><span class='hs-varid'>isNothing</span> <span class='hs-layout'>(</span><span class='hs-varid'>getFileopt</span> <span class='hs-varid'>opts</span><span class='hs-layout'>)</span> <span class='hs-varop'>||</span> <span class='hs-layout'>(</span><span class='hs-varid'>willRemoveLogFile</span> <span class='hs-varid'>opts</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-varop'>$</span>
<a name="line-145"></a>                                      <span class='hs-varid'>removeFileMayNotExist</span> <span class='hs-varid'>mailfile</span>
<a name="line-146"></a><span class='hs-definition'>cleanup</span> <span class='hs-keyword'>_</span> <span class='hs-conid'>Nothing</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>return</span> <span class='hs-conid'>()</span>
<a name="line-147"></a>
<a name="line-148"></a><a name="writeBundleToFile"></a><span class='hs-definition'>writeBundleToFile</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyword'>forall</span> <span class='hs-varid'>p</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-varop'>.</span> <span class='hs-layout'>(</span><span class='hs-conid'>RepoPatch</span> <span class='hs-varid'>p</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=&gt;</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'>FL</span> <span class='hs-layout'>(</span><span class='hs-conid'>PatchInfoAnd</span> <span class='hs-varid'>p</span><span class='hs-layout'>)</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-keyglyph'>-&gt;</span> <span class='hs-conid'>Doc</span> <span class='hs-keyglyph'>-&gt;</span>
<a name="line-149"></a>                    <span class='hs-conid'>AbsolutePathOrStd</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span>
<a name="line-150"></a><span class='hs-definition'>writeBundleToFile</span> <span class='hs-varid'>opts</span> <span class='hs-varid'>to_be_sent</span> <span class='hs-varid'>bundle</span> <span class='hs-varid'>fname</span> <span class='hs-varid'>their_name</span> <span class='hs-keyglyph'>=</span>
<a name="line-151"></a>    <span class='hs-keyword'>do</span> <span class='hs-layout'>(</span><span class='hs-varid'>d</span><span class='hs-layout'>,</span><span class='hs-varid'>f</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>getDescription</span> <span class='hs-varid'>opts</span> <span class='hs-varid'>their_name</span> <span class='hs-varid'>to_be_sent</span>
<a name="line-152"></a>       <span class='hs-keyword'>let</span> <span class='hs-varid'>putabs</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span> <span class='hs-varid'>writeDocBinFile</span> <span class='hs-varid'>a</span> <span class='hs-layout'>(</span><span class='hs-varid'>d</span> <span class='hs-varop'>$$</span> <span class='hs-varid'>bundle</span><span class='hs-layout'>)</span>
<a name="line-153"></a>                         <span class='hs-varid'>putStrLn</span> <span class='hs-varop'>$</span> <span class='hs-str'>"Wrote patch to "</span> <span class='hs-varop'>++</span> <span class='hs-varid'>toFilePath</span> <span class='hs-varid'>a</span> <span class='hs-varop'>++</span> <span class='hs-str'>"."</span>
<a name="line-154"></a>           <span class='hs-varid'>putstd</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>putDoc</span> <span class='hs-layout'>(</span><span class='hs-varid'>d</span> <span class='hs-varop'>$$</span> <span class='hs-varid'>bundle</span><span class='hs-layout'>)</span>
<a name="line-155"></a>       <span class='hs-varid'>useAbsoluteOrStd</span> <span class='hs-varid'>putabs</span> <span class='hs-varid'>putstd</span> <span class='hs-varid'>fname</span>
<a name="line-156"></a>       <span class='hs-varid'>cleanup</span> <span class='hs-varid'>opts</span> <span class='hs-varid'>f</span>
<a name="line-157"></a>
<a name="line-158"></a><a name="safeFileChar"></a><span class='hs-definition'>safeFileChar</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Char</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Char</span>
<a name="line-159"></a><span class='hs-definition'>safeFileChar</span> <span class='hs-varid'>c</span> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>isAlpha</span> <span class='hs-varid'>c</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>toLower</span> <span class='hs-varid'>c</span>
<a name="line-160"></a>               <span class='hs-keyglyph'>|</span> <span class='hs-varid'>isDigit</span> <span class='hs-varid'>c</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>c</span>
<a name="line-161"></a>               <span class='hs-keyglyph'>|</span> <span class='hs-varid'>isSpace</span> <span class='hs-varid'>c</span> <span class='hs-keyglyph'>=</span> <span class='hs-chr'>'-'</span>
<a name="line-162"></a><span class='hs-definition'>safeFileChar</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-chr'>'_'</span>
<a name="line-163"></a>
<a name="line-164"></a><a name="patchFilename"></a><span class='hs-definition'>patchFilename</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-165"></a><span class='hs-definition'>patchFilename</span> <span class='hs-varid'>the_summary</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>name</span> <span class='hs-varop'>++</span> <span class='hs-str'>".dpatch"</span>
<a name="line-166"></a>    <span class='hs-keyword'>where</span> <span class='hs-varid'>name</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>map</span> <span class='hs-varid'>safeFileChar</span> <span class='hs-varid'>the_summary</span>
</pre>\end{code}

\begin{options}
--output, --to, --cc
\end{options}

The \verb!--output!, \verb!--output-auto-name!, and \verb!--to! flags determine
what darcs does with the patch bundle after creating it.  If you provide an
\verb!--output!  argument, the patch bundle is saved to that file.  If you
specify \verb!--output-auto-name!, the patch bundle is saved to a file with an
automatically generated name.  If you give one or more \verb!--to! arguments,
the bundle of patches is sent to those locations. The locations may either be email
addresses or urls that the patch should be submitted to via HTTP.

If you don't provide any of these options, darcs will look at the contents of
the \verb!_darcs/prefs/email! file in the target repository (if it exists), and
send the patch by email to that address.  In this case, you may use the
\verb!--cc! option to specify additional recipients without overriding the
default repository email address.

If \texttt{\_darcs/prefs/post} exists in the target repository, darcs will
upload to the URL contained in that file, which may either be a
\texttt{mailto:} URL, or an \texttt{http://} URL.  In the latter case, the
patch is posted to that URL.

If there is no email address associated with the repository, darcs will
prompt you for an email address.

\begin{options}
--subject
\end{options}

Use the \verb!--subject! flag to set the subject of the e-mail to be sent.
If you don't provide a subject on the command line, darcs will make one up
based on names of the patches in the patch bundle.

\begin{options}
--in-reply-to
\end{options}

Use the \verb!--in-reply-to! flag to set the In-Reply-To and References headers
of the e-mail to be sent. By default no additional headers are included so e-mail
will not be treated as reply by mail readers.

\begin{code}
<pre><a name="line-1"></a>
<a name="line-2"></a><a name="WhatToDo"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>WhatToDo</span>
<a name="line-3"></a>    <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Post</span> <span class='hs-conid'>String</span>        <span class='hs-comment'>-- ^ POST the patch via HTTP</span>
<a name="line-4"></a>    <span class='hs-keyglyph'>|</span> <span class='hs-conid'>SendMail</span> <span class='hs-conid'>String</span>    <span class='hs-comment'>-- ^ send patch via email</span>
<a name="line-5"></a>
<a name="line-6"></a>
<a name="line-7"></a><a name="decideOnBehavior"></a><span class='hs-definition'>decideOnBehavior</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>RepoPatch</span> <span class='hs-varid'>p</span> <span class='hs-keyglyph'>=&gt;</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'>Repository</span> <span class='hs-varid'>p</span> <span class='hs-conid'>C</span><span class='hs-layout'>(</span><span class='hs-varid'>r</span> <span class='hs-varid'>u</span> <span class='hs-varid'>t</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>WhatToDo</span><span class='hs-keyglyph'>]</span>
<a name="line-8"></a><span class='hs-definition'>decideOnBehavior</span> <span class='hs-varid'>opts</span> <span class='hs-varid'>the_remote_repo</span> <span class='hs-keyglyph'>=</span>
<a name="line-9"></a>    <span class='hs-keyword'>case</span> <span class='hs-varid'>the_targets</span> <span class='hs-keyword'>of</span>
<a name="line-10"></a>    <span class='hs-conid'>[]</span> <span class='hs-keyglyph'>-&gt;</span>
<a name="line-11"></a>          <span class='hs-keyword'>if</span> <span class='hs-varid'>isJust</span> <span class='hs-varop'>$</span> <span class='hs-varid'>getOutput</span> <span class='hs-varid'>opts</span> <span class='hs-str'>""</span>
<a name="line-12"></a>          <span class='hs-keyword'>then</span> <span class='hs-varid'>return</span> <span class='hs-conid'>[]</span>
<a name="line-13"></a>          <span class='hs-keyword'>else</span>
<a name="line-14"></a>          <span class='hs-keyword'>do</span> <span class='hs-varid'>wtds</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>check_post</span>
<a name="line-15"></a>             <span class='hs-varid'>unless</span> <span class='hs-layout'>(</span><span class='hs-varid'>null</span> <span class='hs-varid'>wtds</span><span class='hs-layout'>)</span> <span class='hs-varop'>$</span> <span class='hs-varid'>announce_recipients</span> <span class='hs-varid'>wtds</span>
<a name="line-16"></a>             <span class='hs-varid'>return</span> <span class='hs-varid'>wtds</span>
<a name="line-17"></a>    <span class='hs-varid'>ts</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyword'>do</span> <span class='hs-varid'>announce_recipients</span> <span class='hs-varid'>ts</span>
<a name="line-18"></a>             <span class='hs-varid'>return</span> <span class='hs-varid'>ts</span>
<a name="line-19"></a>    <span class='hs-keyword'>where</span> <span class='hs-varid'>the_targets</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>collectTargets</span> <span class='hs-varid'>opts</span>
<a name="line-20"></a><span class='hs-cpp'>#ifdef HAVE_HTTP</span>
<a name="line-21"></a>          <span class='hs-comment'>-- the ifdef above is to so that darcs only checks the remote</span>
<a name="line-22"></a>          <span class='hs-comment'>-- _darcs/post if we have an implementation of postUrl.  See</span>
<a name="line-23"></a>          <span class='hs-comment'>-- our HTTP module for more details</span>
<a name="line-24"></a>          <span class='hs-varid'>check_post</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span> <span class='hs-varid'>p</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-varid'>readPost</span> <span class='hs-varop'>.</span> <span class='hs-conid'>BC</span><span class='hs-varop'>.</span><span class='hs-varid'>unpack</span><span class='hs-layout'>)</span> <span class='hs-varop'>`fmap`</span>
<a name="line-25"></a>                                <span class='hs-varid'>fetchFilePS</span> <span class='hs-layout'>(</span><span class='hs-varid'>prefsUrl</span> <span class='hs-varid'>the_remote_repo</span><span class='hs-varop'>++</span><span class='hs-str'>"/post"</span><span class='hs-layout'>)</span>
<a name="line-26"></a>                                <span class='hs-layout'>(</span><span class='hs-conid'>MaxAge</span> <span class='hs-num'>600</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-varop'>`catchall`</span> <span class='hs-varid'>return</span> <span class='hs-conid'>[]</span>
<a name="line-27"></a>                          <span class='hs-varid'>emails</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>who_to_email</span>
<a name="line-28"></a>                          <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-varid'>p</span><span class='hs-varop'>++</span><span class='hs-varid'>emails</span><span class='hs-layout'>)</span>
<a name="line-29"></a>          <span class='hs-varid'>readPost</span> <span class='hs-varid'>p</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>map</span> <span class='hs-varid'>pp</span> <span class='hs-layout'>(</span><span class='hs-varid'>lines</span> <span class='hs-varid'>p</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-30"></a>            <span class='hs-varid'>pp</span> <span class='hs-layout'>(</span><span class='hs-chr'>'m'</span><span class='hs-conop'>:</span><span class='hs-chr'>'a'</span><span class='hs-conop'>:</span><span class='hs-chr'>'i'</span><span class='hs-conop'>:</span><span class='hs-chr'>'l'</span><span class='hs-conop'>:</span><span class='hs-chr'>'t'</span><span class='hs-conop'>:</span><span class='hs-chr'>'o'</span><span class='hs-conop'>:</span><span class='hs-chr'>':'</span><span class='hs-conop'>:</span><span class='hs-varid'>s</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>SendMail</span> <span class='hs-varid'>s</span>
<a name="line-31"></a>            <span class='hs-varid'>pp</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Post</span> <span class='hs-varid'>s</span>
<a name="line-32"></a><span class='hs-cpp'>#else</span>
<a name="line-33"></a>          <span class='hs-varid'>check_post</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>who_to_email</span>
<a name="line-34"></a><span class='hs-cpp'>#endif</span>
<a name="line-35"></a>          <span class='hs-varid'>who_to_email</span> <span class='hs-keyglyph'>=</span>
<a name="line-36"></a>              <span class='hs-keyword'>do</span> <span class='hs-varid'>email</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-layout'>(</span><span class='hs-conid'>BC</span><span class='hs-varop'>.</span><span class='hs-varid'>unpack</span> <span class='hs-varop'>`fmap`</span>
<a name="line-37"></a>                           <span class='hs-varid'>fetchFilePS</span> <span class='hs-layout'>(</span><span class='hs-varid'>prefsUrl</span> <span class='hs-varid'>the_remote_repo</span><span class='hs-varop'>++</span><span class='hs-str'>"/email"</span><span class='hs-layout'>)</span>
<a name="line-38"></a>                                       <span class='hs-layout'>(</span><span class='hs-conid'>MaxAge</span> <span class='hs-num'>600</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-39"></a>                          <span class='hs-varop'>`catchall`</span> <span class='hs-varid'>return</span> <span class='hs-str'>""</span>
<a name="line-40"></a>                 <span class='hs-keyword'>if</span> <span class='hs-chr'>'@'</span> <span class='hs-varop'>`elem`</span> <span class='hs-varid'>email</span> <span class='hs-keyword'>then</span> <span class='hs-varid'>return</span> <span class='hs-varop'>.</span> <span class='hs-varid'>map</span> <span class='hs-conid'>SendMail</span> <span class='hs-varop'>$</span> <span class='hs-varid'>lines</span> <span class='hs-varid'>email</span>
<a name="line-41"></a>                                     <span class='hs-keyword'>else</span> <span class='hs-varid'>return</span> <span class='hs-conid'>[]</span>
<a name="line-42"></a>          <span class='hs-varid'>announce_recipients</span> <span class='hs-varid'>emails</span> <span class='hs-keyglyph'>=</span>
<a name="line-43"></a>            <span class='hs-keyword'>let</span> <span class='hs-varid'>pn</span> <span class='hs-layout'>(</span><span class='hs-conid'>SendMail</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>s</span>
<a name="line-44"></a>                <span class='hs-varid'>pn</span> <span class='hs-layout'>(</span><span class='hs-conid'>Post</span> <span class='hs-varid'>p</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>p</span>
<a name="line-45"></a>            <span class='hs-keyword'>in</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-46"></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-varop'>$</span> <span class='hs-str'>"Patch bundle would be sent to: "</span><span class='hs-varop'>++</span><span class='hs-varid'>unwords</span> <span class='hs-layout'>(</span><span class='hs-varid'>map</span> <span class='hs-varid'>pn</span> <span class='hs-varid'>emails</span><span class='hs-layout'>)</span>
<a name="line-47"></a>            <span class='hs-keyword'>else</span> <span class='hs-varid'>when</span> <span class='hs-layout'>(</span><span class='hs-varid'>null</span> <span class='hs-varid'>the_targets</span><span class='hs-layout'>)</span> <span class='hs-varop'>$</span>
<a name="line-48"></a>                 <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-varop'>$</span> <span class='hs-str'>"Patch bundle will be sent to: "</span><span class='hs-varop'>++</span><span class='hs-varid'>unwords</span> <span class='hs-layout'>(</span><span class='hs-varid'>map</span> <span class='hs-varid'>pn</span> <span class='hs-varid'>emails</span><span class='hs-layout'>)</span>
<a name="line-49"></a>
<a name="line-50"></a><a name="getOutput"></a><span class='hs-definition'>getOutput</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'>FilePath</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>AbsolutePathOrStd</span>
<a name="line-51"></a><span class='hs-definition'>getOutput</span> <span class='hs-layout'>(</span><span class='hs-conid'>Output</span> <span class='hs-varid'>a</span><span class='hs-conop'>:</span><span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>return</span> <span class='hs-varid'>a</span>
<a name="line-52"></a><span class='hs-definition'>getOutput</span> <span class='hs-layout'>(</span><span class='hs-conid'>OutputAutoName</span> <span class='hs-varid'>a</span><span class='hs-conop'>:</span><span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>return</span> <span class='hs-varop'>$</span> <span class='hs-varid'>makeAbsoluteOrStd</span> <span class='hs-varid'>a</span> <span class='hs-varid'>f</span>
<a name="line-53"></a><span class='hs-definition'>getOutput</span> <span class='hs-layout'>(</span><span class='hs-keyword'>_</span><span class='hs-conop'>:</span><span class='hs-varid'>flags</span><span class='hs-layout'>)</span> <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>getOutput</span> <span class='hs-varid'>flags</span> <span class='hs-varid'>f</span>
<a name="line-54"></a><span class='hs-definition'>getOutput</span> <span class='hs-conid'>[]</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Nothing</span>
<a name="line-55"></a>
<a name="line-56"></a><a name="getTargets"></a><span class='hs-definition'>getTargets</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>WhatToDo</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'>WhatToDo</span><span class='hs-keyglyph'>]</span>
<a name="line-57"></a><span class='hs-definition'>getTargets</span> <span class='hs-conid'>[]</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span> <span class='hs-varid'>fmap</span> <span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-conop'>:</span><span class='hs-conid'>[]</span><span class='hs-layout'>)</span> <span class='hs-varop'>.</span> <span class='hs-conid'>SendMail</span><span class='hs-layout'>)</span> <span class='hs-varop'>$</span> <span class='hs-varid'>askUser</span> <span class='hs-str'>"What is the target email address? "</span>
<a name="line-58"></a><span class='hs-definition'>getTargets</span> <span class='hs-varid'>wtds</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>return</span> <span class='hs-varid'>wtds</span>
<a name="line-59"></a>
<a name="line-60"></a><a name="collectTargets"></a><span class='hs-definition'>collectTargets</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'>WhatToDo</span><span class='hs-keyglyph'>]</span>
<a name="line-61"></a><span class='hs-definition'>collectTargets</span> <span class='hs-varid'>flags</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyglyph'>[</span> <span class='hs-varid'>f</span> <span class='hs-varid'>t</span> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Target</span> <span class='hs-varid'>t</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>flags</span> <span class='hs-keyglyph'>]</span> <span class='hs-keyword'>where</span>
<a name="line-62"></a>    <span class='hs-varid'>f</span> <span class='hs-varid'>url</span><span class='hs-keyglyph'>@</span><span class='hs-layout'>(</span><span class='hs-chr'>'h'</span><span class='hs-conop'>:</span><span class='hs-chr'>'t'</span><span class='hs-conop'>:</span><span class='hs-chr'>'t'</span><span class='hs-conop'>:</span><span class='hs-chr'>'p'</span><span class='hs-conop'>:</span><span class='hs-chr'>':'</span><span class='hs-conop'>:</span><span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Post</span> <span class='hs-varid'>url</span>
<a name="line-63"></a>    <span class='hs-varid'>f</span> <span class='hs-varid'>em</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>SendMail</span> <span class='hs-varid'>em</span>
<a name="line-64"></a>
<a name="line-65"></a>
</pre>\end{code}

\begin{options}
--matches, --patches, --tags, --no-deps
\end{options}

The \verb!--patches!, \verb!--matches!, \verb!--tags!, and \verb!--no-deps!
options can be used to select which patches to send, as described in
subsection~\ref{selecting}.

\begin{options}
--edit-description
\end{options}

If you want to include a description or explanation along with the bundle
of patches, you need to specify the \verb!--edit-description! flag, which
will cause darcs to open up an editor with which you can compose a message
to go along with your patches.

\begin{options}
--sendmail-command
\end{options}

If you want to use a command different from the default one for sending email,
you need to specify a command line with the \verb!--sendmail-command! option. The
command line can contain some format specifiers which are replaced by the actual
values. Accepted format specifiers are \verb!%s! for subject, \verb!%t! for to,
\verb!%c! for cc, \verb!%b! for the body of the mail, \verb!%f! for from, \verb!%a!
for the patch bundle and the same specifiers in uppercase for the URL-encoded values.
Additionally you can add \verb!%<! to the end of the command line if the command
expects the complete email message on standard input. E.g.\ the command lines for evolution
and msmtp look like this:

\begin{verbatim}
evolution "mailto:%T?subject=%S&attach=%A&cc=%C&body=%B"
msmtp -t %<
\end{verbatim}

\begin{code}
<pre><a name="line-1"></a><a name="getDescription"></a><span class='hs-definition'>getDescription</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>RepoPatch</span> <span class='hs-varid'>p</span> <span class='hs-keyglyph'>=&gt;</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'>String</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>FL</span> <span class='hs-layout'>(</span><span class='hs-conid'>PatchInfoAnd</span> <span class='hs-varid'>p</span><span class='hs-layout'>)</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-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Doc</span><span class='hs-layout'>,</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>String</span><span class='hs-layout'>)</span>
<a name="line-2"></a><span class='hs-definition'>getDescription</span> <span class='hs-varid'>opts</span> <span class='hs-varid'>their_name</span> <span class='hs-varid'>patches</span> <span class='hs-keyglyph'>=</span>
<a name="line-3"></a>    <span class='hs-keyword'>case</span> <span class='hs-varid'>get_filename</span> <span class='hs-keyword'>of</span>
<a name="line-4"></a>        <span class='hs-conid'>Just</span> <span class='hs-varid'>f</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyword'>do</span> <span class='hs-varid'>file</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>f</span>
<a name="line-5"></a>                     <span class='hs-varid'>when</span> <span class='hs-layout'>(</span><span class='hs-conid'>EditDescription</span> <span class='hs-varop'>`elem`</span> <span class='hs-varid'>opts</span><span class='hs-layout'>)</span> <span class='hs-varop'>$</span> <span class='hs-keyword'>do</span>
<a name="line-6"></a>                       <span class='hs-varid'>when</span> <span class='hs-layout'>(</span><span class='hs-varid'>isNothing</span> <span class='hs-varop'>$</span> <span class='hs-varid'>getFileopt</span> <span class='hs-varid'>opts</span><span class='hs-layout'>)</span> <span class='hs-varop'>$</span>
<a name="line-7"></a>                            <span class='hs-varid'>writeDocBinFile</span> <span class='hs-varid'>file</span> <span class='hs-varid'>patchdesc</span>
<a name="line-8"></a>                       <span class='hs-varid'>debugMessage</span> <span class='hs-varop'>$</span> <span class='hs-str'>"About to edit file "</span> <span class='hs-varop'>++</span> <span class='hs-varid'>file</span>
<a name="line-9"></a>                       <span class='hs-varid'>edit_file</span> <span class='hs-varid'>file</span>
<a name="line-10"></a>                       <span class='hs-varid'>return</span> <span class='hs-conid'>()</span>
<a name="line-11"></a>                     <span class='hs-varid'>doc</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>readDocBinFile</span> <span class='hs-varid'>file</span>
<a name="line-12"></a>                     <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-varid'>doc</span><span class='hs-layout'>,</span> <span class='hs-conid'>Just</span> <span class='hs-varid'>file</span><span class='hs-layout'>)</span>
<a name="line-13"></a>        <span class='hs-conid'>Nothing</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-varid'>patchdesc</span><span class='hs-layout'>,</span> <span class='hs-conid'>Nothing</span><span class='hs-layout'>)</span>
<a name="line-14"></a>    <span class='hs-keyword'>where</span> <span class='hs-varid'>patchdesc</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>text</span> <span class='hs-layout'>(</span><span class='hs-keyword'>if</span> <span class='hs-varid'>lengthFL</span> <span class='hs-varid'>patches</span> <span class='hs-varop'>==</span> <span class='hs-num'>1</span>
<a name="line-15"></a>                               <span class='hs-keyword'>then</span> <span class='hs-str'>"1 patch"</span>
<a name="line-16"></a>                               <span class='hs-keyword'>else</span> <span class='hs-varid'>show</span> <span class='hs-layout'>(</span><span class='hs-varid'>lengthFL</span> <span class='hs-varid'>patches</span><span class='hs-layout'>)</span> <span class='hs-varop'>++</span> <span class='hs-str'>" patches"</span><span class='hs-layout'>)</span>
<a name="line-17"></a>                      <span class='hs-varop'>&lt;+&gt;</span> <span class='hs-varid'>text</span> <span class='hs-str'>"for repository"</span> <span class='hs-varop'>&lt;+&gt;</span> <span class='hs-varid'>text</span> <span class='hs-varid'>their_name</span> <span class='hs-varop'>&lt;&gt;</span> <span class='hs-varid'>text</span> <span class='hs-str'>":"</span>
<a name="line-18"></a>                      <span class='hs-varop'>$$</span> <span class='hs-varid'>text</span> <span class='hs-str'>""</span>
<a name="line-19"></a>                      <span class='hs-varop'>$$</span> <span class='hs-varid'>vsep</span> <span class='hs-layout'>(</span><span class='hs-varid'>mapFL</span> <span class='hs-varid'>description</span> <span class='hs-varid'>patches</span><span class='hs-layout'>)</span>
<a name="line-20"></a>          <span class='hs-varid'>get_filename</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>case</span> <span class='hs-varid'>getFileopt</span> <span class='hs-varid'>opts</span> <span class='hs-keyword'>of</span>
<a name="line-21"></a>                                <span class='hs-conid'>Just</span> <span class='hs-varid'>f</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Just</span> <span class='hs-varop'>$</span> <span class='hs-varid'>return</span> <span class='hs-varop'>$</span> <span class='hs-varid'>toFilePath</span> <span class='hs-varid'>f</span>
<a name="line-22"></a>                                <span class='hs-conid'>Nothing</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyword'>if</span> <span class='hs-conid'>EditDescription</span> <span class='hs-varop'>`elem`</span> <span class='hs-varid'>opts</span>
<a name="line-23"></a>                                              <span class='hs-keyword'>then</span> <span class='hs-conid'>Just</span> <span class='hs-varid'>tempfile</span>
<a name="line-24"></a>                                              <span class='hs-keyword'>else</span> <span class='hs-conid'>Nothing</span>
<a name="line-25"></a>          <span class='hs-varid'>tempfile</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>world_readable_temp</span> <span class='hs-str'>"darcs-temp-mail"</span>
<a name="line-26"></a>
<a name="line-27"></a><a name="getFileopt"></a><span class='hs-definition'>getFileopt</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'>Maybe</span> <span class='hs-conid'>AbsolutePath</span>
<a name="line-28"></a><span class='hs-definition'>getFileopt</span> <span class='hs-layout'>(</span><span class='hs-conid'>LogFile</span> <span class='hs-varid'>f</span><span class='hs-conop'>:</span><span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Just</span> <span class='hs-varid'>f</span>
<a name="line-29"></a><span class='hs-definition'>getFileopt</span> <span class='hs-layout'>(</span><span class='hs-keyword'>_</span><span class='hs-conop'>:</span><span class='hs-varid'>flags</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>getFileopt</span> <span class='hs-varid'>flags</span>
<a name="line-30"></a><span class='hs-definition'>getFileopt</span> <span class='hs-conid'>[]</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Nothing</span>
</pre>\end{code}
</body>
</html>