[PATCH 3 of 4] Find right hg command for detached process
Patrick Mezard
pmezard at gmail.com
Sun Jan 10 11:33:02 CST 2010
# HG changeset patch
# User Patrick Mezard <pmezard at gmail.com>
# Date 1262808718 -3600
# Node ID d69ce4680e8d5718c14648deeac2f0c764af8f3f
# Parent 5b7842ed06260749364e7f71dc1fcf6f6df653d2
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
@@ -262,3 +262,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
@@ -352,6 +352,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