monotone-commits-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Monotone-commits-diffs] net.venge.monotone: 40fb3af2cda309d38831c2665d


From: code
Subject: [Monotone-commits-diffs] net.venge.monotone: 40fb3af2cda309d38831c2665d6a694bc23d1102
Date: Sun, 9 Jan 2011 01:28:07 GMT

revision:            40fb3af2cda309d38831c2665d6a694bc23d1102
date:                2011-01-09T01:27:53
author:              address@hidden
branch:              net.venge.monotone
changelog:
merge of '04b73c0a1589ac36dd18197e5d10b32dea75b4df'
     and 'dadfe09ef110a82d624b82c594ee60c75363a182'

manifest:
format_version "1"

new_manifest [de32223e007abb3c79555cb1c813453dddbd8693]

old_revision [04b73c0a1589ac36dd18197e5d10b32dea75b4df]

patch "INSTALL_windows_cygwin.txt"
 from [bec39a7c68aa05da1f3b620569382bf390d53143]
   to [6466e85ad63129aecf6dfe4953352f6c0369079b]

patch "INSTALL_windows_native.txt"
 from [e6fdc73a0d83a125f12557d5d8bb9c655feb47ef]
   to [7f2c5080adf14266d8949975f95c8e97dd8b7f0c]

patch "monotone.texi"
 from [68434cc3c9a0051f28fe4cb0031c73456889586f]
   to [bd4be1e6b3da75b8989f581e315813e2850ef1d2]

old_revision [dadfe09ef110a82d624b82c594ee60c75363a182]

add_dir "tests/db_opt_fallback_mechanisms"

add_file "tests/db_opt_fallback_mechanisms/__driver__.lua"
 content [09354a970b921effa2850aa4ad722ce95a433ea8]

patch "NEWS"
 from [1e1359c5cd7ef37431ad77f27d952639754d2b8c]
   to [158aeaaa4f6dc2adee1de8f698bcf52783cf9633]

patch "cmd_netsync.cc"
 from [c5dcaa406cddacc083e28d68e5746ed4ad39ce25]
   to [732e7c4f6adb6bc8bd96964ab147e53e700053c1]

patch "database.cc"
 from [8bfff559a0894259fe3668294bd3906ae837129b]
   to [c4d5eb755d893255d1be35276e2b12ccbea8372c]

patch "work.cc"
 from [6daa957e96a3248b2415519cab25aa4123bd809a]
   to [304b3f0ad0624464b9b16b23d0dcb78b4a8effb2]
============================================================
--- monotone.texi	68434cc3c9a0051f28fe4cb0031c73456889586f
+++ monotone.texi	bd4be1e6b3da75b8989f581e315813e2850ef1d2
@@ -5038,15 +5038,17 @@ @section Tree
 
 @ftable @command
 @item mtn checkout [--[no-]move-conflicting-paths] address@hidden @var{directory}
address@hidden mtn co [--[no-]move-conflicting-paths] address@hidden @var{directory}
address@hidden mtn [--[no-]move-conflicting-paths] address@hidden checkout @var{directory}
address@hidden mtn [--[no-]move-conflicting-paths] address@hidden co @var{directory}
-
address@hidden mtn checkout [--[no-]move-conflicting-paths] address@hidden @var{directory}
address@hidden mtn co
 These commands copy a revision @var{id} out of your database,
 recording the chosen revision (the @dfn{base revision}) in the file
 @address@hidden/_MTN/revision}. These commands then copy every
 file version listed in the revision's manifest to paths under
address@hidden For example, if the revision's manifest contains
address@hidden
+
address@hidden is an alias for @command{checkout}
+
+For example, if the revision's manifest contains
 these entries:
 
 @smallexample
@@ -5087,6 +5089,15 @@ @section Tree
 @item mtn conflicts
 @ref{Conflicts}
 
address@hidden mtn explicit_merge @var{id} @var{id} @var{destbranch}
+This command merges exactly the two @var{id}s you give it, and places
+the result in branch @var{destbranch}.  It is useful when you need more
+control over the merging process than @command{propagate} or @command{merge}
+give you.  For instance, if you have a branch with three heads, and you
+only want to merge two of them, you can use this command.  Or if you
+have a branch with two heads, and you want to propagate one of them to
+another branch, again, you can use this command.
+
 @item mtn heads address@hidden
 This command lists the ``heads'' of @var{branchname}.
 
@@ -5097,6 +5108,33 @@ @section Tree
 not be the newest revisions, in terms of time, but synchronization of
 computer clocks is not reliable, so monotone usually ignores time.
 
address@hidden mtn import address@hidden address@hidden [--[no-]dry-run] @var{dir}
address@hidden mtn import address@hidden address@hidden [--[no-]dry-run] @var{dir}
+This command imports the contents of the given directory and commits it
+to the head of the given branch or as a child of the given revision (and
+consequently into the branch that revision resides in).
+
+If the given branch doesn't exist, it is created automatically.  If the
+branch already exists, any missing files are dropped and any unknown
+files are added before committing.
+
+If @command{--dry-run} is given, no commit is done.
+
+Roughly speaking, @command{mtn import} does the following:
+
address@hidden
address@hidden
+$ mtn setup @r{(with a twist)}
+$ mtn drop --missing
+$ mtn add --unknown
+$ mtn commit
address@hidden group
address@hidden example
+
+The twist with the @command{mtn setup} part is that it sets the parent
+to be the given revision or the head of the given branch instead of the
+null revision.
+
 @item mtn merge address@hidden
 This command merges the ``heads'' of @var{branchname}, if there are
 multiple heads, and commits the results to the database, marking the
@@ -5112,34 +5150,6 @@ @section Tree
 algorithm. The process then repeats for each additional head, using
 the result of each previous merge as an input to the next.
 
address@hidden mtn propagate @var{sourcebranch} @var{destbranch}
-This command takes a unique head from @var{sourcebranch} and merges it
-with a unique head of @var{destbranch}, using the least common
-ancestor of the two heads for a 3-way merge. The resulting revision is
-committed to @var{destbranch}. If
-either @var{sourcebranch} or @var{destbranch} has multiple heads,
address@hidden aborts, doing nothing.
-
-A commit message may be provided. A message stating the source and
-target branches will be prepended to any user commit message.
-
-The purpose of @command{propagate} is to copy all the changes on
address@hidden, since the last @command{propagate}, to
address@hidden This command supports the idea of making separate
-branches for medium-length development activities, such as
-maintenance branches for stable software releases, trivial bug fix
-branches, public contribution branches, or branches devoted to the
-development of a single module within a larger project.
-
address@hidden mtn explicit_merge @var{id} @var{id} @var{destbranch}
-This command merges exactly the two @var{id}s you give it, and places
-the result in branch @var{destbranch}.  It is useful when you need more
-control over the merging process than @command{propagate} or @command{merge}
-give you.  For instance, if you have a branch with three heads, and you
-only want to merge two of them, you can use this command.  Or if you
-have a branch with two heads, and you want to propagate one of them to
-another branch, again, you can use this command.
-
 @item mtn merge_into_dir @var{sourcebranch} @var{destbranch} @var{dir}
 This command takes a unique head from @var{sourcebranch} and merges it
 into a unique head of @var{destbranch}, as a directory. The resulting
@@ -5159,33 +5169,28 @@ @section Tree
 originally in @var{sourcebranch}, which is almost certainly not what would be
 intended.
 
address@hidden mtn import address@hidden address@hidden [--[no-]dry-run] @var{dir}
address@hidden mtn import address@hidden address@hidden [--[no-]dry-run] @var{dir}
-This command imports the contents of the given directory and commits it
-to the head of the given branch or as a child of the given revision (and
-consequently into the branch that revision resides in).
address@hidden need merge_into_workspace
address@hidden need migrate_workspace
 
-If the given branch doesn't exist, it is created automatically.  If the
-branch already exists, any missing files are dropped and any unknown
-files are added before committing.
address@hidden mtn propagate @var{sourcebranch} @var{destbranch}
+This command takes a unique head from @var{sourcebranch} and merges it
+with a unique head of @var{destbranch}, using the least common
+ancestor of the two heads for a 3-way merge. The resulting revision is
+committed to @var{destbranch}. If
+either @var{sourcebranch} or @var{destbranch} has multiple heads,
address@hidden aborts, doing nothing.
 
