The code

The 2.10 branch is available as a darcs repository from, and an up-to-date zip archive can be downloaded from

Bugs for milestone 2.10:

What’s new since darcs 2.8.4

*The following sections are a work in progress and summarizes the changes from version 2.8.4 to patch “mention a couple of convert export limitations in help string” in the release branch.

New features


  • darcs rebase: enable deep amending of history (Ganesh Sittampalam)
  • darcs convert export/import for easy conversion to/from VCSes supporting the fast-export protocol (Petr Rockai, Owen Stephens, Guillaume Hoffmann, Lele Gaifax, Ben Franksen)
  • darcs pull --reorder: keep your own patches on top of mainstream patches (also for apply) (Ale Gadea, Ganesh Sittampalam)
  • patience diff algorithm by default for creating patches (Jose Neder)
  • darcs dist --zip: generate a zip archive from the recorded state of a repository (Guillaume Hoffmann)
  • patch bundle contexts are minimized ny default (for send and obliterate -O). Enables bundles to be applied to more repositories. (Guillaume Hoffmann)


User Interface


  • add a last question after all patches have been selected to confirm the whole selection (Florent Becker)
  • command names:
    • clone is the new name of get and put
    • log is the new name of changes
    • amend is the new name of amend-record
  • present output of log into a pager by default (Guillaume Hoffmann)
  • the output of log is more similar to git’s:
    • show patch hash in UI (hash of the patch’s metadata)
    • put author and date on separate lines (Guillaume Hoffmann)
  • enable to match on patch hash prefix with -h and –hash (Guillaume Hoffmann)
  • better messages:
    • better error messages for http and ssh errors (Ernesto Rodriguez)
    • init, add, remove, move and replace print confirmation messages (Guillaume Hoffmann)
  • rollback only happens in the working copy (Florent Becker, Guillaume Hoffmann)


  • darcs send no longer tries to send a mail by default (Eric Kow)
  • when no patch name given, directly invoke text editor (Jose Neder, Guillaume Hoffmann)
  • make nano the default text editor instead of vi (Guillaume Hoffmann)
  • keep log files for patch name and mail content in _darcs (Ale Gadea)
  • gracefully refuse empty patch names (Guillaume Hoffmann)
  • make darcs apply work with an bundle url (Guillaume Hoffmann)
  • Add rank to show authors (Owen Stephens)
  • optimize and convert are now supercommands (Guillaume Hoffmann)
  • rename init --hashed into init --darcs-1 (Guillaume Hoffmann, Ben Franksen)
  • reintroduce environment variables help in darcs help environment and darcs help markdown (Radoslav Dorcik, Guillaume Hoffmann)
  • less confusing apply --skip-conflicts message when everything conflicts (Guillaume Hoffmann)
  • warn about duplicate tags when creating a new one (Ale Gadea)
  • allow darcs mv into known, but deleted in working, file (Owen Stephens)
  • improve--not-in-remote, allowing multiple repos and use default (Owen Stephens)



  • faster darcs diff (Petr Rockai)
  • faster log and annotate thanks to patch index data structure (BSRK Aditya, Benedikt Schmidt, Eric Kow, Guillaume Hoffmann, Ganesh Sittampalam)
  • faster push via ssh by using compression (Ben Franksen)
  • cloning to an ssh destination (former darcs put) is more efficient (Guillaume Hoffmann)
  • darcs optimize clean now completely cleans repositories (Marcio Diaz)


  • faster internal representation of patch hashes (Guillaume Hoffmann)
  • correctly set curl connection timeout (Guillaume Hoffmann)
  • fix stack overflow bug with whatsnew (Jose Neder)
  • when cloning from http, use packs in a more predictable way (Guillaume Hoffmann)
  • store global cache in bucketed format (Marcio Diaz)
  • garbage collection of global cache (Marcio Diaz)


  • require and support GHC 7.4 to 7.10 (Ganesh Sittampalam)
  • restructure source code into main modules Darcs.{Util|Patch|Repository|UI} (Guillaume Hoffmann, Ganesh Sittampalam)
  • new options subsystem (Ben Franksen)
  • replace witness CPP macros with plain Haskell (Eric Kow)


  • dumb merge of hashed-storage into darcs (Ganesh Sittampalam)
  • replace C SHA256 bindings with external libraries (Ganesh Sittampalam)
  • move the bits of the datetime package we need into a Darcs.Util.DateTime module (Ganesh Sittampalam)
  • Build Darcs once rather than thrice. (Eric Kow)
  • remove GADT_WITNESSES ifdef (Eric Kow)
  • remove home page and manual from darcs’ repository (Guillaume Hoffmann)
  • refactoring in Darcs.Patch (Ganesh Sittampalam)
  • run fewer darcs-1 related tests in testsuite (Ganesh Sittampalam)
  • run tests through cabal test (Ryan Desfosses)
  • Use custom replHook to fix cabal repl (Owen Stephens)
  • darcs.cabal: make Haskell2010 the default-language for all stanzas (Ben Franksen)
  • rename the confusing concept of ‘Tag’ in Darcs.Patch.Choices to ‘Label’ (Ganesh Sittampalam)
  • always compile with mmap support (Ganesh Sittampalam)
  • Various cleanups and refactoring, haddocks (Will Langstroth, Owen Stephens, Florent Becker, Guillaume Hoffmann, Michael Hendricks, Eric Kow, Dan Frumin)

Issues resolved in Darcs 2.10

  • issue346: implement “patience diff” from bzr (Jose Neder)
  • issue642: Automatic detection of file renames (Jose Neder)
  • issue822: generalized the IO Type for better error messages and exception handling (Ernesto Rodriguez)
  • issue851: interactive mode for whatsnew (Dan Frumin)
  • issue904: Fix record on Linux/FUSE/sshfs (fall back to sloppy locks automatically) (Nathaniel Filardo)
  • issue1066: clone to ssh URL by locally cloning then copying by scp (Guillaume Hoffmann)
  • issue1268: enable to write darcs init x (Radoslav Dorcik)
  • issue1416: put log files in tempdir instead of in working dir (Ale Gadea)
  • issue1514: send –minimize-context flag for send (Guillaume Hoffmann)
  • issue1624: bucketed cache (Marcio Diaz)
  • issue1828: file listing and working –dry-run for mark-conflicts (Guillaume Hoffmann)
  • issue1987: Garbage collection for inventories and patches (Marcio Diaz)
  • issue2181: put cache in $XDG_CACHE_HOME (~/.cache by default) (Guillaume Hoffmann)
  • issue2193: make that finalizeTentativeChanges no longer run tests (Guillaume Hoffmann)
  • issue2198: move repo testing code to Darcs.Repository.Test (Guillaume Hoffmann)
  • issue2200: darcs replace complains if no filepaths given (Owen Stephens)
  • issue2204: do not send mail by default (Eric Kow)
  • issue2237: prevent patch index creation for non-hashed repos (Owen Stephens)
  • issue2235: Accept RFC2822 dates (Dave Love)
  • issue2246: add default boring entry for emacs session save files (Owen Stephens)
  • issue2253: attempting to use the patch index shouldn’t create it on OF repos (Owen Stephens)
  • Issue2278: Document default value for –keep-date / –no-keep-date (Mark Stosberg)
  • issue2199: getMatchingTag needs to commute for dirty tags (Ganesh Sittampalam)
  • issue2247: move patch index creation into the job running code (Ganesh Sittampalam)
  • issue2238: let optsModifier remove all occurrences of LookForAdds (Gian Piero Carrubba)
  • issue2236: make ‘n’ an alias for ‘q’ in lastregret questions (Gian Piero Carrubba)
  • issue2155: Expurgate the non-functional annotate –xml-output option (Dave Love)
  • issue2248: always clean up rebase-in-progress state (Ganesh Sittampalam)
  • issue2270: fixed darcs changes -i –only-to-files (Sebastian Fischer)
  • issue2282: don’t allow remote operations to copy the rebase patch (Ganesh Sittampalam)
  • issue2287: obliterate -O doesn’t overwrite existing file. (Radoslav Dorcik)
  • issue2227: move the rebase patch to the end before an amend-record (Ganesh Sittampalam)
  • issue2277: rebase suspend and unsuspend supports –summary. (Radoslav Dorcik)
  • issue2311: posthook for ‘get’ should run in created repo (Sebastian Fischer)
  • issue2312: posthooks for ‘record’ and ‘amend-record’ should receive DARCS_PATCHES (Sebastian Fischer)
  • issue2163: new option for amend, select author for patch stealing. (Radoslav Dorcik)
  • issue2321: when no patch name given, directly invoke text editor (Jose Neder)
  • issue2320: save prompted author name in ~/.darcs/author instead of ./_darcs/prefs/author (Jose Neder)
  • issue2250: tabbing in usageHelper - pad by max length of command name (BSRK Aditya)
  • issue2309: annotate includes line numbers (Owen Stephens)
  • issue2334 fix win32 build removing file permission functions (Guillaume Hoffmann)
  • issue2343: darcs amend-record does not record my change (Jose Neder)
  • issue2335: one liner when adding tracked files if not verbose (Guillaume Hoffmann)
  • issue2313: whatsnew -l: Stack space overflow (Jose Neder)
  • issue2347: fix amend-record –prompt-long-comment (Guillaume Hoffmann)
  • issue2348: switch to cabal’s test framework (Ryan Desfosses)
  • issue2209: Automatically detect replace (Jose Neder)
  • issue2332: ignore case of characters in prompt (Guillaume Hoffmann)
  • issue2263: Option –set-scripts-executable is not properly documented (Ale Gadea)
  • issue2367: rename amend-record to amend, make –unrecord more visible (Guillaume Hoffmann)
  • issue2345: solution using cabal’s checkForeignDeps (Dan Frumin)
  • issue2357: switching to regex-compat-tdfa for unicode support (Dan Frumin)
  • issue2379: only use packs to copy pristine when up-to-date (Guillaume Hoffmann)
  • issue2365: correctly copy pristine in no-working-dir clones (Guillaume Hoffmann)
  • issue2244: darcs tag should warn about duplicate tags (Ale Gadea)
  • issue2364: don’t break list of ‘bad sources’ (Sergei Trofimovich)
  • issue2361: optimize –reorder runs forever with one repository (Ale Gadea)
  • issue2364: fix file corruption on double fetch (Sergei Trofimovich)
  • issue2394: make optimize a supercommand (Guillaume Hoffmann)
  • issue2396: make convert a supercommand and enhance help strings (Guillaume Hoffmann)
  • issue2314: output-auto-name in defaults file (Ben Franksen)
  • issue2388: check if inventories dir has been created (Owen Stephens)
  • issue2249: Rename isFile to isValidLocalPath and WorkRepoURL to WorkRepoPossibleURL (Mateusz Lenik)
  • issue2153: allow skipping backwards through depended-upon patches (Andreas Brandt)
  • issue2380: allow darcs mv into known, but deleted in working, file (Owen Stephens)
  • issue2403: need to avoid moving the rebase patch to the end (Ganesh Sittampalam)
  • issue2409: implement darcs rebase apply (Ganesh Sittampalam)
  • issue2385: invoke pager without temporary file (Guillaume Hoffmann)
  • issue2333: better error message when pushing and darcs not in path (Ben Franksen)