Differences between revisions 1 and 2
Revision 1 as of 2008-03-03 12:38:55
Size: 2177
Editor: mpm
Comment:
Revision 2 as of 2008-03-12 21:22:42
Size: 2681
Editor: mpm
Comment:
Deletions are marked like this. Additions are marked like this.
Line 25: Line 25:
=== Config Options: ===

 * Config options are long-lived and should not change behavior
 * We may deprecate some options, giving their replacements different names
 * Undocumented config options may quietly disappear if they've outlived their usefulness
Line 29: Line 35:

=== Extensions: ===

 * Extensions that are shipped in hgext/ follow the same compatibility rules as core code
 * Bear in mind that extensions are not "canonical", and their behavior may change or break core
   Mercurial functionality

Compatibility Rules

Mercurial has been used in production by major software projects since a couple months after its initial release. Thus, Mercurial has always made a serious effort to be backward compatible from release to release with a minimum of surprises. Here's an attempt to distill what our rules are:

0.1. File formats and layout:

  • New Mercurial should always be able to read old Mercurial repositories
  • Old Mercurial should always be able to pull from new Mercurial servers
  • Old Mercurial should break with a meaningful error message if it can't
    • read a new Mercurial repository
  • New requirements are listed in the requirements file
  • Revlog files have a revision flag and per-revision feature flags
  • User-visible changes are mentioned in the release notes

0.2. Commands:

  • Changes to existing command behavior is minimal
  • Removing a feature requires a deprecation period of at least one major release
  • Output formats for commands with output likely to be parsed (especially log and status) are intended to be
    • stable enough to be parsable by dumb scripts and tools
  • Other commands may occasionally add or change output
  • Changes likely to affect parsers are documented in the release notes
  • Meaningless return values may become sensible

0.3. Config Options:

  • Config options are long-lived and should not change behavior
  • We may deprecate some options, giving their replacements different names
  • Undocumented config options may quietly disappear if they've outlived their usefulness

0.4. Hooks:

  • The hook calling convention is intended to be extremely stable
  • New hooks and environment variables may be added, but old ones will be preserved

0.5. Extensions:

  • Extensions that are shipped in hgext/ follow the same compatibility rules as core code
  • Bear in mind that extensions are not "canonical", and their behavior may change or break core
    • Mercurial functionality

0.6. Wire protocol:

  • The wire protocol can check for individual features and use them if available
  • The basic wire protocol is extremely stable

0.7. Web interface:

  • URLs from old Mercurial should continue to work with new Mercurial
  • HTML output from the web interface is moderately stable, but screen-scraping it may not be reliable
  • However, parsing of output from raw-style URLs should be stable

0.8. Internal API:

  • Significant improvements to internal APIs are still being made
  • Writers of extensions can expect a small amount of porting work between releases
  • Extensions included in hgext/ and contrib/ will be updated by the Mercurial team

CompatibilityRules (last edited 2015-09-25 19:46:36 by Pierre-YvesDavid)