-If @command{--dry-run} is given, no commit is done.
+A commit message may be provided. A message stating the source and
+target branches will be prepended to any user commit message.
 
-Roughly speaking, @command{mtn import} does the following:
+The purpose of @command{propagate} is to copy all the changes on
address@hidden, since the last @command{propagate}, to
address@hidden This command supports the idea of making separate
+branches for medium-length development activities, such as
+maintenance branches for stable software releases, trivial bug fix
+branches, public contribution branches, or branches devoted to the
+development of a single module within a larger project.
 
address@hidden
address@hidden
-$ mtn setup @r{(with a twist)}
-$ mtn drop --missing
-$ mtn add --unknown
-$ mtn commit
address@hidden group
address@hidden example
-
-The twist with the @command{mtn setup} part is that it sets the parent
-to be the given revision or the head of the given branch instead of the
-null revision.
-
 @item mtn refresh_inodeprints
 This command puts the current workspace into @ref{Inodeprints} mode,
 if it was not already, and forces a full inodeprints cache refresh.
@@ -5236,10 +5241,13 @@ @subsection Conflicts
 directory, or absolute. In the conflict file, they are relative to the
 workspace root, or absolute.
 
+The commands are listed in the order they are typically used, not
+in alphabetical order. Then the conflict resolutions are discussed.
+
 @subheading Commands
 
 @ftable @command
address@hidden mtn conflicts address@hidden store @var{left_rev_id} @var{right_rev_id}
address@hidden mtn conflicts store address@hidden @var{left_rev_id} @var{right_rev_id}
 Store the conflicts encountered by merging @var{left_rev_id} with
 @var{right_rev_id}, in the specified file.
 
@@ -5253,19 +5261,19 @@ @subheading Commands
 have resolutions, so they will not show up in subsequent
 @command{show_first} commands.
 
address@hidden mtn conflicts address@hidden show_first
address@hidden mtn conflicts show_first address@hidden
 Show the first unresolved conflict in the conflicts file, and list the
 possible resolutions.
 
address@hidden mtn conflicts address@hidden show_remaining
address@hidden mtn conflicts show_remaining address@hidden
 Show remaining unresolved conflicts in the conflicts file.
 
address@hidden mtn conflicts address@hidden resolve_first @var{resolution}
address@hidden mtn conflicts resolve_first address@hidden @var{resolution}
 Specify a resolution for the first conflict in the conflicts file; it
 must be a single file conflict. The conflicts file is updated.
 
address@hidden mtn conflicts address@hidden resolve_first_left @var{resolution}
address@hidden mtn conflicts address@hidden resolve_first_right @var{resolution}
address@hidden mtn conflicts resolve_first_left address@hidden @var{resolution}
address@hidden mtn conflicts resolve_first_right address@hidden @var{resolution}
 Specify a resolution for one of the files in the first conflict in the
 conflicts file; it must be a two file conflict. The conflicts file is
 updated.
@@ -5369,7 +5377,7 @@ @section Workspace
 
 As a convenience, the @option{--unknown} option can be used; this
 option will cause all of the files listed by @command{mtn list
-unknown} to be added.
+unknown} to be added. @c FIXME: what happens for '--unknown pathname'?
 
 While this command places an ``add'' entry on your work list, it does
 not immediately affect your database. When you @command{commit} your
@@ -5383,84 +5391,27 @@ @section Workspace
 directory non-recursively, monotone will warn if the directory has
 any files that would be added by a recursive add.
 
address@hidden mtn mkdir [--[no-]respect-ignore] @var{directory...}
-This command creates a directory in the filesystem relative to your
-current location and adds it to your workspace's ``work list''.  The
-changes are not reflected in your database until such time as you
-perform a commit.  If you use the @option{--no-respect-ignore} flag,
-entries in @file{.mtn-ignore} will not be honored.
address@hidden FIXME: what does it mean to honor .mtn-ignore here?
address@hidden need 'attr'
 
address@hidden mtn drop [--bookkeep-only] @var{pathname...}
address@hidden mtn drop --missing
-This command places ``drop'' entries for the paths specified in
address@hidden in the workspace's ``work list'' and deletes
-the file from the workspace. The work list of
-your workspace is stored in @file{_MTN/revision}, and is a list of
-explicit pathname changes you wish to commit at some future time, such
-as addition, removal, or renaming of files.  This command also removes
-any attributes on @var{pathname}; see @ref{File Attributes} for more
-details.  If you use the @option{--missing} flag it will add drop
-entries for any paths that monotone is tracking for which you have
-already removed the files from the filesystem, in addition to all those
-specified in @var{pathname...}.
-
-While this command places a ``drop'' entry on your work list, it does
-not immediately affect your database. When you @command{commit} your
-workspace, monotone will use the work list to build a new revision,
-which it will then commit to the database. The new revision will have
-any dropped entries removed from its manifest.
-
-There are situations in which @command{drop} will tell monotone
-to remove the file from the revision at commit time, but where it will
address@hidden to remove the file from the workspace immediately.  One
-is if the @option{--bookkeep-only} option is supplied.  Another is
-if a file has un-committed changes or if a directory is not empty.
-
address@hidden mtn undrop @var{pathname...}
-Undoes a previous ``drop''; useful when you make a mistake. If the
-file was deleted from the workspace, this reverts it. If it was not
-deleted (because it was changed), it just removes the pending drop.
-
address@hidden mtn rename [--bookkeep-only] @var{src} @var{dst}
address@hidden mtn mv [--bookkeep-only] @var{src} @var{dst}
address@hidden mtn rename [--bookkeep-only] @var{src1} @var{...} @var{dst/}
address@hidden mtn mv [--bookkeep-only] @var{src1} @var{...} @var{dst/}
-This command places ``rename'' entries for the paths specified in
address@hidden and @var{dst} in the workspace's ``work list''. The second form
-renames a number of source paths to the given destination. The work
-list of your workspace is stored in @file{_MTN/revision}, and is a list of
-explicit pathname changes you wish to commit at some future time, such
-as addition, removal, or renaming of files.  This command also moves any
-attributes on @var{src} to @var{dst}; see @ref{File Attributes} for more
-details, and, unless the @option{--bookkeep-only} option is supplied, it
-will rename the files immediately in the filesystem.  In the case where
address@hidden must be a directory (multiple @var{src} items), exists
-physically in the filesystem as a directory or is specified as a
-directory by convention (a trailing /), it will be automatically added
-to the workspace if it is not already versioned.
-
 @item mtn commit
address@hidden mtn ci
 @itemx mtn commit address@hidden address@hidden
address@hidden mtn ci address@hidden address@hidden
 @itemx mtn commit address@hidden
address@hidden mtn ci address@hidden
 @itemx mtn commit @var{pathname...}
address@hidden mtn ci @var{pathname...}
 @itemx mtn commit address@hidden address@hidden @var{pathname...}
address@hidden mtn ci address@hidden address@hidden @var{pathname...}
 @itemx mtn commit address@hidden @var{pathname...}
address@hidden mtn ci address@hidden @var{pathname...}
address@hidden mtn ci
 
 This command looks at your workspace, decides which files have
-changed, and saves the changes to your database. It does this by
-loading the revision named in @file{_MTN/revision}, locating the base
-manifest for your workspace, applying any pathname changes described
-in @file{_MTN/revision}, and then comparing the updated base manifest
-to the files it finds in your workspace, to determine which files have
-been edited.
+changed, and saves the changes to your database.
 
address@hidden is an alias for @command{commit}.
+
address@hidden works by loading the revision named in
address@hidden/revision}, locating the base manifest for your workspace,
+applying any pathname changes described in @file{_MTN/revision}, and
+then comparing the updated base manifest to the files it finds in your
+workspace, to determine which files have been edited.
+
 For each edited file, a delta is copied into the database. Then the
 newly constructed manifest is recorded (as a delta) and finally the
 new revision.  Once all these objects are recorded in you database,
@@ -5624,6 +5575,137 @@ @section Workspace
 instructions should be removed. Any pending text in @file{MTN/log}
 will be left untouched if the commit is cancelled.
 
