changeset 9332:872d49dd577a

hook: fix full path imports on Windows (issue1779) Bottom portion fixes full path imports on source installs on Windows. The top portion further fixes full path imports on binary installs. Initial patch by Roman V. Kiseliov
author Steve Borho <steve@borho.org>
date Wed, 05 Aug 2009 21:45:54 -0500
parents fb66a7d3f28f
children 4e7149ed98e8 72e1e5b189f3
files mercurial/hook.py
diffstat 1 files changed, 11 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/hook.py	Wed Aug 05 17:19:37 2009 +0200
+++ b/mercurial/hook.py	Wed Aug 05 21:45:54 2009 -0500
@@ -27,6 +27,13 @@
             raise util.Abort(_('%s hook is invalid ("%s" not in '
                                'a module)') % (hname, funcname))
         modname = funcname[:d]
+        oldpaths = sys.path[:]
+        if hasattr(sys, "frozen"):
+            # binary installs require sys.path manipulation
+            path, name = os.path.split(modname)
+            if path and name:
+                sys.path.append(path)
+                modname = name
         try:
             obj = __import__(modname)
         except ImportError:
@@ -37,6 +44,7 @@
                 raise util.Abort(_('%s hook is invalid '
                                    '(import of "%s" failed)') %
                                  (hname, modname))
+        sys.path = oldpaths
         try:
             for p in funcname.split('.')[1:]:
                 obj = getattr(obj, p)
@@ -110,9 +118,9 @@
             if hasattr(cmd, '__call__'):
                 r = _pythonhook(ui, repo, name, hname, cmd, args, throw) or r
             elif cmd.startswith('python:'):
-                if cmd.count(':') == 2:
-                    path, cmd = cmd[7:].split(':')
-                    mod = extensions.loadpath(path, 'hgkook.%s' % hname)
+                if cmd.count(':') >= 2:
+                    path, cmd = cmd[7:].rsplit(':', 1)
+                    mod = extensions.loadpath(path, 'hghook.%s' % hname)
                     hookfn = getattr(mod, cmd)
                 else:
                     hookfn = cmd[7:].strip()