]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/dist: don't fail when Mercurial is a batch file on Windows
authorAlexey Borzenkov <snaury@gmail.com>
Mon, 9 Apr 2012 19:39:59 +0000 (15:39 -0400)
committerRuss Cox <rsc@golang.org>
Mon, 9 Apr 2012 19:39:59 +0000 (15:39 -0400)
On windows Mercurial installed with easy_install typically creates
an hg.bat batch file in Python Scripts directory, which cannot be used
with CreateProcess unless full path is specified. Work around by
launching hg via cmd.exe /c.

Additionally, fix a rare FormatMessageW crash.

Fixes #3093.

R=golang-dev, rsc, alex.brainman, aram, jdpoirier, mattn.jp
CC=golang-dev
https://golang.org/cl/5937043

src/cmd/dist/windows.c

index 557e4b00311c4d0183c5b8a8ed4aec342d4367c6..0caee73f5364a266b2f607d5a654ab6ae4d07c6b 100644 (file)
@@ -115,7 +115,7 @@ errstr(void)
        binit(&b);
        code = GetLastError();
        r = nil;
-       FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM,
+       FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS,
                nil, code, 0, (Rune*)&r, 0, nil);
        toutf(&b, r);
        return bstr(&b);  // leak but we're dying anyway
@@ -285,9 +285,11 @@ genrun(Buf *b, char *dir, int mode, Vec *argv, int wait)
        binit(&cmd);
 
        for(i=0; i<argv->len; i++) {
+               q = argv->p[i];
+               if(i == 0 && streq(q, "hg"))
+                       bwritestr(&cmd, "cmd.exe /c ");
                if(i > 0)
                        bwritestr(&cmd, " ");
-               q = argv->p[i];
                if(contains(q, " ") || contains(q, "\t") || contains(q, "\"") || contains(q, "\\\\") || hassuffix(q, "\\")) {
                        bwritestr(&cmd, "\"");
                        nslash = 0;