address@hidden mtn drop [--bookkeep-only] @var{pathname...}
address@hidden mtn drop --missing
+This command places ``drop'' entries for the paths specified in
address@hidden in the workspace's ``work list'' and deletes
+the file from the workspace.
+
address@hidden is an alias for @command{drop}.
+
+The work list of your workspace is stored in @file{_MTN/revision}, and
+is a list of explicit pathname changes you wish to commit at some
+future time, such as addition, removal, or renaming of files.  This
+command also removes any attributes on @var{pathname}; see @ref{File
+Attributes} for more details.  If you use the @option{--missing} flag
+it will add drop entries for any paths that monotone is tracking for
+which you have already removed the files from the filesystem, in
+addition to all those specified in @var{pathname...}.
+
+While this command places a ``drop'' entry on your work list, it does
+not immediately affect your database. When you @command{commit} your
+workspace, monotone will use the work list to build a new revision,
+which it will then commit to the database. The new revision will have
+any dropped entries removed from its manifest.
+
+There are situations in which @command{drop} will tell monotone
+to remove the file from the revision at commit time, but where it will
address@hidden to remove the file from the workspace immediately.  One
+is if the @option{--bookkeep-only} option is supplied.  Another is
+if a file has un-committed changes or if a directory is not empty.
+
+See the @command{undrop} command for undoing a @command{drop} before commit.
+
address@hidden mtn mkdir [--[no-]respect-ignore] @var{directory...}
+This command creates a directory in the filesystem relative to your
+current location and adds it to your workspace's ``work list''.  The
+changes are not reflected in your database until such time as you
+perform a commit.  If you use the @option{--no-respect-ignore} flag,
+entries in @file{.mtn-ignore} will not be honored.
address@hidden FIXME: what does it mean to honor .mtn-ignore here?
+
address@hidden mtn pivot_root [--bookkeep-only] [--[no-]move-conflicting-paths] @var{new_root} @var{put_old}
+Most users will never need this command.  It is primarily useful in
+certain tricky cases where one wishes to combine several projects
+into one, or split one project into several. See also @command{merge_into_dir}.
+
+Its effect is to rename the directory whose name is currently
address@hidden to become the root directory of the versioned tree, and
+to at the same time rename the directory that is currently the root of
+the versioned tree to have the name @var{put_old}.  Conceptually, it
+is equivalent to executing the following commands in the root of the
+workspace:
+
address@hidden
address@hidden
+$ mtn rename . @var{new_root}/@var{put_old}
+$ mtn rename @var{new_root} .
address@hidden group
address@hidden smallexample
+
+Except, of course, that these @command{rename} commands are illegal,
+because after the first command the tree has no root at all, and there
+is a directory loop.  This illegality is the only reason for
address@hidden's existence; internally, the result is treated
+exactly like two renames, including with respect to merges and
+updates.
+
+The use of @option{--bookkeep-only} with this command is not
+recommended.  It causes the changes to be made in monotone's
+records, but not in the filesystem itself.
+
+When running @command{pivot_root}, it is sometimes possible for
address@hidden Collisions} to occur.
+
address@hidden mtn pluck [--[no-]move-conflicting-paths] address@hidden
address@hidden mtn pluck [--[no-]move-conflicting-paths] address@hidden address@hidden
+
+This command takes changes made at any point in history, and attempts to
+edit your current workspace to include those changes.  The end result is
+identical to running @command{mtn diff @option{-r} @var{from}
address@hidden @var{to} | patch @option{-p0}}, except that this command
+uses monotone's merger, and thus intelligently handles renames,
+conflicts, and so on.
+
+If only one revision is given, applies the changes made in @var{to} as
+compared with @var{to}'s parent.  If two revisions are given, applies
+the changes made to get from @var{from} to @var{to}.
+
+Note that this is not a true cherrypick operation.  A true cherrypick,
+as that word is used in version control theory, involves applying some
+changes out of context, and then recording the identity between the
+original changes and the newly applied changes for the use of later
+merges.  This command does the first part, not the second.  As far as
+monotone is concerned, the changes made by @command{mtn pluck} are
+exactly like those made in an editor; the command is simply a
+convenient way to make certain edits quickly.  In practice, this is
+rarely a problem.  @command{mtn pluck} should almost always be used
+between branches that will never be merged --- for instance,
+backporting fixes from a development branch to a stable branch.
+
+When you use @command{pluck} you are going behind monotone's back, and
+reducing its ability to help you keep track of what has happened in
+your history.  Never use @command{pluck} where a true merging command
+like @command{merge}, @command{propagate}, or @command{explicit_merge}
+will do.  If you find yourself using @command{pluck} often, you should
+consider carefully whether there is any way to change your workflow to
+reduce your need for @command{pluck}ing.
+
+When running @command{pluck}, it is sometimes possible for
address@hidden Collisions} to occur.
+
address@hidden mtn rename [--bookkeep-only] @var{src} @var{dst}
address@hidden mtn rename [--bookkeep-only] @var{src1} @var{...} @var{dst/}
address@hidden mtn mv
+This command places ``rename'' entries for the paths specified in
address@hidden and @var{dst} in the workspace's ``work list'', and
+optionally renames the paths on the disk. The second form
+renames a number of source paths to the given destination.
+
address@hidden is an alias for @command{rename}.
+
+The work list of your workspace is stored in @file{_MTN/revision}, and
+is a list of explicit pathname changes you wish to commit at some
+future time, such as addition, removal, or renaming of files.  This
+command also moves any attributes on @var{src} to @var{dst}; see
address@hidden Attributes} for more details, and, unless the
address@hidden option is supplied, it will rename the files
+immediately in the filesystem.  In the case where @var{dst} must be a
+directory (multiple @var{src} items), exists physically in the
+filesystem as a directory or is specified as a directory by convention
+(a trailing /), it will be automatically added to the workspace if it
+is not already versioned.
+
 @item mtn revert @var{pathname...}
 @itemx mtn revert --missing @var{pathname...}
 This command changes your workspace, so that changes you have made
@@ -5638,6 +5720,12 @@ @section Workspace
 deleted from the workspace.  Only missing files matching the given
 file or directory arguments are reverted.
 
address@hidden mtn undrop @var{pathname...}
+Undoes a previous @command{drop}; useful when you make a mistake. If
+the file was deleted from the workspace, this reverts it. If it was
+not deleted (because it was changed), it just removes the pending
+drop.
+
 @item mtn update [--[no-]move-conflicting-paths]
 @itemx mtn update [--[no-]move-conflicting-paths] address@hidden
 Without a @option{--revision} argument, this command incorporates
@@ -5681,76 +5769,6 @@ @section Workspace
 When running @command{update}, it is sometimes possible for
 @ref{Workspace Collisions} to occur.
 
address@hidden mtn pluck [--[no-]move-conflicting-paths] address@hidden
address@hidden mtn pluck [--[no-]move-conflicting-paths] address@hidden address@hidden
-
-This command takes changes made at any point in history, and attempts to
-edit your current workspace to include those changes.  The end result is
-identical to running @command{mtn diff @option{-r} @var{from}
address@hidden @var{to} | patch @option{-p0}}, except that this command
-uses monotone's merger, and thus intelligently handles renames,
-conflicts, and so on.
-
-If only one revision is given, applies the changes made in @var{to} as
-compared with @var{to}'s parent.  If two revisions are given, applies
-the changes made to get from @var{from} to @var{to}.
-
-Note that this is not a true cherrypick operation.  A true cherrypick,
-as that word is used in version control theory, involves applying some
-changes out of context, and then recording the identity between the
-original changes and the newly applied changes for the use of later
-merges.  This command does the first part, not the second.  As far as
-monotone is concerned, the changes made by @command{mtn pluck} are
-exactly like those made in an editor; the command is simply a
-convenient way to make certain edits quickly.  In practice, this is
-rarely a problem.  @command{mtn pluck} should almost always be used
-between branches that will never be merged --- for instance,
-backporting fixes from a development branch to a stable branch.
-
-When you use @command{pluck} you are going behind monotone's back, and
-reducing its ability to help you keep track of what has happened in
-your history.  Never use @command{pluck} where a true merging command
-like @command{merge}, @command{propagate}, or @command{explicit_merge}
-will do.  If you find yourself using @command{pluck} often, you should
-consider carefully whether there is any way to change your workflow to
-reduce your need for @command{pluck}ing.
-
-When running @command{pluck}, it is sometimes possible for
address@hidden Collisions} to occur.
-
address@hidden mtn pivot_root [--bookkeep-only] [--[no-]move-conflicting-paths] pivot_root @var{new_root} @var{put_old}
-Most users will never need this command.  It is primarily useful in
-certain tricky cases where one wishes to combine several projects
-into one, or split one project into several. See also @command{merge_into_dir}.
-
-Its effect is to rename the directory whose name is currently
address@hidden to become the root directory of the versioned tree, and
-to at the same time rename the directory that is currently the root of
-the versioned tree to have the name @var{put_old}.  Conceptually, it
-is equivalent to executing the following commands in the root of the
-workspace:
-
address@hidden
address@hidden
-$ mtn rename . @var{new_root}/@var{put_old}
-$ mtn rename @var{new_root} .
address@hidden group
address@hidden smallexample
-
-Except, of course, that these @command{rename} commands are illegal,
-because after the first command the tree has no root at all, and there
-is a directory loop.  This illegality is the only reason for
address@hidden's existence; internally, the result is treated
-exactly like two renames, including with respect to merges and
-updates.
-
-The use of @option{--bookkeep-only} with this command is not
-recommended.  It causes the changes to be made in monotone's
-records, but not in the filesystem itself.
-
-When running @command{pivot_root}, it is sometimes possible for
address@hidden Collisions} to occur.
-
 @end ftable
 
 @page
