|| ||Nathaniel Smith <njs-AT-pobox.com>|
|| ||[ANNOUNCE] monotone 0.18|
|| ||Mon, 11 Apr 2005 21:46:59 -0700|
I am pleased to announce that monotone 0.18 has been released, and is
available from the monotone web site:
This release adds a number of new features, usability improvements,
bug fixes, and performance improvements; the full NEWS file is
Many will be particularly interested in the performance improvements.
The checking done by an initial 'pull' has been sped up by a factor of
very roughly 2 (this will vary a great deal depending on the size of
your tree, etc.). Additionally, performance on large trees has been
improved. For instance:
$ tar xjf linux-2.6.11.tar.bz2
$ cd linux-2.6.11
$ monotone --db ../test.db setup .
$ time ../../0.18/monotone add . 2>/dev/null
monotone add . 2> /dev/null 10.12s user 0.32s system 93% cpu 11.147 total
$ time ../../0.18/monotone commit --branch=org.example.kerntest --message=test
monotone: beginning commit on branch 'org.example.kerntest'
enter passphrase for key ID [test]:
monotone: committed revision f57d9b5a2a22dda8fb62c0dafd280242e6a89e06
monotone commit --branch=org.example.kerntest --message=test 144.05s user 9.06s system 77% cpu
$ time ../../0.18/monotone diff
# no changes
monotone diff 16.86s user 1.21s system 73% cpu 24.506 total
That last measurement can be improved somewhat by the new
"inodeprint" support. Previously (and still by default), monotone
detects changes in a working copy by simply hashing all files in the
working copy. On large trees, this takes several seconds of CPU, and
can take several minutes of IO. The new functionality is that you can
request that monotone keep a cache of some quickly computed metadata
about each file in the tree (mtime, size, etc.), and assume that any
files whose metadata has not changed have their contents unchanged as
well. There is no documentation or UI for this yet; for now, "touch
MT/inodeprints" to turn it on, and then do a "commit", "update", or
"revert" to trigger a cache regeneration. (The best time to do it is
right after running "monotone setup".) These 3 operations are
somewhat slowed down (though this can be optimized somewhat in the
future), and it will _not_ give you sub-second diff calculation, but
it does give a reasonable speedup in all cases and a huge speedup on a
cold cache. Rerunning the last command above with a working copy in
inodeprints mode gives:
$ time monotone diff
# no changes
monotone diff 11.78s user 0.15s system 99% cpu 12.029 total
The remaining 12 seconds are almost entirely taken by monotone's
sanity checking of the generated changeset -- verifying that you
don't have "rename foo bar" and "add bar" together, you don't have two
files named "foo/bar" and "foo", or two different files with names
"foo/./bar" and "foo/bar", or any file named
"../../.ssh/authorized_keys", etc., etc. This should be highly
susceptible to further optimization -- 10-20% of the time is taken by
malloc locking/unlocking mutexes (in a single-threaded program), it
seems likely that the filename parser we use from Boost could be sped
up, etc. More profiling and optimizations welcome.
"Lull'd in the countless chambers of the brain,
Our thoughts are link'd by many a hidden chain:
Awake but one, and lo! what myriads rise!
Each stamps its image as the other flies"
-- Ann Ward Radcliffe, The Mysteries of Udolpho
Sun Apr 10 17:49:25 PDT 2005
0.18 release. performance improvements, features, and bug fixes.
This release is dedicated to Shweta Narayan.
- most operations sped up by a factor of 2 or better; many sped up
by up several orders of magnitude.
- special thanks to Matt Johnston <firstname.lastname@example.org>, Derek
Scherger <email@example.com>, Linus Torvalds
- new concept: "database vars". Used in several features below.
- new features:
- new file "MT/log" can be edited while you work,
sets default changelog. (no change in behaviour if
you do not edit it.) Thanks to Jeremy Cowgar
- monotone now stores default netsync
server/collection, initialized on first use of
- you no longer need to manually import server
keys, monotone will fetch the key from the server on
- monotone keeps track of keys of servers you have
previously synced with, to prevent man-in-the-middle
- several powerful new "automate" commands added.
- new command 'ls known', lists files that are under version
control. Thanks to Florian Weimer <firstname.lastname@example.org>.
- preliminary "inodeprints" functionality -- speeds up diff,
status, etc. No UI or documentation yet -- in a working
copy, 'touch MT/inodeprints' to enable, then commit or
update to populate cache.
- UI improvements:
- Added short options -r, -b, -k, -m.
- default to 'dot' ticker-style when stderr is
not a tty, thanks to Derek Scherger
- New "-@/--xargs" option, helpful when using new
automate commands. Thanks to Richard Levitte
- New "--depth" argument to 'log'. Thanks to Richard
- 'db info' gives statistics on space usage.
- new command 'dropkey'. Thanks to Jeremey Cowgar
- robustness improvement: if monotone crashes in a working
directory and --dump and --debug were not specified, saves
debug dump to "MT/debug" for analysis, instead of
- new contributed scripts: CIA (cia.navi.cx) notification,
email notification, Bash completion.
- 33 new integration tests. total line coverage: ~82%.
- many bug fixes
- Special thanks to Matt Johnston <email@example.com>,
for going above and beyond to track down the last
- upgrading from 0.17 requires only a 'db migrate'.
Fri Mar 18 15:38:52 PST 2005
0.17 release. bug fixes and features.
- many, many robustness improvements
- more careful checking everywhere
- much more thorough test suite
- all revisions subject to careful checks before
- not yet fully optimized; "pull" may be very
slow and use lots of cpu
- support for "epochs", to safely manage future
rebuilds, hash migration, etc.
- new "db check" command, thanks to Derek Scherger
- now uses sqlite3, thanks to Christof Petig
- removes most former size limitations
- "restrictions" support, thanks to Derek Scherger
- most commands now take a list of files to limit
their actions to
- monotone can now be run from anywhere in the working
directory (not just the root)
- new command "monotone setup" required to create a
working directory for a new project
- important security fix -- don't use shell when calling
external merge commands.
- format change for "MT/options", ".mt-attrs"; you may have to
edit these files
- new command "attr" for managing .mt-attrs.
- builds merkle tries in-memory -- netsync starts up many
- start of new "automate" interface, for shell scripts and
- new command "cdiff": generates context diffs.
- remove most of now-obsolete manifest/file cert support.
- 60+ new integration tests.
- many portability fixes
- in particular, major win32 cleanups, thanks to Jon
Bright <firstname.lastname@example.org>. win32 is once again
fully and natively supported.
- many bug fixes
- several incompatible changes: see file UPGRADE for
Thu Dec 30 01:37:54 EST 2004
0.16 release. bug fixes.
- 50+ new integration tests
- many NetBSD portability fixes
- release build on gcc 3.4 / FC3
- masses of changeset bugs in 0.15 fixed
- some bogus changesets were generated
in the 0.16 development cycle. you will
need to rebuild revision graph.
Sun Nov 7 14:06:03 EST 2004
0.15 release. major changes.
- overhauled the internal representation of changes. see
README.changesets for details
- fixed bugs in merkle trie synchronization code
- fixed echoing and progress UI bugs
(helps when using in emacs)
- upgraded cryptopp to 5.2.1
- fixed bug 8715, diff hunk coordinate reporting
- added figures, new tutorial to manual
- improve accuracy of log command
- several build, configure, and linkage fixes
- some OSX / PPC portability fixes
Sat Jul 31 15:38:02 EDT 2004
0.14 release. bug fixes.
- some compile fixes for g++ 3.4
- made --dump=FILE option for saving traces,
otherwise failures just print reason (no trace)
- some things disabled, as scheduled for replacement
by upcoming changeset branch work
- disabled "disapprove" command due to bad semantics
- removed "bump" and .mt-nonce machinery
- several critical rename-merging bugs fixed
- renames vs. deletes
- renames vs. deltas
- parallel renames
- bugs fixed from savannah bug tracker:
- 9223 argv overflow
- 9075 empty commits
- 8919 rename --verbose to --debug
- 8958 rename debug to db execute
- 8920 empty passphrase message
- 8917 connection refused message
- 8913 testresult argument
- 8912 passphrase read on serve
- 8472 approve into branch
- 8428 duplicate key warning
- 8928 nonce uses too many bits
Thu May 20 22:26:27 EDT 2004
0.13 release. bug fixes.
- remove (file|manifest) in several commands
- "list missing" command
- fixed bugs:
- (critical) empty data netsync crash
- mkstemp, platform lua
- runtime error reporting chatter
- non-posix database names
- non-posix dirnames
- non-posix merge names
- 2-way merge algorithm and hook
- single-character filenames
- multiple password reads
- .svn ignore pattern
Sun May 2 21:03:38 EDT 2004
0.12 release. win32 port, bug fixes and optimizations.
- ported to native win32 (mingw)
- implemented human friendly version selectors
- added post-commit hook for change notification
- removed spirit-based parsers, reduced compile costs
- many netsync bugs removed, pipeline performance improved
- removed old, deprecated networking system
- several minor CVS import bugs fixed
- upgraded bundled netxx
Sun Mar 28 12:41:07 EST 2004
0.11 release. bug fixes and optimizations.
NOTE: this release expands the sqlite page size. YOU WILL NEED
to dump existing databases before upgrading and reload it
after upgrading, otherwise monotone will complain that the
database image appears malformed. this condition cannot
unfortunately be distinguished from a real malformed image on
disk. for example:
$ monotone --db=my.db db dump >dump.sql
$ <upgrade to new monotone>
$ mv my.db my.db.backup
$ monotone --db=my.db db load <dump.sql
- fixed bugs:
- aliasing bug on debian (-O2 now works)
- netsync ppc portability / checksums
- sha1 whitespace bug
- netsync broken formatter
- broken symlink handling
- merger execution pessimism
- LCA bitset calculation pessimism
- static object initialization order
- CVS single-version import
- CVS first-version changelog
- CVS branch inference and topology
- cryptographic SSE2 paths enabled on linux/x86.
- builds against boost 1.31.0.
- removed boost::socket
- removed documentation about old networking system.
- "officially" deprecated old networking system.
- enable building with system-local libraries.
- upgraded bundled sqlite.
- changed sqlite page size from 1k -> 8k
Mon Mar 1 00:32:07 EST 2004
0.10 release. new "netsync" protocol implemented, allowing
direct monotone-to-monotone database synchronization. random
number underflow problem fixed. more tests added. database
schema changed, must migrate schema. added new QA logic to
update and merge algorithms (testresult / approval).
Thu Jan 1 18:23:06 EST 2004
0.9 release. support international users (non-ASCII character
sets, locales). some corrections to update algorithm. line
merging algorithm reimplemented. support working copy
MT/monotonerc file. broke format compatibility with MT/work
files; commit any pending work before upgrading. permit
spaces, colons, other "funny" characters in filenames. support
HTTP 1.1, HTTP proxies, handle some corner cases in ancestry
graph and database faults.
Fri Nov 21 20:25:26 EST 2003
0.8 release. row size increased to 16mb. more performance
improvements in cvs importer. cvs branch tags imported now.
minor UI improvements. new commands: SQL dump and load, vcheck
for enhanced collision detection, queue addtree for recursive
queueing. improved networking scalability. historical rename
certs and .mt-attrs file format changed to accomodate upcoming
Sun Nov 2 23:38:09 EST 2003
0.7 release. many critical merge and patch set calculation
bugs fixed. groups merged with URLs, "monotone db migrate"
necessary. directory renames and explicit rename certs
supported. added SMTP support. incorporated adns library,
avoiding gethostbyname(). new queue commands.
Sat Oct 18 22:10:09 EDT 2003
0.6 release. more stability and bug fixing, including fix to
some silent failures in LCA calculation. some minor new
features: persistent attributes (eg. 'the execute bit'),
rename and log commands. performance of cvs importer greatly
improved, lua system upgraded to 5.0, much expanded
Sat Sep 27 11:50:08 EDT 2003
0.5 release. stability and bug fixing. many UI issues
addressed, including SHA1 completion, persistent options, new
revert command and new diff modes. database migration,
inspection and debugging interfaces added. LCS algorithm and
line-merger overhauled. several multi-depot bugs
fixed. existing depot databases should be migrated (depot.cgi
Thu Sep 4 15:40:07 EDT 2003
0.4 release. monotone is now self-hosting. database
compatibility broken since 0.3. depot uses RSA signatures now,
not mac keys. many bugs removed. depot database compatibility
broken. database schemas should now remain stable (or be
provided with safe schema-upgrading function).
Mon Aug 25 18:00:37 EDT 2003
0.3 release. database compatibility broken. packet format
compatibility broken. dropped boost sandbox library dependency.
redid networking to support private HTTP+CGI depots along with
netnews. wrote depot. added 'propagate' command to move changes
between branches asymmetrically. rewrote testsuite in autotest.
cleaned up command line processing. expanded testsuite. improved
user-friendly error reporting.
Fri Aug 8 10:20:01 EDT 2003
0.2 release. database compatibility broken. dropped many
library dependencies. hand-reimplemented xdelta, parts of
nana. incorporated subset of cryptopp and sqlite into
sources. added RCS and CVS importer. switched to piecewise
reconstruction. generally much more robust storage system.
scalability tests against real world CVS archives show
performance gap with CVS closing, but still present.
Sun Apr 6 20:20:42 EDT 2003
Monotone-devel mailing list
to post comments)