Differences between revisions 61 and 62
Revision 61 as of 2011-04-23 09:38:17
Size: 8901
Editor: abuehl
Comment: after 1.8 changes: amend list of moves to scmutil
Revision 62 as of 2011-04-23 12:58:24
Size: 8958
Editor: abuehl
Comment: use "Cset:"
Deletions are marked like this. Additions are marked like this.
Line 29: Line 29:
 * `util.opener`, `canonpath`, `path_auditor`, `walkrepos`, `rcpath`, `os_rcpath`, `system_rcpath` and `user_rcpath` were moved to `scmutil` (`d1f4e7fd970a`, `938fbeacac84`, `9c374cf76b7d`).  * `util.opener`, `canonpath`, `path_auditor`, `walkrepos`, `rcpath`, `os_rcpath`, `system_rcpath` and `user_rcpath` were moved to `scmutil` (Cset:d1f4e7fd970a, Cset:938fbeacac84, Cset:9c374cf76b7d).
Line 32: Line 32:
 * Previous `util.unlink` was renamed to `unlinkpath` (`6bf39d88c857`) and was reimplemented to only delete the file, not removing directories any more (`6052bbc7aabd`).  * Previous `util.unlink` was renamed to `unlinkpath` (Cset:6bf39d88c857) and was reimplemented to only delete the file, not removing directories any more (Cset:6052bbc7aabd).
Line 36: Line 36:
 * `patch.updatedir` was moved to `cmdutil.updatedir` to break an import cycle (`00658492e2aa`)
 * `store.auxencode` and `store.hybridencode` were renamed to `_auxencode` and `_hybridencode` and got an additional parameter (`34d8247a4595`)
 * `patch.updatedir` was moved to `cmdutil.updatedir` to break an import cycle (Cset:00658492e2aa)
 * `store.auxencode` and `store.hybridencode` were renamed to `_auxencode` and `_hybridencode` and got an additional parameter (Cset:34d8247a4595)
Line 41: Line 41:
 * `patch.export` moved to `cmdutil.export` (`e764f24a45ee`)
 * `cmdutil.findrenames` moved to `similar.findrenames` (`ef4aa90b1e58`)
 * transactions now need to be released at the end of the function that acquired them via `tr.release` (`5116a077c3da`)
 * changeset discovery functions (`findincoming`, `findcommonincoming`, `findoutgoing`, `prepush`) moved from `localrepo` to new `discovery` module (`3d0591a66118`)
 * working dir manipulation methods (`add`, `forget`, `remove`, `undelete`, `copy`) moved from `localrepo` to `workingctx` (`a1aad8333864`)
 * move `cmdutil.remoteui` to `hg.remoteui` (`d1908cb95a82`)
 * `ui.write` and friends now take `**opts` and accept the `label` keyword argument (`32b213b9b22c`)
 * `color` makes use of ui labels to provide colorization. extensions can provide a `colortable` dict mapping labels to colors (`717c35d55fb3`)
 * `ui.plain` function is added, which returns `True` if the `HGPLAIN` environment var is set. `HGPLAIN` disables output-changing settings for script stability (`40dfd46d098f`)
 * `ui.formatted` is added as an output-related analogue to `ui.interactive` (`cdf6d861b207`)
 * `localrepo.rollback` now accepts an optional `dryrun` argument. Users subclassing repo should add `*args` to their rollback method. (`f0bfe42c7b1f`)
 * `patch.export` moved to `cmdutil.export` (Cset:e764f24a45ee)
 * `cmdutil.findrenames` moved to `similar.findrenames` (Cset:ef4aa90b1e58)
 * transactions now need to be released at the end of the function that acquired them via `tr.release` (Cset:5116a077c3da)
 * changeset discovery functions (`findincoming`, `findcommonincoming`, `findoutgoing`, `prepush`) moved from `localrepo` to new `discovery` module (Cset:3d0591a66118)
 * working dir manipulation methods (`add`, `forget`, `remove`, `undelete`, `copy`) moved from `localrepo` to `workingctx` (Cset:a1aad8333864)
 * move `cmdutil.remoteui` to `hg.remoteui` (Cset:d1908cb95a82)
 * `ui.write` and friends now take `**opts` and accept the `label` keyword argument (Cset:32b213b9b22c)
 * `color` makes use of ui labels to provide colorization. extensions can provide a `colortable` dict mapping labels to colors (Cset:717c35d55fb3)
 * `ui.plain` function is added, which returns `True` if the `HGPLAIN` environment var is set. `HGPLAIN` disables output-changing settings for script stability (Cset:40dfd46d098f)
 * `ui.formatted` is added as an output-related analogue to `ui.interactive` (Cset:cdf6d861b207)
 * `localrepo.rollback` now accepts an optional `dryrun` argument. Users subclassing repo should add `*args` to their rollback method. (Cset:f0bfe42c7b1f)