@@ -5927,8 +5945,20 @@ @section Informative
 @page
 @node    Informative, Review, Network, Command Reference
 @section Informative
address@hidden @command
address@hidden mtn annotate @var{file}
address@hidden mtn annotate address@hidden [--revs-only] @var{file}
 
address@hidden @command
+Dumps an annotated copy of the file to stdout. The output is in the form
+<short revision id>.. by <author> <date>: <line> Only the first 8
+characters of the revision id are displayed, the author cert value is
+truncated at the first @code{@@} or space character and the date field
+is truncated to remove the time of day.
+
+If @option{--revs-only} is specified, each line of the file is
+translated to <revision id>: <line> in the output, where <revision id>
+is the revision in which that line of the file was last edited.
+
 @item mtn bisect good address@hidden ...] [--[no-]move-conflicting-paths]
 Mark the specified revisions as ``good'' for the current bisection
 operation. If no bisection operation is in progress a new bisection is
@@ -5997,122 +6027,6 @@ @section Informative
 With an explicit @option{--revision} argument, the command outputs
 contents of @var{path} at that revision.
 
address@hidden mtn status
address@hidden mtn status @var{pathname...}
-
-This command prints a description of the ``status'' of your workspace.
-In particular, it prints:
address@hidden
address@hidden
-The branch currently selected in @file{_MTN/options} for the
-workspace.
address@hidden
-The revision id of the ``parent'' revision of the workspace, on which
-your in-progress changes are based.
address@hidden
-A list of logical changes between the base and current manifest
-versions, such as adds, drops, renames, and patches.
address@hidden itemize
-
-Specifying optional @var{pathname...} arguments to the @command{status}
-command restricts the set of changes that are visible and results in
-only a partial status of the workspace. Changes to files not included
-in the specified set of pathnames will be ignored.
-
-From within a subdirectory of the workspace the @command{status} command
-will, by default, include @emph{all changes} in the workspace.
-Specifying only the pathname "." will restrict @command{status} to files
-changed within the current subdirectory of the workspace.
-
address@hidden mtn log
address@hidden mtn log address@hidden address@hidden address@hidden [...]] [--clear-from] address@hidden [...]] [--clear-to] address@hidden [...]] [--[no-]brief] [--[no-]merges] [--[no-]files] [--[no-]graph] [--[no-]diffs] address@hidden
-
-This command prints out a log, in forward ancestry order by default
-but optionally in reverse ancestry order, of small history summaries.
-Each summary contains author, date, branch, changelog and comment
-information associated with a revision.
-
-If @option{--brief} is given, the output consists of two lines per
-revision with the revision ID, the author, the date and the branches
-(separated with commas). If the @option{--no-graph} option is also
-given the output contains only one line per revision.
-
-If @address@hidden is given, at most @var{n} log entries will
-be given and log will trace through history in reverse-ancestry order,
-from newer revisions to older revisions.
-
-If @address@hidden is given, at most @var{n} log entries will
-be given and log will trace through history in forward-ancestry order,
-from older revisions to newer revisions. This is useful to review
-changes that will be applied to the workspace when @command{update} is
-run.
-
-If @address@hidden is given, log starts tracing through
-history from the specified revisions, otherwise it starts from the
-base revision of your workspace. Log will stop when it reaches the end
-of the revision history or revisions specified by the @option{--to}
-option.
-
address@hidden erases the effect of all previous
address@hidden options. @option{--clear-to} erases the effect of all
-previous @option{--to} options.
-
-When tracing through history in reverse-ancestry order and
address@hidden@var{id} is given, log will stop when it reaches the
-specified revisions or any of their ancestors or the end of the
-revision history. When tracing through history in forward-ancestry
-order log will stop when it reaches the specified revisions or any of
-their descendants or the end of the revision history.
-
-If @address@hidden is given, log will print only the
-specified revisions.
-
-If both @option{--from} and @option{--revision} are given only
-revisions included by both options will be logged. Revisions specified
-by @option{--revision} that are beyond the starting points specified
-by @option{--from} will be excluded.
-
-Additionally, each of the @option{--from}, @option{--to} and
address@hidden options accept selectors, see
address@hidden These can be used in various ways to log interesting
-revisions.  For example:
address@hidden
-$ mtn log --revision b:
-$ mtn log --revision today
-$ mtn log --revision bob
address@hidden verbatim
-will log all revisions from the current branch, all revisions dated
-today and all revisions with bob as the author, respectively.
-
-By default, the log entries for merge nodes are shown.  If
address@hidden is given, the log entries for these nodes will be
-excluded.
-
-If @option{--no-files} is given, the log output excludes the list of
-files changed in each revision.
-
-If @option{--no-graph} is given, the log output excludes the ASCII revision graph
-prefix on log output lines.
-
-Specifying @option{--diffs} causes the log output to include a unified
-diff of the changes in each revision.
-
-If one or more files are given, the command will only log the revisions
-where those files are changed.
-
address@hidden mtn annotate @var{file}
address@hidden mtn annotate address@hidden [--revs-only] @var{file}
-
-Dumps an annotated copy of the file to stdout. The output is in the form
-<short revision id>.. by <author> <date>: <line> Only the first 8
-characters of the revision id are displayed, the author cert value is
-truncated at the first @code{@@} or space character and the date field
-is truncated to remove the time of day.
-
-If @option{--revs-only} is specified, each line of the file is
-translated to <revision id>: <line> in the output, where <revision id>
-is the revision in which that line of the file was last edited.
-
 @item mtn complete file @var{partial-id}
 @itemx mtn complete [--brief] key @var{partial-id}
 @itemx mtn complete [--brief] revision @var{partial-id}
@@ -6229,8 +6143,18 @@ @section Informative
 passed to it, and so on, are controlled by the hook
 @code{external_diff}; see @ref{Hooks} for more details.
 
address@hidden FIXME: need help
+
address@hidden mtn list branches address@hidden address@hidden
address@hidden mtn ls
+This command lists all known branches in your database. If
address@hidden is provided, it is used as a glob to select the branches
+listed, otherwise all branches are listed.  If @option{-exclude}
+options are provided they are used as globs to exclude specified
+branches.
+
 @item mtn list certs @var{id}
address@hidden mtn ls certs @var{id}
address@hidden mtn ls
 
 These commands will print out a list of certificates associated with
 a particular revision @var{id}. Each line of the print out will
@@ -6286,8 +6210,24 @@ @section Informative
 @end group
 @end smallexample
 
address@hidden mtn list changed
address@hidden mtn list changed @var{pathname...}
address@hidden mtn ls
+This command lists all files in your workspace that have changed
+compared to the base revision, including files that are dropped, added
+or renamed.
+
+Specifying pathnames to the @command{list changed} command restricts
+the set of paths that are checked for changes. Files not included in the
+specified set of pathnames will not be listed.
+
+From within a subdirectory of the workspace the @command{list
+changed} command will, by default, search the entire workspace.
+Specifying only the pathname "." will restrict the search for known
+files to the current subdirectory of the workspace.
+
 @item mtn list duplicates address@hidden
address@hidden mtn ls duplicates address@hidden
address@hidden mtn ls
 
 This command lists duplicate files in a given revision. If no revision is
 given, the workspace is used instead. Ignored and unknown files are
@@ -6296,10 +6236,25 @@ @section Informative
 Two or more files are considered duplicates if the @sc{sha1} hashes of their
 contents are equal.
 
