|| ||Nathaniel Smith <njs-AT-pobox.com>|
|| ||monotone-announce-AT-nongnu.org, monotone-devel-AT-nongnu.org|
|| ||[ANNOUNCE] monotone 0.26 released|
|| ||Sat, 8 Apr 2006 22:51:38 -0700|
The monotone team is pleased to announce the release of monotone 0.26,
now available at the usual place:
Also as usual, packages and binaries will become available there as
we receive them.
This release includes major enhancements relative to 0.25.2, including
completely rewritten versioning and merging code, a change in the name
of the main binary, and many many smaller changes. Due to the
magnitude of these changes, migration is more elaborate than usual;
when you are ready to upgrade, please see the UPGRADE file for
For a more detailed description of user-visible changes in this
release, please see the release notes. A complete history of these
notes is available in the file NEWS in the distribution:
and the 0.26 notes are, for convenience, included here:
Sat Apr 8 19:33:35 PDT 2006
0.26 release. Major enhancements and internal rewrites.
Please read these notes carefully, as significant changes are
described. In particular, you _cannot_ upgrade to 0.26
without some attention to the migration, especially if you are
working on a project with other people. See UPGRADE for
details of this procedure.
The changes are large enough that there were 3 pre-releases of
this code; the changes that occurred in each can be seen
below. However, for the convenience of those following
releases, all changes since 0.25 will be summarized in these
release notes. There is no need to read the pre-release notes
Major changes since 0.25:
- The most user-visible change is that the default name of the
monotone binary has changed to 'mtn'. So, for example, you
would now run 'mtn checkout', 'mtn diff', 'mtn commit',
etc., instead of 'monotone checkout', 'monotone diff',
- Similarly, the name of the workspace bookkeeping directory
has changed from "MT" to "_MTN". As workspaces will
generally be recreated when migrating to this release,
this should not cause any problems.
- Similarly, built-in attrs like 'execute' have had 'mtn:'
prepended to their names. For example, executable files
should now have the attr 'mtn:execute' set to 'true' on
them. The migration code will automatically add this
prefix; no user intervention is needed.
- Similarly, the name of the ignore file has changed from
'.mt-ignore' to '.mtn-ignore'. The migration code will
automatically rename this file; no user intervention is
- Similarly, the recommended suffix for monotone db files is
These changes are all purely cosmetic, and have no affect on
- The most developer-visible change is that the data
structure for representing trees has been completely
replaced, and all related code rewritten. The new data
structure is called a 'roster'. You don't really need to
know this name; unless you are hacking on monotone or using
various debug operations, you will never see a roster.
It's mostly useful to know that when someone says something
about 'roster-enabled monotone' or the like, they're
referring to this body of new code.
This change has a number of consequences:
- The textual format for revisions and manifests changed.
There is no conceptual change, they still contain the same
information and work the same way. The formats were
merely cleaned up to correct various problems experience
showed us, and allow various enhancements now and in the
future. However, this change means that a flag-day
migration is required. See UPGRADE for details.
- Directories are now first-class objects. You can add an
empty directory, must drop a directory if you want it to
go away, etc.
- Attrs are now first-class objects. '.mt-attrs' no longer
exists; attrs are now described directly in the manifest,
and changes to them appear directly in revisions. The
migration code will automatically convert existing
.mt-attrs files to the new first-class attrs. If you have
custom attrs, those may require special handling -- if
this is the case, then the upgrader will tell you.
- The merge code has been rewritten completely. The
interface is currently the same (though this rewrite makes
it easier to improve the interface going forward); if you
have found merging in monotone to be easy in the past,
then you will not notice anything different. If you have
run into problems, then the new merger should make your
life substantially simpler. It has full support for
renames (of both directories and files), intelligent
merging of attrs, improved handling of file content
merges. Is the first known merger implementation based on
a provably correct algorithm (the "multi-*-merge"
algorithm), has exhaustive automated tests, and generally
should give accurate, conservative merges.
- The new code is generally faster, though not yet as
fast as it could be.
- The default netsync port has changed 5253 to 4691. 4691 is
our official IANA-assigned port. Please adjust firewalls
- Netsync code has also been largely reworked; new code should
provide better opportunities for
- The protocol is incompatible with earlier versions of
monotone. This should not be a surprise, since the data it
carries is also incompatible (see above)...
- New option --brief to 'annotate', gives somewhat more
- Several enhancements to log:
- New option --next, to display descendent revisions
(rather than ancestor revisions).
- When 'log -r' is given an ambiguous selector, it now just
logs all matching revisions, instead of requiring the
selector be disambiguated.
- New option --no-files.
- New command 'show_conflicts', performs a dry run merge.
- New command 'ls changed'.
- 'rename' (and its alias 'mv') now accept a broader range of
mtn rename foo some_dir
-> renames foo to some_dir/foo
mtn rename foo bar baz some_dir
-> moves foo, bar, and baz to some_dir/foo,
some_dir/bar, and some_dir/baz
- New hook 'validate_commit_message', which may be used to
verify that all commit messages meet arbitrary user-defined
- New option --log, to log monotone's output to a file.
- New option 'drop --recursive', to remove a directory and its
contents in one swoop.
- The root dir may now be renamed. This is a somewhat exotic
feature, but has some interesting uses related to splitting
up or joining together projects; see new commands
Minor bug fixes:
- 'serve' with no --bind argument should now work on systems
where the C library has IPv6 support, but the kernel does
- Stricter checking on the internal version of filenames to
ensure that they are valid UTF-8.
- If the database is in the workspace, then it is always
- Monotone no longer errors out when using a French (fr)
locale with a non-Unicode codeset.
- Packet commands ('rdata', 'fdata', etc.) have been moved to
- Database storage now uses sqlite's blob support; database
files should be ~1/4 smaller as a result.
- Monotone now uses sqlite 3.3; this means that older versions
of the command line client (e.g., an 'sqlite3' command built
against sqlite version 3.2) cannot be used to poke at a
monotone 0.26 database. Solution is to upgrade your sqlite3
program. Hopefully this is irrelevant to most users...
- Translations updated, and 3 new translations added (de, it,
- This new codebase has received much less testing under real
world conditions than the codebase used in 0.25, simply
because it is newer. It has been in active use for monotone
development since 8 January 2006, and only a small number of
bugs have been found; all bugs found so far have been very
minor, and none stood any danger of corrupting data.
Furthermore, we are much more confident in the theoretical
underpinnings of the new approach than the old, and the test
suite attempts to exhaustively exercise all new code paths.
However, none of this is or can be a substitute for real
world experience. We advise caution in upgrading to this
version of monotone, and suggest that (especially) those who
upgrade aggressively should pay extra attention to the
monotone mailing list before and after doing so.
Share and enjoy,
Details are all that matters; God dwells there, and you never get to
see Him if you don't struggle to get them right. -- Stephen Jay Gould
to post comments)