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