address@hidden mtn list ignored
address@hidden mtn list ignored @var{pathname...}
address@hidden mtn ls
+This command lists all files in your workspace that monotone is
+intentionally ignoring, due to the results of the @code{ignore_file
+(@var{filename})} hook.
+
+Specifying pathnames to the @command{list ignored} command restricts the
+set of paths that are searched for ignored files. Ignored files not
+included in the specified set of pathnames will not be listed.
+
+From within a subdirectory of the workspace the @command{list
+ignored} command will, by default, search the entire workspace.
+Specifying only the pathname "." will restrict the search for ignored
+files to the current subdirectory of the workspace.
+
 @item mtn list keys
address@hidden mtn ls keys
 @itemx mtn list keys @var{pattern}
address@hidden mtn ls keys @var{pattern}
address@hidden mtn ls
 These commands list @sc{rsa} keys held in your keystore and current database.
 They do not print out any cryptographic information; they simply list the
 names of public and private keys you have on hand.
@@ -6307,36 +6262,9 @@ @section Informative
 If @var{pattern} is provided, it is used as a glob to limit the keys
 listed. Otherwise all keys in your database are listed.
 
address@hidden mtn list branches address@hidden address@hidden
address@hidden mtn ls branches address@hidden address@hidden
-
-This command lists all known branches in your database. If
address@hidden is provided, it is used as a glob to select the branches
-listed, otherwise all branches are listed.  If @option{-exclude}
-options are provided they are used as globs to exclude specified
-branches.
-
address@hidden mtn list tags address@hidden address@hidden
address@hidden mtn ls tags address@hidden address@hidden
-
-This command lists all known tags in your database. If @var{pattern}
-is provided, it is used as a glob to select the tags listed, otherwise
-all tags are listed.  If @option{-exclude} options are provided they
-are used as globs to exclude specified tags.
-
address@hidden mtn list vars
address@hidden mtn ls vars
address@hidden mtn list vars @var{domain}
address@hidden mtn ls vars @var{domain}
-
-This command lists all vars in your database, or all vars within a given
address@hidden  See @ref{Vars} for more information.
-
 @item mtn list known
address@hidden mtn ls known
 @itemx mtn list known @var{pathname...}
address@hidden mtn ls known @var{pathname...}
-
address@hidden mtn ls
 This command lists all files which would become part of the manifest of
 the next revision if you committed your workspace at this point.
 
@@ -6349,11 +6277,37 @@ @section Informative
 Specifying only the pathname "." will restrict the search for known
 files to the current subdirectory of the workspace.
 
address@hidden mtn list missing
address@hidden mtn list missing @var{pathname...}
address@hidden mtn ls
+This command lists all files in your workspace's base manifest,
+which are not present in the workspace.
+
+Specifying pathnames to the @command{list missing} command restricts the
+set of paths that are searched for missing files. Missing files not
+included in the specified set of pathnames will not be listed.
+
+From within a subdirectory of the workspace the @command{list
+missing} command will, by default, search the entire workspace.
+Specifying only the pathname "." will restrict the search for missing
+files to the current subdirectory of the workspace.
+
address@hidden mtn list vars
address@hidden mtn list vars @var{domain}
address@hidden mtn ls
+This command lists all vars in your database, or all vars within a given
address@hidden  See @ref{Vars} for more information.
+
address@hidden mtn list tags address@hidden address@hidden
address@hidden mtn ls
+This command lists all known tags in your database. If @var{pattern}
+is provided, it is used as a glob to select the tags listed, otherwise
+all tags are listed.  If @option{-exclude} options are provided they
+are used as globs to exclude specified tags.
+
 @item mtn list unknown
address@hidden mtn ls unknown
 @itemx mtn list unknown @var{pathname...}
address@hidden mtn ls unknown @var{pathname...}
-
address@hidden mtn ls
 This command lists all files in your workspace that monotone is
 either ignoring or knows nothing about.
 
@@ -6366,69 +6320,83 @@ @section Informative
 Specifying only the pathname "." will restrict the search for unknown
 files to the current subdirectory of the workspace.
 
address@hidden mtn list ignored
address@hidden mtn ls ignored
address@hidden mtn list ignored @var{pathname...}
address@hidden mtn ls ignored @var{pathname...}
address@hidden mtn log
address@hidden mtn log address@hidden address@hidden address@hidden [...]] [--clear-from] address@hidden [...]] [--clear-to] address@hidden [...]] [--[no-]brief] [--[no-]merges] [--[no-]files] [--[no-]graph] [--[no-]diffs] address@hidden
 
-This command lists all files in your workspace that monotone is
-intentionally ignoring, due to the results of the @code{ignore_file
-(@var{filename})} hook.
+This command prints out a log, in forward ancestry order by default
+but optionally in reverse ancestry order, of small history summaries.
+Each summary contains author, date, branch, changelog and comment
+information associated with a revision.
 
-Specifying pathnames to the @command{list ignored} command restricts the
-set of paths that are searched for ignored files. Ignored files not
-included in the specified set of pathnames will not be listed.
+If @option{--brief} is given, the output consists of two lines per
+revision with the revision ID, the author, the date and the branches
+(separated with commas). If the @option{--no-graph} option is also
+given the output contains only one line per revision.
 
-From within a subdirectory of the workspace the @command{list
-ignored} command will, by default, search the entire workspace.
-Specifying only the pathname "." will restrict the search for ignored
-files to the current subdirectory of the workspace.
+If @address@hidden is given, at most @var{n} log entries will
+be given and log will trace through history in reverse-ancestry order,
+from newer revisions to older revisions.
 
address@hidden mtn list missing
address@hidden mtn ls missing
address@hidden mtn list missing @var{pathname...}
address@hidden mtn ls missing @var{pathname...}
+If @address@hidden is given, at most @var{n} log entries will
+be given and log will trace through history in forward-ancestry order,
+from older revisions to newer revisions. This is useful to review
+changes that will be applied to the workspace when @command{update} is
+run.
 
-This command lists all files in your workspace's base manifest,
-which are not present in the workspace.
+If @address@hidden is given, log starts tracing through
+history from the specified revisions, otherwise it starts from the
+base revision of your workspace. Log will stop when it reaches the end
+of the revision history or revisions specified by the @option{--to}
+option.
 
-Specifying pathnames to the @command{list missing} command restricts the
-set of paths that are searched for missing files. Missing files not
-included in the specified set of pathnames will not be listed.
address@hidden erases the effect of all previous
address@hidden options. @option{--clear-to} erases the effect of all
+previous @option{--to} options.
 
-From within a subdirectory of the workspace the @command{list
-missing} command will, by default, search the entire workspace.
-Specifying only the pathname "." will restrict the search for missing
-files to the current subdirectory of the workspace.
+When tracing through history in reverse-ancestry order and
address@hidden@var{id} is given, log will stop when it reaches the
+specified revisions or any of their ancestors or the end of the
+revision history. When tracing through history in forward-ancestry
+order log will stop when it reaches the specified revisions or any of
+their descendants or the end of the revision history.
 
address@hidden mtn list changed
address@hidden mtn ls changed
address@hidden mtn list changed @var{pathname...}
address@hidden mtn ls changed @var{pathname...}
+If @address@hidden is given, log will print only the
+specified revisions.
 
-This command lists all files in your workspace that have changed
-compared to the base revision, including files that are dropped, added
-or renamed.
+If both @option{--from} and @option{--revision} are given only
+revisions included by both options will be logged. Revisions specified
+by @option{--revision} that are beyond the starting points specified
+by @option{--from} will be excluded.
 
-Specifying pathnames to the @command{list changed} command restricts
-the set of paths that are checked for changes. Files not included in the
-specified set of pathnames will not be listed.
+Additionally, each of the @option{--from}, @option{--to} and
address@hidden options accept selectors, see
address@hidden These can be used in various ways to log interesting
+revisions.  For example:
address@hidden
+$ mtn log --revision b:
+$ mtn log --revision today
+$ mtn log --revision bob
address@hidden verbatim
+will log all revisions from the current branch, all revisions dated
+today and all revisions with bob as the author, respectively.
 
-From within a subdirectory of the workspace the @command{list
-changed} command will, by default, search the entire workspace.
-Specifying only the pathname "." will restrict the search for known
-files to the current subdirectory of the workspace.
+By default, the log entries for merge nodes are shown.  If
address@hidden is given, the log entries for these nodes will be
+excluded.
 
