The unified diff between revisions [aa5d6bb9..] and [12eefb6c..] is displayed below. It can also be downloaded as a raw diff.

#
#
# patch "distributed-version-control-systems.texinfo"
#  from [5326e8b82ecc4e5dc51e8d1a7246578826b0903c]
#    to [1850f76ca9c1602c39a4a1a4a21f2a86d6bed8ce]
#
============================================================
--- distributed-version-control-systems.texinfo	5326e8b82ecc4e5dc51e8d1a7246578826b0903c
+++ distributed-version-control-systems.texinfo	1850f76ca9c1602c39a4a1a4a21f2a86d6bed8ce
@@ -5,7 +5,7 @@
 @afourpaper
 @c %**end of header

-@set EDITION Second Edition (2006-11-16)
+@set EDITION Second Edition (2006-11-19)

 @ifinfo
 @dircategory Programming
@@ -412,7 +412,13 @@ Serves repositories over HTTP, FTP, NFS,

 Serves repositories over HTTP, FTP, NFS, rsync, etc.  This is good.

-Quite slow, despite the huge progress made since 0.7.
+Still unacceptably slow, despite the huge progress made since 0.7.
+For example, commit is very slow.  The larger the file, the longer it
+takes to commit changes to it (large files in GCC include, among
+others, Makefile.in which is over a megabyte, and several ChangeLog
+files, and committing Makefile.in alone takes roughly 30 seconds on my
+reference machine).  See also the performance measurement for a
+lightweight checkout, below.

 Excellent built-in documentation.

@@ -471,10 +477,14 @@ $ bzr commit -m "private 4: merged from

 @section Storage efficiency

-The repository eats inodes like crazy; at least two files in the
-repository per file under version control, plus some constant
-overhead.
+The repository uses 405 megabytes.  It contains one knit file and one
+index file per file under version control.  The knit file is
+compressed using zlib and contains the entire history for the file.

