Mercurial > hg
changeset 10239:8e4be44a676f
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
author | Patrick Mezard <pmezard@gmail.com> |
---|---|
date | Wed, 06 Jan 2010 21:11:58 +0100 |
parents | e22695b4472f |
children | 3af4b39afe2a |
files | hgext/inotify/server.py mercurial/cmdutil.py mercurial/posix.py mercurial/util.py mercurial/windows.py |
diffstat | 5 files changed, 19 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/hgext/inotify/server.py Wed Jan 06 21:11:58 2010 +0100 +++ b/hgext/inotify/server.py Wed Jan 06 21:11:58 2010 +0100 @@ -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:
--- a/mercurial/cmdutil.py Wed Jan 06 21:11:58 2010 +0100 +++ b/mercurial/cmdutil.py Wed Jan 06 21:11:58 2010 +0100 @@ -572,7 +572,7 @@ os.close(lockfd) 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.
--- a/mercurial/posix.py Wed Jan 06 21:11:58 2010 +0100 +++ b/mercurial/posix.py Wed Jan 06 21:11:58 2010 +0100 @@ -262,3 +262,5 @@ return os.spawnvp(os.P_NOWAIT | getattr(os, 'P_DETACH', 0), args[0], args) +def gethgcmd(): + return sys.argv[:1]
--- a/mercurial/util.py Wed Jan 06 21:11:58 2010 +0100 +++ b/mercurial/util.py Wed Jan 06 21:11:58 2010 +0100 @@ -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()