Pierre-Étienne Meunier | 2 Feb 08:53 2016

Pijul 0.2

Hi darcs fellows,

Florent Becker and myself are proud to announce the second public release of Pijul, a new version control
system aiming to be easy to learn and use, distributed, and fast.

Pijul is based on a theoretical model of patches described here. At the conceptual level, it merges
concepts from category theory, and the patch theory developed by darcs. At the practical level, a number
of new ideas allow for a quite fast system.

A lot has changed in this second release. Pijul has been completely rewritten in a new language, Rust. While
rewriting, we have also focused on a more limited interface, to try and ensure correctness.

What we have

Here is what we have in this release (modulo bugs, of course):

 -  Basic file system operations: add, remove, mv, ls.
 -  Record, for text files only.
 -  Conflict handling, at the line level.
 -  Pull from local repositories, ssh and http.
 -  Push to local repositories, ssh.
 -  Repositories robust to hash function changes (see Layout of a repository).

What is missing

The most crucially missing feature is unrecord, with rollback a close second, but there is no fundamental
problem with this. Other features include blame/annotate, especially in the case of conflicts (this is
probably an easy project to start contributing).
(Continue reading)

Guillaume Hoffmann | 29 Jan 17:37 2016

darcs 2.10.3 release

The darcs team is pleased to announce the release of darcs 2.10.3 !

# Downloading #

One way of installing Darcs 2.10.3 is with stack:

$ stack install darcs-2.10.3

Or first install the Haskell Platform (http://www.haskell.org/platform)
and install Darcs with cabal-install:

$ cabal update
$ cabal install darcs-2.10.3

You can also download the tarball from
http://darcs.net/releases/darcs-2.10.3.tar.gz and build it by hand.

The 2.10 branch is also available as a darcs repository from

# What's new in 2.10.3 (since 2.10.2) #

 * implement weak repository hash and show it in "darcs show repo"
 * implement "whatsnew --machine-readable" for more parsability
 * enhance Git import: empty directories, unescape file names, unnamed commits
 * make commit an alias for record
 * expose API for "darcs diff"
 * force grep to treat output of locale as text
 * bump dependencies: vector, process, HUnit, binary, transformers, time, HTTP,
(Continue reading)

Henning Thielemann | 17 Jan 17:53 2016

Maintaining a history of compilable repository states

I am sure you darcs developers already thought intensively about the 
following problem, but I could not find a proposal or future plan page in 
the darcs wiki. Maybe this is the closest:

The great feature of darcs is that I can push and pull single patches 
around, i.e. cherry-picking is the default behaviour. The downside is that 
I can pretty easily create repository states that cannot be compiled or 
run. E.g. if I develop two features, each in a separate branch and then 
merge them, the conflicting parts will be removed from the repository and 
'darcs test' (usually a 'cabal configure && cabal build && cabal test') 
will fail. Even if there are no conflicts in the text, the merged patches 
may not form a compilable package. Additionally I am hardly able to get 
the two lines of development separated later.

Older darcs versions (e.g. darcs-2.5) had the 'trackdown' function.

It seems to be removed in darcs-2.10. I wonder how it can work if many 
interim states do not compile.

In Git this is no problem since it only stores snapshots (=commits) and 
every merge creates a new commit that you can inspect and improve and 
test. (Having said that, Git makes it pretty complicated to run a test 
that actually tests the current repository state.) The downside is that it 
cannot store file moves and token replacements.

What ideas or proposals do you have for reconstructing historic repository 
states and make 'trackdown' actually work? Maybe it would help to somehow 
(Continue reading)

Ivan Zakharyaschev | 21 Dec 17:07 2015

Re: Q: language-c upstream repo

On Mon, 21 Dec 2015, Guillaume Hoffmann wrote:

>> But isn't it a bug that some tags seem to be lost after the conversion? (As
>> I have demonstrated below: the tags are present in the source darcs-1 repo,
>> but not in the result.)
> Can you first run "darcs optimize reorder" and then do the conversion?

I did this.

