Version control systems

Duncan Coutts duncan.coutts at
Tue Aug 12 08:17:25 EDT 2008

On Mon, 2008-08-11 at 14:29 +0200, Thomas Schilling wrote:
> On 11 Aug 2008, at 13:00, Duncan Coutts wrote:
> > It's not clear to me that we've really bothered to find out. The last
> > evaluation in relation to ghc that I'm aware of was prior to the 2.0
> > release. My impression is that we've all complained about the darcs v1
> > problems (justly) but spent the most effort investigating things other
> > than darcs v2 which would be the easiest to upgrade to and not have  
> > the
> > problems of using two different systems for ghc vs other libs.
> I converted the ghc repo to darcs2 (locally):
> Getting file local history:
>   * darcs changes --last 20 compiler/main/HscTypes.lhs
>     very quick but prints only two patches
>   * darcs changes compiler/hsSyn/HsTypes.lhs
>     1m22s  (16s for the second time)

Interesting that you get so much variance between runs. I get 32s user
time first time and 30s the second.

In this test darcs 2 is faster that darcs 1 on v1 format repos and darcs
2 is faster on v2 format repos than on v1 format, though only by a few

At a guess, the issue here is that darcs is not indexing those changes
per-file, which is why --last 20 doesn't give the last 20 for that file
and why asking for all changes takes so long. Perhaps if it did cache
this info per-file it'd help with annotate too.

>     Git <1s
>   * darcs get ghc2  ghc-test  (creating a *local* branch)
>     real    13m25.365s
>     user    0m14.677s
>     sys     0m29.541s
>     (at least it seems it actually worked, though)

That's an order of magnitude different to what I see:

$ time darcs2 get ghc2 ghc-test
Copying patches, to get lazy repository hit ctrl-C...
Finished getting.                       
real	0m21.428s
user	0m11.221s
sys	0m1.380s

Note that this is much faster in the darcs v2 format than darcs 2 using
the darcs v1 format:

$ time darcs2 get ghc ghc-test1
Finished getting.                                                  
real	1m51.959s
user	1m15.449s
sys	0m11.877s

However darcs v1 is faster still:

$ time darcs1 get ghc ghc-test1_

Copying patch 19084 of 19084... done.
Finished getting.

real	0m8.851s
user	0m3.668s
sys	0m0.708s

It doesn't seem to spend any time applying the patches, unlike what
darcs 2 is doing for v1 or v2 formats.

Though in any case, one doesn't need to darcs get locally since one can
use cp -a right?

>     git clone ghc g2  (the slow method of creating a local branch)
>     real    0m6.742s
>     user    0m0.335s
>     sys     0m0.652s
>   * I haven't tested a remote pull yet.  At 80 Kb/s, it should take  
> about 15min to clone via Git (70 MB).  A test of darcs would be  
> interesting.

We'll be testing this for the code.h.o conversion. We'll keep you


More information about the Glasgow-haskell-users mailing list