Sophie

Sophie

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

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/Repository/Prefs.lhs</title>
<link type='text/css' rel='stylesheet' href='hscolour.css' />
</head>
<body>
%  Copyright (C) 2002-2003 David Roundy
%
%  This program is free software; you can redistribute it and/or modify
%  it under the terms of the GNU General Public License as published by
%  the Free Software Foundation; either version 2, or (at your option)
%  any later version.
%
%  This program is distributed in the hope that it will be useful,
%  but WITHOUT ANY WARRANTY; without even the implied warranty of
%  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
%  GNU General Public License for more details.
%
%  You should have received a copy of the GNU General Public License
%  along with this program; see the file COPYING.  If not, write to
%  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
%  Boston, MA 02110-1301, USA.


\begin{code}
<pre><a name="line-1"></a><span class='hs-comment'>{-# OPTIONS_GHC -cpp -fglasgow-exts #-}</span>
<a name="line-2"></a><span class='hs-comment'>{-# LANGUAGE CPP #-}</span>
<a name="line-3"></a>
<a name="line-4"></a><span class='hs-cpp'>#include "gadts.h"</span>
<a name="line-5"></a>
<a name="line-6"></a><span class='hs-keyword'>module</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'>addToPreflist</span><span class='hs-layout'>,</span> <span class='hs-varid'>getPreflist</span><span class='hs-layout'>,</span> <span class='hs-varid'>setPreflist</span><span class='hs-layout'>,</span>
<a name="line-7"></a>                   <span class='hs-varid'>getGlobal</span><span class='hs-layout'>,</span> <span class='hs-varid'>environmentHelpHome</span><span class='hs-layout'>,</span>
<a name="line-8"></a>                   <span class='hs-varid'>defaultrepo</span><span class='hs-layout'>,</span> <span class='hs-varid'>setDefaultrepo</span><span class='hs-layout'>,</span>
<a name="line-9"></a>                   <span class='hs-varid'>getPrefval</span><span class='hs-layout'>,</span> <span class='hs-varid'>setPrefval</span><span class='hs-layout'>,</span> <span class='hs-varid'>changePrefval</span><span class='hs-layout'>,</span>
<a name="line-10"></a>                   <span class='hs-varid'>defPrefval</span><span class='hs-layout'>,</span>
<a name="line-11"></a>                   <span class='hs-varid'>writeDefaultPrefs</span><span class='hs-layout'>,</span>
<a name="line-12"></a>                   <span class='hs-varid'>boringRegexps</span><span class='hs-layout'>,</span> <span class='hs-varid'>boringFileFilter</span><span class='hs-layout'>,</span> <span class='hs-varid'>darcsdirFilter</span><span class='hs-layout'>,</span>
<a name="line-13"></a>                   <span class='hs-conid'>FileType</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'>filetypeFunction</span><span class='hs-layout'>,</span>
<a name="line-14"></a>                   <span class='hs-varid'>getCaches</span><span class='hs-layout'>,</span>
<a name="line-15"></a>                   <span class='hs-varid'>binariesFileHelp</span>
<a name="line-16"></a>                 <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-17"></a>
<a name="line-18"></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'>isDoesNotExistError</span> <span class='hs-layout'>)</span>
<a name="line-19"></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'>unless</span><span class='hs-layout'>,</span> <span class='hs-varid'>when</span><span class='hs-layout'>,</span> <span class='hs-varid'>mplus</span> <span class='hs-layout'>)</span>
<a name="line-20"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Text</span><span class='hs-varop'>.</span><span class='hs-conid'>Regex</span> <span class='hs-layout'>(</span> <span class='hs-conid'>Regex</span><span class='hs-layout'>,</span> <span class='hs-varid'>mkRegex</span><span class='hs-layout'>,</span> <span class='hs-varid'>matchRegex</span><span class='hs-layout'>,</span> <span class='hs-layout'>)</span>
<a name="line-21"></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'>toUpper</span> <span class='hs-layout'>)</span>
<a name="line-22"></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'>catMaybes</span> <span class='hs-layout'>)</span>
<a name="line-23"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>List</span> <span class='hs-layout'>(</span> <span class='hs-varid'>nub</span><span class='hs-layout'>,</span> <span class='hs-varid'>isPrefixOf</span><span class='hs-layout'>,</span> <span class='hs-varid'>union</span> <span class='hs-layout'>)</span>
<a name="line-24"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>System</span><span class='hs-varop'>.</span><span class='hs-conid'>Directory</span> <span class='hs-layout'>(</span> <span class='hs-varid'>getAppUserDataDirectory</span> <span class='hs-layout'>)</span>
<a name="line-25"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>System</span><span class='hs-varop'>.</span><span class='hs-conid'>FilePath</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>
<a name="line-26"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>System</span><span class='hs-varop'>.</span><span class='hs-conid'>Environment</span> <span class='hs-layout'>(</span> <span class='hs-varid'>getEnvironment</span> <span class='hs-layout'>)</span>
<a name="line-27"></a>
<a name="line-28"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Darcs</span><span class='hs-varop'>.</span><span class='hs-conid'>Flags</span> <span class='hs-layout'>(</span> <span class='hs-conid'>DarcsFlag</span><span class='hs-layout'>(</span> <span class='hs-conid'>NoCache</span><span class='hs-layout'>,</span> <span class='hs-conid'>NoSetDefault</span><span class='hs-layout'>,</span> <span class='hs-conid'>DryRun</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ephemeral</span><span class='hs-layout'>,</span> <span class='hs-conid'>RemoteRepo</span> <span class='hs-layout'>)</span> <span class='hs-layout'>)</span>
<a name="line-29"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Darcs</span><span class='hs-varop'>.</span><span class='hs-conid'>RepoPath</span> <span class='hs-layout'>(</span> <span class='hs-conid'>AbsolutePath</span><span class='hs-layout'>,</span> <span class='hs-varid'>ioAbsolute</span><span class='hs-layout'>,</span> <span class='hs-varid'>toFilePath</span><span class='hs-layout'>,</span> <span class='hs-varid'>getCurrentDirectory</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'>Utils</span> <span class='hs-layout'>(</span> <span class='hs-varid'>catchall</span><span class='hs-layout'>,</span> <span class='hs-varid'>stripCr</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'>IO</span> <span class='hs-layout'>(</span> <span class='hs-conid'>ReadableDirectory</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'>WriteableDirectory</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span> <span class='hs-layout'>)</span>
<a name="line-32"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Darcs</span><span class='hs-varop'>.</span><span class='hs-conid'>Patch</span><span class='hs-varop'>.</span><span class='hs-conid'>FileName</span> <span class='hs-layout'>(</span> <span class='hs-varid'>fp2fn</span> <span class='hs-layout'>)</span>
<a name="line-33"></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'>gzFetchFilePS</span><span class='hs-layout'>,</span> <span class='hs-conid'>Cachable</span><span class='hs-layout'>(</span> <span class='hs-conid'>Cachable</span> <span class='hs-layout'>)</span> <span class='hs-layout'>)</span>
<a name="line-34"></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-35"></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-keyword'>as</span> <span class='hs-conid'>B</span>  <span class='hs-layout'>(</span> <span class='hs-varid'>empty</span> <span class='hs-layout'>)</span>
<a name="line-36"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Darcs</span><span class='hs-varop'>.</span><span class='hs-conid'>Global</span> <span class='hs-layout'>(</span> <span class='hs-varid'>darcsdir</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'>Repository</span><span class='hs-varop'>.</span><span class='hs-conid'>Cache</span> <span class='hs-layout'>(</span> <span class='hs-conid'>Cache</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'>CacheType</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'>CacheLoc</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-38"></a>                                <span class='hs-conid'>WritableOrNot</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</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'>URL</span> <span class='hs-layout'>(</span> <span class='hs-varid'>is_file</span> <span class='hs-layout'>)</span>
</pre>\end{code}

\section{prefs}

The \verb!_darcs! directory contains a \verb!prefs!  directory.  This
directory exists simply to hold user configuration settings specific to
this repository.  The contents of this directory are intended to be
modifiable by the user, although in some cases a mistake in such a
modification may cause darcs to behave strangely.



\input{Darcs/ArgumentDefaults.lhs}

\begin{code}
<pre><a name="line-1"></a><a name="writeDefaultPrefs"></a><span class='hs-definition'>writeDefaultPrefs</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span>
<a name="line-2"></a><span class='hs-definition'>writeDefaultPrefs</span> <span class='hs-keyglyph'>=</span>   <span class='hs-keyword'>do</span> <span class='hs-varid'>setPreflist</span> <span class='hs-str'>"boring"</span> <span class='hs-varid'>defaultBoring</span>
<a name="line-3"></a>                         <span class='hs-varid'>setPreflist</span> <span class='hs-str'>"binaries"</span> <span class='hs-varid'>defaultBinaries</span>
<a name="line-4"></a>                         <span class='hs-varid'>setPreflist</span> <span class='hs-str'>"motd"</span> <span class='hs-conid'>[]</span>
</pre>\end{code}

\paragraph{repos}
The \verb!_darcs/prefs/repos! file contains a list of repositories you have
pulled from or pushed to, and is used for autocompletion of pull and push
commands in bash.  Feel free to delete any lines from this list that might
get in there, or to delete the file as a whole.

\paragraph{author}\label{author_prefs}
The \verb!_darcs/prefs/author! file contains the email address (or name) to
be used as the author when patches are recorded in this repository,
e.g.\ \verb!David Roundy <droundy@abridgegame.org>!.  This
file overrides the contents of the environment variables
\verb!$DARCS_EMAIL! and \verb!$EMAIL!.

\paragraph{boring}\label{boring}
The \verb!_darcs/prefs/boring! file may contain a list of regular
expressions describing files, such as object files, that you do not expect
to add to your project.  As an example, the boring file that I use with
my darcs repository is:
\begin{verbatim}
\.hi$
\.o$
^\.[^/]
^_
~$
(^|/)CVS($|/)
\end{verbatim}
A newly created repository has a longer boring file that
includes many common source control, backup, temporary, and compiled files.

You may want to have the boring file under version
control.  To do this you can use darcs setpref to set the value
``boringfile'' to the name of your desired boring file
(e.g.\ \verb-darcs setpref boringfile .boring-, where \verb-.boring-
is the repository path of a file
that has been
darcs added to your repository).  The boringfile preference overrides
\verb!_darcs/prefs/boring!, so be sure to copy that file to the boringfile.

You can also set up a ``boring'' regexps
file in your home directory, named \verb!~/.darcs/boring!, 
on MS Windows~\ref{ms_win}, which will be
used with all of your darcs repositories.

Any file not already managed by darcs and whose repository path (such
as \verb!manual/index.html!) matches any of
the boring regular expressions is considered boring.  The boring file is
used to filter the files provided to darcs add, to allow you to use a
simple \verb-darcs add newdir newdir/-\verb-*- % cabal haddock barfs on adjacent / *
without accidentally adding a bunch of
object files.  It is also used when the \verb!--look-for-adds! flag is
given to whatsnew or record.
Note that once a file has been added to darcs, it is not considered
boring, even if it matches the boring file filter.

\begin{code}
<pre><a name="line-1"></a><a name="defaultBoring"></a><span class='hs-comment'>{-# NOINLINE defaultBoring #-}</span>
<a name="line-2"></a><span class='hs-definition'>defaultBoring</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>String</span><span class='hs-keyglyph'>]</span>
<a name="line-3"></a><span class='hs-definition'>defaultBoring</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyglyph'>[</span><span class='hs-str'>"# Boring file regexps:"</span><span class='hs-layout'>,</span>
<a name="line-4"></a>                  <span class='hs-str'>""</span><span class='hs-layout'>,</span>
<a name="line-5"></a>                  <span class='hs-str'>"### compiler and interpreter intermediate files"</span><span class='hs-layout'>,</span>
<a name="line-6"></a>                  <span class='hs-str'>"# haskell (ghc) interfaces"</span><span class='hs-layout'>,</span>
<a name="line-7"></a>                  <span class='hs-str'>"\\.hi$"</span><span class='hs-layout'>,</span> <span class='hs-str'>"\\.hi-boot$"</span><span class='hs-layout'>,</span> <span class='hs-str'>"\\.o-boot$"</span><span class='hs-layout'>,</span>
<a name="line-8"></a>                  <span class='hs-str'>"# object files"</span><span class='hs-layout'>,</span>
<a name="line-9"></a>                  <span class='hs-str'>"\\.o$"</span><span class='hs-layout'>,</span><span class='hs-str'>"\\.o\\.cmd$"</span><span class='hs-layout'>,</span>
<a name="line-10"></a>                  <span class='hs-str'>"# profiling haskell"</span><span class='hs-layout'>,</span>
<a name="line-11"></a>                  <span class='hs-str'>"\\.p_hi$"</span><span class='hs-layout'>,</span> <span class='hs-str'>"\\.p_o$"</span><span class='hs-layout'>,</span>
<a name="line-12"></a>                  <span class='hs-str'>"# haskell program coverage resp. profiling info"</span><span class='hs-layout'>,</span>
<a name="line-13"></a>                  <span class='hs-str'>"\\.tix$"</span><span class='hs-layout'>,</span> <span class='hs-str'>"\\.prof$"</span><span class='hs-layout'>,</span>
<a name="line-14"></a>                  <span class='hs-str'>"# fortran module files"</span><span class='hs-layout'>,</span>
<a name="line-15"></a>                  <span class='hs-str'>"\\.mod$"</span><span class='hs-layout'>,</span>
<a name="line-16"></a>                  <span class='hs-str'>"# linux kernel"</span><span class='hs-layout'>,</span>
<a name="line-17"></a>                  <span class='hs-str'>"\\.ko\\.cmd$"</span><span class='hs-layout'>,</span><span class='hs-str'>"\\.mod\\.c$"</span><span class='hs-layout'>,</span>
<a name="line-18"></a>                  <span class='hs-str'>"(^|/)\\.tmp_versions($|/)"</span><span class='hs-layout'>,</span>
<a name="line-19"></a>                  <span class='hs-str'>"# *.ko files aren't boring by default because they might"</span><span class='hs-layout'>,</span>
<a name="line-20"></a>                  <span class='hs-str'>"# be Korean translations rather than kernel modules"</span><span class='hs-layout'>,</span>
<a name="line-21"></a>                  <span class='hs-str'>"# \\.ko$"</span><span class='hs-layout'>,</span>
<a name="line-22"></a>                  <span class='hs-str'>"# python, emacs, java byte code"</span><span class='hs-layout'>,</span>
<a name="line-23"></a>                  <span class='hs-str'>"\\.py[co]$"</span><span class='hs-layout'>,</span> <span class='hs-str'>"\\.elc$"</span><span class='hs-layout'>,</span><span class='hs-str'>"\\.class$"</span><span class='hs-layout'>,</span>
<a name="line-24"></a>                  <span class='hs-str'>"# objects and libraries; lo and la are libtool things"</span><span class='hs-layout'>,</span>
<a name="line-25"></a>                  <span class='hs-str'>"\\.(obj|a|exe|so|lo|la)$"</span><span class='hs-layout'>,</span>
<a name="line-26"></a>                  <span class='hs-str'>"# compiled zsh configuration files"</span><span class='hs-layout'>,</span>
<a name="line-27"></a>                  <span class='hs-str'>"\\.zwc$"</span><span class='hs-layout'>,</span>
<a name="line-28"></a>                  <span class='hs-str'>"# Common LISP output files for CLISP and CMUCL"</span><span class='hs-layout'>,</span>
<a name="line-29"></a>                  <span class='hs-str'>"\\.(fas|fasl|sparcf|x86f)$"</span><span class='hs-layout'>,</span>
<a name="line-30"></a>                  <span class='hs-str'>""</span><span class='hs-layout'>,</span>
<a name="line-31"></a>                  <span class='hs-str'>"### build and packaging systems"</span><span class='hs-layout'>,</span>
<a name="line-32"></a>                  <span class='hs-str'>"# cabal intermediates"</span><span class='hs-layout'>,</span>
<a name="line-33"></a>                  <span class='hs-str'>"\\.installed-pkg-config"</span><span class='hs-layout'>,</span>
<a name="line-34"></a>                  <span class='hs-str'>"\\.setup-config"</span><span class='hs-layout'>,</span>
<a name="line-35"></a>                  <span class='hs-str'>"# standard cabal build dir, might not be boring for everybody"</span><span class='hs-layout'>,</span>
<a name="line-36"></a>                  <span class='hs-str'>"# ^dist(/|$)"</span><span class='hs-layout'>,</span>
<a name="line-37"></a>                  <span class='hs-str'>"# autotools"</span><span class='hs-layout'>,</span>
<a name="line-38"></a>                  <span class='hs-str'>"(^|/)autom4te\\.cache($|/)"</span><span class='hs-layout'>,</span> <span class='hs-str'>"(^|/)config\\.(log|status)$"</span><span class='hs-layout'>,</span>
<a name="line-39"></a>                  <span class='hs-str'>"# microsoft web expression, visual studio metadata directories"</span><span class='hs-layout'>,</span>
<a name="line-40"></a>                  <span class='hs-str'>"\\_vti_cnf$"</span><span class='hs-layout'>,</span>
<a name="line-41"></a>                  <span class='hs-str'>"\\_vti_pvt$"</span><span class='hs-layout'>,</span>
<a name="line-42"></a>                  <span class='hs-str'>"# gentoo tools"</span><span class='hs-layout'>,</span>
<a name="line-43"></a>                  <span class='hs-str'>"\\.revdep-rebuild.*"</span><span class='hs-layout'>,</span>
<a name="line-44"></a>                  <span class='hs-str'>"# generated dependencies"</span><span class='hs-layout'>,</span>
<a name="line-45"></a>                  <span class='hs-str'>"^\\.depend$"</span><span class='hs-layout'>,</span>
<a name="line-46"></a>                  <span class='hs-str'>""</span><span class='hs-layout'>,</span>
<a name="line-47"></a>                  <span class='hs-str'>"### version control systems"</span><span class='hs-layout'>,</span>
<a name="line-48"></a>                  <span class='hs-str'>"# cvs"</span><span class='hs-layout'>,</span>
<a name="line-49"></a>                  <span class='hs-str'>"(^|/)CVS($|/)"</span><span class='hs-layout'>,</span><span class='hs-str'>"\\.cvsignore$"</span><span class='hs-layout'>,</span>
<a name="line-50"></a>                  <span class='hs-str'>"# cvs, emacs locks"</span><span class='hs-layout'>,</span>
<a name="line-51"></a>                  <span class='hs-str'>"^\\.#"</span><span class='hs-layout'>,</span>
<a name="line-52"></a>                  <span class='hs-str'>"# rcs"</span><span class='hs-layout'>,</span>
<a name="line-53"></a>                  <span class='hs-str'>"(^|/)RCS($|/)"</span><span class='hs-layout'>,</span> <span class='hs-str'>",v$"</span><span class='hs-layout'>,</span>
<a name="line-54"></a>                  <span class='hs-str'>"# subversion"</span><span class='hs-layout'>,</span>
<a name="line-55"></a>                  <span class='hs-str'>"(^|/)\\.svn($|/)"</span><span class='hs-layout'>,</span>
<a name="line-56"></a>                  <span class='hs-str'>"# mercurial"</span><span class='hs-layout'>,</span>
<a name="line-57"></a>                  <span class='hs-str'>"(^|/)\\.hg($|/)"</span><span class='hs-layout'>,</span>
<a name="line-58"></a>                  <span class='hs-str'>"# git"</span><span class='hs-layout'>,</span>
<a name="line-59"></a>                  <span class='hs-str'>"(^|/)\\.git($|/)"</span><span class='hs-layout'>,</span>
<a name="line-60"></a>                  <span class='hs-str'>"# bzr"</span><span class='hs-layout'>,</span>
<a name="line-61"></a>                  <span class='hs-str'>"\\.bzr$"</span><span class='hs-layout'>,</span>
<a name="line-62"></a>                  <span class='hs-str'>"# sccs"</span><span class='hs-layout'>,</span>
<a name="line-63"></a>                  <span class='hs-str'>"(^|/)SCCS($|/)"</span><span class='hs-layout'>,</span>
<a name="line-64"></a>                  <span class='hs-str'>"# darcs"</span><span class='hs-layout'>,</span>
<a name="line-65"></a>                  <span class='hs-str'>"(^|/)"</span><span class='hs-varop'>++</span><span class='hs-varid'>darcsdir</span><span class='hs-varop'>++</span><span class='hs-str'>"($|/)"</span><span class='hs-layout'>,</span> <span class='hs-str'>"(^|/)\\.darcsrepo($|/)"</span><span class='hs-layout'>,</span>
<a name="line-66"></a>                  <span class='hs-str'>"^\\.darcs-temp-mail$"</span><span class='hs-layout'>,</span>
<a name="line-67"></a>                  <span class='hs-str'>"-darcs-backup[[:digit:]]+$"</span><span class='hs-layout'>,</span>
<a name="line-68"></a>                  <span class='hs-str'>"# gnu arch"</span><span class='hs-layout'>,</span>
<a name="line-69"></a>                  <span class='hs-str'>"(^|/)(\\+|,)"</span><span class='hs-layout'>,</span>
<a name="line-70"></a>                  <span class='hs-str'>"(^|/)vssver\\.scc$"</span><span class='hs-layout'>,</span>
<a name="line-71"></a>                  <span class='hs-str'>"\\.swp$"</span><span class='hs-layout'>,</span><span class='hs-str'>"(^|/)MT($|/)"</span><span class='hs-layout'>,</span>
<a name="line-72"></a>                  <span class='hs-str'>"(^|/)\\{arch\\}($|/)"</span><span class='hs-layout'>,</span><span class='hs-str'>"(^|/).arch-ids($|/)"</span><span class='hs-layout'>,</span>
<a name="line-73"></a>                  <span class='hs-str'>"# bitkeeper"</span><span class='hs-layout'>,</span>
<a name="line-74"></a>                  <span class='hs-str'>"(^|/)BitKeeper($|/)"</span><span class='hs-layout'>,</span><span class='hs-str'>"(^|/)ChangeSet($|/)"</span><span class='hs-layout'>,</span>
<a name="line-75"></a>                  <span class='hs-str'>""</span><span class='hs-layout'>,</span>
<a name="line-76"></a>                  <span class='hs-str'>"### miscellaneous"</span><span class='hs-layout'>,</span>
<a name="line-77"></a>                  <span class='hs-str'>"# backup files"</span><span class='hs-layout'>,</span>
<a name="line-78"></a>                  <span class='hs-str'>"~$"</span><span class='hs-layout'>,</span><span class='hs-str'>"\\.bak$"</span><span class='hs-layout'>,</span><span class='hs-str'>"\\.BAK$"</span><span class='hs-layout'>,</span>
<a name="line-79"></a>                  <span class='hs-str'>"# patch originals and rejects"</span><span class='hs-layout'>,</span>
<a name="line-80"></a>                  <span class='hs-str'>"\\.orig$"</span><span class='hs-layout'>,</span> <span class='hs-str'>"\\.rej$"</span><span class='hs-layout'>,</span>
<a name="line-81"></a>                  <span class='hs-str'>"# X server"</span><span class='hs-layout'>,</span>
<a name="line-82"></a>                  <span class='hs-str'>"\\..serverauth.*"</span><span class='hs-layout'>,</span>
<a name="line-83"></a>                  <span class='hs-str'>"# image spam"</span><span class='hs-layout'>,</span>
<a name="line-84"></a>                  <span class='hs-str'>"\\#"</span><span class='hs-layout'>,</span> <span class='hs-str'>"(^|/)Thumbs\\.db$"</span><span class='hs-layout'>,</span>
<a name="line-85"></a>                  <span class='hs-str'>"# vi, emacs tags"</span><span class='hs-layout'>,</span>
<a name="line-86"></a>                  <span class='hs-str'>"(^|/)(tags|TAGS)$"</span><span class='hs-layout'>,</span>
<a name="line-87"></a>                  <span class='hs-str'>"#(^|/)\\.[^/]"</span><span class='hs-layout'>,</span>
<a name="line-88"></a>                  <span class='hs-str'>"# core dumps"</span><span class='hs-layout'>,</span>
<a name="line-89"></a>                  <span class='hs-str'>"(^|/|\\.)core$"</span><span class='hs-layout'>,</span>
<a name="line-90"></a>                  <span class='hs-str'>"# partial broken files (KIO copy operations)"</span><span class='hs-layout'>,</span>
<a name="line-91"></a>                  <span class='hs-str'>"\\.part$"</span><span class='hs-layout'>,</span>
<a name="line-92"></a>                  <span class='hs-str'>"# waf files, see http://code.google.com/p/waf/"</span><span class='hs-layout'>,</span>
<a name="line-93"></a>                  <span class='hs-str'>"(^|/)\\.waf-[[:digit:].]+-[[:digit:]]+($|/)"</span><span class='hs-layout'>,</span>
<a name="line-94"></a>                  <span class='hs-str'>"(^|/)\\.lock-wscript$"</span><span class='hs-layout'>,</span>
<a name="line-95"></a>                  <span class='hs-str'>"# mac os finder"</span><span class='hs-layout'>,</span>
<a name="line-96"></a>                  <span class='hs-str'>"(^|/)\\.DS_Store$"</span> <span class='hs-keyglyph'>]</span>
<a name="line-97"></a>
<a name="line-98"></a><a name="darcsdirFilter"></a><span class='hs-definition'>darcsdirFilter</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>FilePath</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>FilePath</span><span class='hs-keyglyph'>]</span>
<a name="line-99"></a><span class='hs-definition'>darcsdirFilter</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>filter</span> <span class='hs-layout'>(</span><span class='hs-varid'>not</span><span class='hs-varop'>.</span><span class='hs-varid'>isDarcsdir</span><span class='hs-layout'>)</span>
<a name="line-100"></a><a name="isDarcsdir"></a><span class='hs-definition'>isDarcsdir</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>FilePath</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Bool</span>
<a name="line-101"></a><span class='hs-definition'>isDarcsdir</span> <span class='hs-layout'>(</span><span class='hs-chr'>'.'</span><span class='hs-conop'>:</span><span class='hs-chr'>'/'</span><span class='hs-conop'>:</span><span class='hs-varid'>f</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>isDarcsdir</span> <span class='hs-varid'>f</span>
<a name="line-102"></a><span class='hs-definition'>isDarcsdir</span> <span class='hs-str'>"."</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>True</span>
<a name="line-103"></a><span class='hs-definition'>isDarcsdir</span> <span class='hs-str'>""</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>True</span>
<a name="line-104"></a><span class='hs-definition'>isDarcsdir</span> <span class='hs-str'>".."</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>True</span>
<a name="line-105"></a><span class='hs-definition'>isDarcsdir</span> <span class='hs-str'>"../"</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>True</span>
<a name="line-106"></a><span class='hs-definition'>isDarcsdir</span> <span class='hs-varid'>fp</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>darcsdir</span> <span class='hs-varop'>`isPrefixOf`</span> <span class='hs-varid'>fp</span>
<a name="line-107"></a>
<a name="line-108"></a><a name="globalPrefsDir"></a><span class='hs-comment'>-- | The path of the global preference directory; @~/.darcs@ on Unix,</span>
<a name="line-109"></a><span class='hs-comment'>-- and @%APPDATA%/darcs@ on Windows.</span>
<a name="line-110"></a><span class='hs-definition'>globalPrefsDir</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>FilePath</span><span class='hs-layout'>)</span>
<a name="line-111"></a><span class='hs-definition'>globalPrefsDir</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>
<a name="line-112"></a>  <span class='hs-varid'>env</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>getEnvironment</span>
<a name="line-113"></a>  <span class='hs-keyword'>case</span> <span class='hs-varid'>lookup</span> <span class='hs-str'>"DARCS_TESTING_PREFS_DIR"</span> <span class='hs-varid'>env</span> <span class='hs-keyword'>of</span>
<a name="line-114"></a>    <span class='hs-conid'>Just</span> <span class='hs-varid'>d</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-conid'>Just</span> <span class='hs-varid'>d</span><span class='hs-layout'>)</span>
<a name="line-115"></a>    <span class='hs-conid'>Nothing</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-varid'>getAppUserDataDirectory</span> <span class='hs-str'>"darcs"</span> <span class='hs-varop'>&gt;&gt;=</span> <span class='hs-varid'>return</span><span class='hs-varop'>.</span><span class='hs-conid'>Just</span><span class='hs-layout'>)</span>
<a name="line-116"></a>               <span class='hs-varop'>`catchall`</span> <span class='hs-layout'>(</span><span class='hs-varid'>return</span> <span class='hs-conid'>Nothing</span><span class='hs-layout'>)</span>
<a name="line-117"></a>
<a name="line-118"></a><a name="environmentHelpHome"></a><span class='hs-definition'>environmentHelpHome</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>[</span><span class='hs-conid'>String</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>,</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>String</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>)</span>
<a name="line-119"></a><span class='hs-definition'>environmentHelpHome</span> <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>[</span><span class='hs-str'>"HOME"</span><span class='hs-layout'>,</span> <span class='hs-str'>"APPDATA"</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>,</span> <span class='hs-keyglyph'>[</span>
<a name="line-120"></a> <span class='hs-str'>"Per-user preferences are set in $HOME/.darcs (on Unix) or"</span><span class='hs-layout'>,</span>
<a name="line-121"></a> <span class='hs-str'>"%APPDATA%/darcs (on Windows).  This is also the default location of"</span><span class='hs-layout'>,</span>
<a name="line-122"></a> <span class='hs-str'>"the cache."</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>)</span>
<a name="line-123"></a>
<a name="line-124"></a><a name="getGlobal"></a><span class='hs-definition'>getGlobal</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>String</span><span class='hs-keyglyph'>]</span>
<a name="line-125"></a><span class='hs-definition'>getGlobal</span> <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>
<a name="line-126"></a>  <span class='hs-varid'>dir</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>globalPrefsDir</span>
<a name="line-127"></a>  <span class='hs-keyword'>case</span> <span class='hs-varid'>dir</span> <span class='hs-keyword'>of</span>
<a name="line-128"></a>    <span class='hs-layout'>(</span><span class='hs-conid'>Just</span> <span class='hs-varid'>d</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>getPreffile</span> <span class='hs-varop'>$</span> <span class='hs-varid'>d</span> <span class='hs-varop'>&lt;/&gt;</span> <span class='hs-varid'>f</span>
<a name="line-129"></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-130"></a>
<a name="line-131"></a><a name="globalCacheDir"></a><span class='hs-definition'>globalCacheDir</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>FilePath</span><span class='hs-layout'>)</span>
<a name="line-132"></a><span class='hs-definition'>globalCacheDir</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>slash_cache</span> <span class='hs-varop'>`fmap`</span> <span class='hs-varid'>globalPrefsDir</span>
<a name="line-133"></a>  <span class='hs-keyword'>where</span> <span class='hs-varid'>slash_cache</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>fmap</span> <span class='hs-layout'>(</span><span class='hs-varop'>&lt;/&gt;</span> <span class='hs-str'>"cache"</span><span class='hs-layout'>)</span>
<a name="line-134"></a>
<a name="line-135"></a><a name="boringRegexps"></a><span class='hs-definition'>boringRegexps</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IO</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Regex</span><span class='hs-keyglyph'>]</span>
<a name="line-136"></a><span class='hs-definition'>boringRegexps</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>
<a name="line-137"></a>    <span class='hs-varid'>borefile</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>defPrefval</span> <span class='hs-str'>"boringfile"</span> <span class='hs-layout'>(</span><span class='hs-varid'>darcsdir</span> <span class='hs-varop'>++</span> <span class='hs-str'>"/prefs/boring"</span><span class='hs-layout'>)</span>
<a name="line-138"></a>    <span class='hs-varid'>bores</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>getPrefLines</span> <span class='hs-varid'>borefile</span> <span class='hs-varop'>`catchall`</span> <span class='hs-varid'>return</span> <span class='hs-conid'>[]</span>
<a name="line-139"></a>    <span class='hs-varid'>gbs</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>getGlobal</span> <span class='hs-str'>"boring"</span>
<a name="line-140"></a>    <span class='hs-varid'>return</span> <span class='hs-varop'>$</span> <span class='hs-varid'>map</span> <span class='hs-varid'>mkRegex</span> <span class='hs-varop'>$</span> <span class='hs-varid'>bores</span> <span class='hs-varop'>++</span> <span class='hs-varid'>gbs</span>
<a name="line-141"></a>
<a name="line-142"></a><a name="boringFileFilter"></a><span class='hs-definition'>boringFileFilter</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>[</span><span class='hs-conid'>FilePath</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>FilePath</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>)</span>
<a name="line-143"></a><span class='hs-definition'>boringFileFilter</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>boringRegexps</span> <span class='hs-varop'>&gt;&gt;=</span> <span class='hs-varid'>return</span> <span class='hs-varop'>.</span> <span class='hs-varid'>actualBoringFileFilter</span>
<a name="line-144"></a>
<a name="line-145"></a><a name="noncomments"></a><span class='hs-definition'>noncomments</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>String</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>String</span><span class='hs-keyglyph'>]</span>
<a name="line-146"></a><span class='hs-definition'>noncomments</span> <span class='hs-varid'>ss</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>filter</span> <span class='hs-varid'>is_ok</span> <span class='hs-varid'>ss</span>
<a name="line-147"></a>                 <span class='hs-keyword'>where</span> <span class='hs-varid'>is_ok</span> <span class='hs-str'>""</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>False</span>
<a name="line-148"></a>                       <span class='hs-varid'>is_ok</span> <span class='hs-layout'>(</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'>False</span>
<a name="line-149"></a>                       <span class='hs-varid'>is_ok</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>True</span>
<a name="line-150"></a>
<a name="line-151"></a><a name="getPrefLines"></a><span class='hs-definition'>getPrefLines</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>ReadableDirectory</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>FilePath</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>String</span><span class='hs-keyglyph'>]</span>
<a name="line-152"></a><span class='hs-definition'>getPrefLines</span> <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-varid'>notconflicts</span> <span class='hs-varop'>.</span> <span class='hs-varid'>noncomments</span> <span class='hs-varop'>.</span> <span class='hs-varid'>map</span> <span class='hs-varid'>stripCr</span> <span class='hs-varop'>.</span> <span class='hs-varid'>lines</span><span class='hs-layout'>)</span>
<a name="line-153"></a>              <span class='hs-varop'>`fmap`</span> <span class='hs-varid'>mReadBinFile</span> <span class='hs-layout'>(</span><span class='hs-varid'>fp2fn</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span>
<a name="line-154"></a>    <span class='hs-keyword'>where</span> <span class='hs-varid'>notconflicts</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>filter</span> <span class='hs-varid'>nc</span>
<a name="line-155"></a>          <span class='hs-varid'>startswith</span> <span class='hs-conid'>[]</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>True</span>
<a name="line-156"></a>          <span class='hs-varid'>startswith</span> <span class='hs-layout'>(</span><span class='hs-varid'>x</span><span class='hs-conop'>:</span><span class='hs-varid'>xs</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>y</span><span class='hs-conop'>:</span><span class='hs-varid'>ys</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>x</span> <span class='hs-varop'>==</span> <span class='hs-varid'>y</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>startswith</span> <span class='hs-varid'>xs</span> <span class='hs-varid'>ys</span>
<a name="line-157"></a>          <span class='hs-varid'>startswith</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>False</span>
<a name="line-158"></a>          <span class='hs-varid'>nc</span> <span class='hs-varid'>l</span> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>startswith</span> <span class='hs-str'>"v v v v v v v"</span> <span class='hs-varid'>l</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>False</span>
<a name="line-159"></a>          <span class='hs-varid'>nc</span> <span class='hs-varid'>l</span> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>startswith</span> <span class='hs-str'>"*************"</span> <span class='hs-varid'>l</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>False</span>
<a name="line-160"></a>          <span class='hs-varid'>nc</span> <span class='hs-varid'>l</span> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>startswith</span> <span class='hs-str'>"^ ^ ^ ^ ^ ^ ^"</span> <span class='hs-varid'>l</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>False</span>
<a name="line-161"></a>          <span class='hs-varid'>nc</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>True</span>
<a name="line-162"></a>
<a name="line-163"></a><a name="actualBoringFileFilter"></a><span class='hs-comment'>-- | From a list of paths, filter out any that are within @_darcs@ or</span>
<a name="line-164"></a><span class='hs-comment'>-- match a boring regexp.</span>
<a name="line-165"></a><span class='hs-definition'>actualBoringFileFilter</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Regex</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>FilePath</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>FilePath</span><span class='hs-keyglyph'>]</span>
<a name="line-166"></a><span class='hs-definition'>actualBoringFileFilter</span> <span class='hs-varid'>regexps</span> <span class='hs-varid'>files</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>filter</span> <span class='hs-layout'>(</span><span class='hs-varid'>not</span> <span class='hs-varop'>.</span> <span class='hs-varid'>boring</span> <span class='hs-varop'>.</span> <span class='hs-varid'>normalize</span><span class='hs-layout'>)</span> <span class='hs-varid'>files</span>
<a name="line-167"></a>    <span class='hs-keyword'>where</span> <span class='hs-varid'>boring</span> <span class='hs-varid'>file</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>isDarcsdir</span> <span class='hs-varid'>file</span> <span class='hs-varop'>||</span>
<a name="line-168"></a>                        <span class='hs-varid'>any</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>regexp</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>isJust</span> <span class='hs-varop'>$</span> <span class='hs-varid'>matchRegex</span> <span class='hs-varid'>regexp</span> <span class='hs-varid'>file</span><span class='hs-layout'>)</span> <span class='hs-varid'>regexps</span>
<a name="line-169"></a>
<a name="line-170"></a><a name="normalize"></a><span class='hs-definition'>normalize</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>FilePath</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>FilePath</span>
<a name="line-171"></a><span class='hs-definition'>normalize</span> <span class='hs-layout'>(</span><span class='hs-chr'>'.'</span><span class='hs-conop'>:</span><span class='hs-chr'>'/'</span><span class='hs-conop'>:</span><span class='hs-varid'>f</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>normalize</span> <span class='hs-varid'>f</span>
<a name="line-172"></a><span class='hs-definition'>normalize</span> <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>normalize_helper</span> <span class='hs-varop'>$</span> <span class='hs-varid'>reverse</span> <span class='hs-varid'>f</span>
<a name="line-173"></a>              <span class='hs-keyword'>where</span>
<a name="line-174"></a>              <span class='hs-varid'>normalize_helper</span> <span class='hs-layout'>(</span><span class='hs-chr'>'/'</span><span class='hs-conop'>:</span><span class='hs-varid'>rf</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>normalize_helper</span> <span class='hs-varid'>rf</span>
<a name="line-175"></a>              <span class='hs-varid'>normalize_helper</span> <span class='hs-varid'>rf</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>reverse</span> <span class='hs-varid'>rf</span>
</pre>\end{code}

\paragraph{binaries}
The \verb!_darcs/prefs/binaries! file may contain a list of regular
expressions describing files that should be treated as binary files rather
than text files. Darcs automatically treats files containing
\verb!^Z\! or \verb!'\0'! within the first 4096 bytes as being binary files.
You probably will want to have the binaries file under
version control.  To do this you can use darcs setpref to set the value
``binariesfile'' to the name of your desired binaries file
(e.g.\ \verb'darcs setpref binariesfile ./.binaries', where
\verb'.binaries' is a file that has been
darcs added to your repository).  As with the boring file, you can also set
up a \verb!~/.darcs/binaries! file if you like, on MS Windows~\ref{ms_win}.

\begin{code}
<pre><a name="line-1"></a><a name="FileType"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>FileType</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>BinaryFile</span> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>TextFile</span>
<a name="line-2"></a>                <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-3"></a>
<a name="line-4"></a><a name="defaultBinaries"></a><span class='hs-comment'>{-# NOINLINE defaultBinaries #-}</span>
<a name="line-5"></a><span class='hs-comment'>-- | The lines that will be inserted into @_darcs/prefs/binaries@ when</span>
<a name="line-6"></a><span class='hs-comment'>-- @darcs init@ is run.  Hence, a list of comments, blank lines and</span>
<a name="line-7"></a><span class='hs-comment'>-- regular expressions (ERE dialect).</span>
<a name="line-8"></a><span class='hs-comment'>--</span>
<a name="line-9"></a><span class='hs-comment'>-- Note that while this matches .gz and .GZ, it will not match .gZ,</span>
<a name="line-10"></a><span class='hs-comment'>-- i.e. it is not truly case insensitive.</span>
<a name="line-11"></a><span class='hs-definition'>defaultBinaries</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>String</span><span class='hs-keyglyph'>]</span>
<a name="line-12"></a><span class='hs-definition'>defaultBinaries</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>help</span> <span class='hs-varop'>++</span>
<a name="line-13"></a>                   <span class='hs-keyglyph'>[</span><span class='hs-str'>"\\.("</span> <span class='hs-varop'>++</span> <span class='hs-varid'>e</span> <span class='hs-varop'>++</span> <span class='hs-str'>"|"</span> <span class='hs-varop'>++</span> <span class='hs-varid'>map</span> <span class='hs-varid'>toUpper</span> <span class='hs-varid'>e</span> <span class='hs-varop'>++</span> <span class='hs-str'>")$"</span> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>extensions</span> <span class='hs-keyglyph'>]</span>
<a name="line-14"></a>    <span class='hs-keyword'>where</span> <span class='hs-varid'>extensions</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyglyph'>[</span><span class='hs-str'>"a"</span><span class='hs-layout'>,</span><span class='hs-str'>"bmp"</span><span class='hs-layout'>,</span><span class='hs-str'>"bz2"</span><span class='hs-layout'>,</span><span class='hs-str'>"doc"</span><span class='hs-layout'>,</span><span class='hs-str'>"elc"</span><span class='hs-layout'>,</span><span class='hs-str'>"exe"</span><span class='hs-layout'>,</span><span class='hs-str'>"gif"</span><span class='hs-layout'>,</span><span class='hs-str'>"gz"</span><span class='hs-layout'>,</span><span class='hs-str'>"iso"</span><span class='hs-layout'>,</span>
<a name="line-15"></a>                        <span class='hs-str'>"jar"</span><span class='hs-layout'>,</span><span class='hs-str'>"jpe?g"</span><span class='hs-layout'>,</span><span class='hs-str'>"mng"</span><span class='hs-layout'>,</span><span class='hs-str'>"mpe?g"</span><span class='hs-layout'>,</span><span class='hs-str'>"p[nbgp]m"</span><span class='hs-layout'>,</span><span class='hs-str'>"pdf"</span><span class='hs-layout'>,</span><span class='hs-str'>"png"</span><span class='hs-layout'>,</span>
<a name="line-16"></a>                        <span class='hs-str'>"pyc"</span><span class='hs-layout'>,</span><span class='hs-str'>"so"</span><span class='hs-layout'>,</span><span class='hs-str'>"tar"</span><span class='hs-layout'>,</span><span class='hs-str'>"tgz"</span><span class='hs-layout'>,</span><span class='hs-str'>"tiff?"</span><span class='hs-layout'>,</span><span class='hs-str'>"z"</span><span class='hs-layout'>,</span><span class='hs-str'>"zip"</span><span class='hs-keyglyph'>]</span>
<a name="line-17"></a>          <span class='hs-varid'>help</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>map</span> <span class='hs-layout'>(</span><span class='hs-str'>"# "</span><span class='hs-varop'>++</span><span class='hs-layout'>)</span> <span class='hs-varid'>binariesFileHelp</span>
<a name="line-18"></a>
<a name="line-19"></a><a name="binariesFileHelp"></a><span class='hs-definition'>binariesFileHelp</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>String</span><span class='hs-keyglyph'>]</span>
<a name="line-20"></a><span class='hs-definition'>binariesFileHelp</span> <span class='hs-keyglyph'>=</span>
<a name="line-21"></a>  <span class='hs-keyglyph'>[</span><span class='hs-str'>"This file contains a list of extended regular expressions, one per"</span><span class='hs-layout'>,</span>
<a name="line-22"></a>   <span class='hs-str'>"line.  A file path matching any of these expressions is assumed to"</span><span class='hs-layout'>,</span>
<a name="line-23"></a>   <span class='hs-str'>"contain binary data (not text).  The entries in ~/.darcs/binaries (if"</span><span class='hs-layout'>,</span>
<a name="line-24"></a>   <span class='hs-str'>"it exists) supplement those in this file."</span><span class='hs-layout'>,</span>
<a name="line-25"></a>   <span class='hs-str'>""</span><span class='hs-layout'>,</span>
<a name="line-26"></a>   <span class='hs-str'>"Blank lines, and lines beginning with an octothorpe (#) are ignored."</span><span class='hs-layout'>,</span>
<a name="line-27"></a>   <span class='hs-str'>"See regex(7) for a description of extended regular expressions."</span><span class='hs-keyglyph'>]</span>
<a name="line-28"></a>
<a name="line-29"></a><a name="filetypeFunction"></a><span class='hs-definition'>filetypeFunction</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>FilePath</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>FileType</span><span class='hs-layout'>)</span>
<a name="line-30"></a><span class='hs-definition'>filetypeFunction</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>
<a name="line-31"></a>    <span class='hs-varid'>binsfile</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>defPrefval</span> <span class='hs-str'>"binariesfile"</span> <span class='hs-layout'>(</span><span class='hs-varid'>darcsdir</span> <span class='hs-varop'>++</span> <span class='hs-str'>"/prefs/binaries"</span><span class='hs-layout'>)</span>
<a name="line-32"></a>    <span class='hs-varid'>bins</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>getPrefLines</span> <span class='hs-varid'>binsfile</span> <span class='hs-varop'>`catch`</span>
<a name="line-33"></a>             <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>e</span><span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyword'>if</span> <span class='hs-varid'>isDoesNotExistError</span> <span class='hs-varid'>e</span> <span class='hs-keyword'>then</span> <span class='hs-varid'>return</span> <span class='hs-conid'>[]</span> <span class='hs-keyword'>else</span> <span class='hs-varid'>ioError</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span>
<a name="line-34"></a>    <span class='hs-varid'>gbs</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>getGlobal</span> <span class='hs-str'>"binaries"</span>
<a name="line-35"></a>    <span class='hs-varid'>regexes</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-varid'>map</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>r</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>mkRegex</span> <span class='hs-varid'>r</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>bins</span> <span class='hs-varop'>++</span> <span class='hs-varid'>gbs</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-36"></a>    <span class='hs-keyword'>let</span> <span class='hs-varid'>isbin</span> <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>or</span> <span class='hs-varop'>$</span> <span class='hs-varid'>map</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>r</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>isJust</span> <span class='hs-varop'>$</span> <span class='hs-varid'>matchRegex</span> <span class='hs-varid'>r</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span> <span class='hs-varid'>regexes</span>
<a name="line-37"></a>        <span class='hs-varid'>ftf</span> <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>if</span> <span class='hs-varid'>isbin</span> <span class='hs-varop'>$</span> <span class='hs-varid'>normalize</span> <span class='hs-varid'>f</span> <span class='hs-keyword'>then</span> <span class='hs-conid'>BinaryFile</span> <span class='hs-keyword'>else</span> <span class='hs-conid'>TextFile</span>
<a name="line-38"></a>        <span class='hs-keyword'>in</span>
<a name="line-39"></a>        <span class='hs-varid'>return</span> <span class='hs-varid'>ftf</span>
<a name="line-40"></a>
<a name="line-41"></a><a name="prefsDirectory"></a><span class='hs-comment'>-- this avoids a circular dependency with Repository</span>
<a name="line-42"></a><span class='hs-definition'>prefsDirectory</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>ReadableDirectory</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-varid'>m</span> <span class='hs-conid'>String</span>
<a name="line-43"></a><span class='hs-definition'>prefsDirectory</span> <span class='hs-keyglyph'>=</span>
<a name="line-44"></a>    <span class='hs-keyword'>do</span> <span class='hs-varid'>darcs</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>mDoesDirectoryExist</span> <span class='hs-varop'>$</span> <span class='hs-varid'>fp2fn</span> <span class='hs-varid'>darcsdir</span>
<a name="line-45"></a>       <span class='hs-keyword'>if</span> <span class='hs-varid'>darcs</span>
<a name="line-46"></a>          <span class='hs-keyword'>then</span> <span class='hs-varid'>return</span> <span class='hs-varop'>$</span> <span class='hs-varid'>darcsdir</span> <span class='hs-varop'>++</span> <span class='hs-str'>"/prefs/"</span>
<a name="line-47"></a>          <span class='hs-keyword'>else</span> <span class='hs-varid'>fail</span> <span class='hs-varop'>$</span> <span class='hs-str'>"Directory "</span> <span class='hs-varop'>++</span> <span class='hs-varid'>darcsdir</span> <span class='hs-varop'>++</span> <span class='hs-str'>"/ does not exist!"</span>
<a name="line-48"></a>
<a name="line-49"></a><a name="withPrefsDirectory"></a><span class='hs-definition'>withPrefsDirectory</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>ReadableDirectory</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-layout'>(</span><span class='hs-conid'>String</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-conid'>()</span>
<a name="line-50"></a><span class='hs-definition'>withPrefsDirectory</span> <span class='hs-varid'>j</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span> <span class='hs-varid'>prefs</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>prefsDirectory</span> <span class='hs-varop'>`mplus`</span> <span class='hs-varid'>return</span> <span class='hs-str'>"x"</span>
<a name="line-51"></a>                          <span class='hs-varid'>when</span> <span class='hs-layout'>(</span><span class='hs-varid'>prefs</span> <span class='hs-varop'>/=</span> <span class='hs-str'>"x"</span><span class='hs-layout'>)</span> <span class='hs-varop'>$</span> <span class='hs-varid'>j</span> <span class='hs-varid'>prefs</span>
<a name="line-52"></a>
<a name="line-53"></a><a name="addToPreflist"></a><span class='hs-definition'>addToPreflist</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>WriteableDirectory</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-conid'>()</span>
<a name="line-54"></a><span class='hs-definition'>addToPreflist</span> <span class='hs-varid'>p</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>withPrefsDirectory</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>prefs</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyword'>do</span>
<a name="line-55"></a>  <span class='hs-varid'>hasprefs</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>mDoesDirectoryExist</span> <span class='hs-varop'>$</span> <span class='hs-varid'>fp2fn</span> <span class='hs-varid'>prefs</span>
<a name="line-56"></a>  <span class='hs-varid'>unless</span> <span class='hs-varid'>hasprefs</span> <span class='hs-varop'>$</span> <span class='hs-varid'>mCreateDirectory</span> <span class='hs-varop'>$</span> <span class='hs-varid'>fp2fn</span> <span class='hs-varid'>prefs</span>
<a name="line-57"></a>  <span class='hs-varid'>pl</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>getPreflist</span> <span class='hs-varid'>p</span>
<a name="line-58"></a>  <span class='hs-varid'>mWriteBinFile</span> <span class='hs-layout'>(</span><span class='hs-varid'>fp2fn</span> <span class='hs-varop'>$</span> <span class='hs-varid'>prefs</span> <span class='hs-varop'>++</span> <span class='hs-varid'>p</span><span class='hs-layout'>)</span> <span class='hs-varop'>$</span> <span class='hs-varid'>unlines</span> <span class='hs-varop'>$</span> <span class='hs-varid'>union</span> <span class='hs-keyglyph'>[</span><span class='hs-varid'>s</span><span class='hs-keyglyph'>]</span> <span class='hs-varid'>pl</span>
<a name="line-59"></a>
<a name="line-60"></a><a name="getPreflist"></a><span class='hs-definition'>getPreflist</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>ReadableDirectory</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>String</span><span class='hs-keyglyph'>]</span>
<a name="line-61"></a><span class='hs-definition'>getPreflist</span> <span class='hs-varid'>p</span> <span class='hs-keyglyph'>=</span>  <span class='hs-keyword'>do</span> <span class='hs-varid'>prefs</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>prefsDirectory</span> <span class='hs-varop'>`mplus`</span> <span class='hs-varid'>return</span> <span class='hs-str'>"x"</span>
<a name="line-62"></a>                    <span class='hs-keyword'>if</span> <span class='hs-layout'>(</span><span class='hs-varid'>prefs</span> <span class='hs-varop'>/=</span> <span class='hs-str'>"x"</span><span class='hs-layout'>)</span> <span class='hs-keyword'>then</span> <span class='hs-varid'>getPreffile</span> <span class='hs-varop'>$</span> <span class='hs-varid'>prefs</span> <span class='hs-varop'>++</span> <span class='hs-varid'>p</span>
<a name="line-63"></a>                                      <span class='hs-keyword'>else</span> <span class='hs-varid'>return</span> <span class='hs-conid'>[]</span>
<a name="line-64"></a>
<a name="line-65"></a><a name="getPreffile"></a><span class='hs-definition'>getPreffile</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>ReadableDirectory</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>FilePath</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>String</span><span class='hs-keyglyph'>]</span>
<a name="line-66"></a><span class='hs-definition'>getPreffile</span> <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>
<a name="line-67"></a>  <span class='hs-varid'>hasprefs</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>mDoesFileExist</span> <span class='hs-layout'>(</span><span class='hs-varid'>fp2fn</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span>
<a name="line-68"></a>  <span class='hs-keyword'>if</span> <span class='hs-varid'>hasprefs</span>
<a name="line-69"></a>    <span class='hs-keyword'>then</span> <span class='hs-varid'>getPrefLines</span> <span class='hs-varid'>f</span>
<a name="line-70"></a>    <span class='hs-keyword'>else</span> <span class='hs-varid'>return</span> <span class='hs-conid'>[]</span>
<a name="line-71"></a>
<a name="line-72"></a><a name="setPreflist"></a><span class='hs-definition'>setPreflist</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>WriteableDirectory</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>String</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-conid'>()</span>
<a name="line-73"></a><span class='hs-definition'>setPreflist</span> <span class='hs-varid'>p</span> <span class='hs-varid'>ls</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>withPrefsDirectory</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>prefs</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyword'>do</span>
<a name="line-74"></a>  <span class='hs-varid'>haspref</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>mDoesDirectoryExist</span> <span class='hs-varop'>$</span> <span class='hs-varid'>fp2fn</span> <span class='hs-varid'>prefs</span>
<a name="line-75"></a>  <span class='hs-keyword'>if</span> <span class='hs-varid'>haspref</span>
<a name="line-76"></a>     <span class='hs-keyword'>then</span> <span class='hs-varid'>mWriteBinFile</span> <span class='hs-layout'>(</span><span class='hs-varid'>fp2fn</span> <span class='hs-varop'>$</span> <span class='hs-varid'>prefs</span> <span class='hs-varop'>++</span> <span class='hs-varid'>p</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>unlines</span> <span class='hs-varid'>ls</span><span class='hs-layout'>)</span>
<a name="line-77"></a>     <span class='hs-keyword'>else</span> <span class='hs-varid'>return</span> <span class='hs-conid'>()</span>
<a name="line-78"></a>
<a name="line-79"></a><a name="defPrefval"></a><span class='hs-definition'>defPrefval</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>String</span>
<a name="line-80"></a><span class='hs-definition'>defPrefval</span> <span class='hs-varid'>p</span> <span class='hs-varid'>d</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>
<a name="line-81"></a>  <span class='hs-varid'>pv</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>getPrefval</span> <span class='hs-varid'>p</span>
<a name="line-82"></a>  <span class='hs-keyword'>case</span> <span class='hs-varid'>pv</span> <span class='hs-keyword'>of</span> <span class='hs-conid'>Nothing</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>return</span> <span class='hs-varid'>d</span>
<a name="line-83"></a>             <span class='hs-conid'>Just</span> <span class='hs-varid'>v</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>return</span> <span class='hs-varid'>v</span>
<a name="line-84"></a>
<a name="line-85"></a><a name="getPrefval"></a><span class='hs-definition'>getPrefval</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>ReadableDirectory</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</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-86"></a><span class='hs-definition'>getPrefval</span> <span class='hs-varid'>p</span> <span class='hs-keyglyph'>=</span>
<a name="line-87"></a>    <span class='hs-keyword'>do</span> <span class='hs-varid'>pl</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>getPreflist</span> <span class='hs-str'>"prefs"</span>
<a name="line-88"></a>       <span class='hs-keyword'>case</span> <span class='hs-varid'>map</span> <span class='hs-varid'>snd</span> <span class='hs-varop'>$</span> <span class='hs-varid'>filter</span> <span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-varop'>==</span><span class='hs-varid'>p</span><span class='hs-layout'>)</span><span class='hs-varop'>.</span><span class='hs-varid'>fst</span><span class='hs-layout'>)</span> <span class='hs-varop'>$</span> <span class='hs-varid'>map</span> <span class='hs-layout'>(</span><span class='hs-varid'>break</span> <span class='hs-layout'>(</span><span class='hs-varop'>==</span><span class='hs-chr'>' '</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-varid'>pl</span> <span class='hs-keyword'>of</span>
<a name="line-89"></a>           <span class='hs-keyglyph'>[</span><span class='hs-varid'>val</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyword'>case</span> <span class='hs-varid'>words</span> <span class='hs-varid'>val</span> <span class='hs-keyword'>of</span>
<a name="line-90"></a>               <span class='hs-conid'>[]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>return</span> <span class='hs-conid'>Nothing</span>
<a name="line-91"></a>               <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>return</span> <span class='hs-varop'>$</span> <span class='hs-conid'>Just</span> <span class='hs-varop'>$</span> <span class='hs-varid'>tail</span> <span class='hs-varid'>val</span>
<a name="line-92"></a>           <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>return</span> <span class='hs-conid'>Nothing</span>
<a name="line-93"></a>
<a name="line-94"></a><a name="setPrefval"></a><span class='hs-definition'>setPrefval</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>WriteableDirectory</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-conid'>()</span>
<a name="line-95"></a><span class='hs-definition'>setPrefval</span> <span class='hs-varid'>p</span> <span class='hs-varid'>v</span> <span class='hs-keyglyph'>=</span>  <span class='hs-keyword'>do</span> <span class='hs-varid'>pl</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>getPreflist</span> <span class='hs-str'>"prefs"</span>
<a name="line-96"></a>                     <span class='hs-varid'>setPreflist</span> <span class='hs-str'>"prefs"</span> <span class='hs-varop'>$</span>
<a name="line-97"></a>                       <span class='hs-varid'>filter</span> <span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-varop'>/=</span><span class='hs-varid'>p</span><span class='hs-layout'>)</span><span class='hs-varop'>.</span><span class='hs-varid'>fst</span><span class='hs-varop'>.</span><span class='hs-layout'>(</span><span class='hs-varid'>break</span> <span class='hs-layout'>(</span><span class='hs-varop'>==</span><span class='hs-chr'>' '</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-varid'>pl</span> <span class='hs-varop'>++</span> <span class='hs-keyglyph'>[</span><span class='hs-varid'>p</span><span class='hs-varop'>++</span><span class='hs-str'>" "</span><span class='hs-varop'>++</span><span class='hs-varid'>v</span><span class='hs-keyglyph'>]</span>
<a name="line-98"></a>
<a name="line-99"></a><a name="changePrefval"></a><span class='hs-definition'>changePrefval</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>WriteableDirectory</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-conid'>()</span>
<a name="line-100"></a><span class='hs-definition'>changePrefval</span> <span class='hs-varid'>p</span> <span class='hs-varid'>f</span> <span class='hs-varid'>t</span> <span class='hs-keyglyph'>=</span>
<a name="line-101"></a>    <span class='hs-keyword'>do</span> <span class='hs-varid'>pl</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>getPreflist</span> <span class='hs-str'>"prefs"</span>
<a name="line-102"></a>       <span class='hs-varid'>ov</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>getPrefval</span> <span class='hs-varid'>p</span>
<a name="line-103"></a>       <span class='hs-varid'>newval</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-keyword'>case</span> <span class='hs-varid'>ov</span> <span class='hs-keyword'>of</span>
<a name="line-104"></a>                 <span class='hs-conid'>Nothing</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>return</span> <span class='hs-varid'>t</span>
<a name="line-105"></a>                 <span class='hs-conid'>Just</span> <span class='hs-varid'>old</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyword'>if</span> <span class='hs-varid'>old</span> <span class='hs-varop'>==</span> <span class='hs-varid'>f</span> <span class='hs-keyword'>then</span> <span class='hs-varid'>return</span> <span class='hs-varid'>t</span> <span class='hs-keyword'>else</span> <span class='hs-varid'>return</span> <span class='hs-varid'>old</span>
<a name="line-106"></a>       <span class='hs-varid'>setPreflist</span> <span class='hs-str'>"prefs"</span> <span class='hs-varop'>$</span>
<a name="line-107"></a>                    <span class='hs-varid'>filter</span> <span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-varop'>/=</span><span class='hs-varid'>p</span><span class='hs-layout'>)</span><span class='hs-varop'>.</span><span class='hs-varid'>fst</span><span class='hs-varop'>.</span><span class='hs-layout'>(</span><span class='hs-varid'>break</span><span class='hs-layout'>(</span><span class='hs-varop'>==</span><span class='hs-chr'>' '</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-varid'>pl</span> <span class='hs-varop'>++</span> <span class='hs-keyglyph'>[</span><span class='hs-varid'>p</span><span class='hs-varop'>++</span><span class='hs-str'>" "</span><span class='hs-varop'>++</span><span class='hs-varid'>newval</span><span class='hs-keyglyph'>]</span>
<a name="line-108"></a>
<a name="line-109"></a><a name="defaultrepo"></a><span class='hs-definition'>defaultrepo</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>DarcsFlag</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>AbsolutePath</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>String</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>String</span><span class='hs-keyglyph'>]</span>
<a name="line-110"></a><span class='hs-definition'>defaultrepo</span> <span class='hs-varid'>opts</span> <span class='hs-keyword'>_</span> <span class='hs-conid'>[]</span> <span class='hs-keyglyph'>=</span>
<a name="line-111"></a>  <span class='hs-keyword'>do</span> <span class='hs-keyword'>let</span> <span class='hs-varid'>fixR</span> <span class='hs-varid'>r</span> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>not</span> <span class='hs-layout'>(</span><span class='hs-varid'>is_file</span> <span class='hs-varid'>r</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>return</span> <span class='hs-varid'>r</span>
<a name="line-112"></a>                <span class='hs-keyglyph'>|</span> <span class='hs-varid'>otherwise</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span> <span class='hs-varid'>absr</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>ioAbsolute</span> <span class='hs-varid'>r</span>
<a name="line-113"></a>                                 <span class='hs-varid'>return</span> <span class='hs-varop'>$</span> <span class='hs-varid'>toFilePath</span> <span class='hs-varid'>absr</span>
<a name="line-114"></a>     <span class='hs-keyword'>case</span> <span class='hs-keyglyph'>[</span><span class='hs-varid'>r</span> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>RemoteRepo</span> <span class='hs-varid'>r</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>opts</span><span class='hs-keyglyph'>]</span> <span class='hs-keyword'>of</span>
<a name="line-115"></a>       <span class='hs-conid'>[]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyword'>do</span> <span class='hs-varid'>defrepo</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>getPreflist</span> <span class='hs-str'>"defaultrepo"</span>
<a name="line-116"></a>                <span class='hs-keyword'>case</span> <span class='hs-varid'>defrepo</span> <span class='hs-keyword'>of</span>
<a name="line-117"></a>                  <span class='hs-keyglyph'>[</span><span class='hs-varid'>r</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</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'>`fmap`</span> <span class='hs-varid'>fixR</span> <span class='hs-varid'>r</span>
<a name="line-118"></a>                  <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>return</span> <span class='hs-conid'>[]</span>
<a name="line-119"></a>       <span class='hs-varid'>rs</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>mapM</span> <span class='hs-varid'>fixR</span> <span class='hs-varid'>rs</span>
<a name="line-120"></a><span class='hs-definition'>defaultrepo</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-varid'>r</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>return</span> <span class='hs-varid'>r</span>
<a name="line-121"></a>
<a name="line-122"></a><a name="setDefaultrepo"></a><span class='hs-definition'>setDefaultrepo</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>DarcsFlag</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-123"></a><span class='hs-definition'>setDefaultrepo</span> <span class='hs-varid'>r</span> <span class='hs-varid'>opts</span> <span class='hs-keyglyph'>=</span>  <span class='hs-keyword'>do</span> <span class='hs-varid'>doit</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-keyword'>if</span> <span class='hs-layout'>(</span><span class='hs-conid'>NoSetDefault</span> <span class='hs-varop'>`notElem`</span> <span class='hs-varid'>opts</span> <span class='hs-varop'>&amp;&amp;</span> <span class='hs-conid'>DryRun</span> <span class='hs-varop'>`notElem`</span> <span class='hs-varid'>opts</span> <span class='hs-varop'>&amp;&amp;</span> <span class='hs-varid'>r_is_not_tmp</span><span class='hs-layout'>)</span>
<a name="line-124"></a>                                    <span class='hs-keyword'>then</span> <span class='hs-varid'>return</span> <span class='hs-conid'>True</span>
<a name="line-125"></a>                                    <span class='hs-keyword'>else</span> <span class='hs-keyword'>do</span> <span class='hs-varid'>olddef</span> <span class='hs-keyglyph'>&lt;-</span>
<a name="line-126"></a>                                                <span class='hs-varid'>getPreflist</span> <span class='hs-str'>"defaultrepo"</span>
<a name="line-127"></a>                                            <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-varid'>olddef</span> <span class='hs-varop'>==</span> <span class='hs-conid'>[]</span><span class='hs-layout'>)</span>
<a name="line-128"></a>                            <span class='hs-varid'>when</span> <span class='hs-varid'>doit</span>
<a name="line-129"></a>                                <span class='hs-layout'>(</span><span class='hs-varid'>setPreflist</span> <span class='hs-str'>"defaultrepo"</span> <span class='hs-keyglyph'>[</span><span class='hs-varid'>r</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>)</span>
<a name="line-130"></a>                            <span class='hs-varid'>addToPreflist</span> <span class='hs-str'>"repos"</span> <span class='hs-varid'>r</span>
<a name="line-131"></a>                         <span class='hs-varop'>`catchall`</span> <span class='hs-varid'>return</span> <span class='hs-conid'>()</span> <span class='hs-comment'>-- we don't care if this fails!</span>
<a name="line-132"></a> <span class='hs-keyword'>where</span>
<a name="line-133"></a>  <span class='hs-varid'>r_is_not_tmp</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>not</span> <span class='hs-varop'>$</span> <span class='hs-varid'>r</span> <span class='hs-varop'>`elem`</span> <span class='hs-keyglyph'>[</span><span class='hs-varid'>x</span> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>RemoteRepo</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>opts</span><span class='hs-keyglyph'>]</span>
</pre>\end{code}

\paragraph{email}
The \verb!_darcs/prefs/email! file is used to provide the e-mail address for your
repository that others will use when they \verb!darcs send! a patch back to you.
The contents of the file should simply be an e-mail address.


\paragraph{sources}
The \verb!_darcs/prefs/sources! file is used to indicate alternative
locations from which to download patches when using a ``hashed''
repository.  This file contains lines such as:
\begin{verbatim}
cache:/home/droundy/.darcs/cache
readonly:/home/otheruser/.darcs/cache
repo:http://darcs.net
\end{verbatim}
This would indicate that darcs should first look in
\verb!/home/droundy/.darcs/cache! for patches that might be missing, and if
the patch isn't there, it should save a copy there for future use.  In that
case, darcs will look in \verb!/home/otheruser/.darcs/cache! to see if that
user might have downloaded a copy, but won't try to save a copy there, of
course.  Finally, it will look in \verb!http://darcs.net!.  Note that the
\verb!sources! file can also exist in \verb!~/.darcs/!.  Also note that the
sources mentioned in your \verb!sources! file will be tried \emph{before}
the repository you are pulling from.  This can be useful in avoiding
downloading patches multiple times when you pull from a remote repository
to more than one local repository.

We strongly advise that you enable a global cache directory, which will
allow darcs to avoid re-downloading patches (for example, when doing a
second darcs get of the same repository), and also allows darcs to use hard
links to reduce disk usage.  To do this, simply
\begin{verbatim}
mkdir -p $HOME/.darcs/cache
echo cache:$HOME/.darcs/cache > $HOME/.darcs/sources
\end{verbatim}
Note that the cache directory should reside on the same filesystem as your
repositories, so you may need to vary this.  You can also use multiple
cache directories on different filesystems, if you have several filesystems
on which you use darcs.

On MS Windows~\ref{ms_win})

\begin{code}
<pre><a name="line-1"></a><a name="getCaches"></a><span class='hs-definition'>getCaches</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'>String</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>Cache</span>
<a name="line-2"></a><span class='hs-definition'>getCaches</span> <span class='hs-varid'>opts</span> <span class='hs-varid'>repodir</span> <span class='hs-keyglyph'>=</span>
<a name="line-3"></a>    <span class='hs-keyword'>do</span> <span class='hs-varid'>here</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>parsehs</span> <span class='hs-varop'>`fmap`</span> <span class='hs-varid'>getPreffile</span> <span class='hs-layout'>(</span><span class='hs-varid'>darcsdir</span> <span class='hs-varop'>++</span> <span class='hs-str'>"/prefs/sources"</span><span class='hs-layout'>)</span>
<a name="line-4"></a>       <span class='hs-varid'>there</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-layout'>(</span><span class='hs-varid'>parsehs</span> <span class='hs-varop'>.</span> <span class='hs-varid'>lines</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-5"></a>                <span class='hs-layout'>(</span><span class='hs-varid'>gzFetchFilePS</span> <span class='hs-layout'>(</span><span class='hs-varid'>repodir</span> <span class='hs-varop'>++</span> <span class='hs-str'>"/"</span> <span class='hs-varop'>++</span> <span class='hs-varid'>darcsdir</span> <span class='hs-varop'>++</span> <span class='hs-str'>"/prefs/sources"</span><span class='hs-layout'>)</span> <span class='hs-conid'>Cachable</span>
<a name="line-6"></a>                 <span class='hs-varop'>`catchall`</span> <span class='hs-varid'>return</span> <span class='hs-conid'>B</span><span class='hs-varop'>.</span><span class='hs-varid'>empty</span><span class='hs-layout'>)</span>
<a name="line-7"></a>       <span class='hs-varid'>globalcachedir</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>globalCacheDir</span>
<a name="line-8"></a>       <span class='hs-keyword'>let</span> <span class='hs-varid'>globalcache</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>case</span> <span class='hs-layout'>(</span><span class='hs-varid'>nocache</span><span class='hs-layout'>,</span><span class='hs-varid'>globalcachedir</span><span class='hs-layout'>)</span> <span class='hs-keyword'>of</span>
<a name="line-9"></a>                           <span class='hs-layout'>(</span><span class='hs-conid'>True</span><span class='hs-layout'>,</span><span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>[]</span>
<a name="line-10"></a>                           <span class='hs-layout'>(</span><span class='hs-keyword'>_</span><span class='hs-layout'>,</span><span class='hs-conid'>Just</span> <span class='hs-varid'>d</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Cache</span> <span class='hs-conid'>Directory</span> <span class='hs-conid'>Writable</span> <span class='hs-varid'>d</span><span class='hs-keyglyph'>]</span>
<a name="line-11"></a>                           <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>[]</span>
<a name="line-12"></a>       <span class='hs-varid'>globalsources</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>parsehs</span> <span class='hs-varop'>`fmap`</span> <span class='hs-varid'>getGlobal</span> <span class='hs-str'>"sources"</span>
<a name="line-13"></a>       <span class='hs-varid'>thisdir</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>getCurrentDirectory</span>
<a name="line-14"></a>       <span class='hs-keyword'>let</span> <span class='hs-varid'>thisrepo</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>if</span> <span class='hs-conid'>Ephemeral</span> <span class='hs-varop'>`elem`</span> <span class='hs-varid'>opts</span>
<a name="line-15"></a>                      <span class='hs-keyword'>then</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Cache</span> <span class='hs-conid'>Repo</span> <span class='hs-conid'>NotWritable</span> <span class='hs-varop'>$</span> <span class='hs-varid'>toFilePath</span> <span class='hs-varid'>thisdir</span><span class='hs-keyglyph'>]</span>
<a name="line-16"></a>                      <span class='hs-keyword'>else</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Cache</span> <span class='hs-conid'>Repo</span> <span class='hs-conid'>Writable</span> <span class='hs-varop'>$</span> <span class='hs-varid'>toFilePath</span> <span class='hs-varid'>thisdir</span><span class='hs-keyglyph'>]</span>
<a name="line-17"></a>       <span class='hs-varid'>return</span> <span class='hs-varop'>$</span> <span class='hs-conid'>Ca</span> <span class='hs-varop'>$</span> <span class='hs-varid'>nub</span> <span class='hs-varop'>$</span> <span class='hs-varid'>thisrepo</span> <span class='hs-varop'>++</span> <span class='hs-varid'>globalcache</span> <span class='hs-varop'>++</span> <span class='hs-varid'>globalsources</span> <span class='hs-varop'>++</span>
<a name="line-18"></a>                  <span class='hs-varid'>here</span> <span class='hs-varop'>++</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Cache</span> <span class='hs-conid'>Repo</span> <span class='hs-conid'>NotWritable</span> <span class='hs-varid'>repodir</span><span class='hs-keyglyph'>]</span> <span class='hs-varop'>++</span> <span class='hs-varid'>there</span>
<a name="line-19"></a>      <span class='hs-keyword'>where</span> 
<a name="line-20"></a>            <span class='hs-varid'>parsehs</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>catMaybes</span> <span class='hs-varop'>.</span> <span class='hs-varid'>map</span> <span class='hs-varid'>readln</span> <span class='hs-varop'>.</span> <span class='hs-varid'>noncomments</span>
<a name="line-21"></a>            <span class='hs-varid'>readln</span> <span class='hs-varid'>l</span> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>take</span> <span class='hs-num'>5</span> <span class='hs-varid'>l</span> <span class='hs-varop'>==</span> <span class='hs-str'>"repo:"</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Just</span> <span class='hs-layout'>(</span><span class='hs-conid'>Cache</span> <span class='hs-conid'>Repo</span> <span class='hs-conid'>NotWritable</span> <span class='hs-layout'>(</span><span class='hs-varid'>drop</span> <span class='hs-num'>5</span> <span class='hs-varid'>l</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-22"></a>                     <span class='hs-keyglyph'>|</span> <span class='hs-varid'>take</span> <span class='hs-num'>9</span> <span class='hs-varid'>l</span> <span class='hs-varop'>==</span> <span class='hs-str'>"thisrepo:"</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Just</span> <span class='hs-layout'>(</span><span class='hs-conid'>Cache</span> <span class='hs-conid'>Repo</span> <span class='hs-conid'>Writable</span> <span class='hs-layout'>(</span><span class='hs-varid'>drop</span> <span class='hs-num'>9</span> <span class='hs-varid'>l</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-23"></a>                     <span class='hs-keyglyph'>|</span> <span class='hs-varid'>nocache</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Nothing</span>
<a name="line-24"></a>                     <span class='hs-keyglyph'>|</span> <span class='hs-varid'>take</span> <span class='hs-num'>6</span> <span class='hs-varid'>l</span> <span class='hs-varop'>==</span> <span class='hs-str'>"cache:"</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Just</span> <span class='hs-layout'>(</span><span class='hs-conid'>Cache</span> <span class='hs-conid'>Directory</span> <span class='hs-conid'>Writable</span> <span class='hs-layout'>(</span><span class='hs-varid'>drop</span> <span class='hs-num'>6</span> <span class='hs-varid'>l</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-25"></a>                     <span class='hs-keyglyph'>|</span> <span class='hs-varid'>take</span> <span class='hs-num'>9</span> <span class='hs-varid'>l</span> <span class='hs-varop'>==</span> <span class='hs-str'>"readonly:"</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Just</span> <span class='hs-layout'>(</span><span class='hs-conid'>Cache</span> <span class='hs-conid'>Directory</span> <span class='hs-conid'>NotWritable</span> <span class='hs-layout'>(</span><span class='hs-varid'>drop</span> <span class='hs-num'>9</span> <span class='hs-varid'>l</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-26"></a>                     <span class='hs-keyglyph'>|</span> <span class='hs-varid'>otherwise</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Nothing</span>
<a name="line-27"></a>            <span class='hs-varid'>nocache</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NoCache</span> <span class='hs-varop'>`elem`</span> <span class='hs-varid'>opts</span>
<a name="line-28"></a>            
</pre>\end{code}

</body>
</html>