Simple Mercurial extension fails to import
Asked Answered
M

1

11

I'm trying to follow the sample code for writing Mercurial extensions. This is a minimal sample, copied verbatim from the sample code:

from mercurial import cmdutil
from mercurial.i18n import _

cmdtable = {}
command = cmdutil.command(cmdtable)

I save this to a file and install the extension in my .hgrc file like so:

[extensions]
myext=C:\foo\myext.py

Any subsequently issued command, like e.g. hg init now results in the following error message:

*** failed to import extension myext from C:\foo\myext.py: 'module' object has no attribute 'command'

Could this possibly be caused by a faulty environment, e.g. missing environment variables?

I'm using Mercurial 4.7 on Windows 10, installed by the TortoiseHg installer (tortoisehg-4.7.0-x64). Mercurial uses Python 2.7.13, also installed by the TortoiseHg installer.

Mcloughlin answered 31/8, 2018 at 14:10 Comment(0)
R
15

It looks like the documentation needs to be updated. command was moved from cmdutil to registrar in January, 2016 though an alias was left in place at that time. This was marked as deprecated in November, 2017 and removed entirely in May, 2018.

The Mercurial 4.7 release in August, 2018 included the change that removed cmdutil.command:

cmdutil: drop deprecated precursor of registrar.command (API)

This works for me:

from mercurial import registrar
from mercurial.i18n import _

cmdtable = {}
command = registrar.command(cmdtable)
Relieve answered 31/8, 2018 at 15:20 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.