Subsections


Configuring darcs

There are sevaral ways you can adjust darcs' behavior to suit your needs. The first is to edit files in the _darcs/prefs/ directory of a repository. Such configuration only applies when working with that repository. To configure darcs on a per-user rather than per-repository basis (but with essentially the same methods), you can edit (or create) files in the ~/.darcs/ directory. Finally, the behavior of some darcs commands can be modified by setting appropriate environment variables.

prefs

The _darcs directory contains a 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.


defaults

Default values for darcs commands can be configured on a per-repository basis by editing (and possibly creating) the _darcs/prefs/defaults file. Each line of this file has the following form:

COMMAND FLAG VALUE
where COMMAND is either the name of the command to which the default applies, or ALL to indicate that the default applies to all commands accepting that flag. The FLAG term is the name of the long argument option without the ``--'', i.e. verbose rather than --verbose. Finally, the VALUE option can be omitted if the flag is one such as verbose that doesn't involve a value.

For example, if your system clock is bizarre, you could instruct darcs to always ignore the file modification times by adding the following line to your _darcs/prefs/defaults file. (Note that this would have to be done for each repository!)

ALL ignore-times

If you never want to run a test when recording to a particular repository (but still want to do so when running check on that repo), and like to name all your patches ``Stupid patch'', you could use the following:

record no-test
record patch-name Stupid patch

Also, a global preferences file can be created with the name .darcs/defaults in your home directory. Options present there will be added to the repository-specific preferences.

repos

The _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.


author

The _darcs/prefs/author file contains the email address (or name) to be used as the author when patches are recorded in this repository. This file overrides the contents of the environment variables $DARCS_EMAIL and $EMAIL.

boring

The _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:
\.hi$
\.o$
^\.[^/]
^_
~$
(^|/)CVS($|/)
The last line is actually irrelevant because I don't use CVS, but if I did it would be handy. 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. ``darcs setpref boringfile ./.boring'', where the .boring is a file that has been darcs added to your repository). You can also set up a ``boring'' regexps file in your home directory, named ~/.darcs/boring, which will be used with all of your darcs repositories.

Any file whose full path (such as 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 ``darcs add newdir newdir/*'' without accidentally adding a bunch of object files. It is also used when the --look-for-adds flag is given to whatsnew or record.

binaries

The _darcs/prefs/binaries file may contain a list of regular expressions describing files that should be treated as binary files rather than text 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. ``darcs setpref binariesfile ./.binaries'', where .binaries is a file that has been darcs added to your repository). As with the boring file, you can also set up a ~/.darcs/binaries file if you like.

motd

The _darcs/prefs/motd file may a ``message of the day'' which will be displayed to user who get or pull from the repo without the --quiet option.

Environment variables

There are a few environment variables whose contents affect darcs' behavior.

DARCS_EMAIL

The DARCS_EMAIL environment variable determines the ``author'' name used by darcs when recording if no _darcs/prefs/author exists. If DARCS_EMAIL is undefined, the contents of the EMAIL environment variable are used.

DARCS_EDITOR

When pulling up an editor (for example, when adding a long comment in record), darcs uses the contents of DARCS_EDITOR if it is defined. If not, it tries the contents of VISUAL, and if that isn't defined (or fails for some reason), it tries EDITOR. If none of those environment variables are defined, darcs tries vi, emacs, emacs -nw and nano in that order.

DARCS_TMPDIR

If the environment variable DARCS_TMPDIR is defined, darcs will use that directory for its temporaries. Otherwise it will use TMPDIR, if that is defined, and if not that then /tmp and if /tmp doesn't exist, it'll put the temporaries in _darcs.

This is very helpful, for example, when recording with a test suite that uses MPI, in which case using /tmp to hold the test copy is no good, as /tmp isn't shared over NFS and thus the mpirun call will fail, since the binary isn't present on the compute nodes.

HOME

HOME is used to find the per-user prefs directory, which is located at $HOME/.darcs.

TERM

If darcs is compiled with libcurses support and support for color output, it uses the environment variable TERM to decide whether or not color is supported on the output terminal.

SSH_PORT

When using ssh, if the SSH_PORT enviroment variable is defined, darcs will use that port rather than the default ssh port (which is 22).

DARCS_SSH

The DARCS_SSH environment variable defines the command that darcs will use when asked to run ssh. This command is not interpereted by a shell, so you cannot use shell metacharacters, and the first word in the command must be the name of an executable located in your path.

DARCS_SCP

The DARCS_SCP environment variable defines the command that darcs will use when asked to run scp. Note that scp is how darcs accesses repositories whose URL is of the form user@foo.org:foo or foo.org:foo. This command is not interpereted by a shell, so you cannot use shell metacharacters, and the first word in the command must be the name of an executable located in your path.

DARCS_USE_ISPRINT

There is currently no way to specify the character encoding of a darcs repository, so darcs will by default print everything that is not printable ASCII characters as hexadecimal escape codes. This protects the terminal from (possibly malicious) control codes.

If the repository is encoded in the system's locale and it is an 8-bit, single-byte encoding, (e.g. ISO 8859-1), darcs can use the library function isPrint to check for printable characters, including non-ASCII. Setting the environment variable DARCS_USE_ISPRINT=1 enables this. It does not work for multi-byte encodings like UTF-8.

Isaac Jones 2004-09-16