# DVC: Distributed Version Control for Emacs

DVC is a common Emacs front-end for a number of distributed version control systems.

It currently supports GNU Arch, Bazaar, git, Mercurial, and Monotone. Support for Darcs is being worked on but still lacks some features. See the table below for details.

DVC is available as a Bazaar branch. To get a local copy of the main branch, just do:

          bzr get http://bzr.xsteve.at/dvc/

You can also find Matthieu's branch (not always up-to-date at the moment) here:

          bzr get http://www-verimag.imag.fr/~moy/bzr/dvc/moy/

A nightly snapshot of Matthieu's branch is available here: dvc-snapshot.tar.gz

## Background

For modern version control systems (VCS), the VC package that ships with Emacs is insufficient. It has a file-centric view that does not match the tree-centric model of modern VCSs (hacks like vc-arch.el and vc-git.el notwithstanding). Also, it is too generic to take advantage of features that are specific to each VCS.

DVC is the successor of and includes Xtla, which is an Emacs front-end to GNU Arch (tla and baz). Xtla supports both tla and baz, and uses a simple "autoconf" mechanism to adapt itself to different versions of tla and baz (e.g., call "merge" if available, "star-merge" otherwise). However, Xtla is specific to GNU Arch and can not easily support other VCSs like bzr, Mercurial, Git, etc.

DVC remedies this by providing VCS-independent infrastructure and defining a common interface to be implemented by VCS-specific back-ends.

DVC supersedes Xtla. There is no new feature plan in Xtla after the release of Xtla 1.2.

## Architecture

DVC's architecture looks like this:

          +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
          :      Optional common UI (which autodetects the back-end)       :<----.
          +---------------+-------------------+------------------+---------+     |
          | tla (Xtla)    |  Mercurial (xhg)  |  Bazaar (bzr)    |         |     v
          |+-------------+|+-----------------+|+----------------+|   ...   |    \O/
          ||  Xtla core  |||    xhg core     |||    bzr core    ||         |<--> |
          |+-------------+|+-----------------+|+----------------+|         |    / \
          +---------------+-------------------+------------------+---------+
          |                            DVC core                            |
          +----------------------------------------------------------------+

The user can use the common UI layer as well as the back-end specific parts directly.

## Draft Roadmap

The roadmap currently looks like this:

          Create dvc-xxx.el files (initially empty)
          while (! satisfied) {
            See what has to be done to implement feature X in VCS Y
            See what code can be reused from Xtla to do this
            Based upon this, create a generic API in DVC
            Port the Xtla code to this API
            Implement the feature X in other back-ends
          }

We should avoid introducing quick and dirty hacks in DVC as much as possible. Try to get a correct foundation before implementing features in the back-ends.

Comments and contributions are welcome.

## Back-ends and their status

| Functions | Maintainers | Notes
status | diff | log | pull | commit
--- | --- | --- | --- | ---
Back-end | GNU Arch (tla) and Bazaar (baz) | + | + | + | + | + | Matthieu, Stefan |
Bazaar (bzr) | + | + | + | + | + | Matthieu, Stefan |
Git | + | + | + | + | + | Michael, Stefan |
Mercurial (hg) | + | + | + | + | + | Stefan | Also contains support for Mercurial Queues (MQ).
Monotone (mtn) | + | + | + | - | + | Christian. Stephen |
Darcs | + | - | - | - | - | Stefan | Not usable yet.

## Mailing List

There is a mailing list for DVC related stuff:

- Subscribe via: https://mail.gna.org/listinfo/dvc-dev/
- The Gmane mirror is here: http://blog.gmane.org/gmane.emacs.dvc.devel

## Other Emacs modes related to version control

- git
- darcs
- monotone
- quilt.el