Line 56: Line 56:
 * `localrepo.commitctx` now checks the errno of raised IOError instances if they are present, and will re-raise if the errno is not ENOENT. See `e553a425751d` for details.  * `localrepo.commitctx` now checks the errno of raised IOError instances if they are present, and will re-raise if the errno is not ENOENT. See Cset:e553a425751d for details.

API Changes

Notable changes in Mercurial's API.

/!\ This page is intended for developers.

1. How to keep your extension compatible

  • Subscribe to this page to keep up-to-date on changes
  • Mark your calendar to test your extension before our scheduled releases (Mar 1, Jul 1, Nov 1)

  • Use introspection in helper functions to choose which interface to call, for example:

def updatedir(*args, **kwargs):
    if hasattr(patch, 'updatedir'):
        patch.updatedir(*args, **kwargs)
    else:
        cmdutil.updatedir(*args, **kwargs)

2. Changes after 1.8

3. Changes after 1.7

  • Previous util.unlink was renamed to unlinkpath (6bf39d88c857) and was reimplemented to only delete the file, not removing directories any more (6052bbc7aabd).

4. Changes after 1.6

  • patch.updatedir was moved to cmdutil.updatedir to break an import cycle (00658492e2aa)

  • store.auxencode and store.hybridencode were renamed to _auxencode and _hybridencode and got an additional parameter (34d8247a4595)

5. Changes after 1.5

  • patch.export moved to cmdutil.export (e764f24a45ee)

  • cmdutil.findrenames moved to similar.findrenames (ef4aa90b1e58)

  • transactions now need to be released at the end of the function that acquired them via tr.release (5116a077c3da)

  • changeset discovery functions (findincoming, findcommonincoming, findoutgoing, prepush) moved from localrepo to new discovery module (3d0591a66118)

  • working dir manipulation methods (add, forget, remove, undelete, copy) moved from localrepo to workingctx (a1aad8333864)

  • move cmdutil.remoteui to hg.remoteui (d1908cb95a82)

  • ui.write and friends now take **opts and accept the label keyword argument (32b213b9b22c)

  • color makes use of ui labels to provide colorization. extensions can provide a colortable dict mapping labels to colors (717c35d55fb3)

  • ui.plain function is added, which returns True if the HGPLAIN environment var is set. HGPLAIN disables output-changing settings for script stability (40dfd46d098f)

  • ui.formatted is added as an output-related analogue to ui.interactive (cdf6d861b207)

  • localrepo.rollback now accepts an optional dryrun argument. Users subclassing repo should add *args to their rollback method. (f0bfe42c7b1f)

6. Changes after 1.4

  • hg.parseurl no longer returns a tuple of 3 items (see d757bc0c7865 for complete details)

  • localrepo.commitctx now checks the errno of raised IOError instances if they are present, and will re-raise if the errno is not ENOENT. See e553a425751d for details.

7. Changes after 1.3

  • ui.prompt is now a simple prompt and does not accept a list of choices. Use ui.promptchoice instead.

  • The change argument passed to cmdutil.walkchangerevs() should now return a changectx instead of the underlying data.

  • As mentioned for 1.3, the #var# templater syntax has been removed in favor of the {var} syntax.

