darcs: a distributed, interactive, smart revision control system

[ development, gpl, library ] [ Propose Tags ]

Darcs is a free, open source revision control system. It is:

  • Distributed: Darcs was one of the first revision control systems in which every user has access to the full command set, removing boundaries between server and client or committer and non-committers.

  • Interactive: Darcs is easy to learn and efficient to use because it asks you questions in response to simple commands, giving you choices in your work flow. You can choose to record one change in a file, while ignoring another. As you update from upstream, you can review each patch, picking and choosing which patches are appropriate.

  • Smart: Darcs is different from most revision control systems in that it is based on the notion of change (or patch), rather than version. An underlying algebra of patches determines whether changes can be re-ordered. The laws of this algebra guarantee that the result of merging depends only on the final set of patches applied in a repository and not on their order.

  • Simple: As a consequence, Darcs offers a conceptually simpler view of the state of a repository: it is given by the set of patches it contains. Pulling and pushing patches merely transfers them from one set to another. So called "cherry-picking" is the default mode of operation, and it fully preserves the identity of patches.


[Skip to Readme]

Modules

  • Darcs
    • Darcs.Patch
      • Darcs.Patch.Annotate
      • Darcs.Patch.Apply
      • Darcs.Patch.ApplyMonad
      • Darcs.Patch.Bracketed
      • Darcs.Patch.Bundle
      • Darcs.Patch.Choices
      • Darcs.Patch.Commute
      • Darcs.Patch.CommuteFn
      • Darcs.Patch.CommuteNoConflicts
      • Darcs.Patch.Conflict
      • Darcs.Patch.Debug
      • Darcs.Patch.Depends
      • Darcs.Patch.Effect
      • Darcs.Patch.FileHunk
      • Darcs.Patch.Format
      • Darcs.Patch.FromPrim
      • Darcs.Patch.Ident
      • Index
        • Darcs.Patch.Index.Monad
        • Darcs.Patch.Index.Types
      • Darcs.Patch.Info
      • Darcs.Patch.Inspect
      • Darcs.Patch.Invert
      • Darcs.Patch.Invertible
      • Darcs.Patch.Match
      • Darcs.Patch.Merge
      • Darcs.Patch.MonadProgress
      • Darcs.Patch.Named
        • Darcs.Patch.Named.Wrapped
      • Darcs.Patch.PatchInfoAnd
      • Darcs.Patch.Permutations
      • Darcs.Patch.Prim
        • Darcs.Patch.Prim.Class
        • Darcs.Patch.Prim.FileUUID
          • Darcs.Patch.Prim.FileUUID.Apply
          • Darcs.Patch.Prim.FileUUID.Coalesce
          • Darcs.Patch.Prim.FileUUID.Commute
          • Darcs.Patch.Prim.FileUUID.Core
          • Darcs.Patch.Prim.FileUUID.Details
          • Darcs.Patch.Prim.FileUUID.ObjectMap
          • Darcs.Patch.Prim.FileUUID.Read
          • Darcs.Patch.Prim.FileUUID.Show
        • Darcs.Patch.Prim.Named
        • Darcs.Patch.Prim.V1
          • Darcs.Patch.Prim.V1.Apply
          • Darcs.Patch.Prim.V1.Coalesce
          • Darcs.Patch.Prim.V1.Commute
          • Darcs.Patch.Prim.V1.Core
          • Darcs.Patch.Prim.V1.Details
          • Darcs.Patch.Prim.V1.Mangle
          • Darcs.Patch.Prim.V1.Read
          • Darcs.Patch.Prim.V1.Show
        • Darcs.Patch.Prim.WithName
      • Darcs.Patch.Progress
      • Darcs.Patch.Read
      • Rebase
        • Darcs.Patch.Rebase.Change
        • Darcs.Patch.Rebase.Fixup
        • Legacy
          • Darcs.Patch.Rebase.Legacy.Item
        • Darcs.Patch.Rebase.Name
        • Darcs.Patch.Rebase.PushFixup
        • Darcs.Patch.Rebase.Suspended
      • Darcs.Patch.RegChars
      • Darcs.Patch.Repair
      • Darcs.Patch.RepoPatch
      • Darcs.Patch.RepoType
      • Darcs.Patch.Set
      • Darcs.Patch.Show
      • Darcs.Patch.Split
      • Darcs.Patch.Summary
      • Darcs.Patch.SummaryData
      • Darcs.Patch.TokenReplace
      • Darcs.Patch.TouchesFiles
      • Darcs.Patch.Unwind
      • Darcs.Patch.V1
        • Darcs.Patch.V1.Apply
        • Darcs.Patch.V1.Commute
        • Darcs.Patch.V1.Core
        • Darcs.Patch.V1.Prim
        • Darcs.Patch.V1.Read
        • Darcs.Patch.V1.Show
        • Darcs.Patch.V1.Viewing
      • Darcs.Patch.V2
        • Darcs.Patch.V2.Non
        • Darcs.Patch.V2.Prim
        • Darcs.Patch.V2.RepoPatch
      • Darcs.Patch.V3
        • Darcs.Patch.V3.Contexted
        • Darcs.Patch.V3.Core
        • Darcs.Patch.V3.Resolution
      • Darcs.Patch.Viewing
      • Witnesses
        • Darcs.Patch.Witnesses.Eq
        • Darcs.Patch.Witnesses.Maybe
        • Darcs.Patch.Witnesses.Ordered
        • Darcs.Patch.Witnesses.Sealed
        • Darcs.Patch.Witnesses.Show
        • Darcs.Patch.Witnesses.Unsafe
        • Darcs.Patch.Witnesses.WZipper
    • Darcs.Prelude
    • Darcs.Repository
      • Darcs.Repository.ApplyPatches
      • Darcs.Repository.Cache
      • Darcs.Repository.Clone
      • Darcs.Repository.Create
      • Darcs.Repository.Diff
      • Darcs.Repository.Flags
      • Darcs.Repository.Format
      • Darcs.Repository.Hashed
      • Darcs.Repository.HashedIO
      • Darcs.Repository.Identify
      • Darcs.Repository.InternalTypes
      • Darcs.Repository.Inventory
      • Darcs.Repository.Job
      • Darcs.Repository.Match
      • Darcs.Repository.Merge
      • Darcs.Repository.Old
      • Darcs.Repository.Packs
      • Darcs.Repository.PatchIndex
      • Darcs.Repository.Paths
      • Darcs.Repository.Pending
      • Darcs.Repository.Prefs
      • Darcs.Repository.Pristine
      • Darcs.Repository.Rebase
      • Darcs.Repository.Repair
      • Darcs.Repository.Resolution
      • Darcs.Repository.State
      • Darcs.Repository.Test
      • Darcs.Repository.Traverse
      • Darcs.Repository.Working
    • Test
      • Darcs.Test.TestOnly
    • UI
      • Darcs.UI.ApplyPatches
      • Darcs.UI.Commands
        • Darcs.UI.Commands.Add
        • Darcs.UI.Commands.Amend
        • Darcs.UI.Commands.Annotate
        • Darcs.UI.Commands.Apply
        • Darcs.UI.Commands.Clone
        • Darcs.UI.Commands.Convert
          • Darcs.UI.Commands.Convert.Darcs2
          • Darcs.UI.Commands.Convert.Export
          • Darcs.UI.Commands.Convert.Import
          • Darcs.UI.Commands.Convert.Util
        • Darcs.UI.Commands.Diff
        • Darcs.UI.Commands.Dist
        • Darcs.UI.Commands.GZCRCs
        • Darcs.UI.Commands.Help
        • Darcs.UI.Commands.Init
        • Darcs.UI.Commands.Log
        • Darcs.UI.Commands.MarkConflicts
        • Darcs.UI.Commands.Move
        • Darcs.UI.Commands.Optimize
        • Darcs.UI.Commands.Pull
        • Darcs.UI.Commands.Push
        • Darcs.UI.Commands.Rebase
        • Darcs.UI.Commands.Record
        • Darcs.UI.Commands.Remove
        • Darcs.UI.Commands.Repair
        • Darcs.UI.Commands.Replace
        • Darcs.UI.Commands.Revert
        • Darcs.UI.Commands.Rollback
        • Darcs.UI.Commands.Send
        • Darcs.UI.Commands.SetPref
        • Darcs.UI.Commands.Show
        • Darcs.UI.Commands.ShowAuthors
        • Darcs.UI.Commands.ShowContents
        • Darcs.UI.Commands.ShowDependencies
        • Darcs.UI.Commands.ShowFiles
        • Darcs.UI.Commands.ShowIndex
        • Darcs.UI.Commands.ShowPatchIndex
        • Darcs.UI.Commands.ShowRepo
        • Darcs.UI.Commands.ShowTags
        • Darcs.UI.Commands.Tag
        • Darcs.UI.Commands.Test
        • Darcs.UI.Commands.TransferMode
        • Darcs.UI.Commands.Unrecord
        • Darcs.UI.Commands.Unrevert
        • Darcs.UI.Commands.Util
          • Darcs.UI.Commands.Util.Tree
        • Darcs.UI.Commands.WhatsNew
      • Darcs.UI.Completion
      • Darcs.UI.Defaults
      • Darcs.UI.Email
      • Darcs.UI.External
      • Darcs.UI.Flags
      • Darcs.UI.Options
        • Darcs.UI.Options.All
        • Darcs.UI.Options.Core
        • Darcs.UI.Options.Flags
        • Darcs.UI.Options.Iso
        • Darcs.UI.Options.Markdown
        • Darcs.UI.Options.Matching
        • Darcs.UI.Options.Util
      • Darcs.UI.PatchHeader
      • Darcs.UI.PrintPatch
      • Darcs.UI.RunCommand
      • Darcs.UI.SelectChanges
      • Darcs.UI.TheCommands
      • Darcs.UI.Usage
    • Util
      • Darcs.Util.AtExit
      • Darcs.Util.ByteString
      • Darcs.Util.CommandLine
      • Darcs.Util.Compat
      • Darcs.Util.DateMatcher
      • Darcs.Util.DateTime
      • Darcs.Util.Diff
        • Darcs.Util.Diff.Myers
        • Darcs.Util.Diff.Patience
      • Darcs.Util.Download
        • Darcs.Util.Download.Request
      • Darcs.Util.Encoding
      • Darcs.Util.English
      • Darcs.Util.Exception
      • Darcs.Util.Exec
      • Darcs.Util.External
      • Darcs.Util.File
      • Darcs.Util.Global
      • Darcs.Util.Graph
      • Darcs.Util.HTTP
      • Darcs.Util.Hash
      • Darcs.Util.Index
      • Darcs.Util.IsoDate
      • Darcs.Util.Lock
      • Darcs.Util.Parser
      • Darcs.Util.Path
      • Darcs.Util.Printer
        • Darcs.Util.Printer.Color
      • Darcs.Util.Progress
      • Darcs.Util.Prompt
      • Darcs.Util.Ratified
      • Darcs.Util.Regex
      • Darcs.Util.Show
      • Darcs.Util.SignalHandler
      • Darcs.Util.Ssh
      • Darcs.Util.Tree
        • Darcs.Util.Tree.Hashed
        • Darcs.Util.Tree.Monad
        • Darcs.Util.Tree.Plain
      • Darcs.Util.URL
      • Darcs.Util.Workaround

