[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