8. Changes from 1.2 to 1.3

  • we've dropped Python 2.3 compatibility
  • the #var# templater syntax is now deprecated in favor of the {var} syntax. The old syntax will be removed in the 1.4 release. A tmplrewrite.py script is provided in contrib to help you convert your templates.

  • util.set is now just set

  • util.sort is replaced by the sorted built-in

  • util.Popen3 is gone, use subprocess instead

  • util.md5 is gone, use util.sha1 to get a secure hash function or keepalive.md5 if you really must use MD5

  • util._encoding is now encoding.encoding

  • util.isowner now takes a mandatory stat object instead of a file path (use util.fstat to stat a path first)

  • platform specific parts of util have been split out into posix and windows modules, which are imported as necessary by util

  • the ui object constructor has been simplified:

    # before
    ui = ui.ui(parentui=parentui, interactive=False)

    # after
    ui = baseui.copy() # there's no longer a parent/child concept
    ui.setconfig('ui', 'interactive', 'off')
  • Some methods relating to configuration have been removed from the ui object.
  • util.configparser replaced by config.config

  • __getattr__ caching tricks replaced by @util.propertycache tricks

  • cmdutil.setremoteopts(ui, opts) is now cmdutil.remoteui([repo|ui], opts)

  • ui.interactive is now a method

  • ui.readsections() is now ui.readconfig(sections=[])

  • ui.print_exc is renamed ui.traceback

  • must explicitly call lock.release

  • encoding functions moved to new encoding module

  • the rawcommit code paths have been removed; this includes localrepo.rawcommit and the debugrawcommit command

  • localrepo.filecommit is no longer part of the (public) API

  • the commit API around invoking the editor has changed (also, you can no longer pass a list of files; pass a matcher instead)
  • the templater API now takes a context object instead of a node
  • a branchmap command has been added to the wire protocol

9. Changes from 1.1 to 1.2

  • Most exceptions are now defined in error.py and some exception names have changed
  • Version info is now retrieved with util.version(), version.py is removed

10. Changes from 1.0 to 1.1

  • repo.count, changelog.count, and revlog.count replaced with len built-in

  • introduction of repo[identifier] and revlog[identifier]

  • replace all users of util.matcher with match objects

  • changed cmdutil.walk to repo.walk:

    # before
    for src, abs, rel, exact in cmdutil.walk(repo, pats, opts,
                                             node=ctx.node()):

    # after

    m = cmdutil.match(repo, pats, opts)
    for abs in ctx.walk(m):
        rel = m.rel()
  • changed defaults for localrepo.status:

    # before
    def status(self, node1=None, node2=None, files=[], match=util.always,
               list_ignored=False, list_clean=False, list_unknown=True):

    # after
    def status(self, node1='.', node2=None, match=None,
               ignored=False, clean=False, unknown=False):
  • patch.diff no longer accepts an fp argument, it yields data instead

  • len(changectx.parents()) may now be of length 1 (but never length 0)

  • revlog.linkrev now takes a numerical rev argument rather than a node:

    # before
    a = manifest.linkrev(node)
    b = manifest.linkrev(manifest.node(rev))

    # after
    a = manifest.linkrev(manifest.rev(node))
    b = manifest.linkrev(rev)
  • cset_printer and cset_templater now take a changectx instead of rev or node:

    # before
    displayer = cmdutil.show_changeset(ui, repo, opts)
    displayer.show(rev, node)

    # after
    displayer = cmdutil.show_changeset(ui, repo, opts)
    displayer.show(repo[rev]) 
  • patch.patchfile now expects a fifth argument, opener

  • patch.applydiff's argument changes constructs a new dict:

    # before
    keep = { }
    patch.applydiff(..., keep, ...)
    
    print keep
    { 'fname': ( action, other ) }

    # after
    keep = { }
    patch.applydiff(..., keep, ...)
    
    print keep
    { 'fname': action }

as before, action will only be set to anything not-None if the patch is in git-format.

  • hgweb and hgwebdir now return an iterator over bytes rather than writing to the write callable provided by the WSGI server.

10.1. Template changes in 1.0

If you use your own template set (particularly for hgweb), here are some relevant changes.

  • Before 1.0, Content-Type was set as a line in header.tmpl. It was changed in 1.0 to use a "mimetype" value from the map. In 1.1, the old behavior has been removed.
  • Annotate templates now get a full user instead of the short version. Use "author|user" to revert to the previous behavior.
  • Annotate lines now also have the "desc" variable, in order to show the commit message for that line's changeset.
  • Parent and child links (in changeset and diff pages, for example) can now show much more information about those changesets.
  • Branch name and branch head information is available in many more places.

11. See also


CategoryInternals

ApiChanges (last edited 2018-11-02 13:59:39 by AntonShestakov)