Flags

Manual Flags

NameDescriptionDefault
static

Build static binary

Disabled
threaded

Use threading and SMP support.

Enabled
executable

Build darcs executable

Enabled
rts

Support RTS options

Disabled
warn-as-error

Build with warnings-as-errors

Disabled
Automatic Flags
NameDescriptionDefault
curl

Use libcurl for HTTP support.

Disabled
pkgconfig

Use pkgconfig to configure libcurl

Disabled
terminfo

Use the terminfo package for enhanced console support.

Enabled

Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info

Downloads

Maintainer's Corner

For package maintainers and hackage trustees

Candidates

Versions [RSS] 2.1.2.1, 2.1.2.2, 2.1.98.2, 2.1.99.0, 2.2.0, 2.2.1, 2.3.0, 2.3.1, 2.4, 2.4.1, 2.4.3, 2.4.4, 2.5, 2.5.1, 2.5.2, 2.8.0, 2.8.1, 2.8.2, 2.8.3, 2.8.4, 2.8.5, 2.10.0, 2.10.1, 2.10.2, 2.10.3, 2.12.0, 2.12.1, 2.12.2, 2.12.3, 2.12.4, 2.12.5, 2.14.0, 2.14.1, 2.14.2, 2.14.3, 2.14.4, 2.14.5, 2.16.1, 2.16.2, 2.16.3, 2.16.4, 2.16.5
Change log CHANGELOG
Dependencies array (>=0.5.1.0 && <0.6), async (>=2.0.2 && <2.3), attoparsec (>=0.13.0.1 && <0.14), base (>=4.10 && <4.16), base16-bytestring (>=0.1.1.7 && <1.1), binary (>=0.5 && <0.11), bytestring (>=0.10.6 && <0.11), conduit (>=1.3.0 && <1.4), constraints (>=0.11 && <0.13), containers (>=0.5.6.2 && <0.7), cryptonite (>=0.24 && <0.30), darcs, data-ordlist (>=0.4 && <0.5), directory (>=1.2.7 && <1.4), fgl (>=5.5.2.3 && <5.8), filepath (>=1.4.1 && <1.5.0.0), hashable (>=1.2.3.3 && <1.4), haskeline (>=0.7.2 && <0.9), html (>=1.0.1.2 && <1.1), http-conduit (>=2.3 && <2.4), http-types (>=0.12.1 && <0.12.4), memory (>=0.14 && <0.17), mmap (>=0.5.9 && <0.6), mtl (>=2.2.1 && <2.3), network (>=2.6 && <3.2), network-uri (>=2.6 && <2.8), old-time (>=1.1.0.3 && <1.2), parsec (>=3.1.9 && <3.2), process (>=1.2.3.0 && <1.7), regex-applicative (>=0.2 && <0.4), regex-base (>=0.94.0.1 && <0.94.1), regex-tdfa (>=1.3.1.0 && <1.3.2), stm (>=2.1 && <2.6), tar (>=0.5 && <0.6), temporary (>=1.2.1 && <1.4), terminfo (>=0.4.0.2 && <0.5), text (>=1.2.1.3 && <1.3), time (>=1.5.0.1 && <1.10), transformers (>=0.4.2.0 && <0.6), unix (>=2.7.1.0 && <2.8), unix-compat (>=0.5 && <0.6), utf8-string (>=1 && <1.1), vector (>=0.11 && <0.13), Win32 (>=2.4.0 && <2.7), zip-archive (>=0.3 && <0.5), zlib (>=0.6.1.2 && <0.7.0.0) [details]
License GPL-2.0-or-later
Author David Roundy <droundy@darcs.net>, <darcs-devel@darcs.net>
Maintainer <darcs-devel@darcs.net>
Category Development
Home page http://darcs.net/
Source repo head: darcs get http://darcs.net/
Uploaded by GaneshSittampalam at 2022-02-20T09:11:20Z
Distributions Arch:2.16.5, Debian:2.14.5, Fedora:2.16.5, FreeBSD:2.10.1, NixOS:2.16.5
Executables darcs
Downloads 48091 total (249 in the last 30 days)
Rating 2.25 (votes: 2) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs not available [build log]
All reported builds failed as of 2022-08-25 [all 2 reports]