This didn't help with the lost tags (isn't it strange?), but did help with 
being able to push to the darcs-2 repo from hub (a clone of it):

(BTW, there are axtra patches in the darcs-1 repo.)

~/TOOLS/prog $ cd language-c.pristine.reordered/
~/TOOLS/prog/language-c.pristine.reordered $ darcs show tags
~/TOOLS/prog/language-c.pristine.reordered $ darcs optimize reorder
Done reordering!
~/TOOLS/prog/language-c.pristine.reordered $ darcs show tags
(Continue reading)

Ivan Zakharyaschev | 15 Dec 05:53 2015

vc-darcs.el records changes without the fullname unlike darcs itself (with a PATCH)

Another problem I've noticed with the vc-darcs.el from jch <at>  is that it
doesn't use the author's fullname when recording changes.

This has been discovered thanks to a warning by "darcs amend".

Let's have a look how the code of vc-darcs.el could be fixed. (I'll
post if I come up with something.)

Here is an example session demonstrating the problem:

~/tests $ mkdir test-darcs
~/tests $ cd test-darcs/
~/tests/test-darcs $ darcs init
Repository initialized.
~/tests/test-darcs $ echo a > a
~/tests/test-darcs $ darcs add a
Adding 'a'
~/tests/test-darcs $ darcs rec
addfile ./a
Shall I record this change? (1/2)  [ynW...], or ? for more options: y
hunk ./a 1
Shall I record this change? (2/2)  [ynW...], or ? for more options: y
Do you want to record these changes? [Yglqk...], or ? for more options: y
Finished recording patch 'A.'
~/tests/test-darcs $

