[PATCH 3 of 3] Find right hg command for detached process

Patrick Mezard pmezard at gmail.com
Wed Jan 6 14:59:39 CST 2010


# HG changeset patch
# User Patrick Mezard <pmezard at gmail.com>
# Date 1262808718 -3600
# Node ID fc2a908d2268dd371ff23523784f6d77d3bdb8bd
# Parent  22ee072cdee5f50a9737c5b432fbb690c07cb894
Find right hg command for detached process

On Windows, Mercurial can be run from the python script of
from a frozen executable. In the first case, we have to call
the python interpreter since the script is not executable. Frozen
executable can be called directly.

Fix 3/3 for issue421

diff --git a/hgext/inotify/server.py b/hgext/inotify/server.py
--- a/hgext/inotify/server.py
+++ b/hgext/inotify/server.py
@@ -461,9 +461,9 @@
                 self.master.shutdown()
 
     if 'inserve' not in sys.argv:
-        runargs = [sys.argv[0], 'inserve', '-R', root]
+        runargs = util.hgcmd() + ['inserve', '-R', root]
     else:
-        runargs = sys.argv[:]
+        runargs = util.hgcmd() + sys.argv[1:]
 
     pidfile = ui.config('inotify', 'pidfile')
     if opts['daemon'] and pidfile is not None and 'pid-file' not in runargs:
diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py
--- a/mercurial/cmdutil.py
+++ b/mercurial/cmdutil.py
@@ -575,7 +575,7 @@
         
         try:
             if not runargs:
-                runargs = sys.argv[:]
+                runargs = util.hgcmd() + sys.argv[1:]
             runargs.append('--daemon-pipefds=%s' % lockpath)
             # Don't pass --cwd to the child process, because we've already
             # changed directory.
diff --git a/mercurial/posix.py b/mercurial/posix.py
--- a/mercurial/posix.py
+++ b/mercurial/posix.py
@@ -250,3 +250,5 @@
     return os.spawnvp(os.P_NOWAIT | getattr(os, 'P_DETACH', 0),
                       args[0], args)
 
+def gethgcmd():
+    return sys.argv[:1]
diff --git a/mercurial/util.py b/mercurial/util.py
--- a/mercurial/util.py
+++ b/mercurial/util.py
@@ -1274,3 +1274,14 @@
 
 def expandpath(path):
     return os.path.expanduser(os.path.expandvars(path))
+
+def hgcmd():
+    """Return the command used to execute current hg
+
+    This is different from hgexecutable() because on Windows we want
+    to avoid things opening new shell windows like batch files, so we
+    get either the python call or current executable.
+    """
+    if main_is_frozen():
+        return sys.executable
+    return gethgcmd()
diff --git a/mercurial/windows.py b/mercurial/windows.py
--- a/mercurial/windows.py
+++ b/mercurial/windows.py
@@ -360,6 +360,9 @@
         STARTUPINFO())
     return pid
 
+def gethgcmd():
+    return [sys.executable] + sys.argv[:1]
+
 try:
     # override functions with win32 versions if possible
     from win32 import *


More information about the Mercurial-devel mailing list