+Doing a lightweight checkout of GCC 3.4.2 takes a 13 minutes.  The
+checkout time increases slowly with the size of the checkout
+(e.g. 14'13 for GCC 4.0.1, which is larger than 3.4.2).
+
 @node Mercurial
 @chapter Mercurial 0.8.1

@@ -812,26 +822,30 @@ of the branch.  Here again, Monotone bea
 It takes 3.5 minutes to do a fresh checkout of GCC 3.4.2 (in the
 middle of a branch), and then less than 2 minutes to update to the tip
 of the branch.  Here again, Monotone beats Meta-CVS hands down.
-(neither Bazaar-NG nor Mercurial have a checkout command, so we cannot
-compare them).

 @section Storage efficiency for Monotone 0.26

 The storage format changed in 0.26.

 The database takes 166 megabytes, or 65% less than Meta-CVS.  This is
-very good but comes at an unacceptable performance price.  It takes 19
-minutes to check out from the database, instead of 3.5 minutes with
-version 0.24.  During that time, Monotone eats 190 Mb of RAM and uses
-all available CPU.
-
-UPDATE: this was due to a memory leak in Botan, a library that
-Monotone uses.  The leak was introduced in 0.25 but became serious
-only in 0.26.  It has been fixed in 0.30.  As of 0.30, Monotone is
-even faster at checking out than 0.24.  See
+very good.  Due to a memory leak introduced in 0.25 but which became
+serious only in 0.26, it takes 6 minutes to check out from the
+database.  During that time, Monotone eats 190 Mb of RAM and uses all
+available CPU.  See
 @url{https://savannah.nongnu.org/bugs/?func=detailitem&item_id=16601,Bug
 #16601 on Savannah}.

+@section Storage efficiency for Monotone 0.30
+
+The storage format changed again in 0.30 but the changes only affect
+some cache structures; all versions above 0.26 are netsync-compatible
+with one another, i.e. they can replicate databases between them.
+
+The database now takes 160 Mb after conversion from the 0.26 format.
+Because 0.30 fixes the memory leak mentioned above, the checkout time
+drops to 2 minutes: even better than 0.24 which was already the best
+of all tested version control systems.
+
 @node Cogito
 @chapter Cogito

@@ -1003,31 +1017,38 @@ the only system that uses that model.

 @multitable {@strong{Version Control System}} {@strong{Size}} {@strong{tags}----------} {@strong{branches}} {@strong{checkout}} {@strong{integ}} {@strong{sign}} {@strong{auth}}
 @item @strong{Version Control System} @tab @strong{Size} @tab @strong{tags} @tab @strong{branches} @tab @strong{checkout} @tab @strong{integ} @tab @strong{sign} @tab @strong{auth}
-@item CVS                    @tab 474 @tab expensive    @tab yes  @tab yes @tab no  @tab no  @tab no
-@item Meta-CVS               @tab 474 @tab expensive    @tab yes  @tab yes @tab no  @tab no  @tab no
-@item Bazaar-NG 0.11         @tab   ? @tab no           @tab yes  @tab yes @tab no  @tab yes @tab no
-@item Mercurial 0.9          @tab 686 @tab cheap, local @tab no   @tab no  @tab yes @tab no  @tab no
-@item Monotone 0.24-0.25     @tab 183 @tab cheap        @tab yes  @tab yes @tab yes @tab yes @tab yes
-@item Monotone 0.26-0.29     @tab 165 @tab cheap        @tab yes  @tab yes @tab yes @tab yes @tab yes
-@item Monotone 0.30-0.31     @tab 160 @tab cheap        @tab yes  @tab yes @tab yes @tab yes @tab yes
-@item Git 1.4.3.3 (unpacked) @tab 409 @tab cheap, local @tab yes  @tab no  @tab yes @tab yes @tab no
-@item Git 1.4.3.3 (packed)   @tab  81 @tab cheap, local @tab yes  @tab no  @tab yes @tab yes @tab no
+@item CVS                    @tab 474 @tab expensive    @tab yes  @tab 15'   @tab no  @tab no  @tab no
+@item Meta-CVS               @tab 474 @tab expensive    @tab yes  @tab 15'   @tab no  @tab no  @tab no
+@item Bazaar-NG 0.11         @tab 405 @tab no           @tab yes  @tab 13'   @tab no  @tab yes @tab no
+@item Mercurial 0.9          @tab 686 @tab cheap, local @tab no   @tab no    @tab yes @tab no  @tab no
+@item Monotone 0.24-0.25     @tab 183 @tab cheap        @tab yes  @tab  2.5' @tab yes @tab yes @tab yes
+@item Monotone 0.26-0.29     @tab 165 @tab cheap        @tab yes  @tab  6'   @tab yes @tab yes @tab yes
+@item Monotone 0.30-0.31     @tab 160 @tab cheap        @tab yes  @tab  2'   @tab yes @tab yes @tab yes
+@item Git 1.4.3.3 (unpacked) @tab 409 @tab cheap, local @tab yes  @tab no    @tab yes @tab yes @tab no
+@item Git 1.4.3.3 (packed)   @tab  81 @tab cheap, local @tab yes  @tab no    @tab yes @tab yes @tab no
 @end multitable

-@table @strong
+@table @dfn
 @item Size
 The size of the repository containing the GCC sources, in megabytes
 (less is better).
+
 @item branches
 Supports multiple branches in a single repository thereby sharing
 storage.
+
 @item checkout
 Supports checking out multiple working copies per repository, thereby
-sharing storage.
+sharing storage.  The column contains the time to check out version
+3.4.2 from the reference reporisory, or ``no'' if the system doesn't
+support multiple checkouts per repository.
+
 @item integ
 Guarantees data integrity by means of strong hashes, e.g. SHA-1.
+
 @item sign
 Allows for crypto signatures for authentication.
+
 @item auth
 Built-in authorisation framework (if not included, must use external
 tools like SSH or file permissions).
@@ -1042,7 +1063,7 @@ 0.26.
 0.26.

 @item Second Edition, 2006-11-16.
-Update to Bazaar-NG 0.11, Monotone 0.30; add Cogito 0.18.1+Git 1.4.3.3.
+Update to Bazaar-NG 0.11, Monotone 0.31; add Cogito 0.18.1+Git 1.4.3.3.
 Add summary.
 @end table