Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Simple Mercurial extension fails to import

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.

like image 226
waldrumpus Avatar asked Aug 31 '18 14:08

waldrumpus


1 Answers

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)
like image 154
Chris Avatar answered Nov 20 '22 06:11

Chris