Path to this page:
Subject: CVS commit: pkgsrc/devel/monotone
From: Julio M. Merino Vidal
Date: 2006-04-10 19:45:51
Message id: 20060410174551.24B072DA27@cvs.netbsd.org
Log Message:
Update to 0.26:
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
individually.
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',
'monotone commit'.
- 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
needed.
- Similarly, the recommended suffix for monotone db files is
now '.mtn'.
These changes are all purely cosmetic, and have no affect on
functionality.
- 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.
Netsync changes:
- The default netsync port has changed 5253 to 4691. 4691 is
our official IANA-assigned port. Please adjust firewalls
appropriately.
- 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 features:
- New option --brief to 'annotate', gives somewhat more
friendly output.
- 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
syntax:
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
rules.
- 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
'pivot_root', 'merge_into_dir'.
Minor bug fixes:
- 'serve' with no --bind argument should now work on systems
where the C library has IPv6 support, but the kernel does
not.
- 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
ignored.
- Monotone no longer errors out when using a French (fr)
locale with a non-Unicode codeset.
Other changes:
- Packet commands ('rdata', 'fdata', etc.) have been moved to
'automate'.
- 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,
sv).
Reliability considerations:
- 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.
Wed Mar 29 05:20:10 PST 2006
0.26pre3 release. This release may be considered a "release
candidate", in that while we need to write some tests and make
sure some bugs are fixed, all features are in and we hope that
no further bug fixes will be needed either. It is still a
pre-release for testing. Do not package it. DO NOT USE THIS
RELEASE UNLESS YOU WANT TO BE A DAREDEVIL.
But, PLEASE PLEASE TEST this release. There are some
non-trivial changes since 0.26pre2, and this is your last
chance!
Major changes since 0.26pre2:
- The name of the monotone binary has changed to 'mtn'.
- Similarly, the name of the bookkeeping directory in
workspaces has changed from 'MT' to '_MTN' (if you have an
existing 0.26-line workspace, just rename the MT directory
to _MTN).
- Similarly, the name of the ignore file has changed from
".mt-ignore" to ".mtn-ignore". 'rosterify' will \
rename
these automatically (if you have already rosterified, you
get to rename them by hand).
- Similarly, the recommended suffix for monotone db files is
now ".mtn".
- We now perform stricter checking to make sure that filenames
are valid UTF-8. It is in principle possible that this
stricter checking will cause histories that used to work to
break; if you have non-ascii filenames, it is strongly
recommended to test with this release.
- Root dir renaming is now supported. See new commands
'pivot_root', 'merge_into_dir'.
- As a side-effect, it is now possible to run 'rosterify' on
histories in which two independent lines of history were
merged.
- The security fix released in 0.25.2 has been forward-ported
to this release; this prevents some security exposure to
people running monotone as a client on case-insensitive file
systems.
Minor change since 0.26pre2:
- Database now uses sqlite blobs for storage; should be ~1/4
smaller.
- New command: show_conflicts, does a dry-run merge.
- New option 'drop --recursive', to remove a directory and all
its contents in one swoop.
- Changes to 'log':
- New option --no-files
- Including merges is again the default (i.e., it now acts
like 0.25, and not like 0.26pre2).
- When 'log -r' is given an ambiguous selector, it now just
logs all matching revisions, instead of requiring the
selector be disambiguated.
- New option --log, to log monotone output to a file.
- Netsync changes:
- Was sending far too much data in some cases; now does not.
- Several bugs that caused it to lock up fixed
- Tweak to allow 'usher' proxy to transparently redirect
based on client's protocol version, to ease migration
between incompatible protocol versions.
- Packet commands have been moved to 'automate'.
- Fixed bugs in 'db kill_rev_locally', should no longer leave
an inconsistent db behind.
- Translation updates
Other projects receiving notable work:
- Monotone's "dumb server" support (repo distribution over
HTTP/FTP/SFTP etc.) has been ported to 0.26, a first command
line version written, etc.
- The 'usher' netsync proxy used for hosting many databases on
a single machine has received significant cleanups, and the
'webhost' project to provide a simple interface to shared
monotone hosting providers has received even more work.
Sat Feb 11 13:32:51 PST 2006
0.26pre2 release. Inching towards 0.26. If you are using
0.25 or earlier, then make sure to read the very important
notes for 0.26pre1, below. In particular, like 0.26pre1, this
is a pre-release for testing. Do not package it. DO NOT USE
THIS RELEASE UNLESS YOU WANT TO BE A DAREDEVIL.
(Though, in fact, in a month of usage, only one bug has been
found in the new history code, and it was both minor and
harmless. It has additionally been fixed.)
Database changes:
- SQLite 3.3.3 has been imported. 3.3 introduces a new database
format that is not backwards compatible with earlier 3.x releases.
New databases will be created using this new format. Existing
databases remain compatible, and are not converted automatically.
Existing databases can be converted by performing a database
vacuum ('monotone db execute vacuum').
New features:
- New hook validate_commit_message -- use to verify that all
commit messages meet arbitrary user-defined rules.
UI improvements:
- rename (and mv) commands now accept a broader range of
syntax:
monotone rename foo some_dir
-> renames foo to some_dir/foo
monotone rename foo bar baz some_dir
-> moves foo, bar, and baz to some_dir/foo,
some_dir/bar, and some_dir/baz
- Print a warning if it looks like a user has made a quoting
mistake on push/pull/sync/serve (windows cmd.exe has
confusing rules here).
- New command "ls changed".
- New option "--next" to log, which displays descendents of
the start revision.
- Updating to an arbitrary revision now works again (as it did
in 0.25 and earlier). This allows one to, for instance,
switch a working copy to another head, or back up to an
earlier version, while preserving uncommitted changes.
- New option --brief to annotate, gives somewhat more friendly
output.
- Fixed bug that made ticker output from netsync inaccurate.
- In 'log', --no-merges is now the default, use --merges to
override.
- If the database is in the working copy, then it is always
ignored.
Bugs:
- 'serve' with no --bind should now work on systems where the
C library has IPv6 support, but the kernel does not.
- Compile fixes for GCC 4.1 pre-releases.
Other:
- Better detection when users have not run "rosterify", and
more helpful suggestions on what to do in this case.
- Documentation, translation, error message,
etc. improvements.
- Updates to contrib/mtbrowse.sh, simple shell-based monotone
interface.
- Updates to many other contrib/ files, mostly to maintain
compatibility with monotone changes.
Sun Jan 8 01:08:56 PST 2006
0.26pre1 release. Massive rewrites, released for shakedown.
This release is also dedicated to Shweta Narayan.
This release includes massive changes compared to 0.25. The
core versioning code has all been replaced with a completely
different mechanism. Data formats and the netsync protocol
have changed in incompatible ways.
Migration to 0.26pre1 or later is irreversible and requires a
flag day for your project. See UPGRADE for details. Note
that we DO NOT recommend upgrading at this time; see below.
If you have been following the development list for the last
few months, you may have heard about "rosters" -- this is the
name for the new core data structure we use. While the code
is completely different, the user experience should not be
very different. You will never see a roster, unless you are
debugging monotone itself; everything still revolves around
revisions, manifests, and certs.
While this new code has extensive tests, because of these
incompatibilities, it has never been used for real work. The
purpose of this release is to make a version available for the
monotone developers to begin using for day-to-day work, to
shake out bugs.
Let's say that again in caps: THIS CODE IS PROBABLY BUGGY, DO
NOT USE IT IN PRODUCTION UNLESS YOU WANT TO BE A DAREDEVIL.
However, testing of this version with real databases is a good
idea, and we'd very much appreciate hearing about your
experiences.
Some of the many changes:
- New textual format for revisions and manifests; they remain
conceptually the same, but have been tweaked. Manifests
now use the same "basic_io" format as everything else in
monotone, and contain entries for directories, revisions
record file adds slightly differently and record directory
adds for the first time, etc. Because of this format
change, revision hashes are now different; converting
rosters requires a full history rebuild and reissue of certs.
- Directories are now first class. To get rid of a directory
you must remove it; to create a directory, you must add it.
You can add an empty directory.
- Attrs are now first class. The .mt-attrs file is gone;
attributes are now stored directly in the manifest.
- New merge algorithm, based on "multi-*-merge", and more
aggressive, less buggy merge ancestor selection code
- Netsync's core has been largely rewritten. Code is now much
clearer and more reliable, and now includes the ability to
resume interrupted partial transfers. The netsync protocol
version number has been bumped, and netsync now runs on the
IANA-assigned port 4691 by default.
- 100% fewer change_set.cc related bugs. 100% more roster.cc
related bugs. But the idea of touching roster.cc does not
terrify people.
Files: