# HG changeset patch
# User Kostia Balytskyi <ikos...@fb.com>
# Date 1489434253 25200
#      Mon Mar 13 12:44:13 2017 -0700
# Node ID 83925d3a3306e7023b4b43757812285b40fcd90b
# Parent  7548522742b5f4f9f5c0881ae4a2783ecda2f969
exewrapper: prefer HackableMercurial python if availbale

Currently hg.exe will only try to load python27.dll from hg-python
subdir if PYTHONHOME environment variable is not set. I think that
it is better to check whether 'hg-python' subdir exists and load
python from it in that case, regardless of environment. This allows
for reliable approach of distributing Mercurial with its own Python.

diff --git a/mercurial/exewrapper.c b/mercurial/exewrapper.c
--- a/mercurial/exewrapper.c
+++ b/mercurial/exewrapper.c
@@ -67,51 +67,35 @@ int main(int argc, char *argv[])
        }
 
        pydll = NULL;
-       /*
-       We first check, that environment variable PYTHONHOME is *not* set.
-       This just mimicks the behavior of the regular python.exe, which uses
-       PYTHONHOME to find its installation directory (if it has been set).
-       Note: Users of HackableMercurial are expected to *not* set PYTHONHOME!
-       */
-       if (GetEnvironmentVariable("PYTHONHOME", envpyhome,
-                                  sizeof(envpyhome)) == 0)
-       {
-               /*
-               Environment var PYTHONHOME is *not* set. Let's see if we are
-               running inside a HackableMercurial.
-               */
+
+       p = strrchr(pyhome, '\\');
+       if (p == NULL) {
+               err = "can't find backslash in module filename";
+               goto bail;
+       }
+       *p = 0; /* cut at directory */
+
+       /* check for private Python of HackableMercurial */
+       strcat_s(pyhome, sizeof(pyhome), "\\hg-python");
 
-               p = strrchr(pyhome, '\\');
-               if (p == NULL) {
-                       err = "can't find backslash in module filename";
+       hfind = FindFirstFile(pyhome, &fdata);
+       if (hfind != INVALID_HANDLE_VALUE) {
+               /* Path .\hg-python exists. We are probably in HackableMercurial
+               scenario, so let's load python dll from this dir. */
+               FindClose(hfind);
+               strcpy_s(pydllfile, sizeof(pydllfile), pyhome);
+               strcat_s(pydllfile, sizeof(pydllfile), "\\" HGPYTHONLIB ".dll");
+               pydll = LoadLibrary(pydllfile);
+               if (pydll == NULL) {
+                       err = "failed to load private Python DLL " HGPYTHONLIB 
".dll";
                        goto bail;
                }
-               *p = 0; /* cut at directory */
-
-               /* check for private Python of HackableMercurial */
-               strcat_s(pyhome, sizeof(pyhome), "\\hg-python");
-
-               hfind = FindFirstFile(pyhome, &fdata);
-               if (hfind != INVALID_HANDLE_VALUE) {
-                       /* path pyhome exists, let's use it */
-                       FindClose(hfind);
-                       strcpy_s(pydllfile, sizeof(pydllfile), pyhome);
-                       strcat_s(pydllfile, sizeof(pydllfile),
-                                "\\" HGPYTHONLIB ".dll");
-                       pydll = LoadLibrary(pydllfile);
-                       if (pydll == NULL) {
-                               err = "failed to load private Python DLL "
-                                     HGPYTHONLIB ".dll";
-                               goto bail;
-                       }
-                       Py_SetPythonHome = (void*)GetProcAddress(pydll,
-                                                       "Py_SetPythonHome");
-                       if (Py_SetPythonHome == NULL) {
-                               err = "failed to get Py_SetPythonHome";
-                               goto bail;
-                       }
-                       Py_SetPythonHome(pyhome);
+               Py_SetPythonHome = (void*)GetProcAddress(pydll, 
"Py_SetPythonHome");
+               if (Py_SetPythonHome == NULL) {
+                       err = "failed to get Py_SetPythonHome";
+                       goto bail;
                }
+               Py_SetPythonHome(pyhome);
        }
 
        if (pydll == NULL) {
_______________________________________________
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel

Reply via email to