address@hidden mtn show_conflicts @var{rev} @var{rev}
+If @option{--no-files} is given, the log output excludes the list of
+files changed in each revision.
 
-This command shows what conflicts would need to be resolved in order to merge
-the given revisions.
+If @option{--no-graph} is given, the log output excludes the ASCII revision graph
+prefix on log output lines.
 
-Note that this does not show conflicts due to update commands, since
-in that case one revision is the workspace.
+Specifying @option{--diffs} causes the log output to include a unified
+diff of the changes in each revision.
 
+If one or more files are given, the command will only log the revisions
+where those files are changed.
+
 @item mtn manpage [--formatted/--plain] [--[no-]hidden]
-
 The manpage command generates a complete (and if monotone is available
 in your language, also localized) manual page for all available commands,
 including all custom Lua commands.
@@ -6444,6 +6412,42 @@ @section Informative
 
 The option @option{--hidden} additionally enables the output of hidden
 commands and options, which is deactivated by default.
+
address@hidden mtn show_conflicts @var{rev} @var{rev}
+This command shows what conflicts would need to be resolved in order to merge
+the given revisions.
+
+Note that this does not show conflicts due to update commands, since
+in that case one revision is the workspace.
+
address@hidden mtn status
address@hidden mtn status @var{pathname...}
+This command prints a description of the ``status'' of your workspace.
+In particular, it prints:
address@hidden
address@hidden
+The branch currently selected in @file{_MTN/options} for the
+workspace.
address@hidden
+The revision id of the ``parent'' revision of the workspace, on which
+your in-progress changes are based.
address@hidden
+A list of logical changes between the base and current manifest
+versions, such as adds, drops, renames, and patches.
address@hidden itemize
+
+Specifying optional @var{pathname...} arguments to the @command{status}
+command restricts the set of changes that are visible and results in
+only a partial status of the workspace. Changes to files not included
+in the specified set of pathnames will be ignored.
+
+From within a subdirectory of the workspace the @command{status} command
+will, by default, include @emph{all changes} in the workspace.
+Specifying only the pathname "." will restrict @command{status} to files
+changed within the current subdirectory of the workspace.
+
address@hidden FIXME: need version
+
 @end ftable
 
 @node    Review, Variables, Informative, Command Reference
@@ -6451,7 +6455,6 @@ @section Review
 
 @ftable @command
 @item mtn approve @var{id}