Readme for darcs-2.16.5

[back to package description]

About

Darcs is a distributed version control system written in Haskell.

Building

To build and install the latest release, use

cabal update && cabal install darcs

with a recent cabal (version 3.2 or later is recommended). Any version of ghc from 8.2 up to 8.10 should work.

From inside a clone or a source dist, use

> cabal build

or

> cabal install

If you prefer stack:

> stack install

Note that using stack will select older versions for some dependencies, which may mean that performance is slightly less than optimal.

Running the test suite

This is optional, of course, but useful if you want to help find bugs or before you contribute patches.

> cabal build --enable-tests
> cabal test --test-show-details=direct

Using

To clone a repository via HTTP and send patches by mail:

> darcs clone --lazy http://darcs.net
> # edit files...
> darcs add my_new_file
> darcs record -m "my changes"
> darcs send

To clone via SSH and push patches:

> darcs clone user@hub.darcs.net:user/repo
> # edit files...
> darcs add my_new_file
> darcs record -m "my changes"
> darcs push

To create a project and start working:

> darcs init my_project
> cd my_project
> # create and edit files...
> darcs add my_new_file
> darcs record -m "initial version"

Pull new patches from upstream:

> darcs pull

Documentation

Concise and up-to-date documentation is available from darcs itself:

> darcs help # list all commands
> darcs help command # help for specific command
> darcs command --help # dito

The complete documentation is available as a man page which can be generated using

darcs help manpage > darcs.1

Reporting bugs

Please send bug reports to bugs@darcs.net. This will automatically add your report to the bug tracker. If you are unsure or just have a question or a comment, you can subscribe to darcs-users@darcs.net and post your question or comments there. See http://darcs.net/MailingLists for details.

There is also an IRC channel named #darcs on freenode.net, where you can report problems or ask questions.

Hacking

We are happy to receive patches and will try our best to review them in a timely fashion. Just record your patches in a clone of http://darcs.net/screened and darcs send them. You are encouraged, but not required, to look at http://darcs.net/Development/GettingStarted for additional information.

BTW, the wiki is a darcs repo, you can clone it with:

> darcs clone --lazy http://darcs.net/darcs-wiki

to edit the contents and send us patches.