Some commands needed modification to do something sensible in a multi-parent workspace. Here I've categorized all of the documented commands (i.e. those visible in mtn --help) with some notes on what changed and why.

Commands which have been updated to error out, and why

diff:: Requires at least one -r argument.  Without an -r, what should we base the diff on?  Left or right parent?  The "base merge"?  Revisit this after users are more engaged and we know what conflicts look like.
revert:: The question is where to revert to; possibilities are similar to diff, plus there's a question of whether/when revert should undo the merge operation.
update:: not worth even trying to figure out what the semantics should be.
merge_into_workspace:: A revision can't have more than two parents.
automate get_base_revision_id:: scripts expect just one id, but logically it should return two.  *(njs: a fully canonical answer to this may have to wait until we work out exactly what conceptual model we want to use for workspace merges.)*
automate inventory:: needs a format change to deal with more than one parent. *(njs: ditto)*
automate attributes:: emits info about changed attributes, therefore there is a question of which parent that should be relative to.  *(njs wonders if we can just ditch that part of it, but suspects tommyd wants to keep it.)*
annotate:: Requires an -r argument.  This is not because there's any question what it ought to do without one, but rather because the annotation engine is not prepared to deal with revisions that aren't in the database.  This is a bug for both single- and multi-parent workspaces (consider the case where you have modified but not committed the file you are annotating) but is only lethal in the multi-parent case.

Commands which have been updated and work

  • add, drop, rename, pivot_root
  • attr
  • pluck
  • commit
  • get_roster
  • automate get_revision
  • automate get_manifest_of
  • automate get_current_revision_id
  • status ''(shows separate deltas vs. both sides; script authors are reminded that they should be using automate get_revision (which itself will now do things it didn't used to, but the format always allowed the possibility). Should eventually show conflicts specially.)''
  • log (without command line arguments, follows both parents, just as it would for a merge node already in the database)
  • list known/unknown/missing/ignored
  • list changed (lists everything changed relative to either parent in one jumble, no distinctions made)
  • refresh_inodeprints
  • migrate_workspace

Does not operate on a workspace

Starred commands in the list below will have their semantics change later in this process, but are not affected at the present stage.

     approve
     automate ancestors
              ancestry_difference
          certs
          children
          common_ancestors
          descendents
          erase_ancestors
          get_file
          graph
          heads
          interface_version
          keys
          leaves
          packet_for_fdata
          packet_for_fdelta
          packet_for_rdata
          packets_for_certs
          parents
          stdio
          tags
          toposort
     cat
     cert
     checkout
     comment
     chkeypass
     complete
     cvs_import
     db (all)
     disapprove
     dropkey
     explicit_merge (*)
     fdiff
     fload
     fmerge
     genkey
     heads
     help
     identify
     list certs/keys/branches/epochs/tags/vars
     merge (*)
     merge_into_dir (*)
     privkey
     propagate (*)
     pubkey
     pull
     push
     rcs_import
     read
     serve
     setup
     set
     show_conflicts (*?)
     sync
     tag
     testresult
     trusted
     unset