-
 This command is a synonym for @command{mtn cert @var{id} branch
 @var{branchname}} where @var{branchname} is the current branch name
 (either deduced from the workspace or from the @option{--branch}
@@ -6459,13 +6462,11 @@ @section Review
 
 @item mtn comment @var{id}
 @itemx mtn comment @var{id} @var{comment}
-
 These commands are synonyms for @command{mtn cert @var{id}
 comment @var{comment}}. If @var{comment} is not provided, it is read
 from @code{stdin}.
 
 @item mtn disapprove address@hidden @var{child}
-
 This command records a disapproval of the changes between @var{parent}'s
 ancestor and @var{child}.  If @var{parent} is omitted, only @var{child}
 is disapproved.  The command does the disapproval by committing
@@ -6484,14 +6485,12 @@ @section Review
 a descendant in the multi-ancestor case.
 
 @item mtn suspend @var{id}
-
 This command is a synonym for @command{mtn cert @var{id} suspend
 @var{branchname}} where @var{branchname} is the current branch name
 (either deduced from the workspace or from the @option{--branch}
 option).
 
 @item mtn tag @var{id} @var{tagname}
-
 This command associates the symbolic name @var{tagname} with the
 revision @var{id}, so that symbolic name can later be used in
 @ref{Selectors} for specifying revisions for commands like
@@ -6502,7 +6501,6 @@ @section Review
 
 @item mtn testresult @var{id} 0
 @itemx mtn testresult @var{id} 1
-
 These commands are synonyms for @command{mtn cert @var{id}
 testresult 0} or @command{mtn cert @var{id} testresult 1}.
 
@@ -6512,14 +6510,12 @@ @section Variables
 @section Variables
 @ftable @command
 @item mtn cleanup_workspace_list
-
 Removes all invalid workspaces from the list of registered workspaces
 of the current database.  A workspace is considered invalid if its path
 does either not contain an _MTN directory anymore or if the configured
 database for this workspace is a different one.
 
 @item mtn register_workspace address@hidden
-
 Registers the given workspace from the current database, so that it
 will show up in the output of @command{list databases} (the database
 has to be in a managed location for this to work).
@@ -6528,12 +6524,10 @@ @section Variables
 current workspace.
 
 @item mtn set @var{domain} @var{name} @var{value}
-
 Associates the value @var{value} to @var{name} in domain @var{domain}.
-See @ref{Vars} for more information.
address@hidden for more information.
 
 @item mtn unregister_workspace address@hidden
-
 Unregisters the given workspace from the current database, so that it
 will no longer show up in the output of @command{list databases}.
 
@@ -6541,7 +6535,6 @@ @section Variables
 current workspace.
 
 @item mtn unset @var{domain} @var{name}
-
 Deletes any value associated with @var{name} in @var{domain}.  See
 @ref{Vars} for more information.
 
@@ -6552,8 +6545,23 @@ @section Key and Cert
 @section Key and Cert
 
 @ftable @command
address@hidden mtn genkey @var{keyid}
address@hidden mtn cert @var{selector} @var{certname}
address@hidden mtn cert @var{selector} @var{certname} @var{certval}
 
+These commands create a new certificate with name @var{certname}, for all
+revisions matching @var{selector}. The @var{selector} argument can
+use certs already on the revision, such as @code{h:@var{branchname}}.
+
+If @var{certval} is provided, it is the value of the certificate.
+Otherwise the certificate value is read from @code{stdin}.
+
address@hidden mtn dropkey @var{keyid}
+This command drops the public and/or private key. If both exist, both
+are dropped, if only one exists, it is dropped. This command should
+be used with caution as changes are irreversible without a backup of
+the key(s) that were dropped.
+
address@hidden mtn genkey @var{keyid}
 This command generates an @sc{rsa} public/private key pair, using a
 system random number generator, and stores it in your keystore under
 the key name @var{keyid.keyhash}.  The key's hash is printed out after
@@ -6580,31 +6588,11 @@ @section Key and Cert
 the system default (@file{~/.monotone/keys} on Unix and Cygwin,
 @file{%APPDATA%/monotone/keys} on native Win32).
 
address@hidden mtn dropkey @var{keyid}
-
-This command drops the public and/or private key. If both exist, both
-are dropped, if only one exists, it is dropped. This command should
-be used with caution as changes are irreversible without a backup of
-the key(s) that were dropped.
-
 @item mtn passphrase @var{keyid}
-
 This command lets you change the passphrase of the private half of the
 key @var{id}.
 
address@hidden mtn trusted @var{id} @var{certname} @var{certval} @var{signers}
-
-This command lets you test your revision trust hook
address@hidden (see @ref{Lua Reference}).  You pass it
-a revision ID, a certificate name, a certificate value, and one or more
-key IDs or key names, and it will tell you whether, under your current settings,
-Monotone would trust a cert on that revision with that value signed by
-those keys.
-
-The specified keys mist exist either in your keystore or in the database.
-
 @item mtn ssh_agent_add
-
 This command will add your monotone keys to your current ssh-agent session.
 You will be asked for the passphrase for each of your monotone private keys
 and they will be added to the ssh-agent. Once this is done you should be able
@@ -6637,7 +6625,6 @@ @section Key and Cert
 entering the passphrase not needed during the push.
 
 @item mtn ssh_agent_export @var{filename}
-
 This command will export your private key in a format that ssh-agent
 can read (PKCS8, PEM). You will be asked for your current key's password
 and a new password to encrypt the key with. The key will be printed to
@@ -6672,16 +6659,16 @@ @section Key and Cert
 will be removed at some future time as it is meant only for testing and will not
 work with all signing algorithms.
 
address@hidden mtn cert @var{selector} @var{certname}
address@hidden mtn cert @var{selector} @var{certname} @var{certval}
address@hidden mtn trusted @var{id} @var{certname} @var{certval} @var{signers}
+This command lets you test your revision trust hook
address@hidden (see @ref{Lua Reference}).  You pass it
+a revision ID, a certificate name, a certificate value, and one or more
+key IDs or key names, and it will tell you whether, under your current settings,
+Monotone would trust a cert on that revision with that value signed by
+those keys.
 
-These commands create a new certificate with name @var{certname}, for all
-revisions matching @var{selector}. The @var{selector} argument can
-use certs already on the revision, such as @code{h:@var{branchname}}.
+The specified keys mist exist either in your keystore or in the database.
 
-If @var{certval} is provided, it is the value of the certificate.
-Otherwise the certificate value is read from @code{stdin}.
-
 @end ftable
 
 @page
@@ -6703,40 +6690,14 @@ @section Packet I/O
 data items around manually.
 
 @ftable @command
address@hidden mtn automate packets_for_certs @var{id}
-
-This command prints out an @code{rcert} packet for each cert in your
-database associated with @var{id}. These can be used to transport
-certificates safely between monotone databases.  See @ref{Automation}
-for details of this command.
-
address@hidden mtn automate packet_for_fdata @var{id}
address@hidden mtn automate packet_for_rdata @var{id}
-
-These commands print out an @code{fdata} or @code{rdata} packet for
-the file, manifest or revision @var{id} in your database.  These can
-be used to transport files or revisions, in their entirety, safely
-between monotone databases.  See @ref{Automation} for details of these
-commands.
-
address@hidden mtn automate packet_for_fdelta @var{id1} @var{id2}
-
-This command prints out an @code{fdelta} packet for the differences
-between file versions @var{id1} and @var{id2}, in your database.
-These can be used to transport file differences safely between
-monotone databases.  See @ref{Automation} for details of this
-command.
-
 @item mtn privkey @var{keyid}
 @itemx mtn pubkey @var{keyid}
-
 These commands print out an @code{keypair} or @code{pubkey} packet for
 the @sc{rsa} key @var{keyid}. These can be used to transport public or
 private keys safely between monotone databases.
 
 @item mtn read
 @item mtn read @var{file1} @var{file2...}
-
 This command reads packets from files or @code{stdin} and stores them
 in your database.
 
@@ -6747,49 +6708,7 @@ @section Database
 @section Database
 
 @ftable @command
address@hidden mtn db init address@hidden
-
-This command initializes a new monotone database at @var{dbfile}.
-
address@hidden mtn db info address@hidden
-
-This command prints information about the monotone database @var{dbfile},
-including its schema version and various table size statistics.
-
address@hidden mtn db version address@hidden
-
-This command prints out just the schema version of the monotone
-database @var{dbfile}.
-
address@hidden mtn db dump address@hidden
-
-This command dumps an SQL statement representing the entire state of
address@hidden to the standard output stream. It is a very low-level
-command, and produces the most ``recoverable'' dumps of your database
-possible. It is sometimes also useful when migrating databases between
-variants of the underlying SQLite database format.
-
address@hidden mtn db load address@hidden
-
-This command applies a raw SQL statement, read from the standard input
-stream, to the database @var{dbfile}. It is most useful when loading
-a database dumped with the @command{dump} command.
-
-Note that when reloading a dumped database, the schema of the dumped
-database is @emph{included} in the dump, so you should not try to
address@hidden your database before a @command{load}.
-
address@hidden mtn db migrate address@hidden
-
-This command attempts to migrate the database @var{dbfile} to the
-newest schema known by the version of monotone you are currently
-running.  If the migration fails, no changes should be made to the
-database.
-
-If you have important information in your database, you should back up
-a copy of it before migrating, in case there is an untrapped error
-during migration.
-
address@hidden FIXME: need changesetify
 @item mtn db check address@hidden
 
 Monotone always works hard to verify the data it creates and accesses.
@@ -6928,8 +6847,74 @@ @section Database
 This command also verifies that the @sc{sha1} hash of every file, manifest,
 and revision is correct.
 
address@hidden mtn local kill_revision @var{id}
address@hidden mtn db dump address@hidden
 
+This command dumps an SQL statement representing the entire state of
address@hidden to the standard output stream. It is a very low-level
+command, and produces the most ``recoverable'' dumps of your database
+possible. It is sometimes also useful when migrating databases between
+variants of the underlying SQLite database format.
+
address@hidden mtn db execute @var{sql-statement}
+
+This is a debugging command which executes @var{sql-statement} against
+your database, and prints any results of the _expression_ in a tabular
+form.  It can be used to investigate the state of your database, or
+help diagnose failures.
+
address@hidden FIXME: need mtn db fix_certs
+
address@hidden mtn db info address@hidden
+This command prints information about the monotone database @var{dbfile},
+including its schema version and various table size statistics.
+
address@hidden mtn db init address@hidden
+This command initializes a new monotone database at @var{dbfile}.
+
address@hidden mtn db load address@hidden
+This command applies a raw SQL statement, read from the standard input
+stream, to the database @var{dbfile}. It is most useful when loading
+a database dumped with the @command{dump} command.
+
+Note that when reloading a dumped database, the schema of the dumped
+database is @emph{included} in the dump, so you should not try to
address@hidden your database before a @command{load}.
+
address@hidden mtn db migrate address@hidden
+This command attempts to migrate the database @var{dbfile} to the
+newest schema known by the version of monotone you are currently
+running.  If the migration fails, no changes should be made to the
+database.
+
+If you have important information in your database, you should back up
+a copy of it before migrating, in case there is an untrapped error
+during migration.
+
address@hidden FIXME: need mtn db regenerate_caches
address@hidden FIXME: need mtn db rosterify
address@hidden FIXME: need mtn db set_epoch
+
address@hidden mtn db version address@hidden
+This command prints out just the schema version of the monotone
+database @var{dbfile}.
+
address@hidden mtn local kill_certs @var{selector} @var{certname} address@hidden
+This command deletes certs with the given name on revisions that match
+the given selector. If a value is given, it restricts itself to only
+delete certs that also have that same value. Like @command{kill_revision},
+it is a very dangerous command; it permanently and irrevocably deletes
+historical information from your database. Also like @command{kill_revision},
+this only deletes the certs from your local database; if there are
+other databases that you sync with which have these certs they
+will reappear when you sync, unless the owners of those databases also delete
+those certificates locally.
+
+Early versions of monotone had @command{db kill_tag_locally} and
address@hidden kill_branch_certs_locally} commands. These can be emulated with
address@hidden kill_certs i: tag TAG} and
address@hidden kill_certs i: branch BRANCH}, respectively.
+
address@hidden mtn local kill_revision @var{id}
 This command ``kills'', i.e., deletes, a given revision, as well as any
 certs attached to it.  It is a very dangerous
 command; it permanently and irrevocably deletes historical information
@@ -6965,33 +6950,8 @@ @section Database
 work you can extract @var{id}'s data.
 @end itemize
 
address@hidden mtn local kill_certs @var{selector} @var{certname} address@hidden
-
-This command deletes certs with the given name on revisions that match
-the given selector. If a value is given, it restricts itself to only
-delete certs that also have that same value. Like @command{kill_revision},
-it is a very dangerous command; it permanently and irrevocably deletes
-historical information from your database. Also like @command{kill_revision},
-this only deletes the certs from your local database; if there are
-other databases that you sync with which have these certs they
-will reappear when you sync, unless the owners of those databases also delete
-those certificates locally.
-
-Early versions of monotone had @command{db kill_tag_locally} and
address@hidden kill_branch_certs_locally} commands. These can be emulated with
address@hidden kill_certs i: tag TAG} and
address@hidden kill_certs i: branch BRANCH}, respectively.
-
address@hidden mtn db execute @var{sql-statement}
-
-This is a debugging command which executes @var{sql-statement} against
-your database, and prints any results of the _expression_ in a tabular
-form.  It can be used to investigate the state of your database, or
-help diagnose failures.
-
 @end ftable
 
-
 @page
 @node    Automation, VCS, Database, Command Reference
 @section Automation
@@ -11028,6 +10988,30 @@ @section Automation
 
 @end table
 
address@hidden mtn automate packets_for_certs @var{id}
+
+This command prints out an @code{rcert} packet for each cert in your
+database associated with @var{id}. These can be used to transport
+certificates safely between monotone databases.  See @ref{Automation}
+for details of this command.
+
address@hidden mtn automate packet_for_fdata @var{id}
address@hidden mtn automate packet_for_rdata @var{id}
+
+These commands print out an @code{fdata} or @code{rdata} packet for
+the file, manifest or revision @var{id} in your database.  These can
+be used to transport files or revisions, in their entirety, safely
+between monotone databases.  See @ref{Automation} for details of these
+commands.
+
address@hidden mtn automate packet_for_fdelta @var{id1} @var{id2}
+
+This command prints out an @code{fdelta} packet for the differences
+between file versions @var{id1} and @var{id2}, in your database.
+These can be used to transport file differences safely between
+monotone databases.  See @ref{Automation} for details of this
+command.
+
 @end ftable
 
 @page
