Re: [PATCH] git-remote-hg: set stdout to binary mode on win32
From: Junio C Hamano <hidden>
Date: 2016-06-15 22:57:19
Felipe Contreras [off-list ref] writes:
Sorry Amit, I assumed this patch made it to the list, but I just realized it didn't; it doesn't allow HTML, and mails and silently dropped (I hate that). So I'm sending it so the list can see it: It seems OK for me, but I would like to try it, and so far I haven't managed to access Mercurial libraries at all from python scripts in Windows. What steps did you follow?
Thanks for keeping an eye on this part of the system. It seems that having an extra -rc cycle turned out to be not so bad an idea.
On Mon, Jan 28, 2013 at 4:13 PM, Amit Bakshi [off-list ref] wrote:quoted
git clone hangs on windows (msysgit/cygwin), and file.write would return errno 22 inside of mercurial's windows.winstdout wrapper class. This patch sets stdout's mode to binary, fixing both issues. --- contrib/remote-helpers/git-remote-hg | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+)diff --git a/contrib/remote-helpers/git-remote-hgb/contrib/remote-helpers/git-remote-hg index 328c2dc..95f4c1f 100755--- a/contrib/remote-helpers/git-remote-hg +++ b/contrib/remote-helpers/git-remote-hg@@ -62,6 +62,24 @@ def get_config(config): output, _ = process.communicate() return output +# +# On Windows (msysgit/cygwin) have to set stdout to binary +# mode (_O_BINARY is 32768). Otherwise clone hangs, and pushing +# to remote fails when doing a write to mercurial's wrapper +# windows.winstdout wrapper class. +# +def set_binmode(fd): + try: + if sys.platform == "win32": + import msvcrt + msvcrt.setmode(fd, os.O_BINARY) + elif sys.platform == 'cygwin': + import ctypes + msvcrt = ctypes.CDLL('msvcrt.dll') + msvcrt._setmode(fd, 32768) # On Cygwin os.O_BINARY is different + except OSError: + pass + class Marks: def __init__(self, path):@@ -764,6 +782,9 @@ def main(args): else: is_tmp = False + if sys.platform in ['win32','cygwin']: + set_binmode(sys.stdout.fileno()) + gitdir = os.environ['GIT_DIR'] dirname = os.path.join(gitdir, 'hg', alias) branches = {} --1.8.1