(On the last step above, there is another minor problem -- probably caused
by vc-darcs.el, since I didn't experience it before starting to use
(Continue reading)

Ivan Zakharyaschev | 15 Dec 02:13 2015

vc-darcs.el and the length of hashes (cons: Args out of range)


As a darcs user from time to time (and sympathizer), I have recently 
started to use vc-darcs.el in Emacs. (I know there are other darcs 
libraries for Emacs, but I'm interested in the Emacs VC interface, too, 
because I'm accustomed to using it in certain situations.)

I want to share some observations about a discovered bug in one of the 
implementations of vc-darcs (which I'm left with as the only one, because 
the other link is dead).

Perhaps, this will help make it better.

I'm not sure about where this inconsistency comes from. Perhaps, an older 
version of darcs had a different interface w.r.t. the ids of patches. 
Understanding this would make it clearer how to proceed with a possible 
fix (keep both variants or not, check versions,...). Do you have any 

Best regards,

---------- Forwarded message ----------
Date: Tue, 8 Dec 2015 13:18:54 +0300
From: Ivan Zakharyaschev <imz <at> >
To: jch <at> 
Subject: vc-darcs: cons: Args out of range


(Continue reading)

Guillaume Hoffmann | 14 Dec 17:48 2015

repository state identifier(s) in "darcs show repo"

Hi everyone,

As said by David Leuschner in a previous mail, one of the shortcomings
of Darcs is:

"it's not as easy to refer to a specific state of the repository using a hash".

As a developer I know that Darcs uses (internally) the pristine hash,
which is a hash of the recorded working copy. However two repositories
can have the same pristine hash and different histories (eg, one being
a superset of the other with patches and their corresponding
rollbacks, or one having tags that the other lacks). But it can be
good enough for some purposes (lazy cloning).

Should "darcs show repo" show that hash?

Now most importantly, we need a hash that would identify a set of
patches independently of reordering, since it's what Darcs considers
the history of a repository. Doing it right, eg building and hashing
the dependency graph of all patches, is costly. Moreover we do not
have any infrastructure to retrieve a set of patches from such hash.
(That's the scenario in http://darcs.net/Ideas/ShortSecureId ).

So can we just have one that would enable us to quickly check that two
repos have the same patches, ignoring reordering?

I propose a simple checksum: XOR all patch metadata hashes!
Probability of collision should be low enough since patch metadata
hashes are good hashes. Calculating the XOR is as fast as reading the
inventories of the current repo (which can be lazy) plus the overhead
(Continue reading)

Guillaume Hoffmann | 9 Nov 15:08 2015

darcs 2.10.2 release

The darcs team is pleased to announce the release of darcs 2.10.2 !

# Downloading #

The easiest way to install darcs 2.10.2 from source is by first
installing the Haskell Platform (http://www.haskell.org/platform). If
you have installed the Haskell Platform or cabal-install, you can
install this release by doing:

$ cabal update
$ cabal install darcs-2.10.2

Alternatively, you can download the tarball from
http://darcs.net/releases/darcs-2.10.2.tar.gz and build it by hand as
explained in the README file.

The 2.10 branch is also available as a darcs repository from

# What's new in 2.10.2 (since 2.10.1) #

 * optimize patch apply code memory use
 * make patch selection lazier in presence of matchers
 * switch patches retrieval order when using packs
 * switch from dataenc (deprecated) to sandi
 * finish updating help strings with new command names
 * clean contrib scripts
 * disable mmap on Windows
 * enhance darcs send message
 * fix quickcheck suite
(Continue reading)

Eric Kow | 8 Oct 16:58 2015

new darcs maintainer: Guillaume Hoffmann

Hello Darcs users!

So last month I had a chance to reunite with the active members of the
Darcs team (Ganesh and Guillaume) at the Paris hacking sprint.  It was
a very nice time and I hope to see everyone again soon. During the
sprint (in between hack sessions), we also spent some time thinking
about the general future of Darcs, what sorts of directions we could
go in and how we can go about getting there. For example, what if we
thought a little outside the version control box? Could Darcs find a
niche for for making patch reordering work for other version control
systems? Possibly. It's worth exploring.

It's a different world out there now (but ever changing) than seven
years ago. In particular I think we have done an absolutely *splendid*
job adhering to the old Haskell slogan “avoid success at all costs!”
;-).  On the one hand the smaller community makes it harder to find
help and get effort directed at things. On the other hand, it's also a
blessing of sorts. With a little less juggling on our hands, we can
now direct more attention to the core work of getting Darcs right
(that's why we're pretty excited to see Pijul; this sort of work is
very helpful to us).

We still love Darcs; we still think it has something unique to offer
to the world and we still think it's interesting enough to work on.
There is a lot of work to do: hammering out of the core theory,
cleaning up of the code base, improving the basic engineering, the UI,
the ecosystem… In the meantime, I am glad to have been able to spend
some more time with Darcs folks. I get a lot of happiness out seeing
that people are still interested in working on Darcs and taking us
further along.
(Continue reading)

Florent Becker | 1 Oct 19:27 2015

Pijul 0.1

Dear darcs acolytes,

Pierre-Étienne Meunier and myself are honoured to present version 0.1 of
Pijul. Pijul is a draft of a prototype of an implementation of Samuel
Mimram and Cinzia Di Giusto's theory of patches.

Where can I learn more? Where can I find this pijul?

Pijul's homepage is http://pijul.org ; its sources are found at "darcs
get http://pijul.org". Both are a bit rough at the moment, but should
improve rapidly, maybe with your help…

There is a mailing list (pijul <at> pijul.org), and an irc channel is
available on irc.freenode.net, channel #pijul

Currently, pijul has a preliminary implementation of darcs' basic

What is a pijul, and how do I pronounce it?

A pijul is a south american bird (Crotophaga sulcirostris), a relative
of the cuckoo. In contrast with its parasitic cousin, the pijul lays
her eggs in a communal nest, where they are incubated by the whole

Pijul is thus pronounced as in spanish, IPA [pijul], or aproximately
pee-hhOOl (the hh is the sound at the end of scottish 'loch').

(Continue reading)

Pierre-Étienne Meunier | 18 Sep 12:36 2015

Linux binaries availability


There seems to be a problem with your linux binaries: the link referenced gives a 404 error.


Pierre-Étienne Meunier