============================================================
--- INSTALL_windows_cygwin.txt	bec39a7c68aa05da1f3b620569382bf390d53143
+++ INSTALL_windows_cygwin.txt	6466e85ad63129aecf6dfe4953352f6c0369079b
============================================================
--- INSTALL_windows_native.txt	e6fdc73a0d83a125f12557d5d8bb9c655feb47ef
+++ INSTALL_windows_native.txt	7f2c5080adf14266d8949975f95c8e97dd8b7f0c
============================================================
--- NEWS	1e1359c5cd7ef37431ad77f27d952639754d2b8c
+++ NEWS	158aeaaa4f6dc2adee1de8f698bcf52783cf9633
@@ -7,11 +7,11 @@ XXX XXX XX XX:XX:XX UTC 2010
         - The database scheme was changed; please execute 'mtn db migrate'
           on all your local and remote databases.
 
-        - in 'mtn conflicts resolve_first interactive', the result
+        - In 'mtn conflicts resolve_first interactive', the result
           file name now defaults to _MTN/resolutions/<left_path>.
           (fixes monotone issue 103)
 
-        - the French monotone translation has been updated and is
+        - The French monotone translation has been updated and is
           now part of the main distribution again. many thanks to
           Steve Petruzzello <address@hidden> for the outstanding
           work!
@@ -29,15 +29,20 @@ XXX XXX XX XX:XX:XX UTC 2010
         
         Bugs fixed
 
-        - improve help, fix arg indexing in 'conflicts resolve_first'
+        - Improve help, fix arg indexing in 'conflicts resolve_first'
           (fixes monotone issue 101)
         
         - 'mtn privkey' did not recognize private keys solely available
           in the key store. this has been fixed.
 
-        - add compatibility with Botan 1.9.9 and newer
+        - Add compatibility with Botan 1.9.9 and newer
           (fixes monotone issue 104)
 
+        - mtn pull and mtn sync would always say that your workspace
+          has not been updated.  Now, it only does that when you used
+          the --update option and there were no updates.
+          (fixes monotone issue 106)
+
         - 'automate remote' and 'automate remote_stdio' now use
           a given database given by an alias to read, store and validate
           a remote server's key fingerprint (fixes monotone issue 95)
@@ -46,16 +51,18 @@ XXX XXX XX XX:XX:XX UTC 2010
           with the 'mtn' scheme misses the required host part
           (fixes monotone issue 110)
 
-        - whenever a binary file was removed and one would try to get
+        - Whenever a binary file was removed and one would try to get
           a diff using mtn diff, it would report that "/dev/null is
           binary".  This has been changed to it reports the actual
           name of the removed file instead.
           (fixes monotone issue 111)
 
-        - mtn pull and mtn sync would always say that your workspace
-          has not been updated.  Now, it only does that when you used
-          the --update option and there were no updates.
-          (fixes monotone issue 106)
+        - monotone no longer wrongly falls back on a :memory: database
+          when no database option is given. It also prints out an
+          informational message for commands like 'setup' and 'clone'
+          that fall back on the configured default database, again,
+          if no database is specified for these commands.
+          (fixes monotone issue 113)
 
         Internal
 
============================================================
--- database.cc	8bfff559a0894259fe3668294bd3906ae837129b
+++ database.cc	c4d5eb755d893255d1be35276e2b12ccbea8372c
@@ -4927,10 +4927,10 @@ database_path_helper::get_database_path(
 {
   if (!opts.dbname_given ||
       (opts.dbname.as_internal().empty() &&
-       opts.dbname_alias.empty()))
+       opts.dbname_alias.empty() &&
+       opts.dbname_type != memory_db))
     {
-      L(FL("no database option given or options empty"));
-      return;
+      E(false, origin::user, F("no database specified"));
     }
 
   if (opts.dbname_type == unmanaged_db)
@@ -5013,6 +5013,7 @@ database_path_helper::maybe_set_default_
   E(lua.hook_get_default_database_alias(alias) && !alias.empty(),
     origin::user, F("could not query default database alias"));
 
+  P(F("using default database '%s'") % alias);
   opts.dbname_given = true;
   opts.dbname_alias = alias;
   opts.dbname_type = managed_db;
============================================================
--- work.cc	6daa957e96a3248b2415519cab25aa4123bd809a
+++ work.cc	304b3f0ad0624464b9b16b23d0dcb78b4a8effb2
@@ -587,10 +587,10 @@ workspace::get_options(options & opts)
       // one would expect that we should set the key_dir_given flag here, but
       // we do not because of the interaction between --confdir and --keydir.
       // If --keydir is not given and --confdir is, then --keydir will default
-      // to the "keys" subdirectory of the given confdir. This works by the 
-      // --confdir option body looking at key_dir_given; if reading the keydir 
-      // from _MTN/options set that, then --confdir would stop setting the 
-      // default keydir when in a workspace. 
+      // to the "keys" subdirectory of the given confdir. This works by the
+      // --confdir option body looking at key_dir_given; if reading the keydir
+      // from _MTN/options set that, then --confdir would stop setting the
+      // default keydir when in a workspace.
       //opts.key_dir_given = true;
     }
 
@@ -635,20 +635,21 @@ workspace::set_options(options const & o
   bookkeeping_path o_path;
   get_options_path(o_path);
 
+  database_path_helper helper(lua);
+  system_path old_db_path, new_db_path;
+
+  helper.get_database_path(opts, new_db_path);
+
   // If any of the incoming options was empty, we want to leave that option
   // as is in _MTN/options, not write out an empty option.
   options cur_opts;
   if (file_exists(o_path))
+  {
     read_options_file(o_path, cur_opts);
+    helper.get_database_path(cur_opts, old_db_path);
+  }
 
   bool options_changed = false;
-
-  database_path_helper helper(lua);
-  system_path old_db_path, new_db_path;
-
-  helper.get_database_path(cur_opts, old_db_path);
-  helper.get_database_path(opts, new_db_path);
-
   if (old_db_path != new_db_path && file_exists(new_db_path))
     {
       // remove the currently registered workspace from the old
============================================================
--- cmd_netsync.cc	c5dcaa406cddacc083e28d68e5746ed4ad39ce25
+++ cmd_netsync.cc	732e7c4f6adb6bc8bd96964ab147e53e700053c1
@@ -123,6 +123,7 @@ CMD_AUTOMATE_NO_STDIO(remote_stdio,
           "verify the server key, because we have no record of what it should be.")
           % memory_db_identifier);
       app.opts.dbname_type = memory_db;
+      app.opts.dbname_given = true;
     }
 
   database db(app);
@@ -224,6 +225,7 @@ CMD_AUTOMATE_NO_STDIO(remote,
           "verify the server key, because we have no record of what it should be.")
           % memory_db_identifier);
       app.opts.dbname_type = memory_db;
+      app.opts.dbname_given = true;
     }
 
   database db(app);
============================================================
--- /dev/null	
+++ tests/db_opt_fallback_mechanisms/__driver__.lua	09354a970b921effa2850aa4ad722ce95a433ea8
@@ -0,0 +1,17 @@
+-- commands that use a specific database must fail early and clearly
+check(raw_mtn("ls", "branches"), 1, false, true)
+check(qgrep("no database specified", "stderr"))
+
+-- some commands (setup and clone specifically) might use a default
+-- database and even create it beforehand
+check(raw_mtn("setup", "-b", "foo", "."), 0, false, true)
+check(qgrep("using default database ':default.mtn'", "stderr"))
+check(remove("_MTN"))
+check(remove("databases"))
+
+skip_if(no_network_tests)
+
+-- and some commands should use :memory: as default because they
+-- just need a temporary throw-away database to work properly
+check(raw_mtn("au", "remote", "interface_version", "--remote-stdio-host", "http://code.monotone.ca/monotone", "--key="), 0, false, true)
+check(qgrep("No database given; assuming ':memory:' database", "stderr"))

reply via email to

[Prev in Thread] Current Thread [Next in Thread]