changeset 4569:622d8ed78b47

extensions: load modules in module/__init__.py form. For example, convert=/path/to/convert now works.
author Brendan Cully <brendan@kublai.com>
date Wed, 13 Jun 2007 13:46:40 -0700
parents 8044be585b91
children 78c50632437e
files mercurial/extensions.py tests/test-extension tests/test-extension.out
diffstat 3 files changed, 24 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/extensions.py	Tue Jun 12 13:21:42 2007 -0700
+++ b/mercurial/extensions.py	Wed Jun 13 13:46:40 2007 -0700
@@ -5,7 +5,8 @@
 # This software may be used and distributed according to the terms
 # of the GNU General Public License, incorporated herein by reference.
 
-import imp, commands, hg, util, sys
+import imp, os
+import commands, hg, util, sys
 from i18n import _
 
 _extensions = {}
@@ -28,7 +29,12 @@
         # choose an unique name so that it doesn't
         # conflicts with other modules
         module_name = "hgext_%s" % name.replace('.', '_')
-        mod = imp.load_source(module_name, path)
+        if os.path.isdir(path):
+            # module/__init__.py style
+            fd, fpath, desc = imp.find_module('', [path])
+            mod = imp.load_module(module_name, fd, fpath, desc)
+        else:
+            mod = imp.load_source(module_name, path)
     else:
         def importh(name):
             mod = __import__(name)
--- a/tests/test-extension	Tue Jun 12 13:21:42 2007 -0700
+++ b/tests/test-extension	Wed Jun 13 13:46:40 2007 -0700
@@ -29,6 +29,10 @@
 EOF
 abspath=`pwd`/foobar.py
 
+mkdir barfoo
+cp foobar.py barfoo/__init__.py
+barfoopath=`pwd`/barfoo
+
 hg init a
 cd a
 echo foo > file
@@ -43,3 +47,9 @@
 hg clone a b
 
 hg bar
+
+echo '% module/__init__.py-style'
+echo '[extensions]' > $HGRCPATH
+echo "barfoo = $barfoopath" >> $HGRCPATH
+cd a
+hg foo
--- a/tests/test-extension.out	Tue Jun 12 13:21:42 2007 -0700
+++ b/tests/test-extension.out	Wed Jun 13 13:46:40 2007 -0700
@@ -13,3 +13,9 @@
 uisetup called
 ui.parentui is None
 Bar
+% module/__init__.py-style
+uisetup called
+ui.parentui is None
+reposetup called for a
+ui